From b8aa6f968b865d349501c6575f5ca6ab7294a486 Mon Sep 17 00:00:00 2001 From: mkrsym1 Date: Fri, 4 Aug 2023 23:22:26 +0300 Subject: [PATCH] Load table dynamically from FS --- game_payload/blob/core.o | Bin 3270 -> 4177 bytes game_payload/include/core.h | 2 +- game_payload/src/main.c | 20 ++++++++++---------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/game_payload/blob/core.o b/game_payload/blob/core.o index 83124eda2c983c883a7e7443f2de40d824937b4e..48cfc88cd14a960c2f690d57f3e75d75460f4dcf 100644 GIT binary patch literal 4177 zcmbVPZERat89q*&)-3_Ml(JI7dfVMV!l-MHPP7w0d=qCm88@xVnq<=09Ah7+m)XA7 z_05uWD{9wd;_Aw1K>5X{0pky7NC*M_&_F3I%L)=oTac!8g7O2@OcP{))NQ3R&wH-z z*l~&`PI}LI&U2pkJ?A~=^}VN=r#CPv_iV%?k)MTaF>OoiRgn(Hp7b$R40!#WXcU$h z4`)(#szJ9FjIqRg_{*izT4RmeG16Jh4kMWJ#dVD;#^5g&o?fMciS{tExcSrB7b!8huoq+C6>>U*>m&HQR-TOJ&uT`WQ zhpuOpP8-ukwGr*m$k^zE{P>#zY%_PR=+454cYO9Xe*6M44?miGMEjEVi1w(KJf972 zk3;14g?RaA>NWV~NKzEkpK=kskbN$THEym(y z?puhfJ$|g2J2_RUZ1GH%V8Wd@U@I-==7V#kN~OZx(pK&shzvw8o~1B3j3Z>Bou)3i zI_9-XJKCDJxXL+P%ghM&NNcA6s4%X`*gX5F#XMAb_< zu1kuK_u}-9c zcBX_07jhAEZ!eHY-?_%8PYvWGW`r&;yf=@+c@*{NadU5Kmu8zlX?9=u90F$6Zkolmi zvFhQvpP%K+pW6Y-rC60GVG#Pmu_J!8?MbK-#aJX z?BUMub=tf0-1(#DsI0R#4>_-4Te-6!dopz;LI$nFvp>Y0^TAClxQU0jd%wb+$Kb6W z?Gq8H)5~AjJLJ3?y;uvqyk*@@S|5VF&_nMwUb$9V52v*tT4b9yIV9(wStmK;icFxVuq-n$CfI$z-9Rg!oVD!I%z`!rAELolVR>*x{2A~$AxBIon?3fM zlevsiFl{Ak6f#P8Nihnj!%8A2QYE37MNv>v1;r?pCebS>_F&5~i8 z){IgrinNiPF$xpPj5%p36REsVM8>cUv#{F|6KLQjqdYFG5-=Mn82MsOe7Ln1K0Zqa|OZP|zKN}$glX&-MZ z`V#nV;VaQ74ab<`i1=y}wilIV5RT@q1Z&~M7mb^+Zf(J;_DujF0>x=W(J0I3rF8;JJ7&niHlmZ%r|<9P`K-7UGn zI;R7DMsle-m#yo*4YW&+J`WU@=*K|bzMQIae+JquNB;rzF^TTLIe7DS0eN#^fYGbC z9V@J%0MLge*IDPt&eMIQK1y+U9PP1(l=>(Di{QcLp+qGLXN{bYea7CaFgD>!o0bTt zt5m(IX?#p!?Vf}BSPe{70o}yfeYEBkAr42D7f>HVVC2W+eo-AE{q3x-VT|(DvueE2 z(hTiB%IBRxE2Z%^OY^L?=Ej>WQekaP!!4H1qur;j1XZ1`@dk^9KtsFSTpDk$bP0wZ z)U;F0Wx3j=3vj!SPPVn&tWsp{?V(a#6YZhL^f#>1V-B`3kF_vITbOUOFh6Qxe$~QU zYGMA?!o1VM1igjI=-Sv+x|A-?R6}KyEhXE^i9#bontZX5A-tpRhph4n zJ!5?lUyqV4tavWB-?WXakxtQ9Wew#>fxa|rX_J{;E{U()|7T4vg=9(Clf`5)Wv34d zYmLcow@hhV6js)>@=1HTX6eOR5Aya)e;+%MOyXmjOwt)mS7|3C-C<26$v3imo++{-oPVOWOQyt z;^TPRt{K%_m+0r!yv20cAgtT5W^SvoT5|wZ*!W3f3BHP(QyapR$;+8x!!R^9TuIoz zN{#*@^aKniW3Ubjxru&CJpu9I$pFZXprKJCsyEmOEf^J`fjuK?H({sL4}@0;WR%W= znb3&ZqOnF$ps?|CcoKOL3N8gNg{Sy%NqcGuZYG$I>28Z$b3!<=>QRE1lnl^>jcQ~^w9zEjnHS+5!iG{E{mwW(N;rFBk+yR ze8`%n*UqvgLI>5527(ZJA*BYaa69x)l-?)w7r7<`cl2GDCEZd*Z>r#i!R zdF%>)&(&}F2=RES4>xdHnk#>^7$L$SA7~u&yt~u#3FZ!uul%b`yMl`LZ!v$- -void core_setup_patcher(struct game_data *game, HMODULE baseModule); +void core_setup_patcher(struct game_data *game, HMODULE baseModule, wchar_t *txFile); void *core_perform_tx(size_t *outLength); diff --git a/game_payload/src/main.c b/game_payload/src/main.c index 718e7a4..c0d6d79 100644 --- a/game_payload/src/main.c +++ b/game_payload/src/main.c @@ -38,7 +38,7 @@ void request_restart() { CloseHandle(hRestartFlag); } -static void _run_game(struct game_data *game) { +static void _run_game(struct game_data *game, wchar_t *txFile) { // Create fake ACE driver files ace_fake_driver_files(); @@ -47,14 +47,14 @@ static void _run_game(struct game_data *game) { ace_load_driver_module(); // ...magic - core_setup_patcher(game, baseModule); + core_setup_patcher(game, baseModule, txFile); // Load the UnityPlayer module and invoke the callback HMODULE unityModule = LoadLibraryA("UnityPlayer.dll"); INVOKE_CALLBACK(game->unityplayer_callback, unityModule); } -static void _run_tx(struct game_data *game, wchar_t *tableFile) { +static void _run_tx(struct game_data *game, wchar_t *txFile) { // Load unpatched base module HMODULE baseModule = LoadLibraryA(game->base_module_name); if (!baseModule) { @@ -66,8 +66,8 @@ static void _run_tx(struct game_data *game, wchar_t *tableFile) { void *table = core_perform_tx(&tableSize); // Save to file - utils_create_dir_recursively(tableFile); - utils_save_to_file(tableFile, table, tableSize); + utils_create_dir_recursively(txFile); + utils_save_to_file(txFile, table, tableSize); // Cleanup free(table); @@ -93,13 +93,13 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) { game_detect(&game); // Get required table file path - wchar_t tableFile[MAX_PATH]; - tx_table_file(&game, tableFile); + wchar_t txFile[MAX_PATH]; + tx_table_file(&game, txFile); - if (utils_path_exists(tableFile)) { - _run_game(&game); + if (utils_path_exists(txFile)) { + _run_game(&game, txFile); } else { - _run_tx(&game, tableFile); + _run_tx(&game, txFile); } return TRUE;