【2018-10-30】粗略分析某感染性病毒样本

样本下载

样本原文件 连接
个人分析过程文件 连接
提示:请勿实体机分析编程

文件信息收集

查看文件类型,标准的PE头编程语言

clipboard.png

更名后使用查壳工具查看是否有壳编辑器

clipboard.png

总共3个区段,不清楚是什么壳!也不清楚是用什么编程语言写的函数

使用IDA加载,查看是否有关键字符串信息工具

clipboard.png

clipboard.png

看来字符串之类的也被加密或者压缩了测试

动态分析-脱壳

因为不清楚是什么壳,因此只有尝试多种通用脱壳的办法:诸如单步法,ESP定律以及最后一次异常法!失败的过程就不赘述了,最终是用最后一次异常配合单步找到的OEP,以下,首先取消勾选全部的忽略异常选项加密

clipboard.png

而后Shift+F9忽略异常运行,运行8次以后会到0x430EF1这个位置进行一个很大的循环,是为了找到kernel32的基址,这时候在下一行下断运行便可spa

clipboard.png

以后再单步F8,程序跑飞就返回来下个断点从新运行,而后F7进入这个函数内部,跟个几分钟就会到jmp oep的地方操作系统

clipboard.png

段间大跳转确定是OEP了,使用Ollydump先dump内存线程

clipboard.png

而后用Scylla修复导入表,最终完成脱壳

clipboard.png

脱壳后的程序入口

clipboard.png

clipboard.png

动静结合分析脱壳程序

初始化操做,包括获取模块句柄以及注册句柄

clipboard.png

该病毒最开始进行的关键操做就是分离原始PE文件,由于原始文件实际上是由一个病毒体+一个注册表编辑器组成的,因此须要分离
(1).读取病毒体的所有内容到缓冲区

clipboard.png

(2).建立” C:\WINDOWS\uninstall\rundll32.exe”这个文件,并把以前缓冲区的内容写入到这个文件中,即病毒体写入rundll32.exe

clipboard.png

(3).写注册表,让C:\WINDOWS\uninstall\rundll32.exe实现自启动

clipboard.png

(4).建立C:\WINDOWS\Logon1_.exe文件,而且写入病毒体

clipboard.png

(5).病毒体文件的大小问0x115D5,因此原文件的指针偏移0x115D5以后就是注册表编辑器的全部数据

clipboard.png

(6).而后在桌面新建a.exe.exe,把文件指针指向的地址起复制数据到a.exe.exe中,而且删除原文件a.exe,以后重命名a.exe.exe为a.exe以实现文件分离

clipboard.png

clipboard.png

杀掉程序中全部跟杀毒相关的进程以及服务
(1).先建立查找到的杀毒进程,再kill掉

clipboard.png

(2).调用cmd来中止杀软服务诸如:金山的服务,江民杀毒服务等等

clipboard.png

(3).建立线程继续杀毒,以及关闭系统声音

clipboard.png

clipboard.png

Temp目录下写入bat文件以及建立进程运行
(1).建立文件C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\\$$a13.bat

clipboard.png

(2).解密字符串后写入内容到$$a13.bat中

clipboard.png

(3).建立进程运行该bat文件

clipboard.png

(4)关闭本程序的进程,建立C:\WINDOWS\Logon1_.exe进程以及修改后a.exe即注册表编辑器运行

clipboard.png

加载自定义dll实现下载其它病毒文件
(1).解密下载连接,大概十来个这样子的"http://down.97725.com/downma1.exe"

clipboard.png

(2).在一个线程对应的函数中,先访问资源文件dll1.dll,再建立C:\WINDOWS\RichDll.dll而后将dll1.dll写入到Richdll.dll中

clipboard.png

(3).加载资源管理器来加载这个Richdll.dll

clipboard.png

(4).写注册表实现开机自动加载dll

clipboard.png

建立一个线程,在线程中建立desktop.ini写入时间而且遍历Z盘文件
(1).建立C:\_desktop.ini文件,并写入当前时间

clipboard.png

(2).获取Z盘类型,方便后续操做

clipboard.png

(3).遍历Z盘中的全部文件

clipboard.png

(4).设置每一个文件的属性为共享可写

clipboard.png

再次建立一个线程,在线程中主要是建立套接字,发送ping测试,尝试链接局域网以及枚举共享文件夹中的文件
(1).建立套接字以及发送hello,world测试,须要加载icmp.dll使用其中的API

clipboard.png

clipboard.png

(2).爆破尝试链接局域网

clipboard.png

(3).获取本机计算机名

clipboard.png

(4).枚举局域网共享文件夹中的共享文件

clipboard.png

(5).进入消息循环,收到结束消息后会释放资源关闭句柄

clipboard.png

关于Win7不能运行该程序

崩溃点就在于遍历系统dll时,地址访0崩溃,而xp没有崩溃的缘由在于遍历的第一个就是kernel32成功命中,win7崩溃就在于遍历的时候遇到了不能寻址的地址,下面图片中这个偏移计算其实就是IAT的内存搜索,由于IAT中有一个字段是该dll的名称。但不是全部的dll都有导入表结构,当遇到没有导入表结构的dll的时候上述寻址很容易遇到访问地址崩溃

clipboard.png

关于为何xp能从kernel32开始遍历,而win7却从ntdll附近开始遍历,并遍历地址往高地址走,win7不可能访问到kernel32这个模块,缘由很简单:

clipboard.png

这个赋值写死了0x77000000,根据xp赋的值,win7赋值应该小于0x74000000

clipboard.png

归根结底就是操做系统不同,模块加载的地址不同,写死地址兼容性就不高

END

相关文章
相关标签/搜索