[聚合文章] 逆向破解基础系列(第二篇)

.Net 2017-12-08 15 阅读

作者: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

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。