精易论坛

标题: 求助大佬可以转换易语言 [打印本页]

作者: 逍≮遥≯神    时间: 2025-2-25 14:15
标题: 求助大佬可以转换易语言
typedef HANDLE(__stdcall* CreateMutexWFn)(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCWSTR lpName);
HANDLE __stdcall hookCreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCWSTR lpName) {
    CreateMutexWFn fn = *(CreateMutexWFn*)0x0155A1A4;
    return fn(lpMutexAttributes, bInitialOwner, NULL);
}


#ifdef EN_MULTI_PROC
    //支持双开
    writeCallCode((LPVOID*)0x0112D97E, (PVOID)hookCreateMutexW);
    *(BYTE*)0x0112D983 = 0x90;
    writeCallCode((LPVOID*)0x00706872, (PVOID)hookCreateMutexW);
    *(BYTE*)0x00706877 = 0x90;
    *(BYTE*)0x0116D0DC = 0xEB;
#endif // EN_MULTI_PROC

求助大佬可以转换易语言吗?


作者: 逍≮遥≯神    时间: 2025-2-25 14:32

0112D977    8D45 D4         lea eax,dword ptr ss:[ebp-0x2C]
0112D97A    50              push eax
0112D97B    6A 01           push 0x1
0112D97D    56              push esi
0112D97E    FF15 A4A15501   call dword ptr ds:[0x155A1A4]            ; 多开call处理1  原型


0070686A    83C4 04         add esp,0x4
0070686D    50              push eax
0070686E    6A 00           push 0x0
00706870    6A 00           push 0x0
00706872    FF15 A4A15501   call dword ptr ds:[0x155A1A4]            ; 多开call处理2   原型
打赏
作者: top777    时间: 2025-2-25 14:46
问deepseek或豆包,又快又好。
作者: top777    时间: 2025-2-25 14:48
.版本 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)




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4