首页
社区
课程
招聘
[原创]一款木马释放器的简单分析及IDA的骚操作
发表于: 2020-10-30 18:17 7986

[原创]一款木马释放器的简单分析及IDA的骚操作

2020-10-30 18:17
7986

前言

这是一款比较简单的木马,通过分析此样本可以训练分析思路、分析逻辑,并且加强IDA的使用.本人安全公司实习生,刚入圈几个月,所以文章中会有说的不对的地方,欢迎指出.择优吸收.

样本信息:

File: virus.exe
SHA1: 71b7322291b5a89d227b5cfe82106fce51036da2
SHA256: b48ebc54b9717bbe3a9de3fd5744c8ad1fdd3a26c7b47f6170b98f8abde9a744
LsHashS: 1155293a7b9091923b1d1511a8d9c17589bb1b55b4613bd55313ba7b3594b899
MD5: 00877507f0b812599868a647330d0630
分析环境 Windows7_Service Pack 1
分析工具 OD IDA 火绒剑 PEID

0x1.初步观察了解行为

拖入PEID查一下有没有壳子

 

image-20201030162643091

 

yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h) [Overlay] *

 

不了解,只知道有个加密壳

 

右键查看文件属性

 

image-20201030162957493

 

属性为空,至少确定了不是个正规公司开发的程序,直接上火绒剑吧

 

过滤FILE_open REG_openkey REG_getval FILE_read 行为(个人习惯,因为这几个行为基本没卵用)

 

image-20201030163049022

 

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

 

image-20201030163205846

 

样本启动了svchost.exe后直接结束了

 

而下方的行为显然不是svchost.exe应该有的,目测会有一段注入ShellCode的代码

 

到这里,这个程序基本上可以报毒了 : 静默运行+启动svchost.exe执行敏感代码+无任何文件描述信息

 

我们接下来要对这个样本进行稍微详细的分析,看看他具体干了什么

0x2.第一层代码分析

将样本拖入IDA32,分别查看字符串+导入表

 

image-20201030163843540

 

image-20201030163917123

 

发现字符串有很多URL还有请求头信息,

 

我们随便选一个:f52K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2G2M7Y4m8Z5k6h3c8Q4x3X3g2J5N6g2)9J5c8Y4y4@1j5i4c8A6j5#2)9J5k6i4m8Z5M7l9`.`.

 

去VT查一下

 

image-20201030164054405

 

很好,非常不正常!我们又可以为他扣掉几分(所以到现在还是在做黑白鉴定的工作 --_-- )

 

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

 

image-20201030164457491

 

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

 

image-20201030164604022

 

一段函数代码+一堆未知数据,暂时记住这个地方,后面可能会用到

 

简单起个名后,继续分析,我们看到memcpy下面的sub_407AC4紧接着就对这块内存进行了操作,跟进去看看函数内部情况

 

image-20201030164941108

 

没有再调用函数,反而进行了很多数据的运算,而一般这种情况不是加密就是解密,结合上面的行为分析结果,加上调用407AC4这个函数后并没有接收这个函数的返回值,推测此处对ShellCode进行了解密一类的操作

 

回到入口函数,观察下一行代码sub_407B02(pAlloc_, 0x490, LoadLibraryA, GetProcAddress);

 

参数有很明显的特点:

  • 一段ShellCode的首地址
  • 一个未知的常量
  • 两个经典远线程注入需要用到的函数地址

进入函数内部,为参数命名后,看一下代码

 

image-20201030165842727

 

哦吼,又是没有函数调用,全部在对数据进行操作,两层循环嵌套,循环内调用了GetProcAddress和LoadLibrary,根据传入的参数401000 490我们去看看401490都存了些啥

 

定位到401490D让其以字节显示,观察附近的数据,有了很明显的发现

 

image-20201030170634441

 

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

 

image-20201030171047096

 

image-20201030171054696

 

根据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各个窗口的值

 

image-20201030172633316

 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-10-30 18:31 被SSH山水画编辑 ,原因:
收藏
免费 6
支持
分享
最新回复 (6)
雪    币: 83
活跃值: (1092)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
很好 还可与i这样写ida脚本呢
2020-10-30 20:13
0
雪    币: 1498
活跃值: (14683)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
3
killpy 很好 还可与i这样写ida脚本呢
谢大佬夸奖
2020-11-4 09:28
0
雪    币: 528
活跃值: (329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
老哥  样本能给一份不    
2020-11-7 12:52
0
雪    币: 1498
活跃值: (14683)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
5
AaIizzwell 老哥 样本能给一份不 [em_13]
用sha1和hash去找吧,公司样本不能直接发出来的
2020-11-7 12:55
0
雪    币: 528
活跃值: (329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哦哦  好的 我用HASH没搜到这个文件  不过还是谢谢啦
2020-11-7 12:57
0
雪    币: 1498
活跃值: (14683)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
7
AaIizzwell 哦哦 好的 我用HASH没搜到这个文件 不过还是谢谢啦[em_67]
要是没搜到那可能是用户个人文件,这个没办法传了,抱歉
2020-11-7 13:05
0
游客
登录 | 注册 方可回帖
返回