恶意代码分析(一)

样本来源

https://www.52pojie.cn/thread-1377686-1-2.html

样本概况

样本信息Value
样本名称免费外纪.exe
样本大小4.62MB(4,853,850 Byte)
MD5bcfc56704ea9b62650bec0349532b7d7
SHA1176fbfb56e401f1043532377c1b67bd207c32bb9
时间戳28/10/2020
壳信息
数字签名

分析环境

环境信息Value
操作系统windows 10
病毒扫描https://www.virscan.org
行为分析火绒剑
调试工具OllyDbg、IDA Pro

初步分析

VirSCAN扫描
在这里插入图片描述火绒剑分析

双击运行结果:
在这里插入图片描述调试器运行结果:
在这里插入图片描述
结论:若通过调试器运行样本,初步得到样本会做以下几件事情

  1. 将自身重命名为svchost.exe并拷贝到C:\Windows目录下
  2. 将自身重命名为52993656.bak并拷贝到C:\Windows\SysWOW64目录下(数字为随机生成)
  3. 设置注册表键值
  4. 自我删除

验证
1)比对源文件和svchost.exe的MD5值:
在这里插入图片描述
2)比对源文件的MD5和52993656.bak的MD5值:
在这里插入图片描述
3)查看注册表键值
在这里插入图片描述
由于进行过多次调试,因此存在多行不同的值

调试分析

第一个线程

1)首先使用IDA从WinMain开始静态分析
在这里插入图片描述2)查看sub_4010F5
在这里插入图片描述3)使用OllyDbg调试sub_4010AF得到关键数据
在这里插入图片描述
发现循环结束后,地址0x408578的数据出现了熟悉的PE头部特征“MZ”

4)将解密后的数据dump下来,并删除无用数据
在这里插入图片描述

在这里插入图片描述5)查壳,发现存在nsp壳
在这里插入图片描述
6)使用IDA进行反编译,发现入口函数为DllEntryPointer,说明该文件类型为DLL动态链接库,不方便使用手动脱壳的方法进行脱壳
在这里插入图片描述
7)继续向下调试,直到样本调用这个DLL
在这里插入图片描述
可以看到调用的地址是0x10009c70,由于在此之前调用了qmemcpy拷贝DLL各个区段到新内存,以及进行了一系列LoadLibrary和GetPorcAddress操作,猜测这是样本在对DLL进行脱壳,因此这个时候尝试再次dump,代码基址和数据基址可以在内存中定位
在这里插入图片描述
顺利得到了脱壳后的DLL文件,IDA打开发现存在进程操作,文件操作和注册表操作等相关API调用
在这里插入图片描述
7)OD继续向下调试分析
分析一部分后的DllEntryPointer函数注释如下,有些函数还不知道具体是什么含义
在这里插入图片描述随后创建了两个新的线程,暂时先不分析,接着往下看
在这里插入图片描述
在这里插入图片描述
8)查看sub_10002450
在这里插入图片描述

9)最后调用sub_10009570,里面创建了第四个线程sub_10009200,然后进入sleep
在这里插入图片描述

第二个线程

在这里插入图片描述
1)首先分析sub_100076d0(由于IDA中数据为空,因此使用OD调试)
在这里插入图片描述
在内存中生成了一些字符串并调用了sub_10002f50
在这里插入图片描述2)sub_10002f50中生成了字符串SYSTEM\CurrentControlSet\Services\Bcdefg
在这里插入图片描述
再将这个字符串作为参数传入sub_1000bc70并调用
在这里插入图片描述
sub_1000bc70存在大量的CALL ESI这样的指令,无法反编译为C代码

3)sub_1000bc70存在大量的CALL ESI这样的指令,无法反编译为C代码,继续使用OD调试
在这里插入图片描述导入了一些注册表相关的API
在这里插入图片描述
打开了注册表键SYSTEM\CurrentControlSet\Services\Bcdefg
在这里插入图片描述
读取了键名MarkTiny的值
在这里插入图片描述调用sub_1000bed1关闭了注册表
在这里插入图片描述然后释放了ADVAPI32.dll并return
在这里插入图片描述
4)之后sub_100076d0又调用了两次sub_10002f50获取了月份和日期
在这里插入图片描述
在栈里生成rundll32.exe并调用了GetModuleFileNameA得到了当前路径
在这里插入图片描述
之后比较了一下当前进程名是否为rundll32.exe
在这里插入图片描述如果不相同的话,会调用三个函数
在这里插入图片描述

首先调用sub_10003830遍历进程模块查找是否存在下面五个进程

cthlp.exe
pythonw.exe
xService.exe
pgradeHelper.exe
AcrylicService.exe

然后调用sub_10004990比较了下面第一条图片路径和后三条图片路径,暂时不清楚具体作用

C:\Windows\web\wallpaper\Windows\img0.jpg
C:\Users\test\Pictures\maldun_background.jpg
C:\Users\vbccsb\Pictures\Desktop.jpg
C:\Users\vbccsb\Pictures\Desktop.jpg

接着又调用了sub_10005fc0检测进程模块

C:\delete
C:\create
erAToolClient.exe
SandboxieRpcSs.exe
SandboxieDcomLaunch.exe

后面进入了一段很长的Sleep,猜测是为了执行其他线程,Sleep结束后又会重新回到线程头部开始执行
在这里插入图片描述
这个线程暂时先分析到这里

第三个线程

在这里插入图片描述
1)开启了一个新线程sub_1000b500
在这里插入图片描述
2)分析sub_1000b500
在这里插入图片描述3)查看sub_10009ba0
在这里插入图片描述4)分析sub_100099d0
在这里插入图片描述

第四个线程

1)启动套接字
在这里插入图片描述
随后进入一个大循环,共三层
在这里插入图片描述
在这里插入图片描述
2)分析sub_10001560
在这里插入图片描述在sub_1000b580中再次调用了sub_1000b500
调试分析看看与之前有什么不同
在这里插入图片描述
3)分析sub_1000b7b0
在这里插入图片描述在这里插入图片描述
3)分析sub_1000b6a0
首先加载了一些函数
在这里插入图片描述然后调用这些函数,获取桌面信息,值位Default
在这里插入图片描述函数结束后回到父函数,向下执行调用sub_10001680

第五个线程

1)分析sub_10001680
在这里插入图片描述

其它思路

之前有一个地方判断了一下当前程序的文件名是否为rundll32.dll,看一下若比对成功的情况
若比对成功会经过这里
在这里插入图片描述
由于sub_1000788A在IDA中为空数据,因此使用OD调试分析
首先通过获得当前年月日
在这里插入图片描述
后面也没做什么,函数结束后回到判断文件名的位置开始循环这个操作

总结

通过分析,该样本大致有以下几大明显行为

  1. 从互联网下载程序并执行,而分析样本时URL是空的,似乎是被有意抹去,可在调试时手动添加进行测试
  2. 该进程会启动socket进行数据交互和加解密操作,ip地址似乎也是被有意修改为了127.0.0.1,猜测目的是和新下载的恶意程序进行数据交互和命令执行,实现远控
  3. 该样本会将自身重命名为svchost.exe并拷贝到系统目录下,再将自身和一个dll文件重命名后移动到系统目录下

唯一的遗憾是第五个线程中存在一个大量算法的函数,由于socket连接不成功,因此无法分析函数的目的是什么

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值