diff --git a/src/client/component/auth.cpp b/src/client/component/auth.cpp index d5a67aa7..4ebebd8f 100644 --- a/src/client/component/auth.cpp +++ b/src/client/component/auth.cpp @@ -177,21 +177,22 @@ namespace auth game::SV_DirectConnect(from); } - void* get_direct_connect_stub() - { - return utils::hook::assemble([](utils::hook::assembler& a) - { - a.lea(rcx, qword_ptr(rsp, 0x20)); - a.movaps(xmmword_ptr(rsp, 0x20), xmm0); + // CAN'T FIND + //void* get_direct_connect_stub() + //{ + // return utils::hook::assemble([](utils::hook::assembler& a) + // { + // a.lea(rcx, qword_ptr(rsp, 0x20)); + // a.movaps(xmmword_ptr(rsp, 0x20), xmm0); - a.pushad64(); - a.mov(rdx, rsi); - a.call_aligned(direct_connect); - a.popad64(); + // a.pushad64(); + // a.mov(rdx, rsi); + // a.call_aligned(direct_connect); + // a.popad64(); - a.jmp(0x140488CE2); // H1MP64(1.4) - }); - } + // a.jmp(0x140488CE2); // H1MP64(1.4) + // }); + //} } uint64_t get_guid() @@ -212,31 +213,34 @@ namespace auth // Patch steam id bit check if (game::environment::is_sp()) { - utils::hook::jump(0x140475C17, 0x140475C6A); // H1(1.4) - utils::hook::jump(0x140476AFF, 0x140476B40); // H1(1.4) - utils::hook::jump(0x140476FA4, 0x140476FF2); // H1(1.4) + //utils::hook::jump(0x140475C17, 0x140475C6A); // H1(1.4) + //utils::hook::jump(0x140476AFF, 0x140476B40); // H1(1.4) + //utils::hook::jump(0x140476FA4, 0x140476FF2); // H1(1.4) } else { - utils::hook::jump(0x1D6193_b, 0x1D61FA_b); // 1.15 - utils::hook::jump(0x60153_b, 0x60426_b); // 1.15 - utils::hook::jump(0x603E1_b, 0x60426_b); // 1.15 - utils::hook::jump(0x1D7542_b, 0x1D7587_b); // 1.15, MAYBE `1D7553` ON FIRST - utils::hook::jump(0x1D7A82_b, 0x1D7AC8_b); // 1.15 + // kill "disconnected from steam" error + utils::hook::nop(0x1D61DF_b, 0x11); - //utils::hook::jump(0x140488BC1, get_direct_connect_stub(), true); // H1(1.4) couldn't find - utils::hook::call(0x12D437_b, send_connect_data_stub); // 1.15 + /*utils::hook::nop(0x1D6193_b, 103); // STEAM + utils::hook::nop(0x60153_b, 0x60426 - 0x60153); // STEAM + utils::hook::nop(0x603E1_b, 0x60426 - 0x603E1); // STEAM + utils::hook::nop(0x1D7553_b, 0x1D7587 - 0x1D7553); // STEAM MAYBE `1401D7553` ON FIRST + utils::hook::nop(0x1D7A82_b, 0x1D7AC8 - 0x1D7A82); // STEAM*/ + + //utils::hook::jump(0x140488BC1, get_direct_connect_stub(), true); // H1(1.4) can't find + //utils::hook::call(0x12D437_b, send_connect_data_stub); // H1(1.4) // Skip checks for sending connect packet - utils::hook::jump(0x12CDFC_b, 0x12CE5C_b); // 1.15 + //utils::hook::jump(0x1402508FC, 0x140250946); // Don't instantly timeout the connecting client ? not sure about this - //utils::hook::set(0x14025136B, 0xC3); // gonna lookup for this soon + //utils::hook::set(0x14025136B, 0xC3); } - command::add("guid", []() - { - printf("Your guid: %llX\n", steam::SteamUser()->GetSteamID().bits); - }); + //command::add("guid", []() + //{ + // printf("Your guid: %llX\n", steam::SteamUser()->GetSteamID().bits); + //}); } }; } diff --git a/src/client/component/demonware.cpp b/src/client/component/demonware.cpp index 7c2b1460..67e8e6b2 100644 --- a/src/client/component/demonware.cpp +++ b/src/client/component/demonware.cpp @@ -482,14 +482,15 @@ namespace demonware } #endif - utils::hook::detour kekw_hook; - bool kekw_stub(__int64 a1, __int64 a2, __int64* a3) + utils::hook::detour handle_auth_reply_hook; + bool handle_auth_reply_stub(void* a1, void* a2, void* a3) { - // Checks X-Signature header or something + // Skip bdAuth::validateResponseSignature utils::hook::set(0x7D4AB0_b, 0xC301B0); - // Checks extended_data and extra_data in json object + // Skip bdAuth::processPlatformData utils::hook::set(0x7D55C0_b, 0xC301B0); - return kekw_hook.invoke(a1, a2, a3); + + return handle_auth_reply_hook.invoke(a1, a2, a3); } void* allocate_somewhere_near(uint8_t* base_address) @@ -563,13 +564,6 @@ namespace demonware void post_unpack() override { - /* - mwr has upgraded some networking methods and the gethostbyname import from winsock library is no longer used - gethostbyname has been replaced with getaddrinfo - btw, still you can't get online.. - */ - //utils::hook::jump(SELECT_VALUE(0, 0x7EBC20_b), bd_logger_stub); - if (game::environment::is_sp()) { // utils::hook::set(0x1405FCA00, 0xC3); // bdAuthSteam H1(1.4) @@ -577,11 +571,11 @@ namespace demonware return; } - utils::hook::set(0x7C0AD9_b, 0x0); // CURLOPT_SSL_VERIFYPEER H1MP64(1.15) - utils::hook::set(0x7C0AC5_b, 0xAF); // CURLOPT_SSL_VERIFYHOST H1MP64(1.15) - utils::hook::set(0xA1327C_b, 0x0); // HTTPS -> HTTP [MWR OK][S1X: 0x14088D0E8] + utils::hook::set(0x7C0AD9_b, 0x0); // CURLOPT_SSL_VERIFYPEER + utils::hook::set(0x7C0AC5_b, 0xAF); // CURLOPT_SSL_VERIFYHOST + utils::hook::set(0xA1327C_b, 0x0); // HTTPS -> HTTP - //HTTPS -> HTTP + // HTTPS -> HTTP char* umbrella = (char*)allocate_somewhere_near((uint8_t*)game::base_address); std::memcpy(umbrella, "http://prod.umbrella.demonware.net/v1.0/", sizeof("http://prod.umbrella.demonware.net/v1.0/")); @@ -597,8 +591,8 @@ namespace demonware BYTE bytes[] = { 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x25, 0x73, 0x3A, 0x25, 0x64, 0x2F, 0x61, 0x75, 0x74, 0x68, 0x2F, 0x0 }; // KEKW std::memcpy((void*)0x9EDB08_b, bytes, sizeof(bytes)); //utils::hook::inject(0x140728170, "http://%s:%d/auth/"); :DDD - //utils::hook::set(0x14047F290, 0xC3); // SV_SendMatchData H1MP64(1.4) - //utils::hook::set(0x140598990, 0xC3); // Live_CheckForFullDisconnect H1MP64(1.4) + // utils::hook::set(0x19F8C0_b, 0xC3); SV_SendMatchData, not sure + utils::hook::set(0x1A3340_b, 0xC3); // Live_CheckForFullDisconnect //#ifdef DEBUG // // yes @@ -613,19 +607,15 @@ namespace demonware // utils::hook::call(0x140727C82, b); // utils::hook::call(0x140727E6A, a); //#endif - // Checks X-Signature header or something - //utils::hook::set(0x7D4AB0_b, 0xC301B0); - // Checks extended_data and extra_data in json object - //utils::hook::set(0x7D55C0_b, 0xC301B0); - // Update check - //utils::hook::set(0x1403A5390, 0xC301B0); + // Remove some while loop that freezes the rendering for a few secs while connecting + utils::hook::nop(0x625555_b, 5); - // Remove some while loop in demonware that freezes the rendering for a few secs at launch - //utils::hook::nop(0x14057DBC5, 5); + handle_auth_reply_hook.create(0x7AC600_b, handle_auth_reply_stub); - MessageBoxA(0, "TEST", "", 0); - kekw_hook.create(0x7AC600_b, kekw_stub); - MessageBoxA(0, "TEST2", "", 0); + // Skip update check in Live_SyncOnlineDataFlags + utils::hook::set(0x47A6D0_b, 0xC301B0); + // Remove update failed popup + utils::hook::set(0x47B2B0_b, 0xC301B0); } void pre_destroy() override diff --git a/src/client/game/demonware/services/bdStorage.cpp b/src/client/game/demonware/services/bdStorage.cpp index 9f398868..e184b5a7 100644 --- a/src/client/game/demonware/services/bdStorage.cpp +++ b/src/client/game/demonware/services/bdStorage.cpp @@ -174,27 +174,6 @@ namespace demonware auto* info = new bdFile2; - // int - // int - // int - // byte (priv) - // int64 (owner) - // string (platform) - // string (file) - // blob - // size - // data - // int - // int - // int - // byte - // int64 - // string (platform) - // string (file) - // blob - // size - // data - info->unk1 = 0; info->unk2 = 0; info->unk3 = 0; @@ -204,14 +183,6 @@ namespace demonware info->filename = filename; info->data = data; - /*info->file_id = *reinterpret_cast(utils::cryptography::sha1::compute(filename).data()); - info->filename = filename; - info->create_time = uint32_t(time(nullptr)); - info->modified_time = info->create_time; - info->file_size = uint32_t(data.size()); - info->owner_id = uint64_t(owner); - info->priv = priv;*/ - #ifdef DEBUG printf("[DW]: [bdStorage]: set user file: %s\n", filename.data()); #endif diff --git a/src/client/game/demonware/services/bdUNK80.cpp b/src/client/game/demonware/services/bdUNK80.cpp index 7478d3f5..65c458c4 100644 --- a/src/client/game/demonware/services/bdUNK80.cpp +++ b/src/client/game/demonware/services/bdUNK80.cpp @@ -5,7 +5,8 @@ namespace demonware { bdUNK80::bdUNK80() : service(80, "bdUNK80") { - this->register_task(42, &bdUNK80::unk42); + this->register_task(42, &bdUNK80::unk42); // COD POINTS purchase ? + // this->register_task(43, &bdUNK80::unk43); COD POINTS purchase ? this->register_task(49, &bdUNK80::unk49); this->register_task(60, &bdUNK80::unk60); this->register_task(130, &bdUNK80::unk130);