一个感染性病毒的分析
前言
本人功法尚浅,如果有分析错误或者描述错误的地方,还请指正。
基本信息
基本信息
文件名称 |
3D Pinball |
MD5 |
e3de42be0f6b1d0c9dac45bfaf23a3e4 |
SHA256 |
f6cb28c646c0dafbd34baad35390cd0972879c5d82047da44c47443606bc282c |
大小 |
512.50 KB (524800 bytes) |
类型 |
Win32 EXE |
CPU(32/64) |
32 |
作用(下载/释放) |
无 |
打包/编译语言 |
无 |
编译/保存日期 |
2008-10-16 19:14:58 |
dll 导出函数 |
无 |
pdb |
pinball.pdb |
静态分析
利用IDA查看并不能看出什么有价值的信息,不过通过字符串搜索可以搜索出一些字符串,暂不知道作用,根据反汇编代码应该被加密
动态分析
动态调试
利用fs段查找Kernel基址
根据API名称获取指定API,VirtualProtect
修改内存属性,不过可以看到,该样本并没有提前申请空间而是在资源节中进行占位,提前申请了多余的空间进行后边的代码解密,我们可以看到修改内存属性为可读可写可执行
对比一下节表和内存布局,可以看到确实是多申请了空间
之后进行异或解密,代码进行简单的xor解密,分为两段,总大小为00011ADC+000026E0
解密之后在解密重定位表,然后对代码进行重定位 ,我们可以看到重定位的基址在0x01860000而不是该模块基址0x01000000
重定位完成之后,利用push\ret方法跳转到解密后代码
对API进行Hash,获取相应API,分别为GetEnvironmentStringsA、 GetModuleHandle、GetSystemDirectoryA,该样本都是采用该种方式进行API。
创建线程
我们先略过线程,向下分析,看到对程序入口点进行内存属性修改
修改入口代码
利用jmp直接跳回原代码入口点,发现此时代码为真正的正常软件的代码
我们回到之前创建的线程进行分析
解密字符串
利用GetProAddress获取API地址
之后加载库"advapi32.dll"、"sfc_os.dll"、"sfc.dll"、"Shell32.dll"、"user32.dll"、"ole32.dll"、"crtdll.dll"等并获取相应的API
创建字符串、并尝试打开文件C:\Windows\system32\gazv-mx-dis37,如果存在,直接退出
然后进入一个函数,该函数包括
当前用户名并查看是否包含“ SERVICE”或“ SYSTEM”字符串
比较用户名是否存在计算机名称中
比较系统环境变量是否存在"systemprofile"和"ervice"字符串
如果以上几种情况不存在,则尝试打开互斥体"kkq-vx_mtx",如果已经存在该互斥体则直接退出否则
创建互斥体kkq-vx_mtx1
注册名为kkq-vx的窗口函数
尝试打开互斥体gazavat-svc,若存在结束线程
设置DACL和和所有者
设置SeTakeOwnershipPrivilege权限,使其对当前系统任意文件具有写权限
解密一些反病毒服务和更新服务
然后就开始系统服务感染
遍历服务,获取服务信息,我们可以看一下获取信息的结构体
typedef struct _QUERY_SERVICE_CONFIG {
DWORD dwServiceType;
DWORD dwStartType;
DWORD dwErrorControl;
LPTSTR lpBinaryPathName;
LPTSTR lpLoadOrderGroup;
DWORD dwTagId;
LPTSTR lpDependencies;
LPTSTR lpServiceStartName;
LPTSTR lpDisplayName;
} QUERY_SERVICE_CONFIG, LPQUERY_SERVICE_CONFIG;
可以看到服务类型,启动类型,程序路径,服务名称 等
比较是否为exe文件 ,如果不是exe文件则直接跳过,否则继续执行
如果存在以下svchost.exe\rundll32.exe\consent.exe\rsvp.exe\chrome.exe字符串,则直接跳过
修改过程为读取服务文件,进行处理,然后将添加了恶意代码的内存数据写入临时文件,利用copy直接覆盖文件完成替换
修改配置文件为自启动
如果为之前解密的反病毒服务或者更新服务,直接修改为DISABLE
可以看到原文件和注入后的文件相差很大
文件感染,利用FindFirstFile和FindNextFile循环遍历,进行感染,不在详述
之后创建两个线程
一个线程对文件进行追踪,以确保全部文件感染
第二个:
收集计算机信息,并利用WMI "SELECT FROM Win32_Processor"、"SELECT FROM Win32_BaseBoard"、"SELECT FROM Win32_DiskDrive"、"SELECT FROM Win32_ComputerSystemProduct"进行信息查询
然后寻找%ProgramDate%目录下的.dat文件
读取该文件,申请空间等操作,再次猜测他为执行内存执行代码
此时我们发现该文件并没有网络操作如何进行文件传输和执行呢。
之前我们错开了一个跳转,即三种情况的那个若存在以上任意一种情况,执行下边的函数,所以我们分析那个函数
创建gazavat-svc互斥体
这里和之前的相同的操作就不重复了,如对服务的注入,只说以下不同操作
隐藏操作中心图标
绕过Windows安全中心
关闭筛选器
之后还有五个线程
功能分别为
- 遍历注册表,安装或者卸载指定软件
-
监视文件,进行注入与之前的线程相同
-
查讯信息,读取执行%ProgramDate%目录下的.dat文件与之前的线程相同
-
关闭安全相关服务
- 遍历进程,尝试结束杀软进程
以上就是五个线程的基本分析,之后还有最后一个函数
解密域名
最后进行连接,接收数据,写入文件等操作
以上,基本流程算是分析完毕,此致,敬礼。
附件:
密码:www.52pojie.cn
vir.7z
(298.13 KB, 下载次数: 84)