2 个版本
0.1.1 | 2024 年 8 月 15 日 |
---|---|
0.1.0 | 2024 年 8 月 15 日 |
#259 在 Cargo 插件
每月 202 次下载
31KB
591 行
cargo-shellcode
将您的 Rust 项目[^1]编译成 shellcode 用于 CTF 或漏洞利用开发!
该子命令会对您的代码运行 LLVM 过滤器,将所有函数内联到入口点,并将所有全局变量移动到堆栈空间。这允许您编写大部分看起来正常的代码,这些代码可以用作 shellcode。
安装
cargo install cargo-shellcode
您需要安装 LLVM(例如 dnf install llvm llvm-libs llvm-devel
)。
用法
构建您的代码库作为 shellcode
cargo shellcode build
可选地,您可以指定输出 shellcode 的位置
cargo shellcode build -o shellcode.bin
运行您的 shellcode(注意:这非常不安全!)
cargo shellcode run
或运行特定的 shellcode 文件
cargo shellcode run shellcode.bin
代码库布局
并非任何代码库都可以编译成 shellcode。通常,您需要遵循以下规则
- 入口点必须命名为
_start
或main
- 您的代码必须是
#![no_std]
和#![no_main]
,并且与-nostartfiles
(即独立的二进制文件)兼容 - 全局变量/常量只能由一个函数使用。基本上
- 不要使用
static
变量 - 将所有
const
值放在使用它们的函数中,而不是全局范围内
- 不要使用
有关可以编译成 shellcode 的代码库示例,请参阅 示例。
致谢
该项目(特别是全局变量内联)部分借鉴并受到了 SheLLVM 的启发。谢谢!
[^1]: 适用于一些注意事项,请参阅 代码库布局。
依赖关系
~6MB
~117K SLoC