此项目已被归档,其问题追踪已锁定。该项目将仅作为参考用途保留。
.. image:: docs/media/pyrebox_logo_light_bg.png
.. _QEMU: http://qemu.org/ .. _DECAF: https://github.com/sycurelab/DECAF .. _S2E: https://github.com/dslab-epfl/s2e .. _AVATAR: https://github.com/avatartwo .. _PANDA: https://github.com/panda-re/panda .. _Volatility: http://www.volatilityfoundation.org/ .. _BUILD: BUILD.rst .. _here: https://github.com/Cisco-Talos/pyrebox/issues .. _slides: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_hitb_ams.pdf .. _available: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_euskalhack.pdf .. _scripts: https://github.com/Cisco-Talos/pyrebox/tree/master/scripts .. _readthedocs.io: https://pyrebox.readthedocs.io/en/latest/ .. _questions: https://github.com/Cisco-Talos/pyrebox/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 .. _presentation: https://www.youtube.com/watch?v=F2voG87obzM .. _Contest: https://volatility-labs.blogspot.com/2017/11/results-from-5th-annual-2017-volatility.html
PyREBox 是一个 Python 脚本化的逆向工程沙箱。它基于 QEMU,旨在通过提供动态分析和调试能力,从不同的视角辅助逆向工程。PyREBox 允许你检查正在运行的 QEMU 虚拟机,修改其内存或寄存器,并通过创建简单的 Python 脚本自动化任何类型的分析来对其执行进行插桩。QEMU(作为全系统模拟器运行时)模拟整个系统(CPU、内存、设备等)。通过使用 VMI 技术,它无需对客户操作系统进行任何修改,即可在运行时透明地从其内存中检索信息。
多个学术项目,如 DECAF_、PANDA_、S2E_ 或 AVATAR_,此前已利用基于 QEMU 的插桩技术来克服逆向工程任务。这些项目允许用 C/C++ 编写插件,并实现了一些高级特性,如动态污点分析、符号执行,甚至执行轨迹的记录与回放。通过 PyREBox,我们旨在应用这一技术,同时保持设计简洁,并注重系统对威胁分析师的可操作性。
PyREBox 在 2017 年赢得了 Volatility 插件竞赛(Contest_)!
该工具于 2018 年在 HITB Amsterdam 上展示。你可以查看幻灯片(slides_),或观看演示(presentation_)。它还在第三届 EuskalHack 安全大会(幻灯片 available_)上展示。
请记住拉取 PyREBox 的最新版本,以享受其最新功能。PyREBox 正在积极开发中,更多酷炫功能即将到来!master 分支应始终包含稳定版本,而 dev 分支则包含最新的进行中功能。以下公告列表指的是 master 分支,以及开发变更合并到 master 的日期。
提供了一个构建脚本。有关依赖项的具体细节,请参见 BUILD_。我们还提供了一个 Dockerfile。
该项目的文档托管在 readthedocs.io_。
如果你认为发现了错误,请在此处(here_)报告。
在创建新问题之前,请先浏览其他用户提出的问题(questions_)。
该程序按“原样”提供,不保证任何支持。尽管如此,为了帮助我们解决你的问题,请提供尽可能多的信息以便重现错误:
PyREBox 基于 QEMU,因此要在 PyREBox 中启动虚拟机,你需要像启动 QEMU 虚拟机一样运行它。提供了几个示例脚本:start_i386.sh、start_x86_64.sh,你可以将它们用作示例。
目前唯一支持的 QEMU 监控器选项是 stdio(-monitor stdio)。
提供一个全系统模拟平台,具有用于检查模拟客户系统的简单接口。
设计简洁,与 QEMU 解耦。许多基于 QEMU 构建的项目在 QEMU 升级后不会随之演进,从而错过了新功能和优化以及安全更新。为实现这一目标,PyREBox 实现为一个独立的模块,可以与 QEMU 一起编译,只需进行最少的修改。
支持不同架构。目前,PyREBox 仅支持 x86 和 x86-64 位架构的 Windows,但其设计允许支持其他架构,如 ARM、MIPS、PowerPC,以及其他操作系统。
启动 PyREBox shell 就像在 QEMU 的监控器上输入 sh 命令一样简单。它将立即启动一个 IPython shell。该 shell 会记录命令历史以及已定义的变量。例如,你可以保存一个值,并在稍后执行的不同时间点(当再次启动 shell 时)恢复它。PyREBox 利用了 IPython 所有可用的特性,如自动完成、命令历史、多行编辑以及自动命令帮助生成。
PyREBox 将允许你以相当隐蔽的方式调试系统(或进程)。与传统的调试器(它们驻留在被调试的系统中,甚至会修改被调试进程的内存以插入断点)不同,PyREBox 完全位于被检查系统之外,并且不需要在客户机中安装任何驱动程序或组件。
.. image:: docs/media/breakpoint.gif
PyREBox 提供了完整的命令集来检查和修改运行中虚拟机的状态。只需输入 list_commands 即可获得完整列表。你可以通过输入 vol 和相应的 volatility 命令来运行任何 volatility 插件。要获取可用 volatility 插件的完整列表,可以输入 list_vol_commands。该列表是自动生成的,因此也会显示你安装在 PyREBox volatility/ 路径下的任何 volatility 插件。
你也可以定义自己的命令!只需在脚本中声明一个函数并加载即可。
如果你需要比命令更强大的表达能力,可以编写利用 API 的 Python 代码片段。有关 API 的详细描述,请参见 文档_ 或在 shell 中输入 help(api)。
.. image:: docs/media/stack.gif
PyREBox 允许动态加载脚本,这些脚本可以注册当某些事件发生时(如指令执行、内存读/写、进程创建/销毁等)被调用的回调函数。
鉴于 PyREBox 与 Volatility 集成,它将允许你在 Python 脚本中利用所有 volatility 内存取证插件。许多最著名的逆向工程工具都是用 Python 实现的,或者至少具有 Python 绑定。我们的方法允许将其中任何工具集成到脚本中。
最后,由于 Python 回调在频繁事件(如指令执行)上可能会引入性能损失,因此还可以创建 触发器。触发器 是本地代码插件(用 C/C++ 开发),可以在运行时的任何事件上动态插入,并在 Python 回调执行之前运行。这允许限制命中 Python 代码的事件数量,以及在本地代码中预计算值。
在此代码库中,你将找到示例脚本(scripts_),这些脚本可以帮助你编写自己的代码。欢迎贡献!
首先,PyREBox 离不开 QEMU_ 和 Volatility_。我们感谢它们的开发者和维护者所做的重要工作。
PyREBox 受到多个学术项目的启发,如 DECAF_ 和 PANDA_。事实上,PyREBox 支持的许多回调与 DECAF_ 中的回调等价,且插桩背后的概念基于这些工作。
PyREBox 受益于第三方代码,这些代码可以在目录 pyrebox/third_party 下找到。对于每个第三方项目,我们均包含其原始许可证的说明、从该项目中获取的原始源代码文件,以及由 PyREBox 使用的源代码文件的修改版本(如果适用)。