工具

IDAPython Embedded Toolkit 嵌入式固件分析脚本集

Maddie Stone 编写的 IDAPython 脚本集,用于在 IDA Pro 中对嵌入式设备固件镜像进行初步梳理和标注,曾于 2017 年在 RECON Montreal 和 DerbyCon 上介绍。梳理类脚本依据各架构的函数序言和尾声模式定义代码与函数,把地址范围标记为字节、字或双字,并把未探索的字节转换为字符串;分析类脚本根据已知基址解析以偏移方式进行的内存访问,并添加交叉引用和数值注释;标注类脚本列出 CPU 端口(GPIO)的使用位置,把没有交叉引用的函数标为可能的死代码,并追踪某个操作数的使用位置。Android 文件夹另有一个为原生库中的 JNIEnv 函数调用添加注释的脚本,以及一个解密经 WeddingCake 反分析外壳打包的 ARM32 库中字符串的脚本。

使用条件与局限

  • 包含十个 Python 脚本以及两场 2017 年演讲的 PDF 幻灯片,没有发布版本或标签;所审阅的 master 提交日期为 2019-08-14,也是最新提交。README 称这些脚本只在 IDA Pro 6.95 上测试过,IDA 7.0 的测试仍在进行;每个脚本需在已打开且带 IDAPython 的 IDA 数据库中通过 File > Script file 单独运行。多数脚本使用 Python 2 的 print 语句和 7.0 之前的 IDC 调用,例如 MakeCode、MakeComm、MakeStr 和 AskAddr;2019 年加入的 jni_translate.py 使用兼容 Python 3 的 print 调用,但仍调用 idc.MakeComm。所审来源未声称兼容更新的 IDA 版本或 Python 3。
  • 固件镜像或 Android 原生库及其 IDA 数据库由使用者提供,地址范围、正则表达式或基址需在提示框中或各脚本的用户自定义部分填写。处理器相关的语法依据 IDA 的处理器名称选择:define_code_functions.py 支持 8051、PIC18、三菱 M32R、TI TMS320C28x 和 AVR,find_mem_accesses.py 只支持 8051,identify_port_use_locations.py 则只启用一条 PIC18 模式,另以注释形式给出 8051 的备选模式。遇到不支持的处理器时脚本会报错退出,需分析人员自行补充模式;find_mem_accesses.py 也无法为尚未创建的段建立引用。
  • 部分脚本会改写数据库:define_data_as_types.py 会先取消该范围内的已有定义,覆盖其中的代码或字符串;WeddingCake_decrypt.py 会用解密后的内容覆盖加密字符串,并要求 JNI_OnLoad 已被定义和导出。WeddingCake 相关文件配合 Maddie Stone 在 Black Hat USA 2018 上关于该加壳工具的演讲;本条目只涉及将其用于分析。
  • LICENSE 采用 MIT 许可,版权归 Maddie Stone(2017);README 中的版权声明则写的是约翰斯·霍普金斯大学应用物理实验室,Android 文件夹的 README 和 WeddingCake 脚本另有 Google LLC 2018 的版权声明,但未给出单独的许可条款。本次未运行任何内容,所审来源也未确立与 REA 的关联。

关于此条目

类型
工具
类别
固件工具
关联
基础工具
目标
应用 · 固件

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

报告条目过时 建议修正翻译

一手来源

  1. README.md GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  2. Android/README.md GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  3. define_code_functions.py GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  4. find_mem_accesses.py GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  5. identify_port_use_locations.py GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  6. define_data_as_types.py GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  7. Android/jni_translate.py GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  8. Android/WeddingCake_decrypt.py GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  9. presentations GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346
  10. LICENSE GitHub · maddiestone/IDAPythonEmbeddedToolkit · 修订 3cf0346

同分区更多条目:固件与硬件

固件与硬件分区全部 44 项资源