软件破解之十四

测试软件:ReverseMe(软件运行时需自解密执行,运行结束后会自加密销毁)

破解目标:去除第一个Nag窗口

0x00:运行程序,出现第一个窗口,是个Nag窗口

rmh1

然后执行软件主界面

rmh2

0x01:PEID查看程序,是汇编语言编写的

rmh3

0x02:OD载入程序,查找关键字,找到Nag提示语句,下断点测试

rmh4

0x03:测试运行时发现断点没有中断,这一部分的程序并没有执行,这是作者设置的陷阱。

真正调用Nag在断点上的Call函数处

rmh5

0x04:分析程序的两个call函数,第一个call的主程序如下。

rmh6

分析测试发现程序的作用是先将地址401000—401218段部分进行 xor 0x5a操作(异或0x5a)。

4.1执行异或操作之前

rmh7

4.2执行完异或操作后

rmh8

0x05:进入第二个call函数,程序部分如下

rmh9

分析发现这部分代码的功能是对自己的程序进行修改,修改地址范围是401011—401026,执行结束后在本地址段生成了Nag框的代码,但是Nag窗的title 和 text是乱码的

rmh10

0x06:单步调试,执行到程序401000处,此处是对Nag窗口的Title和Text进行解码,执行前后对比

6.1循环解码前,显示乱码

rmh11

6.2循环解码后,没有乱码

rmh12

0x07:单步运行执行Nag后,jmp跳转到0040106A 处,此处是对主界面要显示的文本的解密处理

rmh13

此处的程序运行后结果如下,对比之前xor 5A发现这是对异或后乱码的解码

rmh14

0x08:当主程序执行结束后,程序来到退出语句处

rmh15

retn后,程序来到00401054处,调用call函数

rmh16

F7进去,来到00401320处,此处的循环语句作用是将之前解密后的Nag和主程序文本信息再次加密,通过与0x8D进行XOR(异或)操作。操作的范围是00403000—00403128。

rmh17

看到操作前后的数据变化

8.1异或加密操作之前

rmh18

8.2异或加密操作之后

rmh19

0x09:运行完上一部分的再次加密后,来到第二个call函数,进入后发现是个退出操作,点击退出整个函数。

rmh20

===========================分割线=======================

以上是分析的程序的运行过程,可以看出这个程序对自己保护非常狡猾,需要先自解密、修改自己代码、当执行完主程序后执行加密程序隐藏自己。是个简单的病毒机理程序。

下边分析如何去除Nag窗口,进行破解。

0x0A:从要运行Nag程序之前的部分入手,可以选择修改Nag对话框的h0wner属性,即:

push 0x00 修改为 push 0x01

这样Nag窗口就不会弹出,手动测试时发现此方法是可行的。

需要注意的是不能直接修改此处代码,因为程序运行时先进行的是与5A的异或xor操作

rmh21

再次测试运行,发现在401035处的操作影响40101D处的push 00的值,需要修改

6A 00 —修改为—- 6A 01

rmh22

找到需要修改的地址,进行运算 01 Xor 5A = 5B,所以修改00401039处的值为5B

rmh23

保存修改到新版本

rmh24

0x0B:运行新版本测试,发现Nag窗口已经成功去除。

 

 

您可能还喜欢...