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/等,请参阅下面的常见问题解答更多的)。
使用以下命令克隆代码:
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,发行版中包含了一个简单的 x86 处理器插件,并在底层使用了 Pymsasid 反汇编程序。
从2.0版本开始,还包含了Capstone插件,允许访问多种架构,包括x86、ARM、MIPS、PowerPC、SPARC等(根据用户测试逐步启用架构支持)。
您可以在plugins/cpu/
dir 的自述文件中阅读有关与ScratchABit 一起提供的插件的信息。
问:调试器?
答:ScratchABit 致力于静态分析和对新 CPU 架构的轻松支持(只需用 Python 编写一个新的 CPU 插件 - 您可以在几个小时内获得初步结果)。动态分析并未被视为核心功能,也没有立即实施它的计划。不过,补丁是受欢迎的。
问:反编译器?
A:有一个相关的项目,叫ScratchABlock,用于深度程序分析、转换和反编译。预计随着 ScratchABlock 的成熟,它的一些功能将在 ScratchABit 中可用(可能通过插件)。
问:我不在 Linux 上,如何运行 ScratchABit?
答:在系统上的模拟器/虚拟机中安装 Linux,然后高兴吧。
问:强制截图吗?
答: 当然: