279 lines
5.5 KiB
C++
279 lines
5.5 KiB
C++
#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);
|
|
}
|