逆向replace

花了一些时间了解了一篇逆向题,对于我来说,是比较难了,看了别人的解题步骤明白了一点点,
这个可执行文件首先打开看看什么情况,如下:
逆向replace
神奇了,输入别的显示不出来,只能输入数字。可以判断里面有只能接受数字的函数,可是就算输入数字,点击check,程序崩了。
拖进IDA,看看何方神圣。
逆向replace
拖进去,shift+f12寻找字符串correct!一步步来到text段后发现,程序跳过了,correct。如下:
逆向replace
在00401071的位置jmp 401084,完美错过了correct。要想程序执行correct这一步,那么要走到401073,
在IDA里还可以找到与“只能输入数字”有关的函数,GetDlgItemInt,它的地址为
逆向replace
以上地址则是完成解题的关键。由于这里跳过了correct,只能动态调试了,再将文件拉进od,找到这些地址,
首先找到correct,我们发现在correct上面有控制输入的函数GetDlgItemInt。
逆向replace
重载输入0,f8步过,到4010A9,的时候程序跳到了莫名的地方,然后不动了。那就在这里断点,看看这个函数作什么妖。
逆向replace
进入后发现它将90,复制给了eax。相当于将eax Nop掉,而且当输入0测试的时候,eax为601005CB,而输入数值为12后,eax数值为601005D7
逆向replace
而,可知,601005CB+输入的数值=eax,则,可以601005Cb+输入值=0x100401071(401071则是correct的地址了)
计算器可算出应输入:2687109798。replace ,很名副其实。
链接
密码:e1sb