探索黑客技术攻防,实战研究与安全创新

导航菜单

无间之道:深入剖析代码破解软件

在OD(OllyDbg)中,爆破是最初级的解决方案,不到万不得已,我们不直接修改JNZ通关。因为这样操作的话,我们就享受不到破解、逆向的真正乐趣了。了解程序背后按照剧情发展经常会出的一些走法,逆向程序的算法,才能体会逆向的真正乐趣!为了更好地模仿破解场景,这里使用一个比较有代表的程序。通过一步一步的测试,锻炼测试者的耐心!

试验软件:MrBills.exe(扫描仪软件)。

查找提示信息

首先,运行软件,界面如图1所示。

A45.png

图1

记住这句注册失败的提示信息,因为它可以作为一个关键的字符串来寻找。未注册版的软件一般会限制功能,注册完成后才让你使用所有功能。用OD打开这个可执行文件,开始分析。

查找字符串

在CPU窗口中单击右键,选择“查找所有参考文本字符串”,在查找注册失败的提示信息提示中,输入“Youhaveenteredanxxxxxx”(注意把进度条拉至文本子串最上方,因为它是从上往下查找的)。查找结果如图2所示。

A46.png

图2

双击该字串,跟随到CPU窗口代码处,如图3所示。

A47.png

图3

在这里我们找到了上方一个突破口:跳转jnz,这里如果jnz跳转的话,就直接来到了注册成功处:”Thankyouforregistering!”,所以它是一个关键跳转,如图4所示。

A48.png

图4

火眼金睛:分析关键节点信息下面,进行几个关键信息分析。

第一,跳转jnz的条件判断是由谁引起的呢?

仔细分析后,我们发现,是在它上方的testal,al。因为这句会改变寄存器里标志位ZF的值(0或1)。

test进行的是逻辑与运算(and),如果两个al为1的话,结果为1;两个为0的话,结果为0。它不改变al的值,只会修改标志位。

此时,通过eax寄存器可以看出al为0,所以ZF标志位为1,(运算结果为0时,标志位Z置1),进而jnz不会跳转,即来到注册失败处。由此,我们就可以推理出,想办法把al的值由0变为1,就可以实现关键跳转,进而使软件注册成功了!!

第二,al的值在哪里被修改过呢?或者说是谁决定了al的值呢?

可以看到在test语句上方有一个call,我们在win32汇编语言里学过:call调用函数进行一堆操作之后的返回值都存放在EAX里,也就是说这个call会影响到al的值。(al是eax的最低位/最后一个字节,eax是32位的,al是8位)那么这个call就是需要进入分析的,在该处下断点,重载后写入注册信息触发该断点,接着进入这个call里。如图5所示。

A49.png

图5

进入之后呢,不要盲目地按F8过,先观察下程序内容(很多朋友就一直F8走,寄存器也不看,下面地址也不看,进行了什么样的逻辑关系也不看,就是直接的走,然后就迷路了!)

观察之后,我们发现,又出现了两个相连call和test,这两个call也会影响到我们关注的al的值,所以注释上【需进入】,方便之后进入分析。下面进入第二个call里,如图6所示。

A50.png

图6

进入第二个call里,发现了两个关于al的可疑之处(如上图),movbl,almoval,bl这两句是干啥呢?将al的值给bl,bl的值再还给al….??现在可以推想一下:bl可能是用来暂时保存数据的,al标志着是否已经被注册,它不希望被修改,所以将al保存在bl里面,经过一些操作后,再将bl赋给al。那么在这之前,决定al值得call或许就是一个关键点!我们接着进入上图中的第4个call,如图7所示。

A51.png

图7

继续查找,可以看到如图8所示的数值。

A52.png

A53.png

图8

在这里走过一遍,发现al的值在这里被bl赋为0,这里就是修改的关键点了,将这个al的值修改为1的话,就应该注册成功了,我们先走出去,稍后再来一轮在这里进行修改。

A54.png

F8走出这里后回到第二个关键call的位置,如图9所示。继续往下走,我们要绕出去!如图10所示。

A52.png

图10

好了,进到几个关键call里用火眼金睛巡视了一番后,终于找到了注册的关键所在,只要把第4个关键call里的al的值修改为1(原来为0),就应该可以注册成功了!修改如图11所示。

A55.png

图11

修改后点击运行:成功注册了了!!然后点击“确定“按钮,软件变为了已注册版,如图12所示。

A56.png

图12

本文内容所提及均为本地测试或经过目标授权同意,旨在提供教育和研究信息,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,作者不鼓励或支持任何形式的非法破解行为。