一、破解过程
查找字符串”很抱歉,注册失败“,会出来很多结果。找到和出错提示相符的,分析汇编代码,会找到关键跳;
00453310 |. E8 4B20FBFF call 00405360
00453315 |. 833D 0CDB5D00>cmp dword ptr ds:[0x5DDB0C],0x1
0045331C |. 0F84 23090000 je 00453C45
00453322 |. E8 399BFBFF call 0040CE60
只是更改关键跳是不够的,但是找到了常量0x5DDB0C,可以使用“查找所有常量”法了。在找到的所有的结果上设置断点。
2、再次点击注册,会断下来,
004532C0 E8 DB3F0000 call 004572A0
004532C5 A3 0CDB5D00 mov dword ptr ds:[0x5DDB0C],eax
分析一下代码: 004572A0这个call的返回值放到eax中,然后eax的值给了[0x5DDB0C]。这就说明004572A0的返回值给了[0x5DDB0C]。那么004572A0这个call就是关键call了。
3、进入04572A0这个关键call。
在断首下断点后,单步执行,发现最后eax的值为1。但是在单步过程中是有不少跳转,跳过了eax赋值为其他值的:2、3、4、5。于是猜测,是不是eax改为这些值就是注册版了呢?试验着将断首改为
修改为5,得到的是:
修改为4,得到的是:
修改为3,得到的是:
修改为2,得到的是:
不同的值对应于不同的版本。
二、视频总结
视频中,作者也是通过查找字符串找到了常量0x5DDB0C;接下来对0x5DDB0C地址处的内存下硬件写入断点,从而找到了关键call——04572A0;然后进入04572A0这个call内部,单步运行,注意堆栈窗口中出现假码和可疑字符串在一起,就复制下来。
最后把复制处的可疑字符串试一试。
网友评论