#include "pch.h" #include "DNFTOOL.h" int DNFTOOL::GetExeNutWrtNum(int Pos) { int num = *(int*)(0x40079F + (Pos * 4)); return num; } void DNFTOOL::SetExeNutWrtNum(int Pos, int num) { int* p = (int*)(0x40079F + (Pos * 4)); *p = num; } int DNFTOOL::GetNutArrNum(int Nut头地址, int Pos) { int num = *(int*)(Nut头地址 + (Pos * 8)); return num; } void DNFTOOL::SetNutArrNum(int Nut头地址, int Pos, int num) { int* p = (int*)(Nut头地址 + (Pos * 8)); *p = num; } int DNFTOOL::GetHook(int Addr, std::string 地址) { size_t pos = 地址.find("+"); size_t size = 地址.size(); int GetHookArr[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; int i = 0; while (pos != std::string::npos) { std::string x = 地址.substr(0, pos); GetHookArr[i] = stoi(x, 0, 16); i++; 地址 = 地址.substr(pos + 1, size); pos = 地址.find("+"); } int num; num = *(int*)(Addr); if (num != 0) { for (int z = 0; z < i; z++) { num = *(int*)(num + GetHookArr[z]); } } return num; } int DNFTOOL::DNFDeCode(int Address) { DWORD nEax, nEcx8, nEsi, nEdx, nTmp; nEax = *(int*)(Address); if (nEax == -1) return nEax; nEcx8 = *(int*)(Address + 8); if (nEcx8 == -1) return nEcx8; nEsi = *(int*)(0x1AF8D78); nEdx = nEax >> 16; nTmp = (nEdx << 2) + nEsi + 36; nEdx = *(int*)(nTmp); if (nEdx == -1) return nEdx; nEax = nEax & 65535; nTmp = (nEax << 2) + nEdx + 8468; nEax = *(int*)(nTmp); if (nEax == -1) return nEax; _asm { mov eax, nEax movzx edx, ax mov nEdx, edx } nEsi = nEdx << 16; nEsi = nEsi | nEdx; nEax = nEsi ^ nEcx8; return nEax; return 0; } void DNFTOOL::DNFEnCode(int AddreSs, int Data) { long JEdi, JEcx, JEax, JEsi, JEdx, JSs; JEcx = AddreSs; JEax = *(int*)(0x1AF8DB8); JEax = JEax + 1; *(int*)(0x1AF8DB8) = JEax; JEdx = JEax; JEdx = JEdx >> 8; JEdx = JEdx << 24; JEdx = JEdx >> 24; JEdx = *(int*)(JEdx * 2 + 0x1843F58); JEdx = JEdx & 0xFFFF; JEax = JEax << 24; JEax = JEax >> 24; JSs = *(int*)(JEax * 2 + 0x1844158); JSs = JSs & 0xFFFF; JEdx = JEdx ^ JSs; JEax = JEdx; JEax = JEax & 0xFFFF; JEsi = Data; JEdx = JEsi >> 16; Sleep(10); JSs = JEsi & 0xFFFF; JEdx = JEdx + JSs; JEdx = JEdx ^ JEax; JEdi = JEdx; JEdx = JEax; JEax = JEax << 16; JEax = JEax + JEdx; JEsi = Data; JEax = JEax ^ JEsi; JEsi = AddreSs + 8; *(int*)(JEsi) = JEax; JEax = *(int*)(AddreSs); JEsi = *(int*)(0x1AF8D78); JEcx = JEdi; JEcx = JEcx << 16; JEcx = JEcx + JEdx; JEdx = JEax; JEdx = JEdx >> 16; JEdx = *(int*)(JEsi + JEdx * 4 + 36); JEax = JEax & 0xFFFF; *(int*)(JEdx + JEax * 4 + 8468) = JEcx; } int DNFTOOL::GetEquAddr(int addr) { switch (addr) { case 1: return 0x3038; break; case 2: return 0x304C; break; case 3: return 0x3048; break; case 4: return 0x3050; break; case 5: return 0x3044; break; case 6: return 0x3040; break; case 7: return 0x3058; break; case 8: return 0x305C; break; case 9: return 0x3054; break; case 10: return 0x3060; break; case 11: return 0x3064; break; case 12: return 0x3038; break; case 13: return 0x3008; break; case 14: return 0x300C; break; case 15: return 0x3010; break; case 16: return 0x3014; break; case 17: return 0x3018; break; case 18: return 0x301C; break; case 19: return 0x3020; break; case 20: return 0x3024; break; case 21: return 0x3028; break; case 22: return 0x302C; break; case 23: return 0x3030; break; case 24: return 0x3068; break; case 25: return 0x306C; break; case 26: return 0x3070; break; case 27: return 0x3074; break; } return -1; } char* DNFTOOL::UnicodeToAnsi(const wchar_t* szStr, char* pResult, int maxLen) { if (NULL == pResult) return NULL; int nLen = WideCharToMultiByte(CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL); if (0 == nLen) { return NULL; } if (nLen >= maxLen) nLen = maxLen; WideCharToMultiByte(CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL); return pResult; } wchar_t* DNFTOOL::AnsiToUnicode(const char* szStr, wchar_t* pResult, int maxLen) { if (NULL == pResult) return NULL; int nLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0); if (0 == nLen) { return NULL; } if (nLen >= maxLen) nLen = maxLen; nLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen); if (0 == nLen) { return NULL; } return pResult; } void DNFTOOL::WindowsNotice(char* str, int type, int b) { DWORD thisc = 0x1A5FB20; thisc = *(DWORD*)thisc; _NoticeTcall(thisc, 0, type, str, b); } void DNFTOOL::GMNotice(char* str, int type, int color) { if (type == NULL)type = 14; if (color == NULL)color = 0x65535; DWORD thisc = 0x1A5FB20; thisc = *(DWORD*)thisc; thisc = *(DWORD*)(thisc + 0x40); _Noticecall(thisc, 0, str, color, type, 0, 0, 0); }