作者: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]))<br />
第三题
-
这道题是第二题的加强版,程序加了个Nag,算法也做了更改。
-
首先查壳,VB,没有壳。
-
在去除Nag的时候还是遇到了点麻烦,毕竟不熟悉VB的程序。将程序放入OD里研究了许久,无果。。。。无奈查了下有关去除VB程序Nag窗口的资料,还是有捷径的。
1、去除Nag
第一种方法
-
这种方法被称为“4C法”,用于去除VB程序的NAG很有效。
-
VB程序在入口处总有一个push指令
-
可以看到这里push的是0x4067D4,在数据窗口跟进这个地址。(从这里也可以看到这是VB程序)
-
然后开始“4C法”,在数据窗口跟进push的地址加上0x4C,也就是0x4067D4 + 0x4c
-
这个地方存放的是0×00406868,继续跟进,可以看到这是两块内容非常相似,每块占80个字节的长度。
-
两块内容只有一处不同,上面的是00,下面的是01。该标志指定了每块代码出现的顺序,先加载00,再加载01。根据程序运行的结果可以知道,上面的内容是NAG窗口的,下面的内容是主窗口。所以这里需要将两个标志的值颠倒一下就可以将NAG去除了。
第二种方法
-
这种方法有点“曲线救国”的意思。
-
首先将程序放入VBExplorer.exe中,查看窗口的Timer1属性
-
可以看到有个Interval字段,值是7000,16进制表示为0x1B58。这个值就是nag窗口显示的时长。
-
将程序放入UE中,查找581B(小端存储)
-
在0x1B58前面可以看到Timer1字样,所以可以断定这里就是nag窗口的时间,将这里修改为0×001,就可以变相的去除nag窗口了。
2、Name/Serial
-
去除烦人的Nag,可以安心的找Name/Serial了。和上面一样,在rtcMsgBox处下断点,运行程序。
-
这里有个问题,就是总弹出这个东西,刚开始以为这就是输入错误验证码的提示,研究了半天才发现,Serial只能是数字,输入字母就会弹出这个错误。。。。很坑啊。。。
-
继续说rtcMsgBox,在serial处输入任意的数字后,程序断在rtcMsgBox处。向上翻代码会看到这样的东西。同样在这个函数开始的地方下断点。
-
同样从这个开始的地方单步调试,很容易发现关键算法。
-
-
这里的算法也是比较简单的,附上简单的python脚这里的算法也是比较简单的,附上简单的python脚本:
name = raw_input("Please enter your name:")<br />print (0x15B38 * len(name) + ord(name[0])) * 3 + 19
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。