晨雾 发表于 2016-9-15 12:40

Sality病毒逆向分析

本帖最后由 晨雾 于 2016-9-15 13:17 编辑

作者:晨雾                                                         报告更新日期:2016-9-14               
样本类型:感染型病毒                                             样本文件大小:416KB释放文件大小:348KB样本文件MD5 校验值:e100c2c3f93cabf695256362e7de4443                           样本文件SHA1 校验值:b8b6dbf8974f55557715ce160cb89717c9d53d63                           壳信息:FSG v1.10 (PEID查壳结果)简介:
此病毒属于Sality病毒变种的一员,运行后会在Temp文件夹下释放子程序,
同时会禁用UAC,注册表,任务管理器等,并且会通过共享文件来感染网路主机...
文件系统变化
在Temp目录下创建同名子程序,虽然子程序同母程序名称相同但是大小不一样,原文件416KB,
子文件大小348KB,同时还会在windows目录下添加系统配置项(此项目前还不理解是什么作用)。



注册表变化
通过修改注册表键值,该病毒禁用了任务管理器、册表编辑器、UAC和windows更新,
同时把自身添加到防火墙白名单。

   

详细分析
以上是病毒运行后的效果,可以看出该病毒为了自身能够长期存在于操作系统中做了
大量的准备,接下来详细分析病毒的行为,包括脱壳前后对比分析等。首先对病毒母体
查壳会发现是FSG壳,心中一阵窃喜,以为捡到软柿子可以捏一下,实际还是证明
我too young!,预知后事,接下来请看...

好!脱壳开始,直接用ESP定律迅速找到OEP,此处简单不详细叙述
(如有朋友对ESP定律脱壳不熟悉请看论坛相关教程,推荐ximo脱壳基础教程),
可以看到OEP处安装SHE和调用GetVersion这种很明显的VC++入口特征。

用LordPE dump内存(注意,这里用OD自带插件dump内存会出错,大家可以试一试),

可以看到似乎已经脱壳成功,PEID已经识别为VC++编译器,但是双击运行没有任何反应,
估计是没有修复IAT,于是修复IAT,利用import工具AutoSearch功能扫描IAT,然后点击
ShowInvalid可以看到有两个API没有正确的地址,这里不管它,直接右键Cut thunks,
然后修复刚才dump的文件dumped.exe,完了会自动生成dumped_.exe文件。现在运行dumped_.exe文件,发现之前的许多的注册表设置操作都不见了,而只留下了一条

这里猜想可能是IAT修复时,剪掉的那两个API出了问题,于是拿脱壳前后IAT表作对比
   通过对比发现,在脱壳之后的IAT中原来的CreateFile和GetProcAddress这两个API不见了,
所以在脱壳后运行不完整,注册表的功能没有实现。现在用OD来跟一下看原来CreateFile这个
位置也就是现在459F5A这里到底什么情况,在459F5A处下硬件访问断点,断下之后可以看到
该函数出只调用了一个子函数459E15然后再还原原来的CreateFile。
再来看看459E15函数情况,可以看到它在验证母体程序存在之后就复制母体文件到temp目录,
然后直接执行母体程序


好的,到这里由CreateFile变成的459F5A算是分析完毕,总结流程就是 调用子程序复制母体
程序到Temp目录并执行母体程序,然后还原CreateFile,整个流程不算复杂。OK,再回到之前
所说的两个不见的另外一个API-GetProcAddress(458E4C处),分析流程和上面一样如法炮制,
这里不再赘述,流程为先还原GetProcAddress,然后调用了几次上面分析的子函数459E15来创建
Temp文件夹下子程序,最后执行病毒程序。
脱壳后的程序反编译分析
由于最终没能完全脱壳,导致部分功能受损,主要是使设置注册表部分功能丢失,先看看整个病毒程序流程如下
不得不说IDA的反编译插件很好用,不过内部函数调用流程还是很长,我大概分析了部分函数,
并且做好的注释,如下所示,由于现在已经很晚了,脑子发晕,就不在继续分析解密的字符串了
从一个子函数可以看到该病毒已经比较老了,会判断当前系统是否XP系统,再决定以何种方式执行程序



小结:
写到这里,总体流程已经明朗,该病毒首先通过设置注册表对自身做大量的保护工作,
然后根据不同系统版本隐藏运行,具有较强的生存能力和隐藏性,因后面经过查询发现此病毒与Sality病毒
特征非常相似,姑且认为它们来自同一体系。由于本小白功力尚浅,此病毒已经断断续续花了几天时间,
然而最终还是没能完整脱壳,只待功力精进之时再与之搏杀,期间网友hown给予多次帮助,这里对他表示感谢,
OK最后会附件相关样本和分析IDB文件,有兴趣的朋友如果能完整脱壳,请一定不吝赐教,帮助我进步,这里先行谢过!
样本百度网盘链接   https://pan.baidu.com/s/1o80ahT4    密码: pmpv      

冰绿茶 发表于 2016-9-15 13:08

真不错,感谢楼主分享经验                                                                                                      

晨雾 发表于 2016-9-15 13:14

冰绿茶 发表于 2016-9-15 13:08
真不错,感谢楼主分享经验                                                                           ...

见笑了,第一次在吾爱发帖,格式都调了半天{:1_925:}

louxh 发表于 2016-9-15 21:36

喜欢这种详细分析的

晨雾 发表于 2016-9-15 21:58

louxh 发表于 2016-9-15 21:36
喜欢这种详细分析的

多谢支持,共同学习

Hmily 发表于 2016-9-18 18:05

Sality好像是多态的,难度应该比较大,我看了下文章,fsg那修复iat不能自动获取,要收到填写iat的大小,这个是要注意的,剪切那应该没有问题。

A-zhu 发表于 2016-9-18 22:50

支持。。

tzqq7961 发表于 2016-9-19 20:16

感觉以前见过的样子。。。能看出来写程序的人挺用心的。。。近年出现的代码里好像都没有管自动更新的部分了

remtf 发表于 2016-9-20 20:55

66666666666

xiaodouble 发表于 2016-9-21 06:35

看一看 瞧一瞧
页: [1] 2 3
查看完整版本: Sality病毒逆向分析