问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
使用vmpdump对未完全保护的vmp样本进行处理——以Night Sky为例
技巧性文章,便于处理一些非强加密vmp的样本,便于后续继续分析
查壳可以看到是vmp的壳,根据网上其他的文章可以确定是3.x版本貌似是3.5。根据其他文章介绍虽然加密,但是貌似只对IAT进行了vm,所以可以用该工具模拟出IAT。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-f59609401da02b4b4313b5e5950c7228f49eccea.png) 使用沙箱定位到代码段调用的API,这里选择MoveFileEx。因为当勒索软件涉及到对文件操作时证明被vmp保护的代码段已经被解密加载到.txt节中,此时是比较好的解密点。 [Automated Malware Analysis Report for update.exe - Generated by Joe Sandbox](https://www.joesandbox.com/analysis/548777/0/html) ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-d0bd42b9da20ea03d5175d9b5ff8053f9e244474.png) 运行到OEP后选择MoveFileExW API ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-8fbc17f9c38820f30c9e5e8095d9cff881f4451e.png) 来到API函数入口设置硬件端点,硬件断点是为了防止软件断点会影响壳的执行流程 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-5b82729a00e23a93999eec6e7b41dae4c5e11c52.png) 执行后中断在我们设置的硬件端点下。 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-c0a26adcddca43b2e015da2e346e4ed83c210873.png) 返回到用户态代码,可以看到call xxxxx int3。这是被vmp3.x保护的导入函数虚拟化特征,该函数会进行一系列运算,最后解析出API并调用 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-59548dffad99f5731975a16aa15c8d471a58d02f.png) 根据其他报告提示该样本的OPE特征为微软VS特征。接下来随意用VS编译一个helloword的64位程序并用IDA观察入口特征 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-3b9c97e78765127ea138983a5645ea874f27e80d.png) 首先找到export选项卡,来到OEP处 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-5eed17b067a7c562c8edb1e3c6a922a93a5a02e5.png) 在VS编译器中会生成一段安全cookie的hash,该hash值不变可以作为特征串查找OEP附近的代码 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-2efc4a4e648a60d82626e362e22dd64956b6eae7.png) 回到中断的内存中,点击内存布局中查看 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-e44c0e94b2a89ff29bce6aa754fecd14e1d1a1ad.png) 可以看到已经解密代码到.text节中,而不是存在下面的附加节中。 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-e831252b4f371bf49e035c9ba47c7dba441df2a1.png) 我们只需要在.text节中搜索cookie特征值即可,邮件内存窗口中转到 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-523be3d22a93560f03e1d65b05326c6adf9a965e.png) 右键-->特征搜索 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-2e06a32ad375ebc4a631b82f93ee9c5b2e063464.png) 搜索后只有一处特征值,该值就是VS编译器OEP附近的设置安全cookie处。如果有多个该技巧可能并不适用 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-5075a9457545e4cc3e06ea5d533e710e6333c6c4.png) 对比后为VS编译器设置安全Cookie的函数 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-d8f013ff2d814a307287277a3b788f52598e5489.png) 删除其他断点,在安全cookie函数入口处设置硬件断点 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-3aa3ea044f0fb3fd51b13e013426d877f364dea6.png) 重新运行程序中断在函数序言中,此时与真正的OEP很接近了 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-d87ebe8733601fc758a786ba95ba2ecf1bc38272.png) 查看调用栈跟随到调用地址 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-55fdfbcb2f68cdc6edd6b9dcd887559bcae9696d.png) 可以看到来到一块位置代码内容中 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-ed01b65cb5050c9007e4a0546dd1ba5c6a10fbd5.png) 内存布局转到,可以发现已经不在.text中,证明OEP已经被vmp保护了。所以我们不能直接dump出干净的OEP,可能需要后续手动修复 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-f4cc4eb4670c2b65260b506d7c042fb26bb90791.png) 使用vmpdump对解密后的程序进行dump `VMPDump.exe 8852 "" -disable-reloc` 注意,dump进程名不能过长,否则会失败 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-e87a78ab6efcfc4b5fb056cff089081ac3181bd2.png) 接下来将dump程序拖入IDA,可以看到此时入口点仍为VMP壳节代码中,需要我们自己手动搜索特征修复 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-2c07124d83441bb69801dcf2dff27828b3ca18eb.png) 搜索cookie的hash值 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-c06dba8b747eb0cbc7ceabd7cd06d4027c49c6b8.png) 选择text代码节,这是我们dump出来的解密代码部分 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-cff0ee472f3d6d7b8e59aadd987ae0724ff9d047.png) 将函数名和函数类型改为初始化cookie ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-da67f3a141a85eb65702216965e217205896495c.png) 同理,我们搜索\_\_scrt\_common\_main\_seh函数的特征,由于该函数没有常量,我们只能取函数部分字节码做特征搜索 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-41486084c8bb312b1705a8295e30dc2bf9c9ba91.png) 同理需要继续向下定位到main函数 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-b8177b31657448dff669e5197326c8a25d6cf574.png) 在重命名完成后,需要我们手动修改入口点的OEP。对比正常的VS编译程序修改入口点代码 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-4dcc1039b7279fefddaba49330b184ee8b2a1024.png) 修改后如下 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-18eac8320b267cfea1bb10f7026f058ba49d8583.png) 接下来需要计算跳转的相对偏移,call指令的下一条指令地址-安全cookie初始化函数的地址。又因为vmp壳的代码节在.text的下方,所以相对跳转的值应该取负值,这样就可以从.2fU1节向上跳转到.text节中 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-11a3ad71c295732eccee691a97f048f7e58b7c8c.png) 计算出该值还需要加1字节 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-c83bb70afe4a7c5576f8c085c282cd69c6f5cc67.png) 修改相对跳转, ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-1f67d9a958266eea01a1ac7f8529d60bd3a6b02d.png) 回到入口点可以发现修改成功 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-dc53f53be4761d8a06d765685fd1cc8edf426f8a.png) 同理可以修改main\_seh ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-b0a1e9dac6740038e854b6e6208182f1fc5590ae.png) ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-53df7a1e4bbd994bf77daaa934b86e770ac8753c.png) 最后patch程序即可 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-5951c998fa7b5a0fe53e7848fc19dc45203b5c86.png) 重新调试即可 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-337b10a8aedfc644f1542aebd79e7a160c341bbb.png) 脱壳后的main函数 ![](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-62255e7151b121cfde73648f1b87e6b01227125f.png)
发表于 2025-01-07 10:00:02
阅读 ( 399 )
分类:
二进制
0 推荐
收藏
0 条评论
请先
登录
后评论
马喽打金服
2 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!