前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Polypyus:一款功能强大的固件源码分析工具

Polypyus:一款功能强大的固件源码分析工具

作者头像
FB客服
发布2023-04-26 21:17:29
发布2023-04-26 21:17:29
48000
代码可运行
举报
文章被收录于专栏:FreeBufFreeBuf
运行总次数:0
代码可运行

Polypyus

Polypyus支持从相似的二进制文件中提取出已知函数,并以此来学习如何再原始二进制文件中定位函数。该工具是一个固件源码分析工具,它不需要对二进制文件进行反汇编,这就是它的一个很大的优势,因为有些二进制文件的反汇编是比较困难的。除此之外,该工具仅对二进制源码进行分析,因此它的执行速度非常快,在几秒钟之内即可完成。但是,该工具所使用的方法要求二进制文件使用相同的体系结构,并且具有类似的编译器选项。

Polypyus支持集成到现有工具的工作流中,比如说Ghidra、IDA、BinDiff和Diaphora等等。比如说,它可以导入以前注释过的函数并从中学习,还可以导出要导入到IDA中寻找的函数。由于Polypyus使用了相当严格的阈值,所以它只能在我们的实验中找到正确的匹配。

在处理原始固件二进制文件(即各种Broadcom和Cypress Bluetooth固件版本)时,我们发现IDA自动分析经常错误地启动已识别的函数。在IDA Pro 6.8中,自动分析更具攻击性,会导致更多的结果,但也会导致更多的误报。而IDA Pro 7.2就更惨了,因为它会遗漏很多函数。

工具运行机制

Polypyus能够通过比较带注释的固件二进制文件数据集中的常见函数来创建二进制模糊匹配模块。当前版本的Polypyus支持下列注释:

WICED Studio patch.elf文件,这是一种特殊的ELF文件,其中仅包含符号定义; .symdefs文件,即大多数ARM编译器支持生成的文件; .csv文件,带有格式化样本数据;

这些注释包含已知函数的地址、大小和名称。历史记录数据集中输入二进制文件的共性越多,Polypyus的性能和结果就越好。给定几个稍有不同的函数,Polypyus就可以创建非常好的匹配器。

工具安装

Polypyus要求Python 3.6及其更高版本的环境,我们建议大家使用一个Virtualenv虚拟环境来执行工具的安装。

首先,使用下列命令将该项目源码克隆至本地:

代码语言:javascript
代码运行次数:0
运行
复制
git clone https://github.com/seemoo-lab/polypyus.git

接下俩,切换到项目目录下,执行下列命令:

代码语言:javascript
代码运行次数:0
运行
复制
pip install .

工具运行

工具安装完成之后,我们可以使用下列命令来运行该工具:

代码语言:javascript
代码运行次数:0
运行
复制
polypyus-gui
polypyus-cli

Polypyus的使用

我们可以通过图形化界面或命令行接口来使用Polypyus,分别对应的是polypyus-gui和polypyus-cli这两条命令,并且它们都支持下列调用参数:

代码语言:javascript
代码运行次数:0
运行
复制
--verbose is the verbosity level. By default, it shows warnings -v shows info -vv show debug information.
  --project sets the location of the project file. This is either a file path or ":memory:".
  --help    Show help message.

图形化界面使用

一般的图形化界面工作流都是从视窗的左手边往右手边操作的。首先,需要将二进制源码添加到历史记录中。接下来,工具会添加符号注释,并添加目标源码。如需获取匹配函数,可以点击“Create matchers from history”。匹配器创建完成之后,我们就可以选择单个目标了,或者通过选择“batch match”来匹配所有的目标代码。最后,所有的结果数据都将存储在一个.csv文件中。

在下面这个演示视频中,我们可以看到Polypyus只需要几秒钟,即可从两份输入代码中完成学习过程、注释代码、创建匹配器,并将匹配函数应用到新的代码中。

视频地址:https://github.com/seemoo-lab/polypyus/blob/master/doc/gui_demo.mp4

命令行接口使用

使用命令行接口的好处就是它能够自动化执行任务。目前来说,命令行接口的数据输出格式可能会因版本变化而改变。下面给出的是一个调用示例:

代码语言:javascript
代码运行次数:0
运行
复制
polypyus-cli --history examples/history/20819-A1.bin --annotation examples/history/20819-A1_patch.elf --history examples/history/20735B1.bin --annotation examples/history/20735B1_patch.elf --project test.sqlite
polypyus-cli --target examples/history/20739B1.bin --project test.sqlite

许可证协议

本项目的开发与发布遵循GPL v3开源许可证协议。

项目地址

Polypyus:https://github.com/seemoo-lab/polypyus

精彩推荐

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Polypyus
  • 工具运行机制
  • 工具安装
  • 工具运行
  • Polypyus的使用
  • 图形化界面使用
  • 命令行接口使用
  • 许可证协议
  • 项目地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档