reversing.kr_replace Write up

link:http://reversing.kr

​ 这道题名称叫replace,这么一看根本看不出什么,我们先打开这个pe文件一览

1

很奇怪,check后居然直接崩掉了

那么,拖进OD看看吧。

通过查找 GetDlgItemTextA函数,我们定位到了这里 2

这里面有两个函数,前一个为输出correct的,后一个为输出false的

但是,在correct前有两个jmp,后一个没有任何判断就直接就跳过correct的函数了

那么如何才能让他输出正确呢?

我们注意到前面还有一个jmp 00404690的指令,这个跳的的地方比较远,单步调试跟过去看看。

3

跳到了这么一段东西,单步调试发现

他会把堆中的601969D9(对应输入密码222222)付给寄存器eax

在最后会jmp 00401071,也就是上面长跳的下一行代码

mov dword ptr ds:[0x40466F],0xC39000C6

然后这一段代码执行后,上面一段直接变了 4

哈,原来是这么replace

看这段代码,他把eax的地址转为0x90,正式NOP空操作指令

这样就能把短跳指令改成NOP了,于是就能输出correct了

然而,这是eax=601969D9,该地址不可访问,难怪会崩溃

但是,这是问题来了,堆中的601969D9是怎么来的呢

简单试了下,通过输入密码来找这个的规律

1
2
3
"0" = 601605cb
"1" = 601605cc
"10" = 601605d5

哈,就是对应十六进制加上去呢

所以,我们目标就是
$$
601605CB + password = 00401071
$$
计算器一算得到十六进制A02A0AA6

转换为无符号十进制password = 2687109798 5

correct,而且也没崩溃了

所以这题的flag = 2687109798

×

赞助gif换电脑、吃双皮奶(逃

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,