使用vmpdump对未完全保护的vmp样本进行处理——以Night Sky为例

技巧性文章,便于处理一些非强加密vmp的样本,便于后续继续分析

查壳可以看到是vmp的壳,根据网上其他的文章可以确定是3.x版本貌似是3.5。根据其他文章介绍虽然加密,但是貌似只对IAT进行了vm,所以可以用该工具模拟出IAT。

image.png
使用沙箱定位到代码段调用的API,这里选择MoveFileEx。因为当勒索软件涉及到对文件操作时证明被vmp保护的代码段已经被解密加载到.txt节中,此时是比较好的解密点。

Automated Malware Analysis Report for update.exe - Generated by Joe Sandbox


运行到OEP后选择MoveFileExW API

来到API函数入口设置硬件端点,硬件断点是为了防止软件断点会影响壳的执行流程

执行后中断在我们设置的硬件端点下。

返回到用户态代码,可以看到call xxxxx int3。这是被vmp3.x保护的导入函数虚拟化特征,该函数会进行一系列运算,最后解析出API并调用

根据其他报告提示该样本的OPE特征为微软VS特征。接下来随意用VS编译一个helloword的64位程序并用IDA观察入口特征

首先找到export选项卡,来到OEP处

在VS编译器中会生成一段安全cookie的hash,该hash值不变可以作为特征串查找OEP附近的代码

回到中断的内存中,点击内存布局中查看

可以看到已经解密代码到.text节中,而不是存在下面的附加节中。

我们只需要在.text节中搜索cookie特征值即可,邮件内存窗口中转到

右键-->特征搜索

搜索后只有一处特征值,该值就是VS编译器OEP附近的设置安全cookie处。如果有多个该技巧可能并不适用

对比后为VS编译器设置安全Cookie的函数

删除其他断点,在安全cookie函数入口处设置硬件断点

重新运行程序中断在函数序言中,此时与真正的OEP很接近了

查看调用栈跟随到调用地址

可以看到来到一块位置代码内容中

内存布局转到,可以发现已经不在.text中,证明OEP已经被vmp保护了。所以我们不能直接dump出干净的OEP,可能需要后续手动修复

使用vmpdump对解密后的程序进行dump
VMPDump.exe 8852 "" -disable-reloc
注意,dump进程名不能过长,否则会失败

image.png

接下来将dump程序拖入IDA,可以看到此时入口点仍为VMP壳节代码中,需要我们自己手动搜索特征修复

搜索cookie的hash值

选择text代码节,这是我们dump出来的解密代码部分

将函数名和函数类型改为初始化cookie

同理,我们搜索__scrt_common_main_seh函数的特征,由于该函数没有常量,我们只能取函数部分字节码做特征搜索

同理需要继续向下定位到main函数

在重命名完成后,需要我们手动修改入口点的OEP。对比正常的VS编译程序修改入口点代码

修改后如下

接下来需要计算跳转的相对偏移,call指令的下一条指令地址-安全cookie初始化函数的地址。又因为vmp壳的代码节在.text的下方,所以相对跳转的值应该取负值,这样就可以从.2fU1节向上跳转到.text节中

计算出该值还需要加1字节

修改相对跳转,

回到入口点可以发现修改成功

同理可以修改main_seh

最后patch程序即可

image.png
重新调试即可

image.png

脱壳后的main函数

  • 发表于 2025-01-07 10:00:02
  • 阅读 ( 1838 )
  • 分类:二进制

0 条评论

请先 登录 后评论
马喽打金服
马喽打金服

3 篇文章

站长统计