// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" static realSqNewClosure* MLnewclosure = NULL; uint32_t NewClosure(uint32_t v, void* f, int freeVarsCnt) { std::cout << std::endl; wchar_t* funcName; SQGetString(v, -1 - freeVarsCnt, &funcName); //if (funcName == L"sq_CreateAICharacter") //{ //wprintf(L"Funaddr:%s\t", f); //std::cout << f << std::endl; //} wprintf(L"Funname:%s\tAbli:%d\tFunAddr:0x%p", funcName, freeVarsCnt, f); return MLnewclosure(v, f, freeVarsCnt); } static SqPushStringFunc* MLSqPushString = NULL; uint32_t NewPushString(uint32_t v, wchar_t* f, int freeVarsCnt) { std::cout << std::endl; wprintf(L"Funname:%s\tAbli:%d\tFunAddr:0x%p", f, freeVarsCnt, f); return MLSqPushString(v, f, freeVarsCnt); } static RecvPacks* Cbuffer = NULL; DWORD Tihuan(DWORD a1, DWORD a2, DWORD a3, DWORD a4, DWORD a5, unsigned int a6) { std::cout << a1 << std::endl; std::cout << a2 << std::endl; std::cout << a3 << std::endl; std::cout << a4 << std::endl; std::cout << a5 << std::endl; std::cout << a6 << std::endl; return Cbuffer(a1,0,a2,a3,a4,a5,a6); } int HOOK() { std::cout << u8"开始hook" << std::endl; if (MH_Initialize() != MH_OK)//初始化Hook { return 1; } if (MH_CreateHook((void*)0x1128910, &Tihuan, reinterpret_cast(&Cbuffer)) != MH_OK) { return 2; } // Enable the hook for MessageBoxW. if (MH_EnableHook((void*)0x1128910) != MH_OK) { return 3; } /* if (MH_CreateHook((void*)0x1358A60, &NewClosure, reinterpret_cast(&MLnewclosure)) != MH_OK) { return 2; } // Enable the hook for MessageBoxW. if (MH_EnableHook((void*)0x1358A60) != MH_OK) { return 3; } */ return 0; } void testcall() { } void LenheartThread(void) { // 下方写全局变量 static int Nut头地址; static int 属性头地址; static int 可开始执行判断; while (true) { Sleep(10); if (GetHook(0x1A5FB4C, "0x14+0x28+") == 6)可开始执行判断 = 1; if (可开始执行判断 == 1) { RegisterNut(); while (true) { Sleep(10); if (GetExeNutWrtNum(61) != 0 && Nut头地址 == 0)Nut头地址 = GetExeNutWrtNum(61); //if (GetExeNutWrtNum(61 != 0))属性头地址 = GetExeNutWrtNum(61); if (GetExeNutWrtNum(0) == 666) { std::cout << u8"写成功" << std::endl;; testcall(); SetExeNutWrtNum(0, 0); SetNutArrNum(Nut头地址 , 20, 0); } } } } } __declspec(dllexport) void Lenheart() { DWORD threadID; CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)LenheartThread, NULL, 0, &threadID); } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: HOOK(); Lenheart(); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }