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,可能是我理解或解读错了?
大佬分享一下你的反编译软件呗