65.9K
CodeProject 正在变化。 阅读更多。
Home

ExeScanner

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (66投票s)

2005 年 6 月 7 日

2分钟阅读

viewsIcon

120360

downloadIcon

4355

本文解释了如何枚举可移植可执行文件中的所有对象并对其进行操作。

ExeScanner

引言

受到 Angus Johnson 的 ResourceHacker 的启发,我决定自己做一个。正如名称所暗示的,ExeScanner 可以扫描可执行文件并枚举其资源部分中的所有对象。下一个版本将具有两个主要功能

  1. 可以编译/反编译资源的资源脚本引擎。
  2. 枚举可执行文件的其他部分,除了资源部分。

ExeScanner 做什么?

ExeScanner 允许您查看任何可执行文件中的位图、光标、图标、字符串、对话框、菜单和二进制资源。 除了前 6 个之外的任何其他资源都显示为二进制资源。 每种资源类型都可以导入或导出。 导入功能允许使用外部文件修改可执行文件中的资源,而导出功能允许提取资源并将其另存为文件。 对话框和菜单是导入/导出功能的例外(因为它们需要资源脚本引擎,这将是 ExeScanner 1.1 的一部分)。

ExeScanner 设计概述(类层次结构)

ExeScanner 的设计考虑了项目的未来扩展和通用化。 通过类层次结构,我试图在每个对象中加入对称行为,尽管它们可能非常不同。

有两个基类 PEBasePEResource。 PE 文件中的任何对象都应始终从 PEBase 继承。 如果它是一个资源对象,它应该从 PEResource 继承。 事实上,PEResource 也是从 PEBase 继承的。 这些基类有一些方法和成员,使它的表示和操作标准化,并通过实现多态行为来减少代码。

让我们看看一些类以及它们的作用

  • PortableExecutable - 封装 DOS 和 Windows 标头。 还持有 ResourceSection
  • ResourceSection - 封装 ResourceSectionHeader 并持有 ResourceBranch
  • ResourceBranch - 每个分支代表一个广泛的资源类别,如 BITMAP、ICON、STRING、BINARY 等。还持有 ResourceNode
  • ResourceNode - ResourceNode 可以准确地保存任何类别的一个资源,即,BITMAP 类别中可以有多个位图,因此 ResourceBranch 中有多个 ResourceNode,每个 ResourceNode 都持有 PEResBitmap
  • PEResBitmap - 位图对象。
  • PEResIcon - 图标对象。
  • PEResCursor - 光标对象。
  • PEResString - 字符串对象。
  • PEResMenu - 菜单对象。
  • PEResBinary - 二进制对象。
  • PEResDialog - 对话框对象。

上面提到的七个类封装了显示自身、导入、导出以及在请求时提供属性信息的逻辑。

  • PEFile - 封装对正在扫描的可执行文件的 I/O。 提供通过指定从开头开始的偏移量来直接读取/写入的功能。
  • PEListTree - 这是一个双向链表,用于存储每个 PE 对象,主要用于创建导航树。

希望您喜欢使用该应用程序。 欢迎您提出关于如何改进它的意见/建议。

历史

  • ExeScanner 1.0 - 初始版本。
© . All rights reserved.