前言
这是一款比较简单的木马,通过分析此样本可以训练分析思路、分析逻辑,并且加强IDA的使用.本人安全公司实习生,刚入圈几个月,所以文章中会有说的不对的地方,欢迎指出.择优吸收.
样本信息:
File: virus.exe
SHA1: 71b7322291b5a89d227b5cfe82106fce51036da2
SHA256: b48ebc54b9717bbe3a9de3fd5744c8ad1fdd3a26c7b47f6170b98f8abde9a744
LsHashS: 1155293a7b9091923b1d1511a8d9c17589bb1b55b4613bd55313ba7b3594b899
MD5: 00877507f0b812599868a647330d0630
分析环境 Windows7_Service Pack 1
分析工具 OD IDA 火绒剑 PEID
0x1.初步观察了解行为
拖入PEID查一下有没有壳子

yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h) [Overlay] *
不了解,只知道有个加密壳
右键查看文件属性

属性为空,至少确定了不是个正规公司开发的程序,直接上火绒剑吧
过滤FILE_open REG_openkey REG_getval FILE_read
行为(个人习惯,因为这几个行为基本没卵用)

不得不说,火绒剑
真是方便,程序行为十分清晰了

样本启动了svchost.exe
后直接结束了
而下方的行为显然不是svchost.exe
应该有的,目测会有一段注入ShellCode的代码
到这里,这个程序基本上可以报毒了 : 静默运行+启动svchost.exe执行敏感代码+无任何文件描述信息
我们接下来要对这个样本进行稍微详细的分析,看看他具体干了什么
0x2.第一层代码分析
将样本拖入IDA32,分别查看字符串+导入表


发现字符串有很多URL
还有请求头信息,
我们随便选一个:f52K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2G2M7Y4m8Z5k6h3c8Q4x3X3g2J5N6g2)9J5c8Y4y4@1j5i4c8A6j5#2)9J5k6i4m8Z5M7l9`.`.
去VT查一下

很好,非常不正常!我们又可以为他扣掉几分(所以到现在还是在做黑白鉴定的工作 --_-- )
该步入正题了,上面查看文件属性,文件大小不是很大,字符串和导入表信息也不多,因此我们决定从入口点开始进行分析,在IDA中找到入口点按下F5分析伪源码 (个人比较喜欢F5,但是这是不好的,遇到强度高的样本,F5反而会增加你的工作量)

可以看到上来就开始开辟内存,拷贝0x00401000
处的数据,我们去看看401000
存了些啥

一段函数代码+一堆未知数据,暂时记住这个地方,后面可能会用到
简单起个名后,继续分析,我们看到memcpy下面的sub_407AC4
紧接着就对这块内存进行了操作,跟进去看看函数内部情况

没有再调用函数,反而进行了很多数据的运算,而一般这种情况不是加密就是解密,结合上面的行为分析结果,加上调用407AC4
这个函数后并没有接收这个函数的返回值,推测此处对ShellCode进行了解密一类的操作
回到入口函数,观察下一行代码sub_407B02(pAlloc_, 0x490, LoadLibraryA, GetProcAddress);
参数有很明显的特点:
- 一段ShellCode的首地址
- 一个未知的常量
- 两个经典远线程注入需要用到的函数地址
进入函数内部,为参数命名后,看一下代码

哦吼,又是没有函数调用,全部在对数据进行操作,两层循环嵌套,循环内调用了GetProcAddress和LoadLibrary
,根据传入的参数401000 490
我们去看看401490
都存了些啥
定位到401490
按D
让其以字节显示,观察附近的数据,有了很明显的发现

下面是一个个函数名字符串,我们按A Alt+A
把这些数据以字符串进行展示,观察结果


根据401490
附近的字符串,我们最终可以推测出sub_407B02
处的函数用于加载函数,模拟导入表功能,将其命名FixImport
回到主函数继续分析:return ((int (__stdcall *)(_DWORD))(pAlloc_0 + 0xC0))(sub_407992);
可以看到这行代码用于执行4010C0
出的函数,传入参数为407992
,一个函数地址
我们之前记得401000
向下是由一段数据+一段函数代码组成
而这行代码以函数指针的形式调用了4010C0
的代码,却不是直接写成函数
由此我们验证了上文对401000
处数据为ShellCode的猜想,接下来我们则需要知道4010C0
干了什么
0x3.第二层代码提取
进入4010C0
,在4010C0
处按P
,使IDA识别为函数
按F5,解析为伪源码,发现失败,提示call的地址找不到?这是怎么回事?
还记得上文中有两个函数分别对401000
附近的数据进行了解密+修复导入函数一类的操作吗?
没错,这段代码只有在401000
段被正确修复后才能执行,至此,我们需要使用OD进行动态调试来dump出401000处的数据
打开OD,拖入样本,在地址0040798E
处下断点 (4010C0处为函数头部,在40798E处调用了这个函数)
观察OD各个窗口的值

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-10-30 18:31
被SSH山水画编辑
,原因: