已经发表于本人专栏: 0d8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3k6J5k6h3g2T1N6h3k6Q4x3X3g2U0L8$3#2Q4x3V1k6U0L8$3I4#2L8h3&6Q4x3V1j5I4y4o6t1@1x3o6k6Q4x3X3g2Z5N6r3#2D9
最近收到一个钓鱼木马邮件,内容形式如下:

邮件里有个链接,当点开链接后会下载一个doc文档,打开文档会发现有宏代码

经过一些列解密后悔执行shell执行宏命令,打印出这个信息出来后发现,原来执行了powershell命令

是从网络url中下载一些文件并且 StartProcess,看来这才是真正的木马,下载的是一个exe,名字是随机的四个字符的exe名字。

下面就开始分析这个木马,用ollydbg加载木马,在Winmain函数入口点下断点:

F9飞一次,停在了入口,慢慢 F8单步,木马直接到了0300149C的地址

F7继续进入函数:
进入函数不久木马一直两个代码间循环,无法继续往下走,
(1) 循环起止1.

(2) 循环往上跳

当我们F9的时候一直不能跳出循环,我们通过IDA查看发现他做了一个时间判断故意为了防止被分析做了一个时间开关,这个时间有点太大了。

我们直接修改EIP到循环外的地址,跳过这个循环。

继续往下走。

下面有Call VirtualProtect,而这个VirtualProtect把刚才分配的地址改写成PAGE_EXECUTE_READWRITE的属性,也就是变成一个可读写可执行的代码页。

下面就到了木马对内置的加密代码的解密了,可以明显看到原始数据被加密了。

解密完后我们可以看到内存地址内容了,

到此这个函数就执行完毕,返回到入口函数位置后,下面有个cal [3011744] 实际上是前面函数内解密分配的shellcode函数 。

实际上是call 001AA618,进入函数

再次进入就进入真正的函数位置了

很明显字符串 75 73 65 72 33 32用字节码写出来,作者做了一些免杀处理。
在shellcode遇到第一个函数这个函数call 001AA008,函数的功能是查找木马的导入表找到LoadLibraryA函数和GetProcAddress这两个函数地址


接下来就是通过LoadLibrary 和GetProcAddress函数动态获取一些API的地址,


一共要获取几十个函数的地址,这块我们跳过去,F9一路飞到地址001AB4EF

这个函数直接调用函数下面的地址,继续 F8单步到001AB50F

继续F7进入001AB50F函数

在这里他会判断木马目录下有没有apfHQ文件,所以我们事先需要生成一个apfHQ文件在目录下,空文件也行,这个过程完毕后就进入了01AA408函数。


继续往1AA408函数内部F7,会经过一些列的RegisterClassEx, CreateWinodws、GetMssage等窗口函数后就进入了1AA108函数

继续F7进入1AA108函数,在进入函数不久,木马会去取一个内存数据,并且判断4550 “PE”这个标志位

接下来调用 GetStartUpInfo,取得当前进程的启动信息

然后接续获得当前进程的命令行参数

然后调用CreateProcess 来把自己作为子进程创建起来,而且创建标志位是
CREATE_SUSPENDED
0×00000004
是以悬挂进程的方式创建子进程

然后继续通过GetThreadContext函数获得子进程的线程上下文

然后在子进程的0×400000的地址远程分配一个大小0xC00大小的内存,内存属性0×40,即读写可执行的属性内存PAGE_EXECUTE_READWRITE 0×40

接下来木马就会使用ZwWriteVirtualMemory函数往子进程的0×400000地址写入大小0×400的数据,通过查看写入的数据发现是个PE头

下面就是PE头数据

然后木马会解析这个内存里的PE文件的各个节.text .data .rdata 等等节段,通过ZwWriteVirtualMemory函数分别往子进程的相应内存里远程写入数据。

分别写完数据后,然后改写子进程PE加载器的子进程的执行加载的首地址为0×400000

然后使用SetThreadContext设置子进程的当前线程EIP 指向0x408FE5

最后调用ResumeThread函数恢复子进程的线程继续执行

最后父进程退出,子进程开始干一些真正的盗取行为,到此我们可以知道木马是通过创建子自身子进程通过GetThreadContext、ZwWriteVirtualMemory、SetThreadContext、ResumeThread,来实现hook方法达到隐藏真实pe的目的来增加分析人员的分析难度,他的真实PE文件加密存贮在数据段中解密后如下:

现在的木马的隐蔽性越来越深,也经常使用多进程交互,真正的执行逻辑可能已经变换的找不到来源,而过去常用的进程关系行为越来越难以检测了,这就要求安全人员更加深入地研究。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!