首页
论坛
专栏
课程

[病毒木马] [原创]一次简单的病毒分析

2018-3-2 22:22 2423

[病毒木马] [原创]一次简单的病毒分析

2018-3-2 22:22
2423

1.小白第一次发帖,有什么做的说的不对的地方请大家多多指教

2.希望能和大家在看雪这个美好的地方一起学习,一起进步。

3.上传的时候,可能一部分图片没上传上去,所有图片,我会用附件的形式上传。

分析如下:

 一:目录
* 1.样本信息
* 2.行为分析
* 3.样本分析
二:样本信息
* 1.样本名称:Lab17-3【来自恶意代码实战分析】
* 1.md5:7a2e485d1bea00ee5907e4cc02cb2552
* 3.壳:无壳
* 4.编写语言:Viusal C++ ver 5.0/6.0
三:行为分析
* 1.程序利用x86漏洞检测是否处于虚拟机下
* 2.检查进程是否有vmware
* 3.检查网络适配器mac是否有vmware公司特有的mac前三个值。
* 4.释放资源文件,释放入进程空间,并解密,形成PE文件
* 5.进行进程替换技术,实现恶意代码隐藏
* 6.释放的代码先创建文件,然后记录用户按键信息,并存储。
四:分析过程
* 1.经过PEID查壳,没有加壳,是VC编译而成。

* 2.IDA查看汇编代码,首先在40199A处调用函数,经过条件跳转发现有一个分支可能会导致程序退出,进入该函数查看。

* 3.发现一个in指令,前面有特殊的字符串(VM,VMXH),这个是利用虚拟化x86漏洞进行的反虚拟机技术。分析流程必须让程序跳转,才能避开这个反虚拟机技术。为此,我们将jz这个跳转打补丁为jmp。

* 4.在此处,程序将一个注册表值传入函数,这个注册表存储的是关于驱动设备的信息。


* 5.我们跟进去看看,函数首先利用RegQueryInfoKey遍历这个注册表寻找上述的注册表路径,然后调调用RegEnumKeyEx函数打开该注册表下的每个子项。将特征值vmware传入函数 sub_4010B0,用来寻找是否存在vmware字符串的子项的值。


* 6.我们跟入 sub_4010B0查看,发现和我们猜测一致,程序将注册表值前5个字符串和vmware比较。

* 7.发现条用GetProcAddress函数获取函数地址,在该处做交叉引用,发现两处调用信息,都是在函数401670处,


* 8.在401670内部,查看msdn,这个函数是获取网络适配器信息的函数,关键的一点是函数有个参数是指向缓冲区的指令,这个缓冲区用来接收获取的适配器信息。(1)初始化数组,用于后续的比较。(2)第一次调用是用来接收缓冲区大小的,以便分配缓冲区空间,(3)第二次调用是为了获取网络适配器信息。先将已知的数据结构格式化,插入IP_ADAPTER_INFO得到格式化后的信息,发现函数先用type和6H及71H比较,查看msdn知道,这两个值分别是无限适配器和以太网络适配器。然后用他和前面的初始化的数组比较进行每三个一次的比较。(4)当一个数据比较完成后,程序跳转到Loc_4017D7进行下组数据的比较,(5)当这一轮所有数据比较完成后,跳转到loc_401797处进行下个适配器的比较。(6)最最关键的比较的数组是什么??里面的数据是vm所用的特征MAC地址。(7)在避过反虚拟机技术后,函数加载资源文件,(8)然后调用401340对刚刚加载到内存的资源文件进行异或41H解密。









* 9.进入401670,发现这个函数先获取了系统目录,在链接传入的参数svchost,目的是为了隐藏宿主文件。

* 10.进入401400函数内部,首先函数调用了 sub_401130,跟进去,发现函数显示拍摄了进程的快照,然后调用了Process32First和Process32Next,进行遍历指定的进程。计算Hash值与vmware的哈希值是否相等,相等就是存在vmware这个进程。然后使用进程替换技术,实现恶意代码(资源文件)的隐藏.

   

* 11.程序在401412处引发的非法地址访问异常不知道是为了什么?nop掉,希望大佬能讲一下!

* 12.我们利用工具来获取加载的文件,利用winhex修改字节,因为数据异或加密41h

* 13.对资源文件反汇编,发现这个程序过程很简单,第一寻找一个窗口,然后设置一个键盘的钩子。通过对钩子函数的第二个参数反汇编,发现程序先创建一个文件,然后在我们的按键信息在哪个日志文件中存储。




[公告][征集寄语] 看雪20周年年会 | 感恩有你,一路同行

最后于 2018-3-2 22:24 被findreamwang编辑 ,原因:
上传的附件:
最新回复 (2)
hkwind 2018-3-7 17:52
2
0
快速翻了下代码,没有细看,你的问题关键点在00401670处,这里通过拿iphlpapi.GetAdaptersInfo  的信息来判断是否在虚拟机,如果在虚拟机就不解密资源里面的东西,由于这里你强行跳过去了,所以没有让程序解密资源,最后返回值是0,而不是解密代码后的地址,所以在00401412处会异常,空地址。只需要让0040172A处让他跳过去就行,这样的地方有几个,随便改一个跳过去就绕过了Adapter检测,后面就能正常解密资源在返回的时候拿到资源的地址:)
Editor 2018-3-15 14:31
3
0
游客
登录 | 注册 方可回帖
返回