17. OD-带有多态、变形的程序进行打补丁去掉nag(分析xor加密解密、自身修改代码的程序)

版权声明:墨痕诉清风 https://blog.csdn.net/u012206617/article/details/88116179

win32程序 

此程序打开会弹出一个neg,确定后弹出主对话框

查找字符串,下断点,发现程序并没有进断点,这些汇编是坑爹的,故意搞混我们

此程序非主流,一般我们写的程序均为push ebp

往上看代码,发现这些字符均不是代码,好像进入数据段一样,因为这是OD帮你自动分析了

我们取消OD的自动分析

代码恢复正常

自己在异或代码,也就是自己改代码,变形 

最常用的加密手段 

7 xor 2 = 5

2 xor 5 = 7

第一个call进行xor解密

第二个call进入继续解读

这里还有一个xor解密

循环地址为00403000 -> 00403120

观察发现MessageBox中的参数地址就是这个循环里的过程地址

可见原本是乱码的字符串参数进行xor解密后得到正确的字符串

那么我们如果打补丁

如果将MessageBox给nop掉,异或的数据将会出错,直接运行程序出错

开始分析

进入第一个call

1.  解密401000到401218, xor 0x5A,下图

进入第二个call

2. 修改自身代码,从401011到401025,这样就把对话框的代码修改出现了,下图

3. 对nag窗口加密的标题和文本进行xor解密,就是把对话框窗口的参数解密出来。

4. 接下来再次修改自身代码,401011到401027进行覆盖,将neg窗口代码修改为主窗口代码

5. 对nag窗口的标题和文本加密,用完就加密

程序结束。

开始打补丁

第一种方法,将MessageBox的第一给参数修改为1,使其找不到父窗口

但是因为有xor加密解密过程,所以我们要找使到哪里修改了0040101D的代码

因为代码使xor 0x5A解密得到的新代码,那么我们直接将0x6A改为0x016A这样不行(注意大小端)

所以我们要用1 xor 0x5A = 0x5B

所以我们应该改成这样

nag窗口成功去掉了。

第二种方法,将对话框代码忽略,直接跳转到0040106A处,这样就删除了nag代码

所以我们要将00401011地址处的值改为 EB 57


我们找到修改此地址的代码处

进行反异或运算

EB xor 0x5A = B1

57 xor 0x5A = 0D

修改时注意大小端

我们要再内存数据种修改,不能再代码段种修改,否则程序运行崩溃

成功。

猜你喜欢

转载自blog.csdn.net/u012206617/article/details/88116179
今日推荐