GandCrab2.0 脱壳笔记分析记录
有人在2018年的时候就分析过了恶意样本分析,相关资料可以查看参考部分。由于里边有很多可以学习和总结的脱壳技术,因此重新分析这个样本,这篇文章暂时不做加密和勒索实际功能分析,如果要看分析样本形成勒索的过程以及相关分析报告,可以直接跳到参考部分,这篇文章主要关注的是脱壳相关的一些技术细节的分析,由于文章是我个人的一些分析和总结,因此会有一些不足,比较趋向于像我这样刚接触恶意软件分析,由于很多样本在分析前需要脱壳之后才能看到核心功能,因此这里重点关注脱壳过程,主要内容如下
-
解密并dump出shellCode
-
解密并dump出PE1
-
解密并dump出encrpt.dll
解密并dump出shellCode
使用IDA打开病毒母体,来到入口函数,经过分析后程序会解密出资源文件的内容
调用VirtualProtect
函数修改shell_code
的属性为可读写,这里的VirtualPtotect
函数是通过动态获取的函数指针
之后调用函数sub_401014
对shell_code
解密并调用
为了能进一步分析shell_code
,需要在动态调试阶段dump
下来,因此这里使用x32dbg
调试母体病毒,在程序调用shell_code
的时候,单步进入后dump
下来,如下是来到执行调用shell_code
的位置
此时选择单步进入,来到shell_code
的入口处,如下
此时将内存dump
下,步骤为在内存窗口点击右键-->选择 在内存布局中转到
之后跳转到内存布局,之后选中对应的内存位置一般使用这个方式跳转到内存布局文件,默认会选择指定的内存
,然后右键保存为文件,之后命名为shell_code.bin
,如下
使用ida分析shell_code
的功能。
ShellCode功能分析
现在主要对shellcode的功能分析,这部分主要会完成如下功能
- 解密PE1文件
- 动态填充encrypt.dll文件
- 反射调用encrypt.dll
解密并dump出PE1
在执行解密PE1这个文件之前,需要弄清楚几个问题
[ebp-0A0h]
保存的内容是什么- 动态获取
kernel32.dll
函数是如何保存的 - 解密的PE1文件什么时候选择dump
初始化数据和导入APIs
[ebp-0A0h]
保存的内容是什么
在动态调试阶段注意如下指令
mov eax, [ebp-8Ch]
mov