Merge branch 'awesome-branch' into 1.15
This commit is contained in:
commit
230eba5906
@ -177,21 +177,22 @@ namespace auth
|
|||||||
game::SV_DirectConnect(from);
|
game::SV_DirectConnect(from);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* get_direct_connect_stub()
|
// CAN'T FIND
|
||||||
{
|
//void* get_direct_connect_stub()
|
||||||
return utils::hook::assemble([](utils::hook::assembler& a)
|
//{
|
||||||
{
|
// return utils::hook::assemble([](utils::hook::assembler& a)
|
||||||
a.lea(rcx, qword_ptr(rsp, 0x20));
|
// {
|
||||||
a.movaps(xmmword_ptr(rsp, 0x20), xmm0);
|
// a.lea(rcx, qword_ptr(rsp, 0x20));
|
||||||
|
// a.movaps(xmmword_ptr(rsp, 0x20), xmm0);
|
||||||
|
|
||||||
a.pushad64();
|
// a.pushad64();
|
||||||
a.mov(rdx, rsi);
|
// a.mov(rdx, rsi);
|
||||||
a.call_aligned(direct_connect);
|
// a.call_aligned(direct_connect);
|
||||||
a.popad64();
|
// a.popad64();
|
||||||
|
|
||||||
a.jmp(0x140488CE2); // H1MP64(1.4)
|
// a.jmp(0x140488CE2); // H1MP64(1.4)
|
||||||
});
|
// });
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t get_guid()
|
uint64_t get_guid()
|
||||||
@ -212,31 +213,34 @@ namespace auth
|
|||||||
// Patch steam id bit check
|
// Patch steam id bit check
|
||||||
if (game::environment::is_sp())
|
if (game::environment::is_sp())
|
||||||
{
|
{
|
||||||
utils::hook::jump(0x140475C17, 0x140475C6A); // H1(1.4)
|
//utils::hook::jump(0x140475C17, 0x140475C6A); // H1(1.4)
|
||||||
utils::hook::jump(0x140476AFF, 0x140476B40); // H1(1.4)
|
//utils::hook::jump(0x140476AFF, 0x140476B40); // H1(1.4)
|
||||||
utils::hook::jump(0x140476FA4, 0x140476FF2); // H1(1.4)
|
//utils::hook::jump(0x140476FA4, 0x140476FF2); // H1(1.4)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
utils::hook::jump(0x1D6193_b, 0x1D61FA_b); // 1.15
|
// kill "disconnected from steam" error
|
||||||
utils::hook::jump(0x60153_b, 0x60426_b); // 1.15
|
utils::hook::nop(0x1D61DF_b, 0x11);
|
||||||
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
|
|
||||||
|
|
||||||
//utils::hook::jump(0x140488BC1, get_direct_connect_stub(), true); // H1(1.4) couldn't find
|
/*utils::hook::nop(0x1D6193_b, 103); // STEAM
|
||||||
utils::hook::call(0x12D437_b, send_connect_data_stub); // 1.15
|
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
|
// 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
|
// 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", []()
|
//command::add("guid", []()
|
||||||
{
|
//{
|
||||||
printf("Your guid: %llX\n", steam::SteamUser()->GetSteamID().bits);
|
// printf("Your guid: %llX\n", steam::SteamUser()->GetSteamID().bits);
|
||||||
});
|
//});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -482,14 +482,15 @@ namespace demonware
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
utils::hook::detour kekw_hook;
|
utils::hook::detour handle_auth_reply_hook;
|
||||||
bool kekw_stub(__int64 a1, __int64 a2, __int64* a3)
|
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);
|
utils::hook::set(0x7D4AB0_b, 0xC301B0);
|
||||||
// Checks extended_data and extra_data in json object
|
// Skip bdAuth::processPlatformData
|
||||||
utils::hook::set(0x7D55C0_b, 0xC301B0);
|
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)
|
void* allocate_somewhere_near(uint8_t* base_address)
|
||||||
@ -563,13 +564,6 @@ namespace demonware
|
|||||||
|
|
||||||
void post_unpack() override
|
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())
|
if (game::environment::is_sp())
|
||||||
{
|
{
|
||||||
// utils::hook::set<uint8_t>(0x1405FCA00, 0xC3); // bdAuthSteam H1(1.4)
|
// utils::hook::set<uint8_t>(0x1405FCA00, 0xC3); // bdAuthSteam H1(1.4)
|
||||||
@ -577,11 +571,11 @@ namespace demonware
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::hook::set<uint8_t>(0x7C0AD9_b, 0x0); // CURLOPT_SSL_VERIFYPEER H1MP64(1.15)
|
utils::hook::set<uint8_t>(0x7C0AD9_b, 0x0); // CURLOPT_SSL_VERIFYPEER
|
||||||
utils::hook::set<uint8_t>(0x7C0AC5_b, 0xAF); // CURLOPT_SSL_VERIFYHOST H1MP64(1.15)
|
utils::hook::set<uint8_t>(0x7C0AC5_b, 0xAF); // CURLOPT_SSL_VERIFYHOST
|
||||||
utils::hook::set<uint8_t>(0xA1327C_b, 0x0); // HTTPS -> HTTP [MWR OK][S1X: 0x14088D0E8]
|
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);
|
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/"));
|
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
|
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
|
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>(0x19F8C0_b, 0xC3); SV_SendMatchData, not sure
|
||||||
//utils::hook::set<uint8_t>(0x140598990, 0xC3); // Live_CheckForFullDisconnect H1MP64(1.4)
|
utils::hook::set<uint8_t>(0x1A3340_b, 0xC3); // Live_CheckForFullDisconnect
|
||||||
|
|
||||||
//#ifdef DEBUG
|
//#ifdef DEBUG
|
||||||
// // yes
|
// // yes
|
||||||
@ -613,19 +607,15 @@ namespace demonware
|
|||||||
// utils::hook::call(0x140727C82, b);
|
// utils::hook::call(0x140727C82, b);
|
||||||
// utils::hook::call(0x140727E6A, a);
|
// utils::hook::call(0x140727E6A, a);
|
||||||
//#endif
|
//#endif
|
||||||
// Checks X-Signature header or something
|
// Remove some while loop that freezes the rendering for a few secs while connecting
|
||||||
//utils::hook::set(0x7D4AB0_b, 0xC301B0);
|
utils::hook::nop(0x625555_b, 5);
|
||||||
// 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 in demonware that freezes the rendering for a few secs at launch
|
handle_auth_reply_hook.create(0x7AC600_b, handle_auth_reply_stub);
|
||||||
//utils::hook::nop(0x14057DBC5, 5);
|
|
||||||
|
|
||||||
MessageBoxA(0, "TEST", "", 0);
|
// Skip update check in Live_SyncOnlineDataFlags
|
||||||
kekw_hook.create(0x7AC600_b, kekw_stub);
|
utils::hook::set(0x47A6D0_b, 0xC301B0);
|
||||||
MessageBoxA(0, "TEST2", "", 0);
|
// Remove update failed popup
|
||||||
|
utils::hook::set(0x47B2B0_b, 0xC301B0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pre_destroy() override
|
void pre_destroy() override
|
||||||
|
@ -174,27 +174,6 @@ namespace demonware
|
|||||||
|
|
||||||
auto* info = new bdFile2;
|
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->unk1 = 0;
|
||||||
info->unk2 = 0;
|
info->unk2 = 0;
|
||||||
info->unk3 = 0;
|
info->unk3 = 0;
|
||||||
@ -204,14 +183,6 @@ namespace demonware
|
|||||||
info->filename = filename;
|
info->filename = filename;
|
||||||
info->data = data;
|
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
|
#ifdef DEBUG
|
||||||
printf("[DW]: [bdStorage]: set user file: %s\n", filename.data());
|
printf("[DW]: [bdStorage]: set user file: %s\n", filename.data());
|
||||||
#endif
|
#endif
|
||||||
|
@ -5,7 +5,8 @@ namespace demonware
|
|||||||
{
|
{
|
||||||
bdUNK80::bdUNK80() : service(80, "bdUNK80")
|
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(49, &bdUNK80::unk49);
|
||||||
this->register_task(60, &bdUNK80::unk60);
|
this->register_task(60, &bdUNK80::unk60);
|
||||||
this->register_task(130, &bdUNK80::unk130);
|
this->register_task(130, &bdUNK80::unk130);
|
||||||
|
Loading…
Reference in New Issue
Block a user