# 移花接木大法：新型“白利用”华晨远控木马分析

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-05-27T21:11:00Z
Canonical: https://wepostx.com/topics/832

> 乌云历史资料归档
>
> **原始作者：** 360安全卫士
> **原始编号：** superkieran-wooyundrops:579
> **原始发布时间：** 2015-05-28 05:11
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

“白利用”是木马对抗主动防御类软件的一种常用手法。国内较早一批“白利用”木马是通过系统文件rundll32.exe启动一个木马dll文件，之后又发展出劫持合法软件的dll组件来加载木马dll的攻击方式。
随着安全软件对“白利用”的防御机制日益完善，木马也在花样翻新。近期，360QVM引擎团队发现“华晨同步专家”远控木马家族采用了比较另类的“白利用”技术：该木马利用白文件加载dll文件后，再次启动白文件并卸载白进程内存空间，然后重新填充病毒代码执行。
这种“移花接木”的手法，使得病毒代码均通过白进程主模块执行，能够绕过多数安全软件的主动防御规则，具有较强的存活能力。以下是对此木马详细的技术分析：

# 0x01 木马分析

该木马伪装成“美女图片”通过社交软件、电子邮件等方式传播，一旦中招，电脑将被黑客发送指令执行摄像头监控、屏幕监控等远程控制行为。目前已知该木马主要变种达到22个。

![原文图片](/media/2016/06/56b83bc576e40c636e0c6a80b355a632)

图：“华晨同步专家”远控木马及变种

![原文图片](/media/2016/06/40b73c6ece1aca3e2d7192a51794c12c)

图：木马执行过程
“华晨同步专家”木马文件：

![原文图片](/media/2016/06/89d309b9fc6a7b185cf21988c20f769a)

![原文图片](/media/2016/06/277074e33ee8cacd28f66949e1f2e212)

美女图片.exe：运行后会释放update.exe、ETComm.dll、wc.dat这三个文件，并运行update.exe。这种“三合一”的打包方式相比压缩包更利于木马传播。

- update.exe：盛大网络的ET语音启动程序

- ETComm.dll：用于劫持盛大程序的木马dll文件

- wc.dat：zlib压缩加密的远程控制木马
我们首先从ETComm.dll入手分析：
ETComm.dll分析过程
DllMain中首先获取模块完整路径

![原文图片](/media/2016/06/1f885e98f85c148013372b0d68551c5f)

比较自身完整路径是否为C:\$WinBackUP.H1502\BinBackup\Images\update.exe 如果不在C:\$WinBackUP.H1502\BinBackup\Images目录下则将ETComm.dll、wc.dat、update.exe拷贝过去，接下来直接进入100016A0

![原文图片](/media/2016/06/75f023bb01c9be835c5cee2c2ad75a8e)

100016A0进来以后首先访问C:\$WinBackUP.H1502\BinBackup\Images\wc.dat

![原文图片](/media/2016/06/3b09de7a4a79bf923b9a051839cf668a)

申请一段内存后将wc.dat的内容读进去

![原文图片](/media/2016/06/03db185ccd1d27259354011b73a38f42)

将读出来的文件内容的前四位与0x36异或，得出0x14E00

![原文图片](/media/2016/06/13fba63addf01d60228ec847266860e7)

将解密出来的0x14e00给到一个变量
紧接着就申请出来一块0x14E00大小的内存
之后将这些数据作为参数传递到Zlib的解压函数中

![原文图片](/media/2016/06/f75457c2d2dcb0aedb28f48652fe162b)

解出来的数据如下

![原文图片](/media/2016/06/5a6b712496bdac87ab7ee4dea6485a0e)

由此我们可以得出wc.dat的结构，第一个DWORD存放的是UnpackFileSize，之后的数据存放的是压缩后的文件数据，此时是最好的dump时机。
Dump出来的文件：

![原文图片](/media/2016/06/e97b17f09487efe843e3dd1d4c47f54f)

接下来是为内存运行exe做准备了
alignPEToMem函数主要作用为加载PE到内存，该函数主要内容为对其exe节数据进行初始化操作。AttachPE主要作用为创建外壳进程（盛大网络ET语音启动程序），并替换进程数据然后执行真正的病毒代码

![原文图片](/media/2016/06/4b436039e691d6e73b628477ba580eb9)

我们重点来看下AttachPE函数的行为：
首先挂起模式再次运行C:\$WinBackUP.H1502\BinBackup\Images\update.exe

![原文图片](/media/2016/06/31357329ef273645a1560622fd629f45)

调用GetThreadContext获取信息目标进程的线程句柄

![原文图片](/media/2016/06/8bafbf63fce5fc22ce8932038aeef2e1)

得到的信息存放在结构体lpContext中，接着读取了目标进程的lpContext结构体中Ebx+8的数据。
[lpContext.Ebx+8]处存的是外壳进程的加载基址，该目标进程的基址为0x00400000

![原文图片](/media/2016/06/7627019fcb9f3bdc9ee9338729a04a28)

动态获取ntdll的ZwUnmapViewOfSection并调用，卸载目标进程原外壳内存数据

![原文图片](/media/2016/06/b6939ccfc842ca4237dac6ebb6c01a61)

重新在目标傀儡进程中申请傀儡代码用到的内存，0x00400000大小为2C000

![原文图片](/media/2016/06/37fe9bb45d06c2e2773bf07695c13ce5)

![原文图片](/media/2016/06/92dfbb10373635435b1a4bc700b4413b)

内存申请成功后在傀儡进程的Context.ebx+8中写入新的基址（因为两个文件基址都为0x400000，所以这一步并没有什么用，但是如果对于两个基址不一样的文件这一步就非常必要了）

![原文图片](/media/2016/06/09a671fd6da284bd918ab06f26c7387d)

然后在新申请的内存中写入已经展开了所有节数据的病毒代码，大小为0x2C000

![原文图片](/media/2016/06/7e5232596a271e28a2ef43a868b03a98)

重置运行环境中的入口地址，新的OEP为基址+0x0002A820

![原文图片](/media/2016/06/edc04543aa60396fec18e27fc521ed4b)

更新傀儡进程运行环境后恢复傀儡进程运行

![原文图片](/media/2016/06/b5e58f7939ce89c8cb663ef95a1d2e9a)

至此ETComm.dll的任务已经完成，直接退出了进程

![原文图片](/media/2016/06/555811d3fd5b126b7259ffb717ed8a37)

接下来我们来分析被偷梁换柱的update.exe进程
从入口点我们可以看出是UPX加壳

![原文图片](/media/2016/06/565976c8da512841d11c1d9940466c60)

直接ESP定律到程序OEP，入口点代码可以看出是VC6.0所编译

![原文图片](/media/2016/06/0d807ef5bd764455e268cf1720b98208)

来到Main函数我们可以看到先是调用了一些sleep(0)

![原文图片](/media/2016/06/1d03b05709ddce2ccf21ca98b2e23c38)

后面有一些字符串单字节赋值，我们可以看出他拼出来的字符串是Kernel32.dll和GetMoudleFileNameA，分别给到了变量LibFileName和ProcName

![原文图片](/media/2016/06/2adbbaa5c179600d7a7236daef249a4d)

动态获取GetMoudleFileNameA

![原文图片](/media/2016/06/e5a5900120c5afa87d1b5769b58a9a3f)

通过GetMoudleFileNameA获取到文件所在路径后，将该路径写入注册表作为启动项，启动项名称为“Realtek高清晰音频管理器”

![原文图片](/media/2016/06/d8867ea4664e8fb5144f75fc200b3eb8)

![原文图片](/media/2016/06/93bc9c50c069ba6a8461b3881b1aa4ab)

获取资源中的名为“dll”的资源

![原文图片](/media/2016/06/9eed68ddbd643a947b6774c02b716cc1)

![原文图片](/media/2016/06/bccb5004dad70c91047c344dfbd24fb8)

解密算法为

```text
xor 0xF1 add 0xF1
```
中间有很多sleep(0)做干扰

![原文图片](/media/2016/06/abfc427161e3bbbd253e71b0fe4b4131)

解出来的文件

![原文图片](/media/2016/06/7ab38e6d65a07bfc82d3265f4bb8cb2c)

Dump出来是dll简单观察发现是华晨远控（Gh0st修改）

![原文图片](/media/2016/06/8a7f5545e904b9097d8e4e610903fb2f)

继续往下就是内存加载dll。抛弃系统的LoadLibrary和GetProcAddress来自己实现则会使dll不用落地，其目的是躲避安全软件的云查杀。
LoadLibrary的实现过程如下：
申请内存，写入PE头数据

![原文图片](/media/2016/06/f61eb4c24e9a8e6902c72044873336d7)

循环拷贝各个节数据

![原文图片](/media/2016/06/15fdd9ed5e7f7b4b0df8bbf06d8db060)

处理重定位

![原文图片](/media/2016/06/cff30c06e7a3a2fc78736833a640ac2c)

读取dll的引入表部分，加载引入表部分需要的，并填充需要的函数入口的真实地址

![原文图片](/media/2016/06/c2dfde1916007d8f7818eb6d0f5bb191)

dll

![原文图片](/media/2016/06/1245ea04979762d9d2b725c6d328c20b)

修改各个节内存属性，单独设置其对应内存页的属性

![原文图片](/media/2016/06/1e787b03b07c02e05f1abfd7d11d612c)

![原文图片](/media/2016/06/a9f812b47c39d76bd096d95f5cdc5947)

执行DllMain函数

![原文图片](/media/2016/06/6c6680d1fa7477f7abdfe384cdbc36d1)

![原文图片](/media/2016/06/c8a356106dac7490d2a9856e85e4e988)

GetProcAddress实现过程：

![原文图片](/media/2016/06/8a0dd84a2c031d4eb0f6bced3bf6e41b)

调用自写GetProcAddress获取“Fi”导出函数并调用

![原文图片](/media/2016/06/87c36adff9438be4ea0fcb42a9b529f2)

Fi函数负责将整个远控执行起来了。
以下是远控基本信息：

```text
远控上线地址：dddd.ndiii.com 端口：2012 分组名称：Default 远控官网：http://www.jinjingltsh.com/
```
“华晨同步专家”官网号称“拥有国家政府机关认证，与众多安全厂商均有合作”，实际上完全是其捏造的。

![原文图片](/media/2016/06/60b5d63b130c6fb573a93f11d84e6808)

![原文图片](/media/2016/06/630c6b3f02d9905d951a11e672a4a47d)

# 0x02 总结

通过以上分析我们看出，“华晨同步专家”远控木马的新颖之处，在于利用白进程内存运行exe，内存运行dll，真正的病毒文件并不落地，仅存活在内存当中，具有较强的免杀能力。
根据VirusTotal对此木马较新变种样本的扫描结果，57款杀毒软件中有17款可以将其检出，检出率约为30%：

![原文图片](/media/2016/06/603bea911fb0c1c1a931a3e6212285ad)

## Replies
