#include "pch.h" #include "hook.h" extern int LbState; extern int RbState; extern int MbState; static int OtherPlayerInfoType = 0; static bool HookOtherPlayerInfo = false; static int OtherPlayerInfoImg = 0; //注册nut uint32_t __cdecl hook::H_Register_Nut(uint32_t v, void* f, int freeVarsCnt) { //wchar_t* funcName = nullptr; //SQGetString(v, -1 - freeVarsCnt, &funcName); //char* OutPutText = DNFTOOL::SquirrelU2W(funcName); //std::string FuncName = OutPutText; //delete []OutPutText; //std::wcout << funcName << std::endl; //wprintf(L"Function:%s Num:%d Address: 0x%p\n", funcName, freeVarsCnt,f); static int build = 0; if (build == 0 && f == (void*)0x005C5980) { squirrel::R_Register_Nut(); //squirrel::InitGameScript();//调用初始化程序 build = 1; //Quick_SQdofileBuffer("BaseC_Tool", BaseC_Tool); //Quick_SQdofileBuffer("BaseC_Tool1", BaseC_Tool1); //Quick_SQdofileBuffer("BaseC_Tool2", BaseC_Tool2); //Quick_SQdofileBuffer("BaseC_Tool3", BaseC_Tool3); uint32_t v = GetSqVm(); std::string BaseFile = "YosinBaseC"; //std::string Base = "function Sq_Get_Ex_LevelData(a,b,c) {return 0;} function Sq_Get_Ex_IntData(a,b,c) {return 0;} function Sq_Get_Ex_SkillCoolTime(a,b,c) {return 0;} function Lenheart(pack) {} function Sq_DrawMainMaxLayerCustomUI(pack) { } function Sq_DrawMainTopLayerCustomUI(pack) {} function Sq_SelectCharacter(Chunk){} function Sq_SendPackType_Event(Chunk){} function Sq_SendPackByte_Event(Chunk){} function Sq_SendPackWord_Event(Chunk){} function Sq_SendPackDWord_Event(Chunk){} function Sq_SendPackChar_Event(Chunk){} function Sq_SendPack_Event(Chunk){} function Sq_Pack_Control(Chunk){} "; std::string Base = R"(function Sq_L_Medal (x,y) {} function Sq_SettingWindowCallBack (x,y) {} function Sq_BuffSwitchingCallBack (x,y) {} function Sq_SwitchingCallBack (x,y) {} function Sq_UpgradeCallBack (x,y) {} function Sq_RecoveryCallBack (x,y) {} function Sq_RecoveryTypeSetCallBack (Type) {} function Sq_DrawMainMaxLayerCustomUI (pack) {} function Lenheart (VmTop) {} function Sq_MouseEventCallBack (Lb, Rb, Mb) {} function Sq_SelectCharacter (Chunk) {} function Sq_DrawMainTopLayerCustomUI (pack) {} function Sq_GetExeStr_Event (StrIndex) {return StrIndex;} function Sq_CreatChr (chunk) {} function Sq_SendPackType_Event (Type) {} function Sq_SendPackByte_Event (Parm) {} function Sq_SendPackWord_Event (Parm) {} function Sq_SendPackDWord_Event (Parm) {} function Sq_SendPackChar_Event (Parm) {} function Sq_SendPack_Event () {} function Sq_DrawItemBack (Xpos, Ypos, Image) {} function Sq_DrawItemFront (Xpos, Ypos, Image) {} function Sq_GetDrawMonBloodSw () {return false;} function Sq_DrawMonsterBlood (Object, X, Y) {} function Sq_Set_Inventory_M_Pos (This) {} function Sq_Get_Ex_IntData (SkillAddress, Idx, objAddress) {return 0;} function Sq_Get_Ex_SkillCoolTime (SkillAddress, Idx, objAddress) {return 0;} function Sq_Get_Ex_LevelData (SkillAddress, Idx, objAddress) {return 0;} function Sq_PlayerEachPos (x, y) {} function Sq_DrawMainMaxLayerCustomUI (pack) {} function Sq_PushDamageFontData (ObjAddress, X, Y, Z, Value, Type) { return 0;} function Sq_Pack_Control (chunk) {} function Sq_MessageWindowDraw (a,c) {} function Sq_Get_Event_Pos (a) {return 1;} function Sq_L_OtherPlayerInfo (x, y, Type, Value, ImgBuf) {local str = Value.tostring(); local lenght = LenheartTextClass.GetStringLength(str); L_sq_DrawImg(ImgBuf, x + 70 - lenght, y + 5); return Value;} function Sq_DrawMiniMapUI (a) {} )"; wchar_t* sfile = DNFTOOL::charTowchar_t((char*)BaseFile.c_str()); wchar_t* ss = DNFTOOL::charTowchar_t((char*)Base.c_str()); squirrel::SQdofileBuffer(v, sfile, ss); } #if defined DOFILE_HOOK if (f == (void*)0x013563C0) { return MLnewclosure(v, squirrel::LDofile, freeVarsCnt); } #endif return MLnewclosure(v, f, freeVarsCnt); } typedef uint32_t(__cdecl* LSqPushStringFunc)(uint32_t v, const wchar_t* s, uint32_t l); LSqPushStringFunc LrealSqPushString; std::string& NReplaceAll(std::string& str, const std::string& src, const std::string& dst) { std::string::size_type pos(0); while (true) { if ((pos = str.find(src)) != std::string::npos) { str.replace(pos, src.length(), dst); } else { break; } } return str; } uint32_t __cdecl LMySqPushString(uint32_t v, const wchar_t* s, uint32_t l) { //获取技能攻击力 if (!wcscmp(s, L"getCurrentModuleDamageRate")) { return LrealSqPushString(v, L"L_getCurrentModuleDamageRate", l); } //drawmain drawMainCustomUI_ATFighter(obj) //if (wcsstr(s, L"drawMainCustomUI_")) { // return LrealSqPushString(v, L"L_drawMainCustomUI_All", l); //} //compilestring //wprintf(L"Function:%s \n",s ); return LrealSqPushString(v, s, l); } //注册收包 void hook::H_Register_Pack(void* Ecx) { Lpfn_Init(Ecx); sock::R_Register_Pack(); } //Hook文字 #ifdef CODEDRAW struct CodeDrawObj { int Color; std::string str; }; extern std::map< std::string, CodeDrawObj>CodeDrawMap; #endif typedef DWORD(_fastcall _BFontInitW)(DWORD thisc, DWORD Seat); static _BFontInitW* Wsub_1206570 = (_BFontInitW*)0x1206570; typedef int(_fastcall _DrawOtherPlayer_Img)(int thisc, void*, int X, int Y, int Img); static _DrawOtherPlayer_Img* DrawOtherPlayer_Img = (_DrawOtherPlayer_Img*)0x11A8F60; //HOOK绘制字体 void _fastcall hook::H_Register_DrawCode(DWORD thisc, int Seat, int a3, int a4, int a5, int a6) { wchar_t* strbuffer = (wchar_t*)a6; if (strbuffer == NULL)return; wchar_t* clone = new wchar_t[wcslen(strbuffer) + 2]; wcscpy(clone, strbuffer); std::string GameStr; DNFTOOL::Wchar_tToString(GameStr, clone); delete[]clone; //if (GameStr.find("快捷键") != std::string::npos) { // std::cout << 121231 << std::endl; //} //他人信息描述HOOK if (OtherPlayerInfoType != 0) { if (!HookOtherPlayerInfo) { HookOtherPlayerInfo = true; } else { HookOtherPlayerInfo = false; int Value = atoi(GameStr.c_str()); uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_L_OtherPlayerInfo", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a3); SQPushInt(v, a4); SQPushInt(v, OtherPlayerInfoType - 1); SQPushInt(v, Value); if (OtherPlayerInfoImg) { SQPushInt(v, OtherPlayerInfoImg); //DrawOtherPlayer_Img(*(int*)0x1B45B94, 0, a3, a4 + 3, OtherPlayerInfoImg); } else { SQPushInt(v, 0); } SQ_Call(v, 6, 1, 1); SQGetInt(v, -1, &Value); SQPop(v, 3); wchar_t wcs[128]; int Type = OtherPlayerInfoType - 1; if ((Type >= 12 && Type <= 16) || Type == 18 || Type == 19) { wsprintf(wcs, L"+%d%S", Value, ".0%"); } else { wsprintf(wcs, L"%d", Value); } DrawCodeF(thisc, Seat, a3, a4, a5, (int)wcs); OtherPlayerInfoType = 0; //DrawCodeF(thisc, Seat, a3, a4, a5, a6); return; } } //if (GameStr.find("天界地区") != std::string::npos) //{ // std::cout << GameStr << std::endl; //} //std::cout << GameStr << std::endl; //if (GameStr.find("辅助装备") != std::string::npos) //{ // wchar_t* nclone = new wchar_t[wcslen(strbuffer) + 8]; // WReplace(nclone, strbuffer, L"辅助装备", L"VIP装备"); // //string_replace(GameStr, "辅助装备", "VIP装备"); // //const wchar_t* newstrbuffer = DNFTOOL::GetWC((char*)GameStr.c_str()); // return DrawCodeF(thisc, Seat, a3, a4, a5, (int)nclone); //} //Hook文字 #ifdef CODEDRAW if (CodeDrawMap.count(GameStr) == 1) { wchar_t* str = DNFTOOL::char2wchar(CodeDrawMap[GameStr].str.c_str()); DrawCodeF(thisc, Seat, a3, a4, CodeDrawMap[GameStr].Color, (int)str); delete[]str; return; } #endif #ifdef MEDAL_SWITCH if (GameStr.find("倾泪寒勋章") != std::string::npos || GameStr.find("傾淚寒勳章") != std::string::npos || GameStr.find("倾泪寒勳章") != std::string::npos || GameStr.find("yosin_medal") != std::string::npos) { Wsub_1206570(thisc, 0); uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_L_Medal", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a3); SQPushInt(v, a4); SQ_Call(v, 3, 0, 1); SQPop(v, 2); return; } #endif //Hook游戏设置窗口CallBack ui/optionwindow #ifdef SETTINGWINDOWS if (GameStr.find("倾泪寒自定义设置") != std::string::npos) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SettingWindowCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a3); SQPushInt(v, a4); SQ_Call(v, 3, 0, 1); SQPop(v, 2); return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer); } #endif //buff换装 #ifdef BUFFSWITCHING_SWITCH if (GameStr.find("LenheartBUFFSwitching") != std::string::npos) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_BuffSwitchingCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a3); SQPushInt(v, a4); SQ_Call(v, 3, 0, 1); SQPop(v, 2); return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer); } if (GameStr.find("LenheartSwitching") != std::string::npos) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SwitchingCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a3); SQPushInt(v, a4); SQ_Call(v, 3, 0, 1); SQPop(v, 2); return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer); } #endif //强化系统 #ifdef NEWUPGRADE_SWITCH if (GameStr.find("LenheartUpgrade") != std::string::npos) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_UpgradeCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a3); SQPushInt(v, a4); SQ_Call(v, 3, 0, 1); SQPop(v, 2); return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer); } #endif //Hook游戏背包窗口回收功能CallBack ui/inventory/inventory_bottom.ui #ifdef RecoverySystem if (GameStr.find("倾泪寒回收") != std::string::npos) { if (GameStr.find("倾泪寒回收功能") != std::string::npos) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_RecoveryCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a3 - 800); SQPushInt(v, a4); SQ_Call(v, 3, 0, 1); SQPop(v, 2); return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer); } int Type = 0; if (GameStr.find("倾泪寒回收装备") != std::string::npos)Type = 1; else if (GameStr.find("倾泪寒回收消耗品") != std::string::npos)Type = 2; else if (GameStr.find("倾泪寒回收材料") != std::string::npos)Type = 3; else if (GameStr.find("倾泪寒回收副职业材料") != std::string::npos)Type = 5; else if (GameStr.find("倾泪寒回收任务材料") != std::string::npos)Type = 4; else if (GameStr.find("倾泪寒回收时装") != std::string::npos)Type = 6; else if (GameStr.find("倾泪寒回收徽章") != std::string::npos)Type = 7; else if (GameStr.find("倾泪寒回收宠物宠物") != std::string::npos)Type = 8; else if (GameStr.find("倾泪寒回收宠物装备") != std::string::npos)Type = 9; else if (GameStr.find("倾泪寒回收宠物消耗品") != std::string::npos)Type = 10; if (Type > 0) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_RecoveryTypeSetCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, Type); SQ_Call(v, 2, 0, 1); SQPop(v, 2); return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer); } } if (GameStr.find("傾淚寒回收") != std::string::npos) { if (GameStr.find("傾淚寒回收功能") != std::string::npos) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_RecoveryCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a3 - 800); SQPushInt(v, a4); SQ_Call(v, 3, 0, 1); SQPop(v, 2); return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer); } int Type = 0; if (GameStr.find("傾淚寒回收裝備") != std::string::npos)Type = 1; else if (GameStr.find("傾淚寒回收消耗品") != std::string::npos)Type = 2; else if (GameStr.find("傾淚寒回收材料") != std::string::npos)Type = 3; else if (GameStr.find("傾淚寒回收副職業材料") != std::string::npos)Type = 5; else if (GameStr.find("傾淚寒回收任務材料") != std::string::npos)Type = 4; else if (GameStr.find("傾淚寒回收時裝") != std::string::npos)Type = 6; else if (GameStr.find("傾淚寒回收徽章") != std::string::npos)Type = 7; else if (GameStr.find("傾淚寒回收寵物寵物") != std::string::npos)Type = 8; else if (GameStr.find("傾淚寒回收寵物裝備") != std::string::npos)Type = 9; else if (GameStr.find("傾淚寒回收寵物消耗品") != std::string::npos)Type = 10; if (Type > 0) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_RecoveryTypeSetCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, Type); SQ_Call(v, 2, 0, 1); SQPop(v, 2); return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer); } } #endif #ifndef SELL /* //副屏绘制文字 if (a3 == 15 && a4 == 503) { for (DrawCodestruct iter : DrawCodeT3_STL) { wchar_t* str = DNFTOOL::char2wchar(iter.str.c_str()); DrawCodeF(thisc, Seat, iter.Xpos, iter.Ypos, iter.Color, (int)str); delete[]str; } DrawCodeT3_STL.clear(); return; } */ //Ver.1180.2.1r if (GameStr.find("Ver. 1.180.2.1r") != std::string::npos) { return; } if (GameStr.find("ch11.格兰之森") != std::string::npos) { a3 += 32; a4 -= 58; } if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6 && (GameStr.find("顺畅") != std::string::npos || GameStr.find("拥挤") != std::string::npos || GameStr.find("爆满") != std::string::npos)) { a3 += 32; a4 -= 58; } // ui/hud/hud.ui 请勿删除 //if (a3 == 9999 && a4 == 9999) //{ // squirrel::SqrCallBackFunc(); // //imguiC::Init(); // return; //} #endif // !SELL // ui/hud/hud.ui 特殊 // if (a3 == 9999 && a4 == 9998) // { // Wsub_1206570(thisc, 0); // uint32_t v = GetSqVm(); // //SQPushRootTable(v); // //SQPushString(v, L"Sq_DrawMainMaxLayerCustomUI", -1); // //SQ_Get(v, -2); // //SQPushRootTable(v); // //SQPushString(v, L"Lenheart", -1); // //SQ_Call(v, 2, 0, 1); // //SQPop(v, 2); // //#ifdef MOUSE_SWITCH // SQPushRootTable(v); // SQPushString(v, L"Sq_MouseEventCallBack", -1); // SQ_Get(v, -2); // SQPushRootTable(v); // SQPushInt(v, LbState); // SQPushInt(v, RbState); // SQPushInt(v, MbState); // SQ_Call(v, 4, 0, 1); // SQPop(v, 2); //#endif // MOUSE_SWITCH // // // for (DrawCodestruct iter : DrawCodeT1_STL) // { // wchar_t* str = DNFTOOL::char2wchar(iter.str.c_str()); // DrawCodeF(thisc, Seat, iter.Xpos, iter.Ypos, iter.Color, (int)str); // delete[]str; // } // DrawCodeT1_STL.clear(); // return; // } // ui/selectcharacter/selectcharacterover.ui 选角色 //if (a3 == 9999 && a4 == 9489) //{ // static bool Init = false; // if (!Init) // { // squirrel::InitGameScript();//调用初始化程序 // Init = true; // } // uint32_t v = GetSqVm(); // SQPushRootTable(v); // SQPushString(v, L"Sq_SelectCharacter", -1); // SQ_Get(v, -2); // SQPushRootTable(v); // SQPushString(v, L"Lenheart", -1); // SQ_Call(v, 2, 0, 1); // SQPop(v, 2); // return; //} // ui/event/creatednftwevent/creatednftwevent.ui 顶层绘制 //if (a3 == 8888 && a4 == 8884) //{ // uint32_t v = GetSqVm(); // SQPushRootTable(v); // SQPushString(v, L"Sq_DrawMainTopLayerCustomUI", -1); // SQ_Get(v, -2); // SQPushRootTable(v); // SQPushString(v, L"Lenheart", -1); // SQ_Call(v, 2, 0, 1); // SQPop(v, 2); // for (DrawCodestruct iter : DrawCodeT2_STL) // { // wchar_t* str = DNFTOOL::char2wchar(iter.str.c_str()); // DrawCodeF(thisc, Seat, iter.Xpos, iter.Ypos, iter.Color, (int)str); // delete[]str; // } // DrawCodeT2_STL.clear(); // return; //} return DrawCodeF(thisc, Seat, a3, a4, a5, a6); } #ifdef GET_EXE_STR //Exe索引字符串函数Hook typedef int(_cdecl _sub1220590)(int a1); static _sub1220590* sub1220590 = (_sub1220590*)0x1220590; int _cdecl Newsub1220590(int a1) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return sub1220590(a1); } else { int StrIndex; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_GetExeStr_Event", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a1); SQ_Call(v, 2, 1, 1); SQGetInt(v, -1, &StrIndex); SQPop(v, 3); return sub1220590(StrIndex); } } #endif //HOOK创建角色 #ifdef CREAT_CHR_UI typedef DWORD(_fastcall _OldCreatChr)(DWORD thisc, DWORD Seat, DWORD a3); static _OldCreatChr* OldCreatChr; DWORD _fastcall CreatChr(DWORD thisc, DWORD Seat, DWORD a2) { //std::cout << "a2:" << a2 << std::endl; if (*(int*)0x1A5FE1C == 1) { if (*(int*)a2 == 25481068) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_CreatChr", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushString(v, L"Lenheart", -1); SQ_Call(v, 2, 0, 1); SQPop(v, 2); } } return OldCreatChr(thisc, 0, a2); } #endif // CREAT_CHR_UI //HOOK Item颜色 #ifdef ITEMRARITY extern std::map< int,int>ItemColorMap; typedef DWORD(_cdecl _OldHookEquNameColor)(int rarity); static _OldHookEquNameColor* OldHookEquNameColor; DWORD _cdecl HookEquNameColor(int rarity) { DWORD OldColor = OldHookEquNameColor(rarity); switch (rarity) { case 6: return 0xFF0055FF; case 7: return 0xFF9314FF; case 8: return 0xFF1CBC0C; case 9: return 0xFFACFF08; } return OldColor; } typedef DWORD(_fastcall _OldHookItemColor)(DWORD thisc, DWORD Seat); static _OldHookItemColor* OldHookItemColor; DWORD _fastcall HookItemColor(DWORD thisc, DWORD Seat) { int ItemCode = *(int*)(thisc + 0x1C); if (ItemColorMap.count(ItemCode) == 1) { return ItemColorMap[ItemCode]; } //不在注册项目颜色map里就执行原颜色获取 int Rarity = *(int*)(thisc + 0xF4); int color = HookEquNameColor(Rarity); return color; } #endif //HOOK 发包类型 #ifdef SENDPACKHOOK static SendPacksType _OldSendPackType; int __fastcall NewSendPacksType(DWORD thisc, int Seat, int Parm) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return _OldSendPackType(thisc, 0, Parm); } else { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SendPackType_Event", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, Parm); SQ_Call(v, 2, 0, 1); SQPop(v, 2); return _OldSendPackType(thisc, 0, Parm); } } static SendPacksByte _OldSendPackByte; int __fastcall NewSendPacksByte(DWORD thisc, int Seat, int Parm) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return _OldSendPackByte(thisc, 0, Parm); } else { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SendPackByte_Event", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, Parm); SQ_Call(v, 2, 0, 1); SQPop(v, 2); return _OldSendPackByte(thisc, 0, Parm); } } static SendPacksWORD _OldSendPackWord; int __fastcall NewSendPacksWord(DWORD thisc, int Seat, int Parm) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return _OldSendPackWord(thisc, 0, Parm); } else { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SendPackWord_Event", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, Parm); SQ_Call(v, 2, 0, 1); SQPop(v, 2); return _OldSendPackWord(thisc, 0, Parm); } } static SendPacksDWORD _OldSendPackDWord; int __fastcall NewSendPacksDWord(DWORD thisc, int Seat, int Parm) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return _OldSendPackDWord(thisc, 0, Parm); } else { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SendPackDWord_Event", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, Parm); SQ_Call(v, 2, 0, 1); SQPop(v, 2); return _OldSendPackDWord(thisc, 0, Parm); } } static SendPacksChar _OldSendPackChar; int __fastcall NewSendPacksChar(DWORD thisc, int Seat, char* Parm,int Size) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return _OldSendPackChar(thisc, 0, Parm,Size); } else { wchar_t* buffer = DNFTOOL::charTowchar_t(Parm); uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SendPackChar_Event", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushString(v, buffer,Size); SQ_Call(v, 2, 0, 1); SQPop(v, 2); delete[] buffer; return _OldSendPackChar(thisc, 0, Parm,Size); } } static SendPacks* _OldSend; int NewSend() { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return _OldSend(); } else { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SendPack_Event", -1); SQ_Get(v, -2); SQPushRootTable(v); SQ_Call(v, 1, 0, 1); SQPop(v, 2); return _OldSend(); } } #endif /* //HOOK 获取ITEM 坐标 typedef int(_fastcall __GetItemPos)(DWORD thisc, DWORD Seat); static __GetItemPos* GetItemPos; int __fastcall NewGetItemPos(DWORD thisc, int Seat) { int PosX = *(int*)(thisc + 0x14); int PosY = *(int*)(thisc + 0x18); return PosX; } */ //Img 绘制函数 //typedef int(_fastcall __sub_11A97E0)(DWORD a1, DWORD Seat, int a2, int a3,DWORD a4, int a5,int a6,int a7 ,int a8,float a9, float a10); //static __sub_11A97E0* sub_11A97E0; //int _fastcall Newsub_11A97E0(DWORD a1, DWORD Seat, int a2, int a3, DWORD a4, int a5, int a6, int a7, int a8, float a9, float a10) //{ // if (a7 != 0)std::cout << a7 << std::endl;; // static DWORD st = a4; // return sub_11A97E0(a1, 0, a2, a3, st, a5, a6, a7, a8, a9, a10); //} //HOOK 绘制stackable typedef int(_cdecl _sub7AA800)(int a1, int a2, int a3 , int a4, int a5 , int a6,char a7); static _sub7AA800* sub7AA800; int _cdecl newsub7AA800(int a1, int a2, int a3, int a4, int a5, int a6, char a7) { return sub7AA800(a1, a2, a3, a4, a5, a6, a7); } //HOOK 绘制Item typedef int(_fastcall _sub11A8F60)(DWORD a1, DWORD Seat, int a2, int a3, int a4); static _sub11A8F60* sub11A8F60; typedef int(_fastcall _Load_Npk)(int thisc, void*, int a2, wchar_t* a3); typedef int(_fastcall _Get_Img)(int thisc, void*, int a2); static _Load_Npk* Load_Npk = (_Load_Npk*)0x11C0410; static _Get_Img* Get_Img = (_Get_Img*)0x11AA190; int _fastcall newsub11A8F60(DWORD a1, DWORD Seat, int a2, int a3, int a4) { //int n = Load_Npk(*(int*)0x1B4684C, 0, 0, L"character/swordman/effect/skillicon.img"); //int imgbuf = Get_Img(n,0,70); //if (a4 == imgbuf) { // std::cout << "sadsasd" << std::endl; //} //#if defined HUDUI_100 // //血槽 // if (a2 == 0 && a3 == 508) { // static int hudimg = Load_Npk(*(int*)0x1B4684C, 0, 0, L"interface2/hud/hud.img"); // if (Get_Img(hudimg, 0, 0) == a4) { // return 0; // } // } //#endif static bool OpenSw = false; if (!OpenSw) { //std::cout << DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") << std::endl; if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return sub11A8F60(a1, 0, a2, a3, a4); } else { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_DrawItemBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a2); SQPushInt(v, a3); SQPushInt(v, a4); SQ_Call(v, 4, 0, 1); SQPop(v, 2); int ret = sub11A8F60(a1, 0, a2, a3, a4); SQPushRootTable(v); SQPushString(v, L"Sq_DrawItemFront", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a2); SQPushInt(v, a3); SQPushInt(v, a4); SQ_Call(v, 4, 0, 1); SQPop(v, 2); return ret; } } /* //模拟SQRCAll typedef int(__sub_5AADF0)(void(__cdecl* a1)(int, int, int, int), int a2, int a3); static __sub_5AADF0* sub_5AADF0; int Newsub_5AADF0(void(__cdecl* a1)(int, int, int, int), int a2, int a3) { std::cout << "drawani: " << a1 << std::endl; //std::cout << "TestDrawSkill" << std::endl; //std::cout << "DrawSkillAddr:" << a1 << std::endl; return sub_5AADF0(a1, a2, a3); } */ //大部分IMG数字的调用函数 typedef int(_fastcall __sub_11B2390)(DWORD a1, DWORD Seat, int a2, int a3, int a4, int a5, DWORD* a6); static __sub_11B2390* sub_11B2390; int _fastcall Newsub_11B2390(DWORD a1, DWORD Seat, int a2, int a3, int a4, int a5, DWORD* a6) { //std::cout << "a2: " << a2 << std::endl; //std::cout << "a3: " << a3 << std::endl; //std::cout << "a4: " << a4 << std::endl; //std::cout << "a5: " << a5 << std::endl; return sub_11B2390(a1, 0, a2, a3, a4, a5, a6); } /* //push string std::map< std::wstring, int>BQS; static SqPushStringFunc* OldSQPushString; int NewSqPushStringFunc(uint32_t v, const wchar_t* s, int len) { std::wstring a = s; if (BQS.count(a) != 1) { wprintf(L"Name:%s Len:%d\n", s, len); BQS[a] = 1; } //std::wcout << funcName << std::endl; return OldSQPushString(v, s, len); } */ /* typedef int(SQ_CompilebufferFunc)(uint32_t v, const wchar_t* s,int size, wchar_t* filename, BOOL printerror); static SQ_CompilebufferFunc* SQ_Compilebuffer = (SQ_CompilebufferFunc*)0x135B2C0; */ /* // HOOK exe 调用文本进 松鼠虚拟机 static SQ_CompilebufferFunc* OldSQ_Compilebuffer; int NewSQ_Compilebuffer(uint32_t v, const wchar_t* s, int size, wchar_t* filename, BOOL printerror) { wprintf(L"File--%s: \n str--\n%s \n \n", filename, s); return OldSQ_Compilebuffer(v, s, size, filename, printerror); } */ #if defined MONSTER_BLOOD_UI typedef int(_fastcall _Blood)(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2); typedef int(_fastcall _DrawMonFace)(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2); static _Blood* OldBlood; static _Blood* OldBlood1; static _Blood* OldBlood2; static _DrawMonFace* DrawMonFace = (_DrawMonFace*)0x43a1b0; int _fastcall NewBlood(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2) { BOOL DrawSw; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_GetDrawMonBloodSw", -1); SQ_Get(v, -2); SQPushRootTable(v); SQ_Call(v, 1, 1, 1); SQGetBool(v, -1, &DrawSw); SQPop(v, 3); if (DrawSw == TRUE) { return 0; } else { int ret = OldBlood(thisc, 0, a1, a2); uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_DrawMonsterBlood", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, *(DWORD*)(thisc + 8)); SQPushInt(v, a1); SQPushInt(v, a2); SQ_Call(v, 4, 0, 1); SQPop(v, 2); return ret; } } int _fastcall NewBlood1(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2) { BOOL DrawSw; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_GetDrawMonBloodSw", -1); SQ_Get(v, -2); SQPushRootTable(v); SQ_Call(v, 1, 1, 1); SQGetBool(v, -1, &DrawSw); SQPop(v, 3); if (DrawSw == TRUE) { return 0; } else { int ret = OldBlood1(thisc, 0, a1, a2); uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_DrawMonsterBlood", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, *(DWORD*)(thisc + 8)); SQPushInt(v, a1); SQPushInt(v, a2); SQ_Call(v, 4, 0, 1); SQPop(v, 2); return ret; } } int _fastcall NewBlood2(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2) { int ret = OldBlood2(thisc, 0, a1, a2); uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_DrawMonsterBlood", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, *(DWORD*)(thisc + 8)); SQPushInt(v, a1); SQPushInt(v, a2); SQ_Call(v, 4, 0, 1); SQPop(v, 2); return ret; } #endif //背包鼠标位置HOOK开启 (为了拿到this对象地址) #ifdef Inventory_M_Pos typedef int(_fastcall _inventory_M_Pos)(DWORD thisc, DWORD Seat); static _inventory_M_Pos* Old_inventory_M_Pos; int _fastcall New_inventory_M_Pos(DWORD thisc, DWORD Seat) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_Set_Inventory_M_Pos", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, thisc); SQ_Call(v, 2, 0, 1); SQPop(v, 2); return Old_inventory_M_Pos(thisc, Seat); } #endif typedef int(_cdecl _9D2300)(DWORD a1, DWORD a2,DWORD a3,char a4 , DWORD a5,char a6); static _9D2300* Old_9D2300; int _cdecl New_9D2300(DWORD a1, DWORD a2, DWORD a3, char a4, DWORD a5, char a6) { std::cout << a5 << std::endl; return Old_9D2300(a1, a2,a3,a4,a5,a6); } typedef DWORD** (_fastcall _Event)(DWORD thisc, DWORD Seat, DWORD a2, DWORD** a3, char a4); static _Event* OldEvent; DWORD** _fastcall NewEvent(DWORD thisc, DWORD Seat, DWORD a2, DWORD** a3, char a4) { if ((int)a4 == 1 && (int)a3 == 96527 /*&& a2 <= 536 && ((a2 - 456)%20 == 0)*/)//事先修改了活动图标的Y轴 在进行HOOK以便修改 { int StrIndex; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_Get_Event_Pos", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, 1); SQ_Call(v, 2, 1, 1); SQGetInt(v, -1, &StrIndex); SQPop(v, 3); a2 += 144; a3 = (DWORD**)StrIndex; } return OldEvent(thisc, Seat, a2, a3, a4); } //typedef DWORD(_Cutting)(DWORD a1, DWORD a2, DWORD a3, DWORD a4); //static _Cutting* Old6F4370; //static _Cutting* Old11AEE50; ////裁切函数HOOK //DWORD New6F4370(DWORD a1, DWORD a2, DWORD a3, DWORD a4) //{ // if (a1 == 0 && a3 == 800)//血球篮球的裁切策略 需要+14 因为球的坐标+了14 // { // a2 += 14; // a4 += 14; // } // return Old6F4370(a1, a2, a3, a4); //} ////裁切函数HOOK //DWORD New11AEE50(DWORD a1, DWORD a2, DWORD a3, DWORD a4) //{ // if (a1 == 0 && a2 == 625)//血球篮球的裁切策略 需要+14 因为球的坐标+了14 // { // a1 = 170; // a2 = 548; // } // return Old11AEE50(a1, a2, a3, a4); //} //typedef DWORD(_fastcall _11A97E0)(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, WORD* a3, DWORD a4, DWORD a5, DWORD a6, DWORD a7, FLOAT a8, FLOAT a9); //static _11A97E0* Old11A97E0; // ////绘图HOOK //DWORD _fastcall New11A97E0(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, WORD* a3, DWORD a4, DWORD a5, DWORD a6, DWORD a7, FLOAT a8, FLOAT a9) //{ // if (a1 == 371 && a2 == 461) { // // } // if (a1 == 13 && a2 == 524) // { // a1 = 224; //血球X坐标 // a2 = 538; //血球X坐标 // } // if (a1 == 732 && a2 == 524) // { // a1 = 515; //蓝球X坐标 // a2 = 538; //蓝球X坐标 // } // // return Old11A97E0(thisc, Seat, a1, a2, a3, a4, a5, a6, a7, a8, a9); //} //typedef DWORD(_fastcall _11A8F60)(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, DWORD a3); //static _11A8F60* Old11A8F60; // ////绘图HOOK //DWORD _fastcall New11A8F60(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, DWORD a3) //{ // // if (a1 == 13 && a2 == 524) // { // a1 = 224; //血球X坐标 // a2 = 538; //血球X坐标 // } // else if (a1 == 732 && a2 == 524) // { // a1 = 515; //蓝球X坐标 // a2 = 538; //蓝球X坐标 // } // else if (a1 == 88 && a2 == 591)//经验条X Y // { // a1 = 248; // a2 = 596; // } // // return Old11A8F60(thisc, Seat, a1, a2, a3); //} typedef DWORD(_fastcall _11816B0)(DWORD thisc, DWORD Seat, DWORD* a2, int a3); static _11816B0* Old11816B0; //绘图HOOK DWORD _fastcall New11816B0(DWORD thisc, DWORD Seat, DWORD* a2, int a3) { wchar_t* str = (wchar_t*)a3; char* OutPutText = DNFTOOL::SquirrelU2W(str); std::string B = OutPutText; if (B.find("prepareDraw_appendage") != std::string::npos) { std::cout << 111 << std::endl; } delete[]OutPutText; return Old11816B0(thisc, Seat, a2, a3); } typedef struct REG { DWORD EAX; DWORD EBX; DWORD ECX; DWORD EDX; DWORD ESI; DWORD EDI; DWORD ESP; DWORD EBP; } REG; REG heart = { 0 }; //GetIntData typedef DWORD(_fastcall _908510)(DWORD thisc, DWORD Seat, DWORD a2, int a3); static _908510* Old908510; DWORD _fastcall New908510(DWORD thisc, DWORD Seat, DWORD a2, int a3) { if(a3 != *(int*)0x1AB7CDC)return Old908510(thisc, Seat, a2, a3); int NutAddValue; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_Get_Ex_IntData", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, thisc); SQPushInt(v, a2); SQPushInt(v, a3); SQ_Call(v, 4, 1, 1); SQGetInt(v, -1, &NutAddValue); SQPop(v, 3); return NutAddValue + Old908510(thisc, Seat, a2, a3); } typedef DWORD(_fastcall _909020)(DWORD thisc, DWORD Seat, DWORD a2, int a3); static _908510* Old909020; DWORD _fastcall New909020(DWORD thisc, DWORD Seat, DWORD a2, int a3) { if (a3 != *(int*)0x1AB7CDC)return Old909020(thisc, Seat, a2, a3); int NutAddValue; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_Get_Ex_SkillCoolTime", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, thisc); SQPushInt(v, a2); SQPushInt(v, a3); SQ_Call(v, 4, 1, 1); SQGetInt(v, -1, &NutAddValue); SQPop(v, 3); return NutAddValue + Old909020(thisc, Seat, a2, a3); } typedef struct LevelDataBuffer { DWORD SkillAddresss; DWORD SkillIdx; DWORD ObjectAddress; } RELevelDataBufferG; LevelDataBuffer _LevelDataBuffer = { 0 }; //GetLevelData typedef DWORD(_fastcall _908770)(DWORD thisc, DWORD Seat, DWORD a2, int a3,int a4,int a5,int a6,int a7,int a8,int a9); static _908770* Old908770; DWORD _fastcall New908770(DWORD thisc, DWORD Seat, DWORD a2, int a3, int a4, int a5, int a6, int a7, int a8,int a9) { if (a3 != *(int*)0x1AB7CDC)return Old908770(thisc, Seat, a2, a3, a4, a5, a6, a7, a8, a9); /* * thisc = 技能对象地址 * a2 = 技能数据号位 * a3 = 技能等级 * a4 = 角色对象地址 */ _LevelDataBuffer.SkillAddresss = thisc; _LevelDataBuffer.SkillIdx = a2; _LevelDataBuffer.ObjectAddress = a3; int ret = Old908770(thisc, Seat, a2, a3, a4, a5, a6, a7, a8, a9); return ret; } //原生角色Get typedef DWORD(_fastcall _90A4A0)(DWORD thisc, DWORD Seat, DWORD a2, int a3); static _90A4A0* Old90A4A0; DWORD _fastcall New90A4A0(DWORD thisc, DWORD Seat, DWORD a2, int a3) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return Old90A4A0(thisc, Seat, a2, a3); } if (a3 != *(int*)0x1AB7CDC)return Old90A4A0(thisc, Seat, a2, a3); int NutAddValue; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_Get_Ex_LevelData", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, thisc); SQPushInt(v, a2); SQPushInt(v, a3); SQ_Call(v, 4, 1, 1); SQGetInt(v, -1, &NutAddValue); SQPop(v, 3); int ret = NutAddValue + Old90A4A0(thisc, Seat, a2, a3); return ret; } //获取技能对象 typedef int __fastcall sub_TTTTTT(int a1, int a2, int a3); static sub_TTTTTT* TFuncsub_GetSkillAddress = (sub_TTTTTT*)0x8406C0; //Nut角色Get1 typedef DWORD(_fastcall _BA89D0)(DWORD thisc, DWORD Seat, DWORD a2, DWORD a3, DWORD a4); static _BA89D0* OldBA89D0; DWORD _fastcall NewBA89D0(DWORD thisc, DWORD Seat, DWORD a2, DWORD a3, DWORD a4) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return OldBA89D0(thisc, Seat, a2, a3, a4); } if (a3 != *(int*)0x1AB7CDC)return OldBA89D0(thisc, Seat, a2, a3, a4); DWORD ADDRESS = TFuncsub_GetSkillAddress(thisc, 0, a3); int NutAddValue; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_Get_Ex_LevelData", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, ADDRESS); SQPushInt(v, a2); SQPushInt(v, thisc); SQ_Call(v, 4, 1, 1); SQGetInt(v, -1, &NutAddValue); SQPop(v, 3); int ret = NutAddValue + OldBA89D0(thisc, Seat, a2, a3,a4); return ret; } //Nut角色Get2 typedef DWORD( _5A40E0)(DWORD a1, DWORD a2, DWORD a3, DWORD a4); static _5A40E0* Old5A40E0; DWORD New5A40E0( DWORD a1, DWORD a2, DWORD a3, DWORD a4) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return Old5A40E0(a1, a2, a3, a4); } if (a3 != *(int*)0x1AB7CDC)return Old5A40E0(a1, a2, a3, a4); DWORD ADDRESS = TFuncsub_GetSkillAddress(a1, 0, a2); int NutAddValue; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_Get_Ex_LevelData", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, ADDRESS); SQPushInt(v, a3); SQPushInt(v, a1); SQ_Call(v, 4, 1, 1); SQGetInt(v, -1, &NutAddValue); SQPop(v, 3); int ret = NutAddValue + Old5A40E0(a1, a2, a3, a4); return ret; } //描述对象前置HOOK typedef DWORD(_fastcall _90FB30)(DWORD thisc, DWORD Seat, DWORD a2, int a3); static _90FB30* Old90FB30; DWORD _fastcall New90FB30(DWORD thisc, DWORD Seat, DWORD a2, int a3) { if (a3 != *(int*)0x1AB7CDC)return Old90FB30(thisc, 0, a2, a3); _LevelDataBuffer.SkillAddresss = thisc; _LevelDataBuffer.SkillIdx = a2; _LevelDataBuffer.ObjectAddress = a3; return Old90FB30(thisc, 0, a2, a3); } //描述对象HOOK typedef DWORD( _75D1F0)(DWORD thisc); static _75D1F0* Old75D1F0; DWORD New75D1F0(DWORD thisc) { static bool OpenSw = false; if (!OpenSw) { if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { OpenSw = true; } return Old75D1F0(thisc); } if (_LevelDataBuffer.ObjectAddress != *(int*)0x1AB7CDC)return Old75D1F0(thisc); int NutAddValue; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_Get_Ex_LevelData", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, _LevelDataBuffer.SkillAddresss); SQPushInt(v, _LevelDataBuffer.SkillIdx); SQPushInt(v, _LevelDataBuffer.ObjectAddress); SQ_Call(v, 4, 1, 1); SQGetInt(v, -1, &NutAddValue); SQPop(v, 3); if (NutAddValue != 0) { int ret = NutAddValue + Old75D1F0(thisc); _LevelDataBuffer.SkillAddresss = 0; _LevelDataBuffer.SkillIdx = 0; _LevelDataBuffer.ObjectAddress = 0; return ret; } return Old75D1F0(thisc); } typedef int(_fastcall _Get_Img)(int thisc, void*, int a2); static _Get_Img* OldGet_Img; int _fastcall NewGet_Img(int thisc, void*, int a2) { if (a2 == 6) { //std::cout << 12123123 << std::endl; } return OldGet_Img(thisc, 0, a2); } typedef int(_fastcall _11C0410)(int* thisc,void*, int a2, wchar_t* a3); static _11C0410* Old11C0410; int _fastcall New11C0410(int* thisc, void*, int a2, wchar_t* a3) { wchar_t* str = (wchar_t*)a3; //if (!wcscmp(str, L"character/swordman/effect/frenzy/blood-spirits.img")) { // std::cout << 111 << std::endl; //} char* OutPutText = DNFTOOL::wchar_tTochar(str); std::string B = OutPutText; //std::cout << B << std::endl; //if (B.find("extrafeature") != std::string::npos) { // std::cout << B << std::endl; //} delete[]OutPutText; return Old11C0410(thisc,0,a2,a3); } void __declspec(naked)PlayerEach2() { static int address = 0x11B34E0; static int address1 = 0x001004B59; _asm { pushad pushfd mov heart.ECX , ecx mov heart.EDI, edi } if (heart.EDI == 2) { SQPushRootTable(*(uint32_t*)0x1AF3544); SQPushString(*(uint32_t*)0x1AF3544, L"Sq_PlayerEachPos", -1); SQ_Get(*(uint32_t*)0x1AF3544, -2); SQPushRootTable(*(uint32_t*)0x1AF3544); SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x14)); SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x18)); SQ_Call(*(uint32_t*)0x1AF3544, 3, 0, 1); SQPop(*(uint32_t*)0x1AF3544, 2); } _asm { popfd popad call address test al,al jmp address1 } } REG MouseAsm = { 0 }; void __declspec(naked)MouseWheelUp() { static int address = 0x11BDE12; static int address1 = 0x0011BDEEE; static int address2 = 0x0011BDEDF; static int address3 = 0x0011BDECE; _asm { pushad pushfd mov MouseAsm.EDI,edi mov MouseAsm.ECX, ecx } if ((int)*(BYTE*)0x1B46886 == 0) { _asm { popfd popad jmp address } } else { if (MouseAsm.EDI == 0x20A) { if (MouseAsm.ECX == 0x780000) { _asm { popfd popad jmp address3 } } else { _asm { popfd popad jmp address2 } } } else { _asm { popfd popad jmp address1 } } } } REG PassObjectPoAsm = { 0 }; typedef DWORD(_fastcall _6A4630)(DWORD thisc, DWORD Seat, DWORD a2, DWORD a3); static _6A4630* Old6A4630 = (_6A4630*)0x6A4630; static wchar_t* str = L"TETETETE"; void __declspec(naked)PassObjectPoJmp() { static int address = 0xE5AE58; static int address1 = 0xE5AE68; _asm { pushad pushfd mov PassObjectPoAsm.EDI,edi mov PassObjectPoAsm.EAX, eax } //printf("=%2x\n", *(DWORD*)(PassObjectPoAsm.EDI + 0xEE8)); // printf("=%2x\n", *(DWORD*)(PassObjectPoAsm.EDI + 0xEFC)); if (*(DWORD*)(PassObjectPoAsm.EDI + 0xEE8) == 0 && *(DWORD*)(PassObjectPoAsm.EDI + 0xEFC) == 0) { *(DWORD*)(PassObjectPoAsm.EDI + 0xEE8) = (DWORD)str; *(DWORD*)(PassObjectPoAsm.EDI + 0xEFC) = 0XF; Old6A4630(PassObjectPoAsm.EDI, 0, (DWORD)0x1ACDD80, PassObjectPoAsm.EAX); *(DWORD*)(PassObjectPoAsm.EDI + 0xEE8) = 0; *(DWORD*)(PassObjectPoAsm.EDI + 0xEFC) = 0; _asm { popfd popad jmp address1 } } _asm { popfd popad mov edx, [edi] jmp address } } void __declspec(naked)TestJmp() { static int address = 0X04627A7; static int address1 = 0x04627EB; _asm { pushad pushfd mov PassObjectPoAsm.ECX, ecx } if (*(DWORD*)(PassObjectPoAsm.ECX + 0xC) == 24000001) { //printf("成功\n\n"); // printf("值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC)); *(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002; //printf("成功值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC)); } _asm { popfd popad mov edx,dword ptr ds:[ebx] cmp edx,dword ptr ds:[ecx+0xC] jge dnf4627EB jmp address dnf4627EB: jmp address1 } } void __declspec(naked)TestJmp1() { static int address = 0X04627A7; static int address1 = 0x04627EB; _asm { pushad pushfd mov PassObjectPoAsm.ECX, ecx } if (*(DWORD*)(PassObjectPoAsm.ECX + 0xC) == 24000001) { //printf("成功\n\n"); //printf("值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC)); *(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002; // printf("成功值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC)); } _asm { popfd popad mov eax,dword ptr ds:[edi] cmp eax,dword ptr ds:[ecx+0xC] jl dnf46259B jmp address dnf46259B : jmp address1 } } void __declspec(naked)TestJmp2() { static int address = 0X04627A7; static int address1 = 0x46259B; _asm { pushad pushfd mov PassObjectPoAsm.ECX, ecx } //printf("值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC)); if (*(DWORD*)(PassObjectPoAsm.ECX + 0xC) == 24000001) { // printf("成功\n\n"); *(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002; } _asm { popfd popad mov edx, dword ptr ds : [ebx] cmp edx, dword ptr ds : [ecx + 0xC] jge dnf4627EB jmp address dnf4627EB : jmp address1 } } void __declspec(naked)TestJmp3() { static int address = 0x0462584; static int address1 = 0x0046259B; _asm { pushad pushfd mov PassObjectPoAsm.ECX, ecx } if (*(DWORD*)(PassObjectPoAsm.ECX + 0xC) == 24000001) { //printf("成功\n\n"); //printf("值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC)); *(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002; //printf("成功值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC)); } _asm { popfd popad mov eax, dword ptr ds : [edi] cmp eax, dword ptr ds : [ecx + 0xC] jl dnf4627EB jmp address dnf4627EB : jmp address1 } } //void __declspec(naked)DrawMainCallBack() { // // static int address = 0x1A5FB20; // static int address3 = 0xE6DF4B; // static int address1 = 0xE6D9AE; // _asm // { // pushad // pushfd // } // // SQPushRootTable(*(uint32_t*)0x1AF3544); // SQPushString(*(uint32_t*)0x1AF3544, L"Sq_DrawMainMaxLayerCustomUI", -1); // SQ_Get(*(uint32_t*)0x1AF3544, -2); // SQPushRootTable(*(uint32_t*)0x1AF3544); // SQPushInt(*(uint32_t*)0x1AF3544, 111); // SQ_Call(*(uint32_t*)0x1AF3544, 2, 0, 1); // SQPop(*(uint32_t*)0x1AF3544, 2); // // // _asm { // popfd // popad // mov ecx, address // test ecx, ecx // jmp address1 // } //} typedef DWORD(_fastcall _4C61F0)(DWORD thisc, DWORD Seat); static _4C61F0* Old4C61F0; #include "json.hpp" using json = nlohmann::json; extern bool jiaoben; extern std::vector BaseData; #include #include //DrawMain HOOK DWORD _fastcall New4C61F0(DWORD thisc, DWORD Seat) { static bool Init = false; if (BaseData.size() > 0 && jiaoben == true && DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) { size_t Ds = BaseData.size(); for (size_t i = 0; i < Ds; i++) { std::string filename = "BaseData" + std::to_string(i); std::string str = BaseData[i]; str = str.substr(str.find("[") + 1, str.length() - 2); std::vector Data; DNFTOOL::Split(str, Data, ", "); size_t Ds = Data.size(); char* nutstr = new char[Ds + 1]; for (size_t s = 0; s < Ds; s++) { nutstr[s] = char(atoi(Data[s].c_str())); } nutstr[Ds] = '\0'; int skey[] = Skey;//定义解密数组 Cutecode(nutstr, skey);//解密 //std::cout << nutstr << std::endl; wchar_t* sfile = DNFTOOL::charTowchar_t((char*)filename.c_str()); wchar_t* ss = DNFTOOL::charTowchar_t((char*)nutstr); //wprintf(L"Function:%s \n", sfile); //std::cout << i << std::endl; uint32_t v = GetSqVm(); squirrel::SQdofileBuffer(v, sfile, ss); } BaseData.clear(); jiaoben = false; } if (Init) { //DrawMain uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_DrawMainMaxLayerCustomUI", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, 111); SQ_Call(v, 2, 0, 1); SQPop(v, 2); } #ifndef SELL //循环调用 squirrel::SqrCallBackFunc(); #endif static bool mouseInit = false; //选择角色调用 if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 0) { if (!Init) { //Sleep(1000); squirrel::InitGameScript();//调用初始化程序 Init = true; mouseInit = true; } uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_SelectCharacter", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushString(v, L"Lenheart", -1); SQ_Call(v, 2, 0, 1); SQPop(v, 2); } #ifdef MOUSE_SWITCH //鼠标回调 if (mouseInit) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_MouseEventCallBack", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, LbState); SQPushInt(v, RbState); SQPushInt(v, MbState); SQ_Call(v, 4, 0, 1); SQPop(v, 2); } #endif // MOUSE_SWITCH return Old4C61F0(thisc, Seat); } typedef DWORD(_cdecl _7EEED0)(DWORD a1 , DWORD a2 , DWORD a3, DWORD a4, DWORD a5, DWORD a6); static _7EEED0* Old7EEED0; //伤害字体 HOOK DWORD _cdecl New7EEED0(DWORD a1, DWORD a2, DWORD a3, DWORD a4, DWORD a5, DWORD a6) { int StrIndex; uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_PushDamageFontData", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, a1); SQPushInt(v, a2); SQPushInt(v, a3); SQPushInt(v, a4); SQPushInt(v, a5); SQPushInt(v, a6); SQ_Call(v, 7, 0, 1); SQPop(v, 2); SQGetInt(v, -1, &StrIndex); if (StrIndex == 1) { return 0; } else { DWORD ret = Old7EEED0(a1, a2, a3, a4, a5, a6); return ret; } } typedef DWORD(_fastcall _F542F0)(DWORD a1, DWORD a2, DWORD a3, DWORD a4, DWORD a5, DWORD a6); static _F542F0* OldF542F0; // DWORD _cdecl NewF542F0(DWORD a1, DWORD a2, DWORD a3, DWORD a4, DWORD a5, DWORD 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; DWORD ret = OldF542F0(a1, a2, a3, a4, a5, a6); return ret; } typedef DWORD(_499160)(DWORD a1); static _499160* Old499160; DWORD _cdecl New499160(DWORD a1) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_MessageWindowDraw", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, 1); SQPushInt(v, 1); SQ_Call(v, 3, 0, 1); SQPop(v, 2); DWORD ret = Old499160(a1); return ret; } int HookPlayerInfoString(wchar_t* str) { if (str != NULL) { wchar_t* clone = new wchar_t[wcslen(str) + 2]; wcscpy(clone, str); std::string GameStr; DNFTOOL::Wchar_tToString(GameStr, clone); delete[]clone; int Value = atoi(GameStr.c_str()); Value = 9999999; wchar_t wcs[128]; wsprintf(wcs, L"%d", Value); return (int) & wcs; } } wchar_t PlayerInfowcs[128]; static int NewStrPlayerInfo; void __declspec(naked)PlayerInfo() { static int address = 0XEDE480; static int address1 = 0X0EDE6CD; _asm { pushad pushfd mov heart.ECX, ecx mov heart.ESI, esi } //std::cout << "自己类型 = "<< heart.ECX << std::endl; //wprintf(L"自己数值 = %s\n\n", heart.ESI + 0x18); NewStrPlayerInfo = 9999999; wsprintf((wchar_t*)(heart.ESI + 0x18), L"%d", NewStrPlayerInfo); /*wchar_t* strbuffer = (wchar_t*)(heart.ESI + 0x18); if (strbuffer != NULL) { wchar_t* clone = new wchar_t[wcslen(strbuffer) + 2]; wcscpy(clone, strbuffer); std::string GameStr; DNFTOOL::Wchar_tToString(GameStr, clone); delete[]clone; int Value = atoi(GameStr.c_str()); Value = 9999999; wchar_t wcs[128]; wsprintf(wcs, L"%d", Value); }*/ //std::wcout << "Esi" << *(wchar_t*)(heart.ESI + 0x18) << std::endl; //if (heart.EDI == 2) { // SQPushRootTable(*(uint32_t*)0x1AF3544); // SQPushString(*(uint32_t*)0x1AF3544, L"Sq_PlayerEachPos", -1); // SQ_Get(*(uint32_t*)0x1AF3544, -2); // SQPushRootTable(*(uint32_t*)0x1AF3544); // SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x14)); // SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x18)); // SQ_Call(*(uint32_t*)0x1AF3544, 3, 0, 1); // SQPop(*(uint32_t*)0x1AF3544, 2); //} _asm { popfd popad push ecx mov ecx, ebx call address jmp address1 } } void __declspec(naked)PlayerInfo2() { static int address = 0XEDE480; static int address1 = 0x0EDE6E3; _asm { pushad pushfd mov heart.ECX, ecx mov heart.ESI, esi } NewStrPlayerInfo = 9999999; wsprintf((wchar_t*)(heart.ESI + 0x18), L"%d", NewStrPlayerInfo); //std::wcout << "Esi" << *(wchar_t*)(heart.ESI + 0x18) << std::endl; //if (heart.EDI == 2) { // SQPushRootTable(*(uint32_t*)0x1AF3544); // SQPushString(*(uint32_t*)0x1AF3544, L"Sq_PlayerEachPos", -1); // SQ_Get(*(uint32_t*)0x1AF3544, -2); // SQPushRootTable(*(uint32_t*)0x1AF3544); // SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x14)); // SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x18)); // SQ_Call(*(uint32_t*)0x1AF3544, 3, 0, 1); // SQPop(*(uint32_t*)0x1AF3544, 2); //} _asm { popfd popad push ecx lea ecx, [ebx + 0x7E] call address jmp address1 } } typedef int(_fastcall _FA42D0)(int a1, int seat, int a2, int a3); static _FA42D0* OldFA42D0; int _fastcall NewFA42D0(int a1, int seat, int a2, int a3) { OtherPlayerInfoType = a2 + 1; return OldFA42D0(a1, seat, a2, a3); } typedef int(_FA3570)(DWORD* a1, int a2, int a3); static _FA3570* OldFA3570; int NewFA3570(DWORD* a1,int a2, int a3) { int ret = OldFA3570(a1, a2, a3); OtherPlayerInfoImg = ret; return 0; } typedef void(_fastcall _4B8430)(int a1, int seat, int a2); static _4B8430* Old4B8430; void _fastcall New4B8430(int a1, int seat, int a2) { //return Old4B8430(a1, seat, a2); } //绘制技能 typedef void(_fastcall _909D70)(int a1, int seat, int a2,int a3,int a4,int a5,int a6, int a7,int a8,int a9,int a10,int a11); static _909D70* Old909D70; void _fastcall New909D70(int a1, int seat, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { return Old909D70(a1,seat,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); //return Old4B8430(a1, seat, a2); } typedef int(_fastcall _1030C30)(int a1, int a2 ,BYTE* a3); static _1030C30* Old1030C30; int _fastcall New1030C30(int a1, int a2, BYTE* a3) { int ret = Old1030C30(a1, a2, a3); uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"Sq_DrawMiniMapUI", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushInt(v, 111); SQ_Call(v, 2, 0, 1); SQPop(v, 2); return ret; } #include "inlinehook.h" int hook::RegisterHook() { //玩家菜单选项HOOK 有回调 inlinehook SSS(0x001004B52, (int)&PlayerEach2); SSS.Motify_address(); //修复滚轮 inlinehook MMM(0x011BDE05, (int)&MouseWheelUp); MMM.Motify_address(); //个人信息 //inlinehook WWW(0xEDE6C5, (int)&PlayerInfo); //WWW.Motify_address(); ////个人信息 //inlinehook EEE(0xEDE6DA, (int)&PlayerInfo2); //EEE.Motify_address(); MH_Initialize(); //N键大地图 MH_CreateHook((void*)0x1030C30, &New1030C30, reinterpret_cast(&Old1030C30)); MH_EnableHook((void*)0x1030C30); //MH_CreateHook((void*)0x909D70, &New909D70, reinterpret_cast(&Old909D70)); //MH_EnableHook((void*)0x909D70); //他人信息数值Hook //他人信息类型Hook MH_CreateHook((void*)0xFA42D0, &NewFA42D0, reinterpret_cast(&OldFA42D0)); MH_EnableHook((void*)0xFA42D0); //他人信息数值Hook MH_CreateHook((void*)0xFA3570, &NewFA3570, reinterpret_cast(&OldFA3570)); MH_EnableHook((void*)0xFA3570); //MH_CreateHook((void*)0xEDE480, &NewEDE480, reinterpret_cast(&OldEDE480)); //MH_EnableHook((void*)0xEDE480); //MH_CreateHook((void*)0xF542F0, &NewF542F0, reinterpret_cast(&OldF542F0)); //MH_EnableHook((void*)0xF542F0); //MH_CreateHook((void*)0x9D2300, &New_9D2300, reinterpret_cast(&Old_9D2300)); //MH_EnableHook((void*)0x9D2300); //消息框绘制HOOK MH_CreateHook((void*)0x499160, &New499160, reinterpret_cast(&Old499160)); MH_EnableHook((void*)0x499160); //DrawMain HOOK MH_CreateHook((void*)0x4C61F0, &New4C61F0, reinterpret_cast(&Old4C61F0)); MH_EnableHook((void*)0x4C61F0); #ifdef FONT_BANK_SYSTEM //伤害字体 HOOK MH_CreateHook((void*)0x7EEED0, &New7EEED0, reinterpret_cast(&Old7EEED0)); MH_EnableHook((void*)0x7EEED0); #endif //HOOK背包鼠标位置 #ifdef Inventory_M_Pos MH_CreateHook((void*)0x11D24F0, &New_inventory_M_Pos, reinterpret_cast(&Old_inventory_M_Pos)); MH_EnableHook((void*)0x11D24F0); #endif //HOOK怪物血条 #if defined MONSTER_BLOOD_UI MH_CreateHook((void*)0x43d770, &NewBlood, reinterpret_cast(&OldBlood)); MH_EnableHook((void*)0x43d770); MH_CreateHook((void*)0x43d620, &NewBlood1, reinterpret_cast(&OldBlood1)); MH_EnableHook((void*)0x43d620); MH_CreateHook((void*)0x43d4d0, &NewBlood2, reinterpret_cast(&OldBlood2)); MH_EnableHook((void*)0x43d4d0); #endif //Hook收包 MH_CreateHook((void*)INIT_PACK_ADDRESS, &H_Register_Pack, reinterpret_cast(&Lpfn_Init)); MH_EnableHook((void*)INIT_PACK_ADDRESS); //HookNut函数注册 MH_CreateHook((void*)INIT_NUT_ADDRESS, &H_Register_Nut, reinterpret_cast(&MLnewclosure)); MH_EnableHook((void*)INIT_NUT_ADDRESS); //Hook绘制字符 MH_CreateHook((void*)INIT_NUT_DRAWCODE, &H_Register_DrawCode, reinterpret_cast(&DrawCodeF)); MH_EnableHook((void*)INIT_NUT_DRAWCODE); #ifdef CREAT_CHR_UI MH_CreateHook((void*)0x10f3050, &CreatChr, reinterpret_cast(&OldCreatChr)); MH_EnableHook((void*)0x10f3050); #endif // CREAT_CHR_UI #ifdef ITEMRARITY //HOOK获取绘制颜色 MH_CreateHook((void*)0x7AB080, &HookItemColor, reinterpret_cast(&OldHookItemColor)); MH_EnableHook((void*)0x7AB080); //HOOK根据品级得到颜色 MH_CreateHook((void*)0x7AAD00, &HookEquNameColor, reinterpret_cast(&OldHookEquNameColor)); MH_EnableHook((void*)0x7AAD00); #endif #ifdef SENDPACKHOOK //HOOK发包类型 MH_CreateHook((void*)0x1127D60, &NewSendPacksType, reinterpret_cast(&_OldSendPackType)); MH_EnableHook((void*)0x1127D60); #ifdef SENDPACKHOOK_EX MH_CreateHook((void*)0x1128550, &NewSendPacksByte, reinterpret_cast(&_OldSendPackByte)); MH_EnableHook((void*)0x1128550); MH_CreateHook((void*)0x1128580, &NewSendPacksWord, reinterpret_cast(&_OldSendPackWord)); MH_EnableHook((void*)0x1128580); MH_CreateHook((void*)0x11285B0, &NewSendPacksDWord, reinterpret_cast(&_OldSendPackDWord)); MH_EnableHook((void*)0x11285B0); MH_CreateHook((void*)0x11285E0, &NewSendPacksChar, reinterpret_cast(&_OldSendPackChar)); MH_EnableHook((void*)0x11285E0); MH_CreateHook((void*)0x1127EC0, &NewSend, reinterpret_cast(&_OldSend)); MH_EnableHook((void*)0x1127EC0); #endif // !SENDPACKHOOK_EX #endif #ifdef DRAWITEM //HOOK Item绘制 //MH_CreateHook((void*)0x7AA800, &newsub7AA800, reinterpret_cast(&sub7AA800)); //MH_EnableHook((void*)0x7AA800); #endif #ifdef GET_EXE_STR //exe字符串索引 MH_CreateHook((void*)0x1220590, &Newsub1220590, reinterpret_cast(&sub1220590)); MH_EnableHook((void*)0x1220590); #endif MH_CreateHook((void*)0x11A8F60, &newsub11A8F60, reinterpret_cast(&sub11A8F60)); MH_EnableHook((void*)0x11A8F60); FILE* file = fopen("ImagePacks2/!HUD_Yosin百级UI.NPK", "rb"); if (file) { //MH_CreateHook((void*)0x11A97E0, &New11A97E0, reinterpret_cast(&Old11A97E0)); //MH_EnableHook((void*)0x11A97E0); //MH_CreateHook((void*)0x6F4370, &New6F4370, reinterpret_cast(&Old6F4370)); //MH_EnableHook((void*)0x6F4370); //MH_CreateHook((void*)0x11AEE50, &New11AEE50, reinterpret_cast(&Old11AEE50)); //MH_EnableHook((void*)0x11AEE50); MH_CreateHook((void*)0x11B4030, &NewEvent, reinterpret_cast(&OldEvent)); MH_EnableHook((void*)0x11B4030); //绘制经验条Hook MH_CreateHook((void*)0x4B8430, &New4B8430, reinterpret_cast(&Old4B8430)); MH_EnableHook((void*)0x4B8430); } //获取坐标 //MH_CreateHook((void*)0x48c690, &NewGetItemPos, reinterpret_cast(&GetItemPos)); //MH_EnableHook((void*)0x48c690); //nut调用绘制技能的函数 //MH_CreateHook((void*)0x5DCDA0, &Newsub_5DCDA0, reinterpret_cast(&sub_5DCDA0)); //MH_EnableHook((void*)0x5DCDA0); //绘制技能图标的函数 //MH_CreateHook((void*)0x5A4BE0, &Newsub_5A4BE0, reinterpret_cast(&sub_5A4BE0)); //MH_EnableHook((void*)0x5A4BE0); //img绘制的函数 //MH_CreateHook((void*)0x11A97E0, &Newsub_11A97E0, reinterpret_cast(&sub_11A97E0)); //MH_EnableHook((void*)0x11A97E0); //大部分IMG数字的调用函数 //MH_CreateHook((void*)0x11B2390, &Newsub_11B2390, reinterpret_cast(&sub_11B2390)); //MH_EnableHook((void*)0x11B2390); //模拟Sqrcall //MH_CreateHook((void*)0x5AACB0, &Newsub_5AADF0, reinterpret_cast(&sub_5AADF0)); //MH_EnableHook((void*)0x5AACB0); //MH_CreateHook((void*)0x5A4BE0, &Newsub_5A4BE0, reinterpret_cast(&sub_5A4BE0)); //MH_EnableHook((void*)0x5A4BE0); //HOOK PushString MH_CreateHook((void*)0x1358A60, &LMySqPushString, reinterpret_cast(&LrealSqPushString)); MH_EnableHook((void*)0x1358A60); //MH_CreateHook((void*)0x11816B0, &New11816B0, reinterpret_cast(&Old11816B0)); //MH_EnableHook((void*)0x11816B0); //读取静态数据 MH_CreateHook((void*)0x908510, &New908510, reinterpret_cast(&Old908510)); MH_EnableHook((void*)0x908510); ////读取冷却 MH_CreateHook((void*)0x909020, &New909020, reinterpret_cast(&Old909020)); MH_EnableHook((void*)0x909020); ////读取动态数据 //MH_CreateHook((void*)0x0908770, &New908770, reinterpret_cast(&Old908770)); //MH_EnableHook((void*)0x0908770); ////读取动态数据 MH_CreateHook((void*)0x090A4A0, &New90A4A0, reinterpret_cast(&Old90A4A0)); MH_EnableHook((void*)0x090A4A0); MH_CreateHook((void*)0x0BA89D0, &NewBA89D0, reinterpret_cast(&OldBA89D0)); MH_EnableHook((void*)0x0BA89D0); MH_CreateHook((void*)0x05A40E0, &New5A40E0, reinterpret_cast(&Old5A40E0)); MH_EnableHook((void*)0x05A40E0); //MH_CreateHook((void*)0x90FB30, &New90FB30, reinterpret_cast(&Old90FB30)); //MH_EnableHook((void*)0x90FB30); MH_CreateHook((void*)0x075D1F0, &New75D1F0, reinterpret_cast(&Old75D1F0)); MH_EnableHook((void*)0x075D1F0); //MH_CreateHook((void*)0x11C0410, &New11C0410, reinterpret_cast(&Old11C0410)); //MH_EnableHook((void*)0x11C0410); //MH_CreateHook((void*)0x11AA190, &NewGet_Img, reinterpret_cast(&OldGet_Img)); //MH_EnableHook((void*)0x11AA190); //MH_CreateHook((void*)0x10041D0, &New10041D0, reinterpret_cast(&Old10041D0)); //MH_EnableHook((void*)0x10041D0); // HOOK exe 调用文本进 松鼠虚拟机 //MH_CreateHook((void*)0x135B2C0, &NewSQ_Compilebuffer, reinterpret_cast(&OldSQ_Compilebuffer)); //MH_EnableHook((void*)0x135B2C0); return 0; }