Merge branch 'awesome-branch' into 1.15
This commit is contained in:
commit
2433f8a200
@ -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);
|
||||
//});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -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<bool>(a1, a2, a3);
|
||||
|
||||
return handle_auth_reply_hook.invoke<bool>(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<uint8_t>(0x1405FCA00, 0xC3); // bdAuthSteam H1(1.4)
|
||||
@ -577,11 +571,11 @@ namespace demonware
|
||||
return;
|
||||
}
|
||||
|
||||
utils::hook::set<uint8_t>(0x7C0AD9_b, 0x0); // CURLOPT_SSL_VERIFYPEER H1MP64(1.15)
|
||||
utils::hook::set<uint8_t>(0x7C0AC5_b, 0xAF); // CURLOPT_SSL_VERIFYHOST H1MP64(1.15)
|
||||
utils::hook::set<uint8_t>(0xA1327C_b, 0x0); // HTTPS -> HTTP [MWR OK][S1X: 0x14088D0E8]
|
||||
utils::hook::set<uint8_t>(0x7C0AD9_b, 0x0); // CURLOPT_SSL_VERIFYPEER
|
||||
utils::hook::set<uint8_t>(0x7C0AC5_b, 0xAF); // CURLOPT_SSL_VERIFYHOST
|
||||
utils::hook::set<uint8_t>(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<uint8_t>(0x14047F290, 0xC3); // SV_SendMatchData H1MP64(1.4)
|
||||
//utils::hook::set<uint8_t>(0x140598990, 0xC3); // Live_CheckForFullDisconnect H1MP64(1.4)
|
||||
// utils::hook::set<uint8_t>(0x19F8C0_b, 0xC3); SV_SendMatchData, not sure
|
||||
utils::hook::set<uint8_t>(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
|
||||
|
@ -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<const uint64_t*>(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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user