第26章 PE Tools
本文最后更新于:2022年5月19日 晚上
第26章 PE Tools
本章将讲解一款名称为PE Tools的工具,它是一款功能强大的PE文件编辑工具,具有进程内存转储、PE文件头编辑、PE重建等丰富多样的功能,并且支持插件,带有插件编写示例,用户可以自己开发需要的插件。
26.1 PE Tools
网站:http://petools.org.ru
下载路径:http://petools.org.ru/updates/pt_update_08_rc7.zip (网站已经关闭)
从PE Tools网站可以推测岀,其制作者为俄罗斯人。运行PE Tools工具,其初始画面如图26-2所示,从其中显示的“REVERSE ENGINEER’S SWISS ARMY KNIFE”(逆向工程师的瑞士军刀)语句可以感受到,它的制作者是多么为之自豪。
PE Tools工具可以获取系统中正在运行的所有进程的列表,并将之显示在主窗口中,如图26-3所示。
我使用PE Tools的主要目的是利用它的进程内存转储功能,有时修改PE文件头时也会用到。下面简单介绍一下它的主要功能及使用方法。
26.1.1进程内存转储
代码逆向分析中经常用到“转储”(Dump) —词,意为“将内存中的内容转存到文件”。这种转储技术主要用来查看正在运行的进程内存中的内容。文件是运行时解压缩文件时,其只有在内存中才以解压缩形态存在,此时借助转储技术可以轻松查看与源文件类似的代码与数据。
- 使用PE保护器时,文件在内存中仍处于压缩与加密状态,即便应用内存转储技术也往往无法准> 确把握文件内容。并且常常因为使用Anti-Dump (反转储)技术而给转储带来很大困难。
- 在调试器中将正在运行的进程附加进来后,能够直接准确查看进程内存中的内容。而使用PETools的转储功能只是因为它比使用调试器更加容易、方便,特别是查看运行时压缩程序时,通过> 转储功能可以更快速、更简单地查看内存中的字符串等。
从图26-3中可以看到,程序主窗口分为上下两部分,上半部分显示的是正在运行的进程,下半部分显示的是当前所选进程中加载的DLL模块。转储进程的可执行文件映像时,先在上半窗口中选中相应进程,然后单击鼠标右键,弹出快捷菜单(参考图26-4)。
为了更方便地转储,PE Tools为用户提供了如下3个转储选项。
Dump Full (完整转储)
使用该选项时,PE Tools会检测进程的PE文件头,并从ImageBase地址开始转储SizeOflmage大小的区域(该区域即是PE文件被加载到内存后的映像大小)。
运行普通PE文件时,其加载到内存中的形态即为PE映像,经常用来与PE文件区分。代码逆向分析人员常常使用这个术语,请务必牢记。
Dump Partial (部分转储)
该功能用来从相应进程内存的指定地址开始转储指定大小的部分,转储起始地址与大小在如
图26-5所示的窗口中设置。
Dump Region (区域转储)
进程内存(用户区域)中所有分配区域都被标识为某种状态,区域转储功能用于转储状态(State )标识为COMMIT的内存区域(参考图26-6 )。
PE Tools工具在进程内存转储方面大名鼎鼎,因为它在进程转储操作时能有效绕开反转储技术,获得非常好的转储效果。依我的个人经验,使用其他转储工具操作失败时,使用PE Tools往往能够出色完成转储。
26.1.2 PE编辑器
直接手动修改PE文件时,需要修改PE文件头,此时使用PE Tools的PE编辑器功能会非常方便。使用时拖动目标PE文件,或在工具栏中选择Tools-PE Editor即可。
从图26-7可以看出,PE编辑器可以列出PE文件头的各种信息,借此可以对其进行详细修改。修改PE文件时,我有时会使用Hex Editor或PE Tools (或者其他PE相关工具)。
26.2小结
本章主要讲解了有关PE Tools工具的内容,它带有强大的进程内存转储功能,及PE文件头修改功能。虽然这些功能在OllyDbg与Hex Editor中也有,但是PE Tools是一款专用的PE编辑工具,它的这些功能使用起来更加方便。学会灵活运用这些有用的工具对代码逆向分析是十分有帮助的。
PE Tools工具的其他功能不太常用,使用方法也不很直观,甚至还有些Bug, 感兴趣的朋友可以自学。
OllyDbg也支持插件,为它设置特定插件(如: OllyDump)也可以进行内存转储。
中场休息一代码逆向分析的乐趣
“光催不煮,生米哪能变熟饭。”
上面这句话摘自尹五荣的随笔《削棒槌的老人》,大致的含义是:只有经历了必经的过程,才能获得预期的结果。
想学好代码逆向分析技术,要学的内容非常多,需要投入大量的时间与精力。在这一过程中应当始终保持平和的心态,切忌急躁。急躁容易让人烦躁不安,让人无法面对困难、忍受失败。在学习代码逆向技术的过程中,无时无刻不碰(自己无法预料的)“壁”,要把这些“墙壁”当作挑战,在不断战胜它们的过程中品尝成功的喜悦。我认为这恰恰就是学习代码逆向分析技术的乐趣所在。
不尽如人意,也不必有压力。
代码逆向分析技术本身就‘方尽如人意”。
下定决心,平复心绪,一点一点,搜集信息。
直到成功,不断努力。
头疼了,就稍事休息。
重要的是,不要放弃,坚持到底。
就像拼图游戏,
万事总有解决之理。
投入时间精力,终能成功学习。突然觉得,所有工程技术的本质属性都是一样的。你投入的时间越多、越努力,这方面的实力就越强,世界万物皆同此理。
“投入的时间与精力都会积累成实力。”
我认为这就是学习代码逆向分析技术的乐趣所在,各位又是怎么想的呢?
参考
《逆向工程核心原理》 第26章