冰凌汇编

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 86|回复: 1
收起左侧

[原创] 我的逆向工程之旅-第3部分:多态性和OllyDbg

[复制链接]
Alibaba 发表于 2022-1-17 15:05:58
第3部分使用的工具:

  • VMware Workstation 12
  • Windows 7 32-bit Virtual Machine
  • PEiD
  • OllyDbg
  • Dumpit
  • Volatility
  • IDA Pro Free

如上文所述第一部分在本系列中,Peid没有在二进制文件中检测到任何常见的封隔器的存在。但是,它的导入表中列出的函数与我在第二部分。包含用户接口API的核心窗口库“user32.dll”和负责内存管理、输入\输出和中断的“kernel32.dll”是列出的惟一DLL。如第1部分所述,函数“LoadLibaryA\LoadLibrary aryW”和“GetProcAddress”是从“kernel32.dll”导入的,这些函数可以一起用于确定程序执行期间DLL函数的地址。
我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

OllyDbg是一个调试器,它允许您检查另一个进程的状态和细节。它由OlehYuschuk编写,并将各种不同的视图包含到正在运行的进程中。实用恶意软件分析包含关于OllyDbg的整个章节。在增加文本大小以使我的眼睛在分析过程中不会开始流血之后,我将“Binary.exe”加载到OllyDbg中,并注意到它的基址为400000。这对于检查其他地址的位置非常重要,特别是当二进制文件在将来加载到不同的基座时。我是从Olly最喜欢的特性之一内存地图视图中确定这个值的。从这个视图中,我可以看到二进制文件的PE头从虚拟地址400000开始。您将在下面的屏幕截图中看到许多其他内存部分,因为Windows加载程序将其他资源和功能映射到进程的地址空间。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

请注意,此屏幕快照仅是Windows加载程序将其放入内存后映射到进程的内存部分的三分之一。然后,我开始单步遍历二进制文件,这意味着每次执行一条指令。这一切都发生在我的恶意软件沙箱中,因为我正在执行恶意二进制代码。执行每条指令后,我可以从提供的默认视图中观察CPU寄存器、堆栈和数据部分中的任何更改。任何更改的值都以红色显示。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编



我开始注意到一种模式,当我单步遍历相同功能的程序时,不仅被重复调用,而且还被彼此调用。每个函数至少包含以下导入函数的子集:“GetUserDefaultLCID”、“EnumSystemCodePages”、“SetCurrentDirectoryA”和“VirtualUnlock”。当调用这些导入的函数时,通常会返回错误。即使返回了有效值,我也没有观察到进程保存或使用它的任何实例。
我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编


很快就可以清楚地看到,这种相互关联的本地函数的混乱是为了阻止二进制文件的反汇编\调试。这与我在动态分析期间观察到的情况一致,当时恶意进程试图打开大约1000个假目录。以400000为基数,位于以下地址的功能符合此标准:402944、406D0C、4046E4、401014、401D30、401068、4073E8和4047A4。这个二进制文件是战略性地布局的,所以我不能一次跳过所有这些函数。但是,通过识别它们,当遇到“步骤”命令时,我可以跳过它们,从而更快地达到程序的真正目的。我确实试着把这些函数之间的关系映射出来,但是图在五分钟内变得如此复杂,很明显,删除只是跳过这些函数,而这些函数被证明是没有影响的。

在经历了许多令人沮丧的尝试跳转到一个地址(导致二进制运行直到它完成)之后,我终于找到了一个地址,407335,它向我展示了关键的功能。当执行到达这个区域时,我注意到有东西被关闭了,因为Olly没有将它识别为代码。然而,让Olly重新分析这一节显示,自从加载到内存中以来,它已经被修改为包含有效的操作。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

这个特殊的指令在407335,“调用DWORD PTRSS:[EDP-C]”,将执行移到以前动态分配的内存段,称为堆,其权限设置为“read_write_Execute”。这里执行的操作通过解析DLL函数的地址并将它们移动到原始代码部分和重写PE头来修改保存原始二进制文件的内存部分。通过使用“LoadLibrary A”,程序能够接收它需要从其中加载子例程地址的所有DLL的句柄。然后,通过调用“GetProcAddress”以及这个句柄和一个子例程名称,将返回指定的子例程。在下面的示例中,程序调用“GetProcAddress”来解析“VirtualProtectEx”的地址。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

然后,作为函数调用的结果,“VirtualProtectEx”的地址被放置到EAX寄存器中。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

这个DLL函数地址与大量其他地址一起移动到原始二进制文件的内存区域。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

对于PE头的修改,首先在另一个动态分配的堆中构建一个新的头。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

然后将其复制到包含原始PE头的内存部分,以便覆盖它。这种覆盖是通过调用“CopyMemory”WindowsAPI函数来实现的。正在完成的大部分工作如下装配指令它将内存从ESI中的地址复制到存储在EDI中的地址。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

在这些修改完成后,我运行Dumbit来创建包含恶意进程当前状态的工作内存捕获。我运行pslist插件来确定“binary.exe”进程的PID,然后再运行procdump插件将其解压缩到文件中。

我的逆向工程之旅-第3部分:多态性和OllyDbg - Alibaba_冰凌汇编

该提取的二进制文件成功地加载到IDA的免费软件版本中,没有任何错误,并且包含了一个更加完整和可疑的导入表。下一步是反向工程公开的混淆代码,以了解二进制对本地系统采取的操作。


冰凌汇编免责声明
以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
qingjue 发表于 2022-1-29 17:41:36
说点啥好呢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|站点统计|Archiver|小黑屋|RSS|冰凌汇编 ( 滇ICP备2022002049号 滇公网安备 53032102000029号)|网站地图

GMT+8, 2022-9-25 06:08 , Processed in 0.333958 second(s), 9 queries , Redis On.

冰凌汇编 - 建立于2021年12月20日

Powered by Discuz! © 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表