十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DMALibrary进程与模块API完整指南:GetBaseDaddy、GetModuleList等实用接口速查

DMALibrary进程与模块API完整指南:GetBaseDaddy、GetModuleList等实用接口速查 DMALibrary进程与模块API完整指南GetBaseDaddy、GetModuleList等实用接口速查【免费下载链接】DMALibrarySimple but extensive library for DMA users, made for gamehacking项目地址: https://gitcode.com/gh_mirrors/dm/DMALibraryDMALibrary 是一个轻量但功能全面的DMADirect Memory AccessC 库面向需要读取/写入目标进程内存的用户。本文将带你快速速查它的核心进程与模块接口——GetBaseDaddy、GetModuleList、GetPidFromName、GetBaseSize等帮助你几分钟内掌握进程基址 模块列表 内存读写的完整使用链路 ⚡为什么选择 DMALibrary这个库把 DMA 场景中最繁琐的底层细节FPGA 设备、物理内存映射、VMM 句柄管理全部封装好了你只需要关注业务逻辑。核心能力一览✅ 特征码扫描Sig Scanning✅ 单点 / 批量Scatter内存读写✅ 进程 PID、基址、基址大小获取✅ CR3 修复应对 EAC 的 DTB 混淆✅ Code Cave 查找与函数调用✅ 代码整洁、注释完善核心声明全部集中在 Memory 类的头文件中实现位于 Memory.cpp一个Memory mem全局单例贯穿整个库。第一步初始化 DMA 与目标进程所有接口都依赖同一个前置动作——调用InitMemory mem; // 全局单例inline if (!mem.Init(explorer.exe, true, true)) std::cout DMA 初始化失败 std::endl;三个参数的含义参数说明process_name目标进程名后续所有读写默认指向该进程memMap为true时先转储物理内存映射到临时目录的mmap.txt可显著提升读取速度debug开启详细日志排查问题必备Init内部会自动完成加载vmm.dll/FTD3XX.dll/leechcore.dll→ 建立 VMM 句柄 → 查询 FPGA 设备 ID → 获取 PID → 调用FixCr3()→ 记录进程基址与基址大小。也就是说一次Init就把进程上下文全部准备好了。使用前请确保程序根目录存在 DMA 供应商提供的三个动态库且libs/目录下有vmm.lib与leechcore.lib项目自带DMALibrary/libs/中的头文件vmmdll.h和leechcore.h。如何用 GetBaseDaddy 获取模块基址GetBaseDaddy是获取模块基址Base Address的主力接口uintptr_t base mem.GetBaseDaddy(explorer.exe); if (base) std::cout Base: 0x std::hex base std::endl;入参模块名字符串内部自动转换为宽字符以支持 Unicode 模块名返回模块基址size_t找不到时返回0实现原理底层调用VMMDLL_Map_GetModuleFromNameW按模块名精确匹配后返回vaBase拿到基址后配合偏移即可完成经典读写字段操作std::cout Value: mem.Readint(base 0x66) std::endl; mem.Writeint(base 0x66, 0x69);它的兄弟接口GetBaseSize则返回模块的cbImageSize映像大小常用于界定扫描范围——例如对FindSignature划定[base, base base_size]的扫描区间。如何用 GetModuleList 枚举进程模块GetModuleList返回目标进程加载的全部模块名列表是模块枚举与排查的入口std::vectorstd::string modules mem.GetModuleList(explorer.exe); for (auto m : modules) std::cout m std::endl;几个关键细节值得注意底层基于VMMDLL_Map_GetModuleUVMMDLL_MODULE_FLAG_NORMAL取每个条目的uszText字段⚠️它读取的是Init时设定的当前进程 PID所以调用前必须先用同一个进程名初始化典型用途遍历模块找 Code Cavec_shellcode::find_all_codecave正是先取模块列表、跳过系统级黑名单模块再逐模块寻找可执行空间实用接口速查表以下接口均声明于 Memory.h按功能分组方便按需查找 进程信息类接口作用返回值GetPidFromName(name)按名称获取单个 PIDDWORD失败为 0GetPidListFromName(name)获取所有匹配的 PID子串匹配std::vectorintGetProcessInformation()完整进程信息含 vaPEB 等VMMDLL_PROCESS_INFORMATIONGetProcessPeb()读取并反序列化进程 PEBPEB 模块信息类接口作用返回值GetBaseDaddy(module)模块基址size_t失败为 0GetBaseSize(module)模块映像大小size_t失败为 0GetModuleList(process)模块名列表std::vectorstd::stringGetExportTableAddress(import, process, module)导出表EAT中某函数地址uintptr_tGetImportTableAddress(import, process, module)导入表IAT中某函数地址uintptr_t EAT/IAT 接口的组合用法很经典先GetPidFromName(csrss.exe)拿到系统进程 PID再查ntoskrnl.exe中某个内核函数的导出地址——这是库内置 SysCall 模板的标准套路。 内存操作类接口作用ReadT(addr)/WriteT(addr, value)模板化类型安全读写ReadChain(base, offsets)按偏移链pointer chain逐级解引用一行代码穿透多级指针FindSignature(sig, start, end, pid)特征码扫描支持?通配如48 ? ? ?CreateScatterHandle/AddScatterReadRequest/ExecuteReadScatter批量散读一次 DMA 事务读多处性能最佳DumpMemory(addr, path)将模块内存按 PE 落盘自动修正节表文件偏移️ 环境对抗类接口作用FixCr3()修复 EAC 的 CR3/DTB 混淆枚举所有 DTB 候选逐个试用直到模块表可见GetShellcode().find_codecave(size, process, module)查找足够大且 RWX 的 Code CaveGetShellcode().call_function(hook, func, process)通过临时jmp [RIP0]补丁调用目标进程函数GetKeyboard()通过内核读取键盘状态IsKeyDown判断按键三个最容易踩的坑 ⚠️GetBaseDaddy返回 0通常是进程未初始化成功或反作弊如 EAC已隐藏进程 DTB。先确认Init返回值再检查FixCr3是否成功——后者依赖symsrv.dll、dbghelp.dll和项目根目录的info.db。Scatter 句柄忘记关闭CreateScatterHandle用完必须CloseScatterHandle否则会内存泄漏。参考 Example.cpp 中的完整示范流程。模块名/进程名区分GetModuleList按Init时的进程名操作而GetBaseDaddy的入参是模块名主模块即进程名。两者混用是新手最常见的报错来源。典型使用流程一键上手mem.Init(target.exe); // 1. 初始化 DMA 进程上下文 uintptr_t base mem.GetBaseDaddy(target.exe); // 2. 取模块基址 auto modules mem.GetModuleList(target.exe); // 3. 枚举模块 auto value mem.Readuint32_t(base 0x1234);// 4. 按偏移读字段 mem.Writeuint32_t(base 0x1234, 100); // 5. 写回高频批量场景则升级为 Scatter 模式CreateScatterHandle→ 循环AddScatterReadRequest→ExecuteReadScatter→CloseScatterHandle把 N 次 DMA 往返压缩为 1 次。写在最后DMALibrary 的设计哲学是Simple but extensive头文件里每一个接口都有清晰的 Doxygen 注释配合Example/Example.cpp的最小可用示例几乎零学习成本就能跑通第一个 DMA 读取项目。建议对照DMALibrary/Memory/目录下的 Memory、Shellcode、InputManager 三个头文件精读一遍即可掌握该库 90% 的实用能力 【免费下载链接】DMALibrarySimple but extensive library for DMA users, made for gamehacking项目地址: https://gitcode.com/gh_mirrors/dm/DMALibrary创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表