3个版本
0.1.2 | 2021年9月10日 |
---|---|
0.1.1 | 2021年9月9日 |
0.1.0 | 2021年9月9日 |
#32 在 #dirty
每月189次 下载
在 6 个crate中使用 (通过 skidscan)
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