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

样本下载

样本原文件 链接
我的分析过程文件 链接
提示:请勿实体机分析

文件信息收集

查看文件类型,标准的PE头

改名后使用查壳工具查看是否有壳

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

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

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

动态分析-脱壳

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

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

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

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

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

脱壳后的程序入口

动静结合分析脱壳程序

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

该病毒最开始进行的关键操作就是分离原始PE文件,因为原始文件其实是由一个病毒体+一个注册表编辑器组成的,所以需要分离
(1).读取病毒体的全部内容到缓冲区

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(3).遍历Z盘中的所有文件

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

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

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

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

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

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

关于Win7不能运行该程序

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

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

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

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

END

你可能感兴趣的:(windows,逆向工程,安全,杀毒软件)