4 个稳定版本
1.0.3 | 2024年6月6日 |
---|---|
1.0.2 | 2024年6月4日 |
#2 in #eat
20KB
181 行
PE Export Resolver
这是一个网络安全库,用于解析内存中加载的模块中的函数指针,例如 Windows DLL 提供的函数(或任何其他具有导出函数的 DLL)。仅当您获得系统所有者的合法许可时方可使用。
可在 crates.io 上找到。
用法
- 通过:
cargo add export-resolver
或在您的Cargo.toml
中添加export-resolver = "1.0.2"
。 - 库使用
::new()
实例化。 - 当您需要在代码中使用所需的函数指针时,您可以使用
.add
在运行时解析该函数,它将然后将函数的虚拟地址追加到已解析导出的向量(所有添加了.add
函数)中。 - 要获取函数指针,您可以使用
get_function_address
函数,它将返回一个usize
的 Result,其中usize
是内存地址。 - 仅适用于 x64。
示例
fn main() {
// Create a new instance of the ExportList
let mut exports = ExportList::new();
// Add the desired functions to the ExportList structure, this will resolve and save the virtual addresses
// These calls may cause an Error if the function cannot be found; .add returns Result<(), ExportError>
let _ = exports.add("ntdll.dll", "NtOpenProcess");
let _ = exports.add("ntdll.dll", "NtQuerySystemTime");
// Attempt to get the virtual address; returns returns Result<(), ExportError> - an error will be returned where
// the input function name cannot be found in the vector of resolved functions (i.e. if the above step failed)
// or you have a typo.
let _nt = match exports.get_function_address("NtOpenProcess") {
Ok(v) => println!("NT: {:x}", v),
Err(e) => println!("Eeee {}", e),
};
}
法律声明
本项目,包括所有相关的源代码和文档,仅开发并共享用于网络安全领域的教育和研究目的。它旨在仅由网络安全专业人士、研究人员和教育工作者使用,以增强理解、开发防御策略和提高安全态势。
在任何情况下,本项目均不得用于犯罪、不道德或其他未经授权的活动。本项目的目的是作为学习资源,不应用于进攻性操作或侵犯任何个人或组织权利或隐私的行为。
本项目的作者对所提供材料的误用或非法应用不承担任何责任。通过访问、研究和使用本项目,您承认并同意仅出于合法目的并符合道德指南和适用法律和法规的方式使用其中包含的信息。
自行承担风险使用。如果您决定使用此软件,请进行彻底的独立代码审查,以确保其符合您的标准。不包括任何非官方第三方依赖,以最小化供应链风险。我对执行此操作产生的任何问题不承担责任,验证其安全性和完整性的责任在于软件用户。已尽一切努力编写安全代码。
用户有责任遵守所有相关的本地、州、国家和国际法律和法规,这些法规与网络安全和此类工具及信息的使用有关。如果您对本项目中提供的材料的使用或研究的法律后果不确定,请在继续之前咨询法律专业人士。请记住,在网络安全研究和实践中,负责任和道德的行为至关重要。本项目共享的知识和工具是本着良好的愿望,为网络安全社区做出积极贡献,并相信它们将被以最高程度的诚信使用。
由于设计上的原因,本项目只能在某些架构(x64)上运行,因此它不是一个“开箱即用”的攻击工具(对安全社区负责的贡献)。
依赖项
~128MB
~2M SLoC