Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ropr — 一个速度极快™的多线程ROP Gadget查找器。ropper / ropgadget的替代工具(目前仅支持x86)。 | Kitploit
工具/GitHubGitHub/ben-lichtman/ropr
漏洞利用逆向工程Shellcode二进制分析
GitHubben-lichtman/ropr

ropr

一个速度极快™的多线程ROP Gadget查找器。ropper / ropgadget的替代工具(目前仅支持x86)。

查看仓库
555303个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

ropr

ropr 是一个极速的多线程 ROP 小工具查找器

什么是 ROP 小工具?

ROP(返回导向编程)小工具是少量汇编指令的小片段,通常以 ret 指令结尾,这些指令已作为可执行代码存在于每个二进制文件或库中。这些小工具可用于二进制利用和破坏易受攻击的可执行文件。

当多个 ROP 小工具的地址被写入缓冲区时,我们就形成了一条 ROP 链。如果攻击者能够将栈指针移入此 ROP 链,则控制权可以完全转移给攻击者。

大多数可执行文件包含足够的小工具来编写一个图灵完备的 ROP 链。对于那些没有的,我们始终可以使用位于同一地址空间中的动态库(如 libc),只要我们知道了它们的地址。

使用 ROP 小工具的美妙之处在于,无需在任何地方编写新的可执行代码——攻击者可以使用程序中已有的代码来实现其目标。

如何使用 ROP 小工具?

通常,使用 ROP 小工具的第一个要求是有一个地方来写入你的 ROP 链——这可以是任何可读缓冲区。只需将你想要使用的每个小工具的地址写入此缓冲区。如果缓冲区太小,可能没有足够的空间来写入较长的 ROP 链,因此攻击者应小心地构建 ROP 链,使其足够高效以适应可用空间。

下一个要求是能够控制栈——这可以采取栈溢出的形式——它允许 ROP 链直接写在栈指针下方,或者“栈 pivoting”——通常是一个单一的小工具,将栈指针移动到 ROP 链的其余部分。

一旦栈指针位于 ROP 链的开头,下一个 ret 指令将触发小工具按顺序执行——每个小工具将其下一个小工具作为其自己的栈帧上的返回地址。

也可以将函数指针添加到 ROP 链中——注意函数参数需在 ROP 链的下一个元素之后提供。这通常与“pop 小工具”结合使用,该小工具会将参数从栈中弹出,以便在函数参数之后平滑过渡到下一个小工具。

如何安装 ropr?

  • 需要 cargo(Rust 构建系统)

简易安装:

root@kitploit:~
cargo install ropr

应用程序将安装到 ~/.cargo/bin

从源码安装:

root@kitploit:~
git clone https://github.com/Ben-Lichtman/ropr
cd ropr
cargo build --release

生成的二进制文件将位于 target/release/ropr

或者:

root@kitploit:~
git clone https://github.com/Ben-Lichtman/ropr
cd ropr
cargo install --path .

应用程序将安装到 ~/.cargo/bin

如何使用 ropr?

root@kitploit:~
用法:
    ropr [选项] <二进制文件>

参数:
    <二进制文件>    要检查的文件路径

选项:
    -b, --base-pivot               筛选改变基址指针的小工具
    -c, --colour <颜色>            强制输出为彩色或纯文本(`true` 或 `false`)
    -h, --help                     打印帮助信息
    -j, --nojop                    移除“JOP 小工具”——这些可能有可控的分支、调用等,而不是简单的结尾 `ret`
    -m, --max-instr <最大指令数>   每个小工具中的最大指令数 [默认值: 6]
    -n, --noisy                    包含可能低质量的小工具,如前缀、条件分支和近分支(将找到显著更多的小工具)
    -p, --stack-pivot              筛选改变栈指针的小工具
    -r, --norop                    移除普通的“ROP 小工具”
    -R, --regex <正则表达式>       对返回的小工具执行正则表达式搜索以方便过滤
        --range <范围>             在地址范围之间搜索(十六进制),例如 `0x1234-0x4567`
        --raw <原始>               将输入文件视为代码 blob(`true` 或 `false`)
    -s, --nosys                    移除系统调用和其他中断
    -V, --version                  打印版本信息

例如,如果我正在寻找一种用另一个寄存器中的值填充 rax 的方法,我可能会选择使用正则表达式 ^mov eax, ...; 进行过滤:

root@kitploit:~
❯ ropr /usr/lib/libc.so.6 -R "^mov eax, ...;" > /dev/null

==> 在 0.118 秒内找到 197 个小工具

现在我可以为获得最优质的结果添加一些过滤器到命令行:

root@kitploit:~
❯ ropr /usr/lib/libc.so.6 -m 2 -j -s -R "^mov eax, ...;"
0x000353e7: mov eax, eax; ret;
0x000788c8: mov eax, ecx; ret;
0x00052252: mov eax, edi; ret;
0x0003ae43: mov eax, edx; ret;
0x000353e6: mov eax, r8d; ret;
0x000788c7: mov eax, r9d; ret;

==> 在 0.046 秒内找到 6 个小工具

现在我在地址 0x00052252 处有了一个好的 mov 小工具候选。

下载工具