ScratchABit 是一个交互式增量反汇编器,具备数据流/控制流分析功能。ScratchABit 致力于支持开源逆向工程社区的努力(即通过逆向工程为未得到厂商适当支持的硬件生成开源驱动/固件,以实现硬件与软件的互操作性,并用于安全研究)。
ScratchABit 支持社区中广为人知的 IDAPython API,用于编写反汇编/扩展模块。
ScratchABit 仍在开发中,功能按需添加,欢迎贡献。
ScratchABit 根据 GNU 通用公共许可证 v3 (GPLv3) 的条款发布。
不应使用晦涩难懂的语言编写。这些语言包括过于底层、允许访问未初始化变量、不区分变量与函数/过程、数组索引从任意数字开始等。ScratchABit 使用 Python 编写(现代版本,Python3),以提升您的使用体验和代码可维护性。
用户界面框架应提供必要级别的用户交互,避免增加依赖、臃肿、问题以及框架版本间的不兼容性。ScratchABit 目前使用基于 ANSI/VT100 终端转义序列的简单全屏文本用户界面(是的,甚至 curses 库也被认为过于臃肿而不强加给用户)。
应利用易于使用的文本格式来存储"数据库",便于复用、工具编写以及存储在版本控制系统中。
要使用 ScratchABit,你需要安装 Python3(已在 Python 3.3 至 3.7 版本上测试),并拥有 VT100(最低要求)或 XTerm(推荐)终端或终端模拟器(任何 Unix 系统都应兼容,如 Linux/BSD 等,详见下面的 FAQ)。
克隆代码:
git clone --recursive https://github.com/pfalcon/ScratchABit
如果你没有使用 --recursive 克隆代码,请在 ScratchABit 目录中运行 git submodule update --init。
ScratchABit 现在内置了基于 Capstone Engine 的 CPU 插件,可访问多种 CPU 架构。要使用它,需要安装最新的 Capstone Python 绑定模块(优先于操作系统发行版通常过时的软件包)。最简单的安装方式是安装到 Python 用户包目录:
pip3 install --no-cache-dir --user capstone
另一种选择是安装到 ScratchABit 目录内的 Python 虚拟环境中:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
每当打开新的终端会话使用 ScratchABit 时,再次运行 source .venv/bin/activate 命令以激活虚拟环境。
如果上述方法均无效,可以尝试系统范围安装 capstone 包(不推荐):
sudo pip3 install --system capstone
如果你想反汇编一个自描述可执行格式(如 ELF)的文件,直接将其作为参数传递给 ScratchABit.py。仓库中包含多个针对不同架构的 example-*.elf 文件供快速入门。例如,尝试 x86 32 位版本:
python3 ScratchABit.py example-x86_32.elf
或者,如果你想反汇编一个原始二进制文件,则需要创建一个 .def(定义)文件,以指定代码的内存区域、二进制文件的加载地址等。(注意:.def 文件也可能对 .elf 等文件有用。)仓库中包含一个简单的 x86_64 原始二进制代码,以及相应的 example-x86_64.def 文件(查看内部以了解可用选项的描述):
python3 ScratchABit.py example-x86_64.def
按 F9 访问菜单(在 XTerm 兼容终端中鼠标也可用)。按 F1 获取有关按键绑定的帮助(大多数操作也可通过菜单访问)。ScratchABit 的工作流程与其他交互式反汇编器类似(可能需要一些先前经验或背景阅读)。
IDAPython 处理器插件可以从 Python 模块路径的任何位置加载。或者,你可以将插件 .py 文件符号链接或复制到 plugins/cpu/ 子目录中。
插件可用后,基于 example-x86_64.def 创建一个新的定义文件,在 cpu xxx 行设置插件模块名称(不含 .py 扩展名)。
一个使用外部插件的简单示例,参见此 esp8266.def 文件,该文件与 ida-xtensa2 仓库 中的 xtensa.py 插件配合使用。
问:支持哪些处理器/架构?
答:ScratchABit 本身不支持任何处理器架构,它完全可以通过 IDAPython API 插件重新定向。许多插件可用,编写新插件很容易。为了让用户试用 ScratchABit,发行版中包含了一个使用 Pymsasid 反汇编器的简单 x86 处理器插件。
从 2.0 版本开始,还包含了 Capstone 插件,可访问多种架构,包括 x86、ARM、MIPS、PowerPC、SPARC 等(架构支持基于用户测试逐步启用)。
你可以查看 README for plugins/cpu/ dir 了解与 ScratchABit 一起发布的插件。
问:调试器?
答:ScratchABit 致力于静态分析和轻松支持新的 CPU 架构(只需编写一个新的 CPU 插件——几个小时内即可获得初步结果)。动态分析并非核心功能,目前没有立即实现的计划。不过欢迎提交补丁。
问:反编译器?
答:有一个相关项目,名为 ScratchABlock,用于深度程序分析、转换和反编译。预计随着 ScratchABlock 的成熟,其部分功能将通过插件在 ScratchABit 中可用。
问:我不用 Linux,如何运行 ScratchABit?
答:在你的系统上安装一个模拟器/虚拟机中的 Linux,然后尽情享受吧。
问:必须要有截图?
答:当然:
