作者:SnowMzn
序言
本文是160个CrackMe逆向题的第二题和第三题的逆向分析,第三题是第二题的加强版,就放到一起做比较容易理解。
- 这个程序没有Nag,只有Name/Serial。查壳,是VB的程序。
- 放到OD里运行,在调用rtcMsgBox函数处下断点,随便输入Name和Serial,运行后程序断下来。

- 将代码往上翻,可以看到写敏感东西,断定这个函数就是关键函数。
- 在这个函数开始的地方下断点,再次运行程序单步调试后就会发现Serial的算法。

- 主要算法就是,将Name的长度,乘上0x17CFB,再加上Name首字母的十进制ASCII码,加上固定的头AKA-。
- python脚本:
name = raw_input("Please enter your name:") print AKA- + str(len(name) * 0x17CFB + ord(name[0]))
第三题
- 这道题是第二题的加强版,程序加了个Nag,算法也做了更改。
- 首先查壳,VB,没有壳。
- 在去除Nag的时候还是遇到了点麻烦,毕竟不熟悉VB的程序。将程序放入OD里研究了许久,无果。。。。无奈查了下有关去除VB程序Nag窗口的资料,还是有捷径的。
1、去除Nag
第一种方法
- 这种方法被称为4C法,用于去除VB程序的NAG很有效。
- VB程序在入口处总有一个push指令

- 可以看到这里push的是0x4067D4,在数据窗口跟进这个地址。(从这里也可以看到这是VB程序)

- 然后开始4C法,在数据窗口跟进push的地址加上0x4C,也就是0x4067D4 + 0x4c

- 这个地方存放的是0x00406868,继续跟进,可以看到这是两块内容非常相似,每块占80个字节的长度。

- 两块内容只有一处不同,上面的是00,下面的是01。该标志指定了每块代码出现的顺序,先加载00,再加载01。根据程序运行的结果可以知道,上面的内容是NAG窗口的,下面的内容是主窗口。所以这里需要将两个标志的值颠倒一下就可以将NAG去除了。
第二种方法
- 这种方法有点曲线救国的意思。
- 首先将程序放入VBExplorer.exe中,查看窗口的Timer1属性

- 可以看到有个Interval字段,值是7000,16进制表示为0x1B58。这个值就是nag窗口显示的时长。
- 将程序放入UE中,查找581B(小端存储)

- 在0x1B58前面可以看到Timer1字样,所以可以断定这里就是nag窗口的时间,将这里修改为0x001,就可以变相的去除nag窗口了。
2、Name/Serial
- 去除烦人的Nag,可以安心的找Name/Serial了。和上面一样,在rtcMsgBox处下断点,运行程序。
- 这里有个问题,就是总弹出这个东西,刚开始以为这就是输入错误验证码的提示,研究了半天才发现,Serial只能是数字,输入字母就会弹出这个错误。。。。很坑啊。。。

- 继续说rtcMsgBox,在serial处输入任意的数字后,程序断在rtcMsgBox处。向上翻代码会看到这样的东西。同样在这个函数开始的地方下断点。

- 同样从这个开始的地方单步调试,很容易发现关键算法。

- 这里的算法也是比较简单的,附上简单的python脚这里的算法也是比较简单的,附上简单的python脚本:
name = raw_input("Please enter your name:")
print (0x15B38 * len(name) + ord(name[0])) * 3 + 19
原创文章 逆向破解基础系列(第二篇),版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/202213286.html