首页
论坛
课程
招聘
[求助]第一题 签到题
2020-4-20 01:37 1202

[求助]第一题 签到题

2020-4-20 01:37
1202
将DEMO载入OD,随意输入123发现,提示 wrong!


通过API下messageBox断点,并返回到程序代码段。


因为这里会结束程序,那么右键地址00401790找到CALL进来前的地方。



通过反向分析发现
eax 必须是0x50才成功 , 那么sar 进行了一次位移。
0x50  = ‭01010000‬ 
0xA0 = 1010000‬0
通过反向移动回来得到是0xA0,也就是eax必须是0xA0,位移才能变成0x50。

继续往上看cdq是将eax的第31bit全部赋值给edx,测试发现a0依然是0,所以edx等于0,sub 指令并不影响 eax结果。

继续往上观察eax来源,发现是执行了atoi,把字符串转换成数字,所以pass也就是对应的a0十进制结果:160

最终流程是:
1、先把用户输入的字符串160,转换成对应的整数,十六进制是0xa0
2、然后程序cdq,edx依然是0
3、sub eax,edx   0xa0保持不变
4、接着sar eax,1 右移使 0xA0(‭10100000‬)变成了 ‭0x50(01010000‬)
5、最终结果是0x50。

反向破解流程:
1、手动将eax调整成0x50,并且左移,发现变成0xa0
2、由于发现了sub,但是发现减值是来自edx,但edx是来自cdq,但第0xa0的32bit依然是0,所以发现不变
3、接着发现eax值来自atoi转换,所以pass依然是字符串的160


[注意] 欢迎加入看雪团队!base上海,招聘CTF安全工程师,将兴趣和工作融合在一起!看雪20年安全圈的口碑,助你快速成长!

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回