// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" #if defined LOCALHOSTS_SWITCH void LenheartThread(void) { // 下方写全局变量 static int Nut头地址; static int 属性头地址; static int 可开始执行判断; while (true) { Sleep(10); if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6)可开始执行判断 = 1; if (可开始执行判断 == 1)//选频道界面 游戏初始化完毕 { //hook::InitGameScript(); while (true) { Sleep(10); if (DNFTOOL::GetExeNutWrtNum(61) != 0 && Nut头地址 == 0)Nut头地址 = DNFTOOL::GetExeNutWrtNum(61); //if (GetExeNutWrtNum(61 != 0))属性头地址 = GetExeNutWrtNum(61); if (DNFTOOL::GetExeNutWrtNum(0) == 666) { std::cout << "写成功" << std::endl;; DNFTOOL::SetExeNutWrtNum(0, 0); DNFTOOL::SetNutArrNum(Nut头地址 , 20, 0); } } } } } #else void LenheartThread() { while (true) { static int 可开始执行判断; if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6)可开始执行判断 = 1; if (可开始执行判断 == 1) { Sleep(3000); //获取验证服务器ip std::string Rqip = DNFTOOL::GetIP(); //std::cout << "验证服务器IP:" << Rqip << std::endl; //获取本机IP std::string MyIp; httplib::Client* IPCliObj = NULL;// http连接主体 IPCliObj = new httplib::Client("ip.json-json.com");//初始化 http 对象 auto MyIpres = IPCliObj->Get("/"); if (MyIpres->status == 200)//如果返回包正常 { MyIp = MyIpres->body;//取得date } //std::cout << "本机IP:" << MyIp << std::endl; //已经得到了本机IP //获取验证IP std::string ippack; //获取ExeIP int gameip = *(int*)0x1AE9CEC; //如果ExeIP 等于 192.168.200.131 if (gameip == 3735601) { ippack = MyIp; } else { wchar_t* wgameip = (wchar_t*)0x1AE9CEC; DNFTOOL::Wchar_tToString(ippack, wgameip); } //std::cout << "验证IP:" << ippack << std::endl; //已经获取了要发送的验证IP LenheartBase::CBASE64 bb; ippack += "nima"; std::string rsastring = bb.RsaPriEncrypt(ippack, Pri_key); std::string enstring = bb.encode(rsastring); httplib::Client* CliObj = NULL;// http连接主体 CliObj = new httplib::Client(Rqip + ":9007");//初始化 http 对象 httplib::Params ParamsObj;//新建 Params 对象 ParamsObj.emplace("ip", enstring.c_str());//加入账号数据进数据包 auto res = CliObj->Post("/yz", ParamsObj); if (res->status == 200)//如果返回包正常 { std::string date = res->body;//取得date std::string base64code = bb.decode(date); std::string decrypt_text = bb.RsaPriDecrypt(base64code, Pri_key); long long redate = atoll(decrypt_text.c_str()) / 1000; time_t myt = time(0); long long nowdate = (long long)myt; __int64 absnum = abs(nowdate - redate); if (absnum < 18000) { hook::InitGameScript(); return; } else { //ExitProcess(0); } } else { //ExitProcess(0); } return; } } } #endif __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: #if defined COUTWINDOWS_SWITCH AllocConsole(); freopen(("CONOUT$"), ("w"), stdout); freopen(("CONOUT$"), ("w"), stderr); freopen(("CONIN$"), ("r"), stdin); #endif hook::RegisterHook(); Lenheart(); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }