OD 实验(十九) - 对多态和变形程序的逆向

Posted sch01ar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OD 实验(十九) - 对多态和变形程序的逆向相关的知识,希望对你有一定的参考价值。

程序:

技术分享图片

这个窗口显示这是一个需要去除的 Nag 窗口

点击“确定”

技术分享图片

用 PEiD 看一下

技术分享图片

这是一个用汇编语言写的程序

逆向:

用 OD 载入程序

技术分享图片

Nag 窗口的标题和文本

右键 -> 查找 -> 所有参考文本字串

技术分享图片

只有这两条

技术分享图片

下一个断点,跑一下程序

技术分享图片

该 NAG 窗口还是弹出来了

点击“确定”

技术分享图片

然后关掉程序,始终没有停在断点处

说明该处只是干扰项

往上拉

技术分享图片

看到一些奇怪的字符,这些是 OD 识别不了的一些代码

右键 -> 分析 -> 从模块中删除分析

技术分享图片

代码就变得正常了

第一个 call 语句获取模块的句柄

往下走

技术分享图片

把 00401011 存在 edi 中

技术分享图片

按 F7 步入该 call 语句

技术分享图片

这是一个循环,循环结束后 retn 返回

技术分享图片

mov eax,ReverseM.00401000 把 ReverseM.00401000 上的值赋值给 eax

xor byte ptr ds:[eax],0x5A 把 eax 的值按字节跟 0x5A 进行异或

看一下地址 00401000 上是什么内容

技术分享图片

00401000 所处的位置为代码段,对它进行异或操作就是修改它的代码

技术分享图片

在十六进制窗口看地址 00401000 的变化

技术分享图片

按 F8 往下走,可以在十六进制窗口看 00401000 值的变化

技术分享图片

inc eax 就是循环一次,递增 eax,也就是递增代码段的地址

技术分享图片

直到代码段的地址为 00401218 的时候才结束循环

技术分享图片

也就是对 00401000 到 00401218 这一段代码指令与 0x5A 按字节进行异或操作

而这段代码就是 OD 识别不出来的这段代码

所以该异或操作可能是对这段代码进行解密

F8 往下走,通过 retn 返回

技术分享图片

然后按 F7 步入该 call 指令

技术分享图片

xor eax,eax 将 eax 清零

技术分享图片

将 0x6A 赋值给 edi

技术分享图片

他修改了自己的代码,将 xor eax,eax 改为了 push 0x0

继续往下走

技术分享图片

此时 edi 的值为 00401024

技术分享图片

0x44EB 覆盖了 00401024 和 00401025,所以代码从 00401011 开始被改到 00401025

技术分享图片

执行完 sub 指令后变为 00401000

右键 -> 分析 -> 分析代码

技术分享图片

这里多出了个 MessageBox 函数,内容都是乱码

按 F7 步入那个 call edi 指令

技术分享图片

这是一个循环

这段指令像刚才的指令一样,是一段解密代码,对从 00403000 到 00401005 的代码进行解密

技术分享图片

当走完这个解密循环,刚才的乱码就变成了可以看懂的字符串

往下走,走到调用 MessageBox 函数处

技术分享图片

弹出 NAG 窗口

接着往下走,是 jmp 指令

技术分享图片

跳转到该处

add edi,0x11 使 edi 的值加 11

mov word ptr ds:[edi],0xA6A 对 edi 进行覆盖

接着往下走

技术分享图片

0x2CEB 覆盖了 00401026 和 00401027,所以代码从 00401011 开始被改到 00401027

技术分享图片

步入该 call 函数

技术分享图片

往下走,调用 call

技术分享图片

出现了 NAG 窗口

关掉 NAG 窗口后,程序到下一条语句

技术分享图片

接着往下走

技术分享图片

它会直接跳到该 call 指令上

按 F7 步入

技术分享图片

这可能又是一个解密的过程

从 00403000 开始,00403000 是数据段区域

技术分享图片

这些是 NAG 窗口的字符串

执行该过程

技术分享图片

数据变为乱码,看来这是一个加密的过程

接着往下走,走出该 call 区域

技术分享图片

步入该 call 指令

技术分享图片

调用 ExitProcess 函数结束进程

技术分享图片

走完程序就退出了

破解:

方法一:

技术分享图片

修改 hOwner 的值,指定一个无效的父进程

技术分享图片

运行完 call 语句之后不会弹出 NAG 窗口

技术分享图片

重新载入程序,看一下程序在哪里修改了 0040101D 和 0040101E

技术分享图片

步入该 call 指令

技术分享图片

edi 从 00401011 开始

往下走,找到修改 0040101D 和 0040101E 的地方

技术分享图片

在这里修改了 0040101D,mov word ptr ds:[edi],0x6A,这里的 0x6A 就是 6A00

在这里,要把 6A00 修改为 6A01

这里不能直接修改,因为这段代码要跟 0x5A 进行异或操作,所以 01 是跟 0x5A 进行异或后的结果

技术分享图片

0x5A 跟 z 进行异或得到 1,那么 0x5A 跟 1 进行异或得到 z

5A xor 1 = 5B

技术分享图片

要修改的 00 地址为 00401039

查找它在内存中的位置

技术分享图片

改为 5B

技术分享图片

点击“确定”

技术分享图片

代码处也被修改了

保存程序,运行

 技术分享图片

程序只弹出了这个窗口

方法二:

技术分享图片

将调用 MessageBox 函数之前的一条语句改为 jmp 跳转语句,直接跳过调用 MessageBox 函数,调转到原先需要跳转到的地方

技术分享图片

执行

技术分享图片

它直接跳转到该地方来了,没有弹出 NAG 窗口

技术分享图片

机器码为 EB 57,地址为 00401011 和 00401012

重新载入程序,找到修改这两个地址的地方

技术分享图片

这里需要对 6A00 进行修改,地址分别为 00401016 和 00401017

EB xor 5A = B1,57 xor 5A = 0D

技术分享图片

修改完后为

技术分享图片

保存程序,运行

技术分享图片

程序报错

我们得在内存中修改

技术分享图片

双击修改

技术分享图片

分别改为 B1 0D

技术分享图片

接下来保存程序

技术分享图片

选中修改的地方,右键 -> 复制到可执行文件

技术分享图片

右键 -> 保存文件

运行程序

技术分享图片

 

以上是关于OD 实验(十九) - 对多态和变形程序的逆向的主要内容,如果未能解决你的问题,请参考以下文章

OD 实验(十三) - 对一个程序的逆向

OD 实验(十五) - 对一个程序的逆向

OD 实验 - 对一个 Delphi 程序的逆向

OD 实验(十六) - 从对话框入手对程序的逆向

逆向第十九讲——类继承和成员类运算符重载模板逆向20171211

zoj3261变形并查集