资讯专栏INFORMATION COLUMN

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

Atom / 2771人阅读

摘要:样本下载样本原文件链接我的分析过程文件链接提示请勿实体机分析文件信息收集查看文件类型,标准的头改名后使用查壳工具查看是否有壳总共个区段,不清楚是什么壳也不清楚是用什么编程语言写的使用加载,查看是否有关键字符串信息看来字符串之类的也被加密或者

样本下载

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

文件信息收集

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

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

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

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

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

动态分析-脱壳

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

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

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

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

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

脱壳后的程序入口

动静结合分析脱壳程序

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

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

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

(3).写注册表,让C:WINDOWSuninstall undll32.exe实现自启动

(4).创建C:WINDOWSLogon1_.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~1ADMINI~1LOCALS~1Temp$$a13.bat

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

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

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

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

(2).在一个线程对应的函数中,先访问资源文件dll1.dll,再创建C:WINDOWSRichDll.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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11410.html

相关文章

  • 《阿里聚安全2016年报》

    摘要:每天新增近个新移动病毒样本,每秒生成个阿里聚安全移动病毒样本库年新增病毒样本达个,平均每天新增个样本,这相当于每秒生成一个病毒样本。阿里聚安全的人机识别系统,接口调用是亿级别,而误识别的数量只有个位数。 《阿里聚安全2016年报》发布,本报告重点聚焦在2016年阿里聚安全所关注的移动安全及数据风控上呈现出来的安全风险,在移动安全方面重点分析了病毒、仿冒、漏洞三部分,帮助用户了解业务安全...

    2json 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<