以前用于TP游戏32的 很早之前的了 游戏有保护可以直接取出模块地址 今天看到就分享大家看看思路吧
.版本 2
.支持库 spec
.子程序 取模块地址, 长整数型, 公开
.参数 ProcessId, 整数型
.参数 ModuleName, 文本型
.局部变量 hProcess
.局部变量 当前地址, 整数型
.局部变量 内存属性, 字节集
.局部变量 页面名称, 字节集
.局部变量 ModeName, 字节集
.局部变量 AnsiName, 字节集
.局部变量 CompName, 字节集
.局部变量 返回地址, 长整数型
hProcess = OpenProcess__ (1024, 0, ProcessId)
内存属性 = 取空白字节集 (28)
页面名称 = 取空白字节集 (264)
ModeName = 取空白字节集 (8)
AnsiName = 取空白字节集 (8)
CompName = 取空白字节集 (8)
RtlInitAnsiString__ (AnsiName, 取变量数据地址 (ModuleName))
RtlAnsiStringToUnicodeString__ (CompName, AnsiName, 真)
.判断循环首 (ZwQueryVirtualMemory__ (hProcess, 当前地址, 0, 内存属性, 28, 0) = 0)
.如果真 (取字节集数据 (内存属性, 3, 25) = 16777216 且 取字节集数据 (内存属性, 3, 5) = 当前地址)
.如果真 (ZwQueryVirtualMemory__ (hProcess, 当前地址, 2, 页面名称, 264, 0) = 0)
RtlInitUnicodeString__ (ModeName, wcsrchr__ (取字节集数据 (页面名称, 3, 5), 92) + 2)
.如果真 (RtlCompareUnicodeString__ (ModeName, CompName, 真) = 0)
返回地址 = 当前地址
跳出循环 ()
.如果真结束
.如果真结束
.如果真结束
当前地址 = 取字节集数据 (内存属性, 3, 1) + 取字节集数据 (内存属性, 3, 13)
.判断循环尾 ()
RtlFreeUnicodeString__ (CompName)
.如果真 (hProcess > 0)
CloseHandle__ (hProcess)
.如果真结束
返回 (返回地址)
|