恶意代码分析实战 18 64位

18.1 Lab21-01

  1. 当你不带任何参数运行程序时会发生什么?

当你运行这个程序却没带任何参数,它会立即退出。

  1. 根据你使用的IDAPro的版本,main函数可能没有被自动识别,你如何识别对main函数的调用?

main函数有三个参数入栈,分别是一个整数和两个指针。
vmware_NLeHioRlqk.png
main函数位于0x00000001400010C0处。你可以通过寻找接受一个整数与两个指针作为输入参数的函数调用定位main函数。

  1. 从0x0000000140001150地址到0x0000000140001161地址的指令在栈上存储了什么?

vmware_8dfXjVNYi5.png
字符串oc1.exe存储在栈中。

  1. 在不改变二进制程序文件名的前提下,如何才能让这个程序运行它的真正负载

vmware_cm3e4JgC48.png
这里对字符串进行了检查,如果在不改变二进制程序文件名的前提下,让这个程序运行。为了不修改可执行程序的文件名就能让这个程序运行有效载荷,你需要修补在0x0000000140001213处的jump指令,将其替换为NOP指令。
vmware_WNjpbiXAtq.png

  1. 0x0000000140001205位置的strncmp函数调用比较了哪两个字符串?

vmware_XHYXZHAe33.png
使用WinDbg查看。
vmware_4KPvSuvSbr.png
下断点,运行程序。
vmware_ZT6EL6ENrW.png
用于比较的字符串。
vmware_Jd92rqDFxL.png
可执行文件的名字会通过调用在0x0000000140001205位置的strncmp函数与字符串jzm.exe进行比较。

  1. 0x00000001400013C8位置的函数接收哪些参数?

vmware_M1NKUelwAv.png
vmware_lcWnhFxYhr.png
在0x00000001400013C8地址的函数只需要一个参数,其中包含了创建的远程主机套接字。

  1. 有多少个参数被传递给在0x0000000140001093位置对CreateProcess函数的调用?你是如何知道的?

vmware_WsiHLe1RDF.png
绝大多数到栈上的移动都代表CreateProcessA函数的参数,但有些并不是。比如mov指令操作的是CreateProcessA函数的参数LPSTARTUPINFO,而STARTUPINFO结构也被存储在栈上,从var_78变量开始,看到的mov指令是被移入STARTUPINFO结构的一些值,这个结构刚好是被存储在栈上的,但不是CreateProcesSA函数的参数。因为函数参数与其他栈行为的复杂交织,所以我们很难通过仅查看函数调用来搞清楚有多少个参数被传递给这个函数。然而,因为CreateProcessA函数拥有完备的文档,我们知道它需要整整10个参数。
调用CreateProcess函数需要10个参数。我们无法从IDAPro的列表中获取这些参数,因为我们不能区分存储在栈上与用于函数调用的变量,但这个函数在MSDN中拥有使用文档,始终需。要10个参数

18.2 Lab21-02

  1. 恶意代码的资源节有什么有趣的东西

vmware_l4XwlZ4PtE.png
包含三个PE文件。这个恶意代码包含了X64、X64DLL和X86资源节。每个资源节中都包含了一个内嵌的PE文件。

  1. 这个恶意代码是为x64编译的,还是为86编译的?

vmware_wrKzsbZyoI.png
Lab21-02.exe被编译为一个32位系统的程序。这在PE头中的characteristics域中显示,其中设置了IMAGE_FILE_32BIT_MACHINE标志位。

  1. 恶意代码是如何确定出它正在运行的环境类型的

vmware_p3AbFqgCtS.png
vmware_aseyoDVNo8.png
该恶意代码试图解析并调用IsWow64Process函数,以确定它是否在x64系统上运行。

  1. 与在x86环境中相比,恶意代码在x64环境中会做哪些不同的事情

x86
x86代码路径首先将字符串Lab21-02.d11和X86传递到sub_40100函数中。基于我们的静态分析结果,我们可以猜测并把这个函数重命名为extractResource。
vmware_HXL9fnh2h0.png
检查extractResource函数,我们可以看到它确实是将X86资源节中的文件提取到了磁盘上,然后将第二个参数附加到GetSystemDirectoryA函数获取的结果字符串上,从而将X86资源提取到C:\Windows\System32\Lab21-02.dll。
接下来,恶意代码在对sub_401130函数的调用中,通过使用OpenProcessToken、LookupPrivilegeValueA和AdjustTokenPrivileges等API函数设置了SeDebugPrivilege,这过程我们已经在第11章的“使用SeDebugPrivilege”节进行了详细讲解。然后,恶意代码调用了EnumProcesses函数并遍历进程列表,使用strnicmp函数查找一个名称为explorer.exe的进程。
最后,恶意代码执行DLL注入,使用VirtualA11ocEx和CreateRemoteThread函数,将Lab21-02.dll注入explorer.exe中。这种DLL注入方法与Lab12-1中的相同。比较Lab21-02.dll和Lab12-01.dl的MD5哈希值,我们可以看到,它们是相同的。因此,我们可以得出结论,当运行在32位系统上时,这个恶意代码与Lab12-1的样本执行相同操作,我们必须调查x64代码路径分析这个程序在64位系统上是否执行了不同的操作。
x64
vmware_jMg9HMMXHu.png
vmware_wERQaT6SUN.png
X64代码路径开始时,两次调用了extractResource函数,分别抽取X64和X64DLL资源节到磁盘上。
这两个二进制文件分别被提取为Lab21-02x.dll和Lab21-02x.exe,并放置到GetSystemDirectoryA函数返回的目录下。但如果我们在64位系统上动态运行这个恶意代码,我们在C:WindowsSystem32日录下将不会看到这两个程序。这是因为Lab21-02.cxe是在64位机器上运行的32位二进制程序,所以它会运行在WOW64环境中。系统路径会被映射至C:WindowsSysWOW64目录,在这里你可以找到那些文件.
接下来,恶意代码使用ShellExecuteA函数,在本地计算机上启动Lab21-02x.exe。 通过查看Lab21-02x.exe的PE头,我们可以看到Characteristics域设置了IMAGE_FILE_64BIT_MACHINE标志位,这告诉我们这个二进制文件是为x64模式编译的,也会作为一个64位进程运行。
为了在IDAPro中反汇编Lab21-02x.cxe,我们需要使用x64位高级版本的IDAPro。当我们反汇编文件后,我们可以从高层次上查看这个文件,它的结构看起来很像Lab21-02.exe。例如,Lab21-02x.exe在开始时也是通过遍历进程列表,动态地定位API函数。Lab21-02x.exe在使用1strcpyA函数和1strcatA函数来创建字符串时,开始与Lab21-02.exe有所偏离。
在x86机器上,恶意代码会将86资源节解析到磁盘上,并将其注入eplorerere中。在x64机器上,恶意代码会从X64和X64DLL资源节中释放两个文件到磁盘上,并以一个64位进程启动该执行文件。

  1. 恶意代码在x86环境中运行时会释放出哪些文件?你可以在哪里找到这些文件?

在x86系统上,恶意代码将Lab21-02.dll安置到Windows系统目录中,通常是C:\Windows\System32。

  1. 当运行在x64机器上时,恶意代码丢弃了哪些文件?你在哪里能找到这个或这些文件?

chrome_sDzpIuHVTm.png
在x64系统上,恶意代码将Lab21-02x.dll和Lab21-02x.exe释放到Windows系统目录中,但由于这是一个在WOW64中运行的32位进程,所以目录是C:\Windows\SysWOW64。

  1. 当运行在x64系统上时,恶意代码启动什么类型的进程?

chrome_M9xFoB8L7U.png
在x64系统上,恶意代码将启动Lab21-02x.exe,这是一个64位进程。你可以在PE头中看到,Characteristics域中设置了IMAGE_FILE_64BIT_MACHINE标志位。

  1. 这个恶意代码的目的是什么?

在x64和×86系统上,恶意代码都对explorer.ere执行DLL注入。在x64系统上,它安置并运行个64位的二进制程序,并注入一个64位的DLL到64位模式运行的explorer.exe进程。在x86系统上,它注入一个32位的DLL到32位模式运行的explorer.ee进程中。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
恶意代码分析实战是一本介绍如何分析和应对恶意代码的实用指南。这本书提供了基础知识和实战经验,帮助读者了解和应对各种恶意代码的攻击。这本书的目标是帮助安全专家和研究人员提高对恶意代码分析的能力,并且给他们提供解决安全问题的工具和方法。通过学习恶意代码的特征和运行机制,读者可以更好地理解恶意代码的危害和影响,并且能够识别和应对各种恶意代码的攻击。 这本书主要包括以下几个方面的内容:首先,介绍了恶意代码的基本概念和分类。然后,详细介绍了恶意代码分析的基本原理和方法,包括静态分析、动态分析和沙盒分析等。接着,详细介绍了常见的恶意代码攻击技术和攻击手段,包括植入木马、蠕虫、病毒等。最后,介绍了如何应对恶意代码攻击,包括应急响应、入侵检测、修复漏洞等。 本书的特点是理论与实践相结合,通过大量实例和案例分析,读者可以了解实际场景中的恶意代码分析过程。此外,本书还提供了一些实用的工具和技术,帮助读者更好地应对和识别恶意代码的攻击。 总的来说,恶意代码分析实战是一本权威且实用的指南,对于希望了解和应对恶意代码攻击的安全专家和研究人员来说,是一本非常有价值的参考书籍。无论是对于初学者还是有一定经验的专业人士来说,本书都提供了丰富的知识和实践经验,能够帮助他们更好地处理恶意代码攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值