|
.版本 2
.支持库 eAPI
.程序集 窗口程序集_启动窗口
.程序集变量 CreateMutexW 原地址, 整数型
.程序集变量 钩子函数地址, 整数型
.子程序 __启动窗口_创建完毕
.如果真 (是否定义常量 (“EN_MULTI_PROC”))
初始化钩子 ()
.如果真结束
.子程序 初始化钩子
局部变量 模块jz, 整数型
局部变量 偏移地址1, 整数型
局部变量 偏移地址2, 整数型
局部变量 偏移地址3, 整数型
局部变量 偏移地址4, 整数型
局部变量 偏移地址5, 整数型
模块jz = 取当前进程模块jz ()
偏移地址1 = 1129854 ' 0x0112D97E 转换为十进制
偏移地址2 = 1129859 ' 0x0112D983 转换为十进制
偏移地址3 = 734322 ' 0x00706872 转换为十进制
偏移地址4 = 734327 ' 0x00706877 转换为十进制
偏移地址5 = 1160348 ' 0x0116D0DC 转换为十进制
CreateMutexW 原地址 = 模块jz + 15994276 ' 0x0155A1A4 转换为十进制
钩子函数地址 = 到整数 (&钩子_CreateMutexW)
写调用代码 (模块jz + 偏移地址1, 钩子函数地址)
写内存字节 (模块jz + 偏移地址2, 144) ' 0x90 转换为十进制
写调用代码 (模块jz + 偏移地址3, 钩子函数地址)
写内存字节 (模块jz + 偏移地址4, 144) ' 0x90 转换为十进制
写内存字节 (模块jz + 偏移地址5, 235) ' 0xEB 转换为十进制
.子程序 写调用代码
.参数 目标地址, 整数型
.参数 函数地址, 整数型
局部变量 代码, 字节集
代码 = {233} ' 0xE9 是 JMP 指令操作码
代码 = 代码 + 整数到字节集 (函数地址 - 目标地址 - 5, 4)
写内存字节集 (目标地址, 代码)
.子程序 写内存字节
.参数 地址, 整数型
.参数 字节值, 字节型
局部变量 字节集数据, 字节集
字节集数据 = {字节值}
写内存字节集 (地址, 字节集数据)
.子程序 写内存字节集
.参数 地址, 整数型
.参数 字节集数据, 字节集
调用API (“kernel32.dll”, “WriteProcessMemory”, 逻辑型, , 取当前进程句柄 (), 地址, 字节集数据, 取字节集长度 (字节集数据), 0)
.子程序 钩子_CreateMutexW
.参数 lpMutexAttributes, 整数型
.参数 bInitialOwner, 逻辑型
.参数 lpName, 整数型
局部变量 原函数, 子程序指针
原函数 = 到子程序指针 (CreateMutexW 原地址)
返回 (原函数 (lpMutexAttributes, bInitialOwner, 0))
.子程序 取当前进程模块jz
局部变量 模块句柄, 整数型
调用API (“kernel32.dll”, “GetModuleHandleW”, 整数型, , 0)
返回 (模块句柄)
.子程序 取当前进程句柄
返回 (调用API (“kernel32.dll”, “GetCurrentProcess”, 整数型, ))
.子程序 是否定义常量
.参数 常量名, 文本型
返回 (取常量数值 (常量名) ≠ 0) |
|