Polypyus部署、使用与原理分析


前言

  本博客的主要内容为Polypyus的部署、使用与原理分析。本博文内容较长,因为涵盖了Polypyus的几乎全部内容,从部署的详细过程到如何使用Polypyus进行漏洞检测,以及对Polypyus进行漏洞检测的原理分析,相信认真读完本博文,各位读者一定会对Polypyus有更深的了解。以下就是本篇博客的全部内容了。


1、概述

  Polypyus是一个用于固件分析和漏洞研究的工具,主要用于定位原始固件二进制文件中的函数。它通过从类似的二进制文件中提取已知函数来学习,而无需对这些文件进行反汇编。这种方法使得Polypyus能够在几秒钟内快速运行,并且对于那些难以反汇编并且常规工具容易错过函数的二进制文件尤其有用。

  与现有工具如Ghidra、IDA、BinDiff和Diaphora集成,Polypyus可以导入先前注释过的函数并从中学习,并且可以将找到的函数导出以便导入到IDA中。通过与这些工具的集成,Polypyus可以帮助改善自动分析结果,并为进一步固件分析提供更准确的基础。

  Polypyus主要解决了在固件分析过程中常见的问题,例如IDA自动分析错误地识别函数的起始位置,导致误报或遗漏。它还针对BinDiff等工具在寻找字节完全相同但由于不同的调用图而无法匹配的函数时的失败情况提供了解决方案。

  该工具还提供了一种可选的功能,即从已注释的输入二进制文件中学习常见函数的起始位置,并将其应用于其它二进制文件以识别函数而无需匹配其名称。这可以帮助提高对那些没有明确函数标识的二进制文件的分析准确性。

  总的来说,Polypyus是一个用于快速而准确地定位固件二进制文件中函数的工具,它的灵活性和集成能力使其成为固件分析和漏洞研究工作流程中的有力辅助。此外Polypyus工具基于Python语言、Html语言和Css语言开发。

2、安装与使用

软件环境硬件环境约束条件
Ubuntu 20.04.1 LTS(内核版本5.4.0-42-generic)使用2个处理器,每个处理器3个内核,共分配6个内核本文所讲解的Polypyus源代码于2024.04.23下载
具体的软件环境可见“2.1、源码安装”章节所示的软件环境内存8GB本文所安装的Polypyus源代码于2024.04.23下载
暂无硬盘200GB具体的约束条件可见“2.1、源码安装”章节所示的软件版本约束
暂无Polypyus部署在VMware Pro 17上的Ubuntu 20.04.1系统上(主机系统为Windows 11),硬件环境和软件环境也是对应的VMware Pro 17的硬件环境和软件环境暂无

2.1、源码安装

2.1.1、部署系统依赖组件

  Polypyus所依赖的组件较少,并且依赖的所有组件都可以通过命令直接安装,所以较简单。我们可以执行如下命令来下载安装Polypyus所依赖的一些基础组件。

$ sudo apt-get update
$ sudo apt-get install git -y
$ sudo apt-get install python3-pip -y

2.1.2、使用源码安装系统

  1. 首先来到当前用户的根目录,并下载Polypyus的源代码,最后进入其目录中:
$ cd ~
$ git clone https://github.com/seemoo-lab/polypyus.git
$ cd polypyus/
  1. 然后执行如下命令来安装Polypyus:
$ pip install .
  1. 然后执行如下命令查看Polypyus的命令行是否安装成功:
$ polypyus-cli --help
  1. 出现如下图所示的内容即代表Polypyus的命令行安装成功:
    在这里插入图片描述

  2. 然后执行如下命令查看Polypyus的图形界面是否安装成功:

$ polypyus-gui --help
  1. 出现如下图所示的内容即代表Polypyus的图形界面安装成功:
    在这里插入图片描述

  2. 然后我们执行如下命令来进入Polypyus的图形界面:

$ polypyus-gui
  1. 然后就会打开Polypyus的图形界面,此时我们就完成了关于Polypyus的部署:
    在这里插入图片描述

   注:实际执行中遇到的问题及解决方法

   A 问题1:

  1. 在步骤2安装Polypyus的时候,出现如下图所示的问题:
    在这里插入图片描述

  2. 出现该问题是因为pip版本较低,导致Pyqt5安装失败。为了解决该问题,我们只需要顺序执行如下命令来升级pip并手动安装Pyqt5:

$ sudo python3 -m pip install --upgrade pip
$ sudo python3 -m pip install pyqt5
  1. 此时我们就解决了该问题,我们只需要回到步骤3重新继续向下操作即可

   B 问题2:

  1. 在步骤3对查看Polypyus是否安装成功的时候,出现如下图所示的问题:
    在这里插入图片描述

  2. 出现该问题是因为我们没有添加环境变量。为了解决该问题,我们首先打开如下文件:

$ gedit ~/.bashrc
  1. 在打开的文件中,添加如下内容,最后保存修改后退出:
    在这里插入图片描述

  2. 然后执行如下命令使修改生效:

$ source ~/.bashrc
  1. 此时我们就解决了该问题,我们只需要回到步骤4重新继续向下操作即可

   C 问题3:

  1. 在步骤7进入Polypyus的图形界面的时候,出现如下图所示的问题:
    在这里插入图片描述

  2. 出现该问题是因为缺少组件,我们只需要执行如下命令来安装缺少的组件即可:

$ sudo apt-get install libxcb-xinerama0 -y
  1. 此时我们就解决了该问题,我们只需要回到步骤6重新继续向下操作即可

2.2、使用方法

  Polypyus为用户提供了两种使用方法,分别是命令行界面操作和图形界面操作。本章节将会介绍如何通过这两种方式来操作Polypyus。

2.2.1、命令行界面操作方法

  我们可以使用如下命令来使用Polypyus。注意:该命令执行的是“/home/iie-iisd/.local/bin/polypyus-cli”二进制程序。

polypyus-cli [OPTIONS]

  该命令用给定的历史(带注释的二进制文件)生成匹配器,进而分析目标。可以发现该命令可以添加选项以用作不同的操作,为了方便后续使用,将对于这些选项的具体使用方法以及含义总结为下表。

选项含义
-v, --verbose日志详细级别,默认显示警告。-v显示信息,-vv显示调试信息 [默认: 0]
–history PATH将二进制文件添加到历史中 [默认: ]
–annotation PATH为历史元素添加注释,每一个历史元素需要一个注释,反之亦然 [默认: ]
–target PATH添加要分析的目标二进制文件 [默认: ]
–parallelize/–no-parallelize使用多进程进行分析 [默认: False]
–min-size INTEGER函数需要具有的最小字节数以进行匹配器创建 [默认: 28]
–max-rel-fuzz FLOAT最大相对匹配器模糊度 [默认: 0.5]
–project TEXT设置项目文件的位置,可以是文件路径或":memory:" [默认: :memory:]
–list-history/–no-list-history列出项目中注册的带注释二进制文件 [默认: False]
–list-targets/–no-list-targets列出项目中注册的目标 [默认: False]
–install-completion [bashzsh
–show-completion [bashzsh
–help显示此帮助信息并退出。

2.2.2、图形界面操作方法

  1. 首先执行如下命令启动Polypyus的图形界面:
$ cd ~
$ polypyus-gui
  1. 然后会打开如下图所示的图形界面:
    在这里插入图片描述

  2. 然后可按如下图所示添加历史文件:
    在这里插入图片描述

  3. 添加历史文件后,可按如下图所示添加该历史文件对应的注释:
    在这里插入图片描述

  4. 然后可以按如下图所示添加要分析的目标二进制文件:
    在这里插入图片描述

  5. 然后可以按如下图所示来根据历史文件创建匹配器:
    在这里插入图片描述

  6. 然后可以按如下图所示匹配目标二进制文件:
    在这里插入图片描述

  7. 若要进行批目标二进制文件匹配,可以按如下图所示进行选择:
    在这里插入图片描述

3、测试用例

  在本章节中,我们将使用Polypyus自带的测试文件进行测试,这些测试文件位于“/polypyus/firmware/history”目录中。此外,使用Polypyus的图形界面进行整个测试。下面就是本章节使用Polypyus对测试文件进行测试的全部流程。

  1. 首先执行如下命令启动Polypyus的图形界面:
$ cd ~
$ polypyus-gui
  1. 然后会打开如下图所示的图形界面:
    在这里插入图片描述

  2. 然后按如下图所示添加第一个历史文件:
    在这里插入图片描述

  3. 在这里我们选择“/polypyus/firmware/history/20739B1.bin”作为第一个历史文件导入:
    在这里插入图片描述

  4. 然后按如下图所示添加该历史文件对应的注释:
    在这里插入图片描述

  5. 在这里我们选择“/polypyus/firmware/history/20739B1_patch.elf”作为该历史文件对应的注释:
    在这里插入图片描述

  6. 将其导入:
    在这里插入图片描述

  7. 然后按如下图所示添加第二个历史文件:
    在这里插入图片描述

  8. 在这里我们选择“/polypyus/firmware/history/20819-A1.bin”作为第二个历史文件导入:
    在这里插入图片描述

  9. 然后按如下图所示添加该历史文件对应的注释:
    在这里插入图片描述

  10. 在这里我们选择“/polypyus/firmware/history/20819-A1_patch.elf”作为该历史文件对应的注释:
    在这里插入图片描述

  11. 将其导入:
    在这里插入图片描述

  12. 然后按如下图所示添加要分析的目标二进制文件:
    在这里插入图片描述

  13. 在这里我们选择“/polypyus/firmware/history/20735B1.bin”作为要分析的目标二进制文件:
    在这里插入图片描述

  14. 然后按如下图所示来根据历史文件创建匹配器:
    在这里插入图片描述

  15. 然后按如下图所示匹配目标二进制文件:
    在这里插入图片描述

  16. 当匹配完成后,会打印匹配的结果。可以发现,在该次测试中,共匹配到2344个函数,并且获取到了其起始位置和大小:
    在这里插入图片描述

  17. 若要将此次测试结果保存,我们可以按如下图所示进行操作:
    在这里插入图片描述

  18. 在这里,我们将其保存为“/home/iie-iisd/polypyus/firmware/history/output.csv”:
    在这里插入图片描述

  19. 若想查看保存到本地的匹配结果,可使用下面的命令:

$ gedit /home/iie-iisd/polypyus/firmware/history/output.csv
  1. 可以发现,成功将我们刚刚测试得到的匹配结果保存到本地了:
    在这里插入图片描述

4、参考文献

  1. Polypyus:一款功能强大的固件源码分析工具
  2. seemoo-lab/polypyus
  3. python - AttributeError: module ‘sipbuild.api’ has no attribute ‘prepare_metadata_for_build_wheel’ for PyQt5 5.15.0

总结

  以上就是本篇博文的全部内容,可以发现,Polypyus的部署与使用过程并不复杂,我们本篇博客对其进行了详细的分析。相信读完本篇博客,各位读者一定对Polypyus有了更深的了解。

基于Swin TransformerASPP模块的图像分类系统设计实现 本文介绍了一种结合Swin Transformer空洞空间金字塔池化(ASPP)模块的高效图像分类系统。该系统通过融合Transformer的全局建模能力和ASPP的多尺度特征提取优势,显著提升了模型在复杂场景下的分类性能。 模型架构创新 系统核心采用Swin Transformer作为骨干网络,其层次化窗口注意力机制能高效捕获长距离依赖关系。在特征提取阶段,创新性地引入ASPP模块,通过并行空洞卷积(膨胀率6/12/18)和全局平均池化分支,实现多尺度上下文信息融合。ASPP输出经1x1卷积降维后原始特征拼接,有效增强了模型对物体尺寸变化的鲁棒性。 训练优化策略 训练流程采用Adam优化器(学习率0.0001)和交叉熵损失函数,支持多GPU并行训练。系统实现了完整的评估指标体系,包括准确率、精确率、召回率、特异度和F1分数等6项指标,并通过动态曲线可视化模块实时监控训练过程。采用早停机制保存最佳模型,验证集准确率提升可达3.2%。 工程实现亮点 1. 模块化设计:分离数据加载、模型构建和训练流程,支持快速迭代 2. 自动化评估:每轮训练自动生成指标报告和可视化曲线 3. 设备自适应:智能检测CUDA可用性,无缝切换训练设备 4. 中文支持:优化可视化界面的中文显示负号渲染 实验表明,该系统在224×224分辨率图像分类任务中,仅需2个epoch即可达到92%以上的验证准确率。ASPP模块的引入使小目标识别准确率提升15%,特别适用于医疗影像等需要细粒度分类的场景。未来可通过轻量化改造进一步优化推理速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IronmanJay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值