#shellcode #security #offsec

no-std shellcoder

快速编写shellcode有效负载

2个版本

0.1.1 2024年6月23日
0.1.0 2024年6月23日

#641 in 编码

Apache-2.0

36KB
654

Shellcoder:快速编写shellcode有效负载!

最低支持的Rust版本: 1.61.0

文档: docs.rs/shellcoder

功能标志

shellcoder 包含以下功能标志

名称 描述 默认启用
std 使用标准库。提供对I/O支持和Vec支持实现的访问。 no

shellcoder 添加到您的库中

要将 shellcoder 添加到Rust库中,您可以使用 Cargo

$ cargo add shellcoder

或者,编辑您的 Cargo.toml 并在 dependencies 部分下添加以下行

shellcoder = "0.1.0"

示例

以下代码编写了一个简单的shellcode,包含两个地址,它们之间有一个8字节的间隔。它使用静态实现,即不进行动态内存分配。

use shellcoder::{
    Op as _,
    Shellcoder as _,
};
use shellcoder::r#static::Shellcoder;
use shellcoder::Result;

pub fn main() -> Result<()> {
  // We define a scratch buffer to be used by [`Shellcoder`].
  let mut scratch_buffer = [0u8; 0x18];

  // We instantiate a _shellcoder_, the _static_ one.
  let mut shellcoder = Shellcoder::new(&mut scratch_buffer);

  // We build the shellcode.
  let shellcode = shellcoder
    .write_le(0x10000abccu64)? // writes little-endian encoded 0x10000abcc.
    .fill(8, b'A')?            // moves the cursor 8 bytes ahead,
                               // filling the gap with 'A'
    .write_le(0x10000fffc)?    // writes little-endian encoded 0x10000fffc.
    .get();

  assert_eq!(shellcode, &[
    0xcc, 0xab, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
    0xfc, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  ]);
  Ok(())
}

许可证

Apache2,见 许可证

依赖关系

~0–310KB