Polypyus部署、使用与原理分析

news2024/10/21 20:23:08

文章目录

  • 前言
  • 1、概述
  • 2、安装与使用
    • 2.1、源码安装
      • 2.1.1、部署系统依赖组件
      • 2.1.2、使用源码安装系统
    • 2.2、使用方法
      • 2.2.1、命令行界面操作方法
      • 2.2.2、图形界面操作方法
  • 3、测试用例
  • 4、参考文献
  • 总结


前言

  本博客的主要内容为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有了更深的了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2220272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】Linux之基础IO

我们先回顾一下C文件接口, #include <stdio.h> #include <string.h>int main() {FILE *fp fopen("myfile", "w");if (!fp){printf("fopen error!\n");}const char *msg "hello world!\n";int count 5;while (count--)…

DORA 机器人中间件学习教程(5)——3D激光雷达数据可视化

DORA中3D激光雷达数据可视化 1 总体思路2 DORA数据接收节点3 编写yml文件4 启动节点参考资料 截止目前 DORA还没有类似于ROS2中RVIZ这样的可视化工具&#xff0c;而在调试算法时我们又需要将数据进行可视化以验证代码的正确性。目前的解决方法是将DORA中的数据发送到ROS2中&…

SpringCloud Gateway保姆级入门教程

什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目&#xff0c;Spring社区是这么介绍它的&#xff1a; 该项目借助Spring WebFlux的能力&#xff0c;打造了一个API网关。旨在提供一种简单而有效的方法来作为API服务的路由&#xff0c;并为它们提供各种增强…

深度学习:开启人工智能的新纪元

深度学习&#xff1a;开启人工智能的新纪元 深度学习是机器学习的一个子领域&#xff0c;它基于人工神经网络的学习算法&#xff0c;特别是那些具有多个非线性变换的层&#xff08;即“深度”&#xff09;。这些算法模仿人脑处理信息的方式&#xff0c;通过学习数据的多层次表…

Python Appium自动化操作抖音

1、功能介绍 使用Python和Appium给手机抖音上的同城模块自动评论&#xff0c;主要是通过模拟用户在抖音同城模块的操作&#xff0c;实现自动发送评论的功能。具体步骤如下&#xff1a; - 安装并配置好Python环境&#xff1b; - 安装Appium库&#xff0c;用于自动化操作手机应…

AI与测试行业调研

业务方向及应用场景 方向 技术 应用 大语言模型 私有化大模型&#xff1a; llama2 privateGPT 业务分析 测试数据生成 机器学习、深度学习应用 视觉自动化&#xff1a; FastbotApplitools 视觉自动化 缺陷预测与挖掘 知识图谱 neo4j 测试用例生成 精准测试 大语言模…

从A到Z,一文通览Python所有内置函数:编程效率提升100%

Python中的内置函数&#xff0c;这些函数覆盖了从基本数据处理到高级编程功能的各种用途。下面&#xff0c;将逐一介绍每个函数的用途和提供相应的代码示例。 A abs()&#xff1a;返回数字的绝对值。 print(abs(-5)) # 输出: 5 aiter()&#xff1a;返回异步迭代器。 async…

【从零开始的LeetCode-算法】910. 最小差值 II

给你一个整数数组 nums&#xff0c;和一个整数 k 。 对于每个下标 i&#xff08;0 < i < nums.length&#xff09;&#xff0c;将 nums[i] 变成 nums[i] k 或 nums[i] - k 。 nums 的 分数 是 nums 中最大元素和最小元素的差值。 在更改每个下标对应的值之后&#xf…

jmeter 从多个固定字符串中随机取一个值的方法

1、先新增用户参数&#xff0c;将固定值设置为不同的变量 2、使用下面的函数&#xff0c;调用这写变量 ${__RandomFromMultipleVars(noticeType1|noticeType2|noticeType3|noticeType4|noticeType5)} 3、每次请求就是随机取的值了

驾驶员异常行为检测数据集(猫脸码客 第223期)

驾驶员异常行为检测数据集 随着智能交通系统的快速发展&#xff0c;驾驶员危险驾驶行为检测已成为确保道路安全、减少交通事故的重要手段。通过先进的图像处理和机器学习技术&#xff0c;可以实现对驾驶员行为的实时监测和预警&#xff0c;从而有效遏制危险驾驶行为的发生。本…

基于SpringBoot设计模式之结构型设计模式·桥接模式

文章目录 介绍开始架构图定义类的功能定义类的实现 测试样例 总结 介绍 将抽象部分与它的实现部分分离&#xff0c;使他们都可以独立地发生变化。 Bridge的意思是桥梁。就像在现实世界中&#xff0c;桥梁的功能是将河流的两侧连接起来一样, Bridge模式的作用也是将两样东西连接…

FPGA图像处理之中值滤波

文章目录 一、什么是中值滤波&#xff1f;二、均值滤波和中值滤波对比三、FPGA实现3.1 Verilog代码3.2 仿真验证 一、什么是中值滤波&#xff1f; 在前一篇《FPGA图像处理之均值滤波》中&#xff0c;我们了解到了图像处理中常遇到的一些噪声类型以及均值滤波的原理以及实现。我…

【Linux】实现倒计时、进度条、gdb

文章目录 缓冲区1.概念2.作用3.刷新策略4.缓冲区位置 实现倒计时实现进度条Linux调试器----gdb 缓冲区 1.概念 缓冲区是计算机内存的一部分&#xff0c;用于暂时存储数据。它在数据传输过程中起到一个缓冲桥梁的作用&#xff0c;帮助协调数据传输的速度差异。缓冲区可以是磁盘…

魔百和 HG680-MC免拆 2+8免拆机卡刷固件

HG680MC免拆完美bin卡刷24年10月21日版本【修复语音、ADB端口9999、开启ADB的Root权限】 更新特点&#xff1a; 1.更新开机桌面为SMART动画&#xff1b; 2.安装app自动安装&#xff0c;无需点击确认、下一步等提示按钮内容; 3.ADB端口号为9999&#xff1b; 4.ADB权限为完美RO…

wireshark 解密浏览器https数据包

一、导出浏览器证书有两种方法 1、在浏览器快捷方式追加启动参数&#xff1a; --ssl-key-log-file"d:\log\2.log" C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --ssl-key-log-file"d:\log\2.log" 2、环境变量中新建用…

SpringbootSpringcloud面试题(含代码及展示图)

1 简单说一下springboot? Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程。 -使用springboot以后,搭建一个spring应用和开发&#xff0c;部署变得很简单. 2 怎么简单实现一个springboot应用 1&#xff09;新建ma…

SpringBoot获取bean的几种方式

目录 一、BeanFactory与ApplicationContext的区别 二、通过BeanFactory获取 三、通过BeanFactoryAware获取 四、启动获取ApplicationContext 五、通过继承ApplicationObjectSupport 六、通过继承WebApplicationObjectSupport 七、通过WebApplicationContextUtils 八、通…

Chrome DevTools 三: Performance 性能面板扩展—— 性能优化

Performance 性能 &#xff08;一&#xff09;性能指标 首次内容绘制 (First Contentful Paint&#xff0c;FCP)&#xff1a; 任意内容在页面上完成渲染的时间 最大内容绘制 (Largest Contentful Paint&#xff0c;LCP)&#xff1a; 最大内容在页面上完成渲染的时间 第一字节…

创客项目秀|基于XIAO ESP32C3的本地个人助理Mr.M

作者&#xff1a;Matthew Yu 来自&#xff1a;Fab academy 在数字化时代的浪潮中&#xff0c;柴火创客空间作为创新与实践的摇篮&#xff0c;不仅为Fab Academy 2024的学员们提供了一个充满活力的学习和创作环境&#xff0c;更是将科技的力量与人文关怀深度融合。今天&#x…

Redis——事务

文章目录 Redis 事务Redis 的事务和 MySQL 事务的区别:事务操作MULTIEXECDISCARDWATCHUNWATCHwatch的实现原理 总结 Redis 事务 什么是事务 Redis 的事务和 MySQL 的事务 概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执行 Redis 的事务和 MySQL 事务的区别:…