吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6800|回复: 17
收起左侧

[PC样本分析] 内存PE dump 后反编译的通用技巧

  [复制链接]
老坚果 发表于 2024-12-24 10:21
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 老坚果 于 2024-12-24 10:24 编辑

PE dump 通用技巧

恶意代码分析中,经常会出现在内存中释放PE文件的操作。内存中的PE文件,通常被称作展开后的文件,dump下来的内存文件通常是无法被直接反编译的,这篇文章将简述一个通用的dump技巧,使内存中dump下来的PE文件被正常反编译,方便你的静态分析。

关键字段

Virtual addressRAW addressImagebaseAddressOfEntryPoint

涉及知识

virtual address 字段中的值,代表PE文件在内存中的页长度;RAW address 字段中的值,这代表PE文件在磁盘中的页长度;Imagebase 字段中的值,代表PE文件中的偏移地址从哪里开始计算;AddressOfEntryPoint 字段中的值,代表进程从哪里进入执行代码。

方法

  1. 把dump下来的PE文件,放进PE解析工具中如CFF Explore,或放入二进制编辑器中。
  2. 在所有节区中,将RAW address字段中的值,替换为Virtual address字段中的值。
  3. Imagebase字段中的值,替换为内存中的初始址。
  4. AddressOfEntryPoint 字段中的值替换为 调试过程中跳进这个进程的地址。

示例

以一个恶意代码为例,进行演示。

获取修改时需要的——各字段的值

首先在动态调试过程中,获取到内存中的PE文件。如下图中:

  • 标号 1 的红框表示通过汇编代码  call eax 的方式跳转进释放的PE文件;
  • 标号 2 的红框则是释放在内存中的PE文件数据,通过它的文件头 MZ 可以判断它的基地址Imagebase 字段的值为 0x006E0000
  • 标号 3 的红框,代表内存中PE文件的入口地址AddressOfEntryPoint 字段 的值为 0x006E1426

image-20241224084946525

修改操作

接下来将内存中的PE文件保存下来,此时还无法正常进行反编译,需要进行一些调整,将所有节区virtual address 字段 的值复制粘贴给 Raw address 字段  。将 rax 寄存器中的值赋值给AddressOfEntryPoint 字段 。本示例修改使用的工具为 CFF Explore

修改前

所有涉及的字段,在下图中用红框标记。

image-20241224091127647

image-20241224092931507

修改后

image-20241224094909771

image-20241224095002031

反编译

修改各字段后,反编译正常,各表正常解析,函数名也正常使用。整个dump和调整的过程就此结束。

image-20241224095718806

免费评分

参与人数 10威望 +2 吾爱币 +107 热心值 +10 收起 理由
djkzhengjun + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Issacclark1 + 1 谢谢@Thanks!
beatone + 1 热心回复!
冥界3大法王 + 2 + 1 用心讨论,共获提升!
evea + 1 + 1 谢谢@Thanks!
assa + 1 + 1 谢谢@Thanks!
MinuxCyber + 1 + 1 热心回复!
freesoft + 1 + 1 谢谢@Thanks!
MJ_B + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2024-12-24 17:27
老坚果 发表于 2024-12-24 15:30
我确实不知道您说的这个怎么实现,主要是不知道怎么判断pe的初始化加载代码在哪里,不知道您的方法是否能 ...

我说的意思是,它内存加载pe的时候,需要先把原始的pe拿出来,一般原始pe都是加密保存,申请内存进行解密释放,然后进行重定位等相关操作,我理解你的操作是重定位之后的pe文件进行dump修复,我描述的过程是dump原始未重定位的操作,不知道我描述是否清楚。
 楼主| 老坚果 发表于 2024-12-24 15:30
Hmily 发表于 2024-12-24 15:06
我一般在pe解密后还没初始化加载前给它区段dump下来,然后用exeinfope直接提取pe,相比较而言操作会简单一 ...

我确实不知道您说的这个怎么实现,主要是不知道怎么判断pe的初始化加载代码在哪里,不知道您的方法是否能够让它进行动态调试。
拿来演示的样本是从资源区中拉出来数据,解密后跳进去运行的,不知道是不是符合您说的类型。
我在分析的时候没有找到,或者是没有理解到方便简单的提取办法,最后自己摸索出来的方法,想着大概很多人都跟我一样被卡着,所以写了篇文章发出来。

点评

我说的意思是,它内存加载pe的时候,需要先把原始的pe拿出来,一般原始pe都是加密保存,申请内存进行解密释放,然后进行重定位等相关操作,我理解你的操作是重定位之后的pe文件进行dump修复,我描述的过程是dump原始  详情 回复 发表于 2024-12-24 17:27
Hmily 发表于 2024-12-24 15:06
我一般在pe解密后还没初始化加载前给它区段dump下来,然后用exeinfope直接提取pe,相比较而言操作会简单一些。
 楼主| 老坚果 发表于 2024-12-24 15:40
Hmily 发表于 2024-12-24 15:06
我一般在pe解密后还没初始化加载前给它区段dump下来,然后用exeinfope直接提取pe,相比较而言操作会简单一 ...

这篇文章不算好吗?

点评

大佬本贴重新改判为”优秀“。  详情 回复 发表于 2024-12-31 12:15
当然算呀,您觉得是应该奖励更多吗?  详情 回复 发表于 2024-12-24 17:25
Hmily 发表于 2024-12-24 17:25
老坚果 发表于 2024-12-24 15:40
这篇文章不算好吗?

当然算呀,您觉得是应该奖励更多吗?
 楼主| 老坚果 发表于 2024-12-25 08:38
Hmily 发表于 2024-12-24 17:27
我说的意思是,它内存加载pe的时候,需要先把原始的pe拿出来,一般原始pe都是加密保存,申请内存进行解密 ...

明白了,感谢解惑
Xuweixiang 发表于 2024-12-25 12:51

感谢楼主,学习了
冥界3大法王 发表于 2024-12-25 18:14
@老坚果
样本文件来一个
liehuoa333 发表于 2024-12-25 22:12

感谢楼主,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-6-9 07:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表