Reversing.Kr Replace Writeup

打开程序看到了wrong,打开OD字符串搜索

发现Correct!双击进入

GetDlgItemInt获取输入,

同时猜测0040466F是进行一些处理,先在这里下断点,

顺着程序往下看,下面有两个jmp,第一个jmp最后会跳转至第二个jmp处,但是第二个jmp会直接跳过correct!       

(这里的时候百思不得其解,以为要nop掉第二个jmp)但其实不是让自己nop掉,是要根据输入来让程序自己nop掉。

开始调试程序:

输入个123(7B)

来到第一个jmp的地方

这里发现0040469F处,将一些奇怪的指令传递(修改)至0040466F,然后又调用了两次0040466F,之间还让eax自加1

看一下修改后的是什么指令:

0040466F   $  C600 90       mov byte ptr ds:[eax],0x90

00404672   ?  C3            retn

0x90就是nop,mov byte ptr ds:[eax],0x90就是将nop放在当前eax的值对应的地址处

再联系一下

00401071   > /EB 11         jmp short Replace.00401084

中的 EB 11 和两次调用0040466F中间的eax自加1

可以判断这里就是需要将EB 11都改为转换为nop(就把第二个jmp给nop掉了)

所以任务就是在调用0040466F时,令eax = 0x401071,这个就与输入有关

而我这里输入的123(7B),此时的eax是60160646

我重新调试,再输入另一个值111(6F),调试到004046A9,此时6016063A

0x6016063A – 0x6F = 6016 05CB

0x60160646 – 0x7B = 6016 05CB

即 将输入的10进制数转为16进制与6016 05CB相加作为eax,于是:

0x6016 05CB - 0x401071 = 0x A02A 0AA6(前面的FFFFFFFFF略去,因为eax只保存后8位)

0xA02A0AA6 = 2687109798 即是flag

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值