之前一直没怎么分析过远控木马,偶然看到了一个木马样本,样本不难,也有大佬分析过,只为学习
1.样本概况
1.1 样本信息
病毒名称:3601.exe
MD5: C8102164058B27B5553924255093B643
SHA1: FAD5CDE82609751365344B14C777C1BF975E410F
CRC32: C3BEFC16
1.2 测试环境及工具
2.1.1 测试环境
Windows 7 32位操作系统
2.1.2 测试工具
查壳工具:PEID、ExeinfoPE
监测工具:火绒剑、PCHunter
调试工具:OD、IDApro
1.3 基础分析
1.3.1 病毒查壳
使用PEID进行查壳,如图1-1是个VC6.0程序
图1-1 病毒查壳
LordPE查看区段,发现是加了UPX的壳,看程序的入口点特征,确实和vc6.0程序入口点特征不太一样,不过也能顺利的找到main函数,或许我拿到的样本是脱过壳的,不过这些都不是重要的。
图1-2 查看区段
1.3.1 加密算法
将恶意程序手动脱壳,使用PEID的插件查看恶意程序的加密算法,发现程序含有Base64算法。
图1-3 加密算法
1.3.1 云沙箱分析
将恶意样本上传到微步云沙箱,发现恶意程序有如下行为。
图1-4 云沙箱分析
2.具体行为分析
2.1 主要行为
将病毒样本拖入火绒剑中,过滤到行为监控,可以看到病毒释放文件自我复制、自我删除、释放dll文件等。
图2-1 病毒释放文件和自删除
图2-2 释放lpk文件
如图2-2,病毒在许多目录下释放了lpk.dll文件,具体都在什么目录下释放文件后续会继续分析。
图2-3 加载hra33.dll
首先释放的PE文件开始启动,期间恶意程序自我复制,并隐藏释放文件,最后恶意程序进行自删除。
对网络进行监控,恶意程序会请求一些IP的连接并发送数据包,如图2-2:
图2-4 恶意程序的网络监控
转到文件监控,恶意程序也创建了一些文件
图2-5 恶意程序的文件监控
最后使用注册表对比工具,将运行恶意程序前后对齐,新增了以下注册表键值
图2-6 注册表对比
3.恶意代码分析
3.1 病毒程序分析
不多废话,直接IDA F5搞起
图3-1 病毒main函数
看主函数,看起来很清晰,开工OD、IAD齐分析
上来就是WSAStartup,一看就是有网络操作。
进入sub_405A52函数
图3-2 拼接字符串
图3-3 打开注册表查看注册表键是否存在
继续运行程序,返回值为0,可以判断这个函数的操作是拼接注册表字符串,打开注册表,查看键值是否存在。
程序继续运行,走到sub_405B6E函数
图3-4 字符串比较
判断程序是否在系统目录下
图3-5 随机生成字符
随机生成字符,拼接成文件名,拷贝到C:\Windows目录下
图3-6 创建服务
图3-7 启动服务
创建并启动服务。
图3-8 添加注册表键
添加注册表键HKEY_LOCAL_MACHINE\system\\CurrentControlset\\services\\Ghijkl Nopqrstu Wxy
图3-9 cmd命令
最后,函数返回时执行cmd命令,自我删除
图3-10 拼接后的命令
图3-11 函数重新命名
程序已终止,将C:\Windows目录下的程序加载到OD,程序将执行以下代码
图3-12 条件语句的上部分
接下来主要分析回调函数
图3-13 将ASCII码转为char
图3-14 检查互斥体
根据图3-13和图3-14是为了检查互斥体"Ghijkl Nopqrstu Wxy"是否存在,存在则结束程序。
图3-15 下部分
sub_405394函数作用是枚举资源段释放hra0.dll
sub_4053A6函数如下:
图3-16 打开注册表
图3-17 读取注册表值
图3-18 操作资源
如图3-14、3-15、3-16可知,这个函数的作用是检查注册表键并在资源上操作了一串字符串。
图3-19 加载dll
sub_4034E5函数加载了dll文件
图3-20 整体
这些便分析完成,dll文件会稍后分析,下面继续分析三个线程函数
图3-21 三个线程函数
接下来分析三个线程函数
线程一函数:
图3-22 弱口令
看到这些弱口令,就应该能猜到是用于弱口令连接局域网进行感染
图3-23 拼接字符串
图3-24 共享目录
通过如上分析,线程一函数是通过弱口令感染局域网其他主机,并通过共享目录将病毒传播出去,利用at计划任务,直接admin$共享。
线程二函数:
图3-25 获取当前日期
图3-26 函数命名
首先获取系统当前日期,然后进入sub_405128函数
图3-27 sub_405128
在sub_405128函数中,又创建了一个线程(子),进入线程函数中
图3-28 连接域名
线程(子)首先连接sbcq.f3322.org,然后判断是否连接成功,连接成功继续执行代码,连接失败直接返回,当连接成功是时,继续执行以下代码
图3-29 判断I/O命令
图3-29判断使用了哪一种I/O控制命令,然后返回对应的句柄
图3-30 系统版本号
在sub_4060F0函数中,首先获取系统版本号
图3-31 CPU信息
图3-32 内存信息
图3-33 系统其它信息
总之,sub_4060F0函数为获取系统信息函数
之后又是加载了dll文件,然后向控制端发送数据,等待接收控制端传来的命令
图3-34 向控制端发送消息
图3-35 等待控制端发的消息
之后就是几个if-else中的几个case语句,应该是根据控制端发过来的数据进行判断执行,首先看当接受的数据大于6时。
数据为0x10时,访问指定url下载恶意程序到临时文件目录并启动
图3-36 数据为0x10
数据为0x12时,首先打开互斥体,如果打开成功就释放掉,然后初始化一些信息,更新病毒,如果下载病毒成功,则删除原有的服务、注册表和程序。如图3-37和3-38
图3-37 数据为0x12(上)
图3-38 数据为0x12(下)
数据为0x12时,打开IE,访问网址
图3-39 数据为0x14
以上是接收的数据大于6时,小于等于6时情况如下:
等于6时,和数据为0x12时一样,首先打开互斥体,如果打开成功就释放掉,然后初始化一些信息,更新病毒,如果下载病毒成功,则删除原有的服务、注册表和程序。
图3-40 接收数据为6时
当数据小于6时
当数据为0x2时,对socket进行一些初始化
图3-41 初始化socket
当数据为0x3时,模拟浏览器headers信息请求数据包
图3-42 设置headers信息
图3-43 Get请求数据包
当数据为0x4时,也是对socket的一些初始化
图3-44 socket初始化
到这里,线程二函数分析完成
线程三函数:
进入线程三函数,发现与线程二函数的操作基本一致,只不过要连接的域名变为了www.520123.xyz
图3-45 连接www.520123.xyz
三个线程分析完毕
图3-46 三个线程
接下来分析while循环中的线程
图3-47 while循环中的线程
看到while循环中的线程函数,还是熟悉的感觉,和线程二、线程三的操作一模一样,只是要连接的网址使用Base64进行编码加密
图3-48 加密的网址
用工具进行解密,发现出现乱码,可能编码不一样
图3-49 解密工具解密
还是选择用OD跟踪,得到了正确的网址www.520520520.org:9426
图3-50 解密得到网址
最后将函数重命名
图3-51 函数重命名
病毒主程序分析完毕
3.2 hra33.dll分析
写一个程序LoadLibrary(hra33.dll),找到入口点
图3-52 hra33.dll入口点
用ida查看dll入口点函数,如图3-53
图3-53 ida查看dll入口点函数
开始分析hra33.dll,进入sub_10001134函数
图3-54 加载dll到内存
图3-55 LoadResource
通过LoadResource函数将资源中的dll文件加载到内存
查看sub_10001338函数,判断是否是临时文件
图3-56 sub_10001338函数
sub_10001193函数功能是加载资源,在临时目录下创建文件,创建进程
图3-57 sub_10001193函数
sub_100012F6函数判断当前目录下是否含有lpk.dll文件
图3-58 sub_100012F6函数
进入sub_100019E6函数,里面创建了一个线程函数,进入线程函数内部
图3-59 线程函数
里面判断了是否是exe、rar、zip文件,是的话在当前目录下放入lpk.dll,进入感染压缩包的函数
图3-60 感染压缩包
利用winrar自带的shell命令将lpk.dll放入压缩包中
进入sub_100010CE函数中,获取了系统目录下的lpk,并LoadLibrary
图3-61 加载系统目录下的lpk.dll
最后,关闭句柄,释放加载
图3-62 释放加载
恶意代码部分分析完毕
4.手动查杀
1.删除HKEY_LOCAL_MACHINE\system\\CurrentControlset\\services\\Ghijkl Nopqrstu Wxy下注册表键
2.停止Ghijkl Nopqrstu Wxy的服务,删除服务并删除服务路径下的程序
3. 删除C:\windows\system32\hra33.dll文件
4. 删除生成的lpk.dll文件
最后,上张pdf格式截图,有兴趣分析的朋友可以下载附加pdf,方便查看
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
最后于 2019-3-8 16:33
被Iam0x17编辑
,原因: