#macro #quick #dirty #signature #sigscanning #proc-macro #skidscan

skidscan-macros

skidscan的进程宏

3个版本

0.1.2 2021年9月10日
0.1.1 2021年9月9日
0.1.0 2021年9月9日

#32#dirty

Download history 165/week @ 2024-03-31 48/week @ 2024-04-07 69/week @ 2024-04-14 69/week @ 2024-04-21 68/week @ 2024-04-28 55/week @ 2024-05-05 58/week @ 2024-05-12 62/week @ 2024-05-19 71/week @ 2024-05-26 81/week @ 2024-06-02 133/week @ 2024-06-09 88/week @ 2024-06-16 57/week @ 2024-06-23 18/week @ 2024-06-30 33/week @ 2024-07-07 71/week @ 2024-07-14

每月189次 下载
6 个crate中使用 (通过 skidscan)

MIT 许可

6KB
68

skidscan

快速 & 粗糙的Rust sigscanning crate。

特性

  • 跨平台
  • 从指针扫描模式
  • 在字节数组中扫描模式
  • 在加载的共享库 (.so/.dll) 中扫描模式
  • 使用 obfstr 的“混淆签名”

用法

let sig = signature!("40 53 48 83 EC 20 48 8B 01 48 8B D9 48 89 91 ? ? ? ? FF 90 ? ? ? ? 33 D2");
let sig = obfsignature!("40 53 48 83 EC 20 48 8B 01 48 8B D9 48 89 91 ? ? ? ? FF 90 ? ? ? ? 33 D2"); // "Obfuscated" signature

let result: Result<*mut u8, ModuleSigScanError> = sig.scan_module("path or module name");
let result: Option<usize> = sig.scan_ptr(0xDEADBEEF as *mut u8);
let result: Option<usize> = sig.scan(&[0x40, 0x53, 0x48, 0x83, 0xEC, 0x20, 0x48, 0x8B, 0x01, 0x48, 0x8B, 0xD9, 0x48, 0x89, 0x91, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x33, 0xD2]);

签名

签名是由一系列 Option<u8> 构造的。

None 代表一个 ?:任何字节,只要它存在。

Some(u8) 代表这个字节正好。

例如,signature!("48 89 91 ? ? ?") 变为 [Some(0x48), Some(0x89), Some(0x91), None, None, None]

混淆签名

您可以使用带有 obfuscate crate 功能的 obfstr 构造一个“混淆”签名。

对每个字节构造混淆签名:Some(obfstr!("0xFF").parse::<u8>())

例如,signature!("48 89 91 ? ? ?") 变为 [Some(obfstr!("0x48").parse::<u8>()), Some(obfstr!("0x89").parse::<u8>()), Some(obfstr!("0x91").parse::<u8>()), None, None, None]

依赖关系

~3.5MB
~74K SLoC