dolly_yos2 发表于 2022-12-6 21:22:04

zhangjinxuan 发表于 2022-12-6 21:18
嗯??有漏洞?

我学艺不精,看不懂(其实也懒得看,笑)您程序中很多的操作,但很容易找到比对输入是否正确的指令,然后找到不来自输入的那个操作数,略微修改您的可执行文件(应该一共改动了大概9个字节)就可以让程序把这个操作数打印出来了

zhangjinxuan 发表于 2022-12-6 21:22:24

dolly_yos2 发表于 2022-12-6 21:14
2680(有点好奇所以 srand/rand 是做什么的?)

srand 是一个生成随机数的种子,rand 就是生成随机数,鱼C上有教程,您可以去看看

zhangjinxuan 发表于 2022-12-6 21:23:22

dolly_yos2 发表于 2022-12-6 21:22
我学艺不精,看不懂(其实也懒得看,笑)您程序中很多的操作,但很容易找到比对输入是否正确的指令,然后 ...

可执行文件还能修改?{:10_257:}

dolly_yos2 发表于 2022-12-6 21:24:48

zhangjinxuan 发表于 2022-12-6 21:22
srand 是一个生成随机数的种子,rand 就是生成随机数,鱼C上有教程,您可以去看看

不不不,这个我当然明白,只是好奇您的程序里用到这个是拿来做什么的?刚看到还以为您真的用随机数作为了密码。当然不方便或者留作伏笔的话您不必满足我的好奇心

zhangjinxuan 发表于 2022-12-6 21:26:37

dolly_yos2 发表于 2022-12-6 21:24
不不不,这个我当然明白,只是好奇您的程序里用到这个是拿来做什么的?刚看到还以为您真的用随机数作为了 ...

我没有用srand啊?

我只是想知道你是怎么知道密码的,而且提示都没有看

dolly_yos2 发表于 2022-12-6 21:27:23

zhangjinxuan 发表于 2022-12-6 21:23
可执行文件还能修改?

毕竟可执行文件大体上是整个程序所需要的数据和指令打包得到的,如果能适当调整里面的指令和/或数据就可能令其按照想要的方式工作

zhangjinxuan 发表于 2022-12-6 21:41:23

dolly_yos2 发表于 2022-12-6 21:27
毕竟可执行文件大体上是整个程序所需要的数据和指令打包得到的,如果能适当调整里面的指令和/或数据就可 ...

啊这,看样子什么什么破解 pass 的帖子已经没意义了,像对您来说,我还是太弱了{:10_282:}

dolly_yos2 发表于 2022-12-6 21:41:47

zhangjinxuan 发表于 2022-12-6 21:26
我没有用srand啊?

我只是想知道你是怎么知道密码的,而且提示都没有看

因为反汇编看到了调用 srand 和 rand 的 call,可能是我理解或解读错了?

4a63c4:       c7 04 24 44 10 4b 00    movl   $0x4b1044,(%esp)
4a63cb:       e8 40 b0 f5 ff          call   401410 <_printf>
4a63d0:       8d 44 24 18             lea    0x18(%esp),%eax
4a63d4:       c7 04 24 51 10 4b 00    movl   $0x4b1051,(%esp)
4a63db:       89 44 24 04             mov    %eax,0x4(%esp)
4a63df:       e8 64 62 f7 ff          call   41c648 <_scanf>
4a63e4:       a1 7c 80 4f 00          mov    0x4f807c,%eax
4a63e9:       39 44 24 18             cmp    %eax,0x18(%esp)
4a63ed:       0f 84 af 00 00 00       je   4a64a2 <_main+0x102>
4a63f3:       c7 04 24 69 10 4b 00    movl   $0x4b1069,(%esp)
4a63fa:       e8 11 b0 f5 ff          call   401410 <_printf>
这是反汇编得到的部分代码,其中能看到 0x4a63cb 处一个 printf 和 0x4a63df 处一个 scanf ,分别是输出提示和读入输入(从提供的参数字符串也能确定)
0x4a63e9 处的 cmp 就是比对密码是否正确的指令,一方来自于 %eax ,另一方是 [%esp+0x18] ,这个地址作为参数传给了 scanf ,因此这里存储的输入,那么目标就是导出 %eax 的值。
下方 0x4a63ed 处的 je 就是当密码正确的时候跳转到对应的输出处,而没有跳转走意味着密码错误, 0x4a63f3 和 0x4a63fa 处的指令恰好就是装载密码错误提示并 printf 输出。利用这个 printf 调用,只要把第一个参数修改成 "%d" 而第二个参数处设为 %eax 就可以输出密码了
找到虚拟地址 0x4b1069 对应处的字符串(密码错误),修改前三个字节为 0x25 0x64 0x00 ,这个字符串就变成了 "%d";把 4a63ed 处的 je 指令修改为 89 44 24 04 即 mov %eax,0x4(%esp), 就将 %eax 的值放到了第二个参数处,多余的两个字节用 90 即空指令填充,避免破坏结构。此时再运行程序,随便输入一些内容,程序就告诉我们密码是多少了

zhangjinxuan 发表于 2022-12-6 22:07:20

dolly_yos2 发表于 2022-12-6 21:41
因为反汇编看到了调用 srand 和 rand 的 call,可能是我理解或解读错了?




zhangjinxuan 发表于 2022-12-6 22:11:13

dolly_yos2 发表于 2022-12-6 21:14
2680(有点好奇所以 srand/rand 是做什么的?)

好的,明天再奖励,谁叫额度不够啊,不过你可以通过出售附件的操作来得到育碧

dolly_yos2 发表于 2022-12-6 22:32:09

zhangjinxuan 发表于 2022-12-6 22:11
好的,明天再奖励,谁叫额度不够啊,不过你可以通过出售附件的操作来得到育碧

其实纯粹是因为有趣才来玩的,奖励什么的并不重要
顺便再来“推销”一下我的“题目”,看看类似的方法适不适用
https://fishc.com.cn/forum.php?mod=viewthread&tid=221577

tommyyu 发表于 2022-12-7 08:05:14

本帖最后由 tommyyu 于 2022-12-7 08:07 编辑

2680{:10_256:}

zhangjinxuan 发表于 2022-12-7 08:12:14

tommyyu 发表于 2022-12-7 08:05
2680

what's up{:10_257:}

zhangjinxuan 发表于 2022-12-7 08:13:00

tommyyu 发表于 2022-12-7 08:05
2680

我的提示就是一个摆设,对吧{:10_282:}

tommyyu 发表于 2022-12-7 08:17:29

zhangjinxuan 发表于 2022-12-7 08:13
我的提示就是一个摆设,对吧

看不懂提示{:10_282:}

zhangjinxuan 发表于 2022-12-7 08:22:49

tommyyu 发表于 2022-12-7 08:17
看不懂提示

11Q = 11queen = 11皇后 = 11皇后的解法总数 = 2680

tommyyu 发表于 2022-12-7 08:24:59

zhangjinxuan 发表于 2022-12-7 08:22
11Q = 11queen = 11皇后 = 11皇后的解法总数 = 2680

谁想得到啊{:10_282:}

zhangjinxuan 发表于 2022-12-7 08:25:05

tommyyu 发表于 2022-12-7 08:24
谁想得到啊

哈哈

Mike_python小 发表于 2022-12-8 07:19:03

看看

Mike_python小 发表于 2022-12-8 07:20:18

dolly_yos2 发表于 2022-12-6 21:41
因为反汇编看到了调用 srand 和 rand 的 call,可能是我理解或解读错了?




大佬分享一下你的反编译软件呗
页: 1 [2] 3
查看完整版本: 我的Pass?