拆包学习后门程序

逆向工程 恶意软件 开箱
2021-06-11 17:20:20

我想了解一些有关手动解包恶意软件的知识,并找到了以下链接:

  writequit.org/blog/?p=165.

如您所见,该示例中的恶意软件以 PUSHAD 指令开头。(我认为这将是一个很好的链接,因为 2 天前我开始分析一个以相同 PUSHAD 指令开头的恶意软件。它也像给定链接的那个示例中的恶意软件一样挤满了 UPX)

因此,我下载了示例的恶意软件以进行测试。

我做了什么:

当我进入PUSHAD指令(按F7)时,双击ESP并结合“Following in Dump”,然后在十六进制窗口中选择第一行(ESP地址)的前4个字节。然后我转到断点 -> 硬件,访问 -> Dword。然后F9。(我希望我能正确解释,但您可以确定我做了与链接示例中完全相同的事情)

我的问题:

第一件事:

单击 ESP -> "Follow in Dump" 后,第一行的 4 个字节如下所示:00 00 00 00。(因此,只有零。与示例中的 08 02 91 7c 不一样,你可以看)

第二件事:

当我选择 00 00 00 00 -> Breakpoint -> Hardware, on access -> Dword,然后我让它运行(F9)但恶意软件没有运行到我可以找到 POPAD 或 JMP 的位置......作为在示例中。在我的情况下,毕竟它运行到一个位置(特别是,运行以 LEAVE 指令结束)具有以下内容:

   ...
   ...
   LEA EAX, DWORD PTR SS:[EBP-3C]
   PUSH EAX
   CALL DWORD PTR DS: [<&ntdll.RtlRaiseException>]
   LEAVE                                             <----- here, it ends
   RETN 10
   MOV DWORD PTR SS: [EBP-40], EAX
   ...
   ...

所以,即使我向上或向下滚动数百行,我也找不到 POPAD 指令。

我的问题:

为什么会这样?我需要在 ollydbg 设置中配置一些东西吗?

我希望有人能在这种情况下帮助我,因为尽管我执行了与示例中相同的步骤,但我得到了不同的结果。

最好的祝福,

2个回答

你的错误是你在PUSHAD指令上放置了断点(意味着它还没有被执行)。


我刚刚解压了文件,这就是你的做法:

1. 把文件放到 Olly 中,找到PUSHAD指令

简单地做你以前做过的事情,最后在这里:

步骤1

2. 单步跳过 PUSHAD

现在,您已完成所有操作,可以开始解压。

第2步

3. 在堆栈上放置一个断点

现在,您已经到了堆栈的样子:

## original ESP
## some register's value
## some register's value
## some register's value
## ...
## you are here

现在,在这you are here一点上,解压缩器使用堆栈,并且它向下增长(到较低的地址)。当它完成使用它时,它会清除堆栈,并再次到达您的original ESP位置,popad指令写入的位置,这就是导致断点命中的原因。

4.运行

不言自明。运行后你会在这里结束:

第 3 步

5. 再走一步

完成,您找到了 OEP!

原始设备制造商

现在你可以倾倒了。我使用了OllyDumpExOllyDumpEx

只需Get EIP as OEPPUSH EBP指令单击,然后转储:(同时记下 EIP 1倾倒 修复 OEP

6. 修复 IAT

现在,您想要修复 IAT 以正确查看使用的 API!不要关闭 Olly 也不要踩踏,只需倾倒并保持原样。

打开ImportREC,选择进程,然后按IAT AutoSearch,然后Get Imports

IAT 固定

有时它可能不会自动找到 OEP,因此只需将您在1之前找到的 OEP放在那里,IAT AutoSearch然后Get Imports再次单击,然后转储。

7.查看IDA中的文件

现在您可以分析该文件。

这是手动解包时的样子:

倾倒

这就是 UPX 解压 ( upx -d) 版本的样子:

已解压

正如您所提到的,使用了 UPX,UPX 本身可以对其进行解压缩,请参见此示例要解决滚动以找到入口点,这是因为您位于二进制文件加载的不同模块中。您可能正在进入 ntdll.dll 模块反汇编。