#shellcode #cargo #binary #cargo-subcommand #rust

bin+lib cargo-shellcode

将 Rust 代码库编译成 shellcode

2 个版本

0.1.1 2024 年 8 月 15 日
0.1.0 2024 年 8 月 15 日

#259Cargo 插件

Download history 202/week @ 2024-08-12

每月 202 次下载

Apache-2.0

31KB
591

cargo-shellcode

将您的 Rust 项目[^1]编译成 shellcode 用于 CTF 或漏洞利用开发!

该子命令会对您的代码运行 LLVM 过滤器,将所有函数内联到入口点,并将所有全局变量移动到堆栈空间。这允许您编写大部分看起来正常的代码,这些代码可以用作 shellcode。

Example

安装

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。通常,您需要遵循以下规则

  • 入口点必须命名为 _startmain
  • 您的代码必须是 #![no_std]#![no_main],并且与 -nostartfiles(即独立的二进制文件)兼容
  • 全局变量/常量只能由一个函数使用。基本上
    • 不要使用 static 变量
    • 将所有 const 值放在使用它们的函数中,而不是全局范围内

有关可以编译成 shellcode 的代码库示例,请参阅 示例

致谢

该项目(特别是全局变量内联)部分借鉴并受到了 SheLLVM 的启发。谢谢!

[^1]: 适用于一些注意事项,请参阅 代码库布局

依赖关系

~6MB
~117K SLoC