赞
踩
当你运行这个程序却没带任何参数,它会立即退出。
main函数有三个参数入栈,分别是一个整数和两个指针。
main函数位于0x00000001400010C0处。你可以通过寻找接受一个整数与两个指针作为输入参数的函数调用定位main函数。
字符串oc1.exe存储在栈中。
这里对字符串进行了检查,如果在不改变二进制程序文件名的前提下,让这个程序运行。为了不修改可执行程序的文件名就能让这个程序运行有效载荷,你需要修补在0x0000000140001213处的jump指令,将其替换为NOP指令。
使用WinDbg查看。
下断点,运行程序。
用于比较的字符串。
可执行文件的名字会通过调用在0x0000000140001205位置的strncmp函数与字符串jzm.exe进行比较。
在0x00000001400013C8地址的函数只需要一个参数,其中包含了创建的远程主机套接字。
绝大多数到栈上的移动都代表CreateProcessA函数的参数,但有些并不是。比如mov指令操作的是CreateProcessA函数的参数LPSTARTUPINFO,而STARTUPINFO结构也被存储在栈上,从var_78变量开始,看到的mov指令是被移入STARTUPINFO结构的一些值,这个结构刚好是被存储在栈上的,但不是CreateProcesSA函数的参数。因为函数参数与其他栈行为的复杂交织,所以我们很难通过仅查看函数调用来搞清楚有多少个参数被传递给这个函数。然而,因为CreateProcessA函数拥有完备的文档,我们知道它需要整整10个参数。
调用CreateProcess函数需要10个参数。我们无法从IDAPro的列表中获取这些参数,因为我们不能区分存储在栈上与用于函数调用的变量,但这个函数在MSDN中拥有使用文档,始终需。要10个参数
包含三个PE文件。这个恶意代码包含了X64、X64DLL和X86资源节。每个资源节中都包含了一个内嵌的PE文件。
Lab21-02.exe被编译为一个32位系统的程序。这在PE头中的characteristics域中显示,其中设置了IMAGE_FILE_32BIT_MACHINE标志位。
该恶意代码试图解析并调用IsWow64Process函数,以确定它是否在x64系统上运行。
x86
x86代码路径首先将字符串Lab21-02.d11和X86传递到sub_40100函数中。基于我们的静态分析结果,我们可以猜测并把这个函数重命名为extractResource。
检查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
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位进程启动该执行文件。
在x86系统上,恶意代码将Lab21-02.dll安置到Windows系统目录中,通常是C:\Windows\System32。
在x64系统上,恶意代码将Lab21-02x.dll和Lab21-02x.exe释放到Windows系统目录中,但由于这是一个在WOW64中运行的32位进程,所以目录是C:\Windows\SysWOW64。
在x64系统上,恶意代码将启动Lab21-02x.exe,这是一个64位进程。你可以在PE头中看到,Characteristics域中设置了IMAGE_FILE_64BIT_MACHINE标志位。
在x64和×86系统上,恶意代码都对explorer.ere执行DLL注入。在x64系统上,它安置并运行个64位的二进制程序,并注入一个64位的DLL到64位模式运行的explorer.exe进程。在x86系统上,它注入一个32位的DLL到32位模式运行的explorer.ee进程中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。