WHCTF 2017 逆向题 CRACKME、BABYRE、EASYHOOK 的解题思路

1、CRACKME


程序用 MFC 编写,查壳,没壳。直接运行,输入注册码,注册错误,弹框显示错误信息。可见程序执行逻辑很简单,并且猜测弹框显示是调用了 MessageBox 函数。



用 IDA 打开,直接 F5 查看函数,发现在sub_4016E0 和 sub_401720 这两个函数里面都调用了 MessageBox 函数。


通过 IDA 的交叉引用功能,发现在.text:00401617 处调用了 sub_4016E0,往前翻可以看到很多信息,比如说对sub_401630 和 UpdateDate 函数的调用,以及.text:004015FB 和 .text:00401613 处的两个跳转。



于是猜测程序在这里通过UpdateDate 获取了注册码编辑框的输入注册码,然后先判断注册码长度是否为 0x21,接着在sub_401630 里面对注册码进行进一步验证,注册码正确则通过 sub_4016E0 弹出正确信息,错误则通过 sub_401720 弹出错误信息。


照这种思路,那么 sub_401630 验证函数就比较关键了,我们用 F5 查看如下:



可以知道,在函数里面对内存中的两处字符串进行了逐字符循环比较,这两处字符串应该就是我们输入的注册码和内存中的真码。在这里每一轮循环的种子和产生的随机数都是固定不变的,确保了正确的注册码的唯一性。


这时候就可以上 OD 调试了,在004015E0 处下断,输入任意长度为 0x21 的注册码,然后程序被断下。长度验证正确后单步进入 sub_401630,这时候在 00401669 处下断就可以观察到注册码的每一个字符了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值