// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" void LenheartThread() { while (true) { Sleep(10); static int 可开始执行判断; if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6)可开始执行判断 = 1; if (可开始执行判断 == 1) { //获取验证服务器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) { return; Sleep(300000); } else { ExitProcess(0); } } else { ExitProcess(0); } } } } __declspec(dllexport) void Lenheart() { DWORD threadID; HANDLE Thand = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)LenheartThread, NULL, 0, &threadID); //Sleep(300000); //CloseHandle(Thand);//销毁线程 //return Lenheart(); } 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; }