恶意代码分析实战 18 64位

18.1 Lab21-01

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

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

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

main函数有三个参数入栈,分别是一个整数和两个指针。
恶意代码分析实战 18 64位_第1张图片
main函数位于0x00000001400010C0处。你可以通过寻找接受一个整数与两个指针作为输入参数的函数调用定位main函数。

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

恶意代码分析实战 18 64位_第2张图片
字符串oc1.exe存储在栈中。

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

恶意代码分析实战 18 64位_第3张图片
这里对字符串进行了检查,如果在不改变二进制程序文件名的前提下,让这个程序运行。为了不修改可执行程序的文件名就能让这个程序运行有效载荷,你需要修补在0x0000000140001213处的jump指令,将其替换为NOP指令。
恶意代码分析实战 18 64位_第4张图片

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

恶意代码分析实战 18 64位_第5张图片
使用WinDbg查看。
恶意代码分析实战 18 64位_第6张图片
下断点,运行程序。
恶意代码分析实战 18 64位_第7张图片
用于比较的字符串。
vmware_Jd92rqDFxL.png
可执行文件的名字会通过调用在0x0000000140001205位置的strncmp函数与字符串jzm.exe进行比较。

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

恶意代码分析实战 18 64位_第8张图片
恶意代码分析实战 18 64位_第9张图片
在0x00000001400013C8地址的函数只需要一个参数,其中包含了创建的远程主机套接字。

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

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

18.2 Lab21-02

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

恶意代码分析实战 18 64位_第11张图片
包含三个PE文件。这个恶意代码包含了X64、X64DLL和X86资源节。每个资源节中都包含了一个内嵌的PE文件。

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

恶意代码分析实战 18 64位_第12张图片
Lab21-02.exe被编译为一个32位系统的程序。这在PE头中的characteristics域中显示,其中设置了IMAGE_FILE_32BIT_MACHINE标志位。

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

恶意代码分析实战 18 64位_第13张图片
恶意代码分析实战 18 64位_第14张图片
该恶意代码试图解析并调用IsWow64Process函数,以确定它是否在x64系统上运行。

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

x86
x86代码路径首先将字符串Lab21-02.d11和X86传递到sub_40100函数中。基于我们的静态分析结果,我们可以猜测并把这个函数重命名为extractResource。
恶意代码分析实战 18 64位_第15张图片
检查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
恶意代码分析实战 18 64位_第16张图片
恶意代码分析实战 18 64位_第17张图片
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机器上时,恶意代码丢弃了哪些文件?你在哪里能找到这个或这些文件?

恶意代码分析实战 18 64位_第18张图片
在x64系统上,恶意代码将Lab21-02x.dll和Lab21-02x.exe释放到Windows系统目录中,但由于这是一个在WOW64中运行的32位进程,所以目录是C:\Windows\SysWOW64。

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

恶意代码分析实战 18 64位_第19张图片
在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进程中。

你可能感兴趣的:(恶意代码分析实战,windows,linux,c++,恶意代码分析)