样本下载
样本原文件 不见了
我的分析过程文件 不见了提示:请勿实体机分析
文件信息收集
查看文件类型,标准的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
归根结底就是操作系统不一样,模块加载的地址不一样
,写死地址兼容性就不高
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。