样本原文件 连接
个人分析过程文件 连接提示:请勿实体机分析
编程
查看文件类型,标准的PE头编程语言
更名后使用查壳工具查看是否有壳编辑器
总共3个区段,不清楚是什么壳!也不清楚是用什么编程语言写的函数
使用IDA加载,查看是否有关键字符串信息工具
看来字符串之类的也被加密或者压缩了测试
因为不清楚是什么壳,因此只有尝试多种通用脱壳的办法:诸如单步法,ESP定律以及最后一次异常法!失败的过程就不赘述了,最终是用最后一次异常配合单步找到的OEP,以下,首先取消勾选全部的忽略异常选项加密
而后Shift+F9忽略异常运行,运行8次以后会到0x430EF1这个位置进行一个很大的循环,是为了找到kernel32的基址,这时候在下一行下断运行便可spa
以后再单步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).进入消息循环,收到结束消息后会释放资源关闭句柄
崩溃点就在于遍历系统dll时,地址访0崩溃,而xp没有崩溃的缘由在于遍历的第一个就是kernel32成功命中,win7崩溃就在于遍历的时候遇到了不能寻址的地址,下面图片中这个偏移计算其实就是IAT的内存搜索
,由于IAT中有一个字段是该dll的名称。但不是全部的dll都有导入表结构,当遇到没有导入表结构的dll的时候上述寻址很容易遇到访问地址崩溃
关于为何xp能从kernel32开始遍历,而win7却从ntdll附近开始遍历,并遍历地址往高地址走,win7不可能访问到kernel32这个模块,缘由很简单:
这个赋值写死了0x77000000
,根据xp赋的值,win7赋值应该小于0x74000000
归根结底就是操做系统不同,模块加载的地址不同
,写死地址兼容性就不高