From 6b9f9b6d937e370df47955775e23b1f1f9e13665 Mon Sep 17 00:00:00 2001 From: mkrsym1 Date: Fri, 4 Aug 2023 23:00:42 +0300 Subject: [PATCH] Get rid of game_id --- game_payload/blob/core.o | Bin 8458 -> 3270 bytes game_payload/include/game.h | 15 --------------- game_payload/src/hi3.c | 29 ----------------------------- game_payload/src/hsr.c | 25 ++++++++++++++----------- 4 files changed, 14 insertions(+), 55 deletions(-) diff --git a/game_payload/blob/core.o b/game_payload/blob/core.o index 238922832f1137949d25666d0a4f18afd0584549..83124eda2c983c883a7e7443f2de40d824937b4e 100644 GIT binary patch delta 1617 zcmZWpZ){Ul6u+-)yOwNw9b0v5lhyJzI(5sMK(fV|v|E|C`nEuT5ri<3tz8WJgBi(8 zKnjd$t}oTq%LfxbY!O92V4_CYM)si-+yoQFA&~^5#PDH7G>8dfB76SseXI%DP42nB z`}>`9-nr-A_U)#bHThj{x``N5xr98E%73yjokPeW1=A^c;!SPrF8mz0(P0tNramjP z-FBodRXI!G*Or^Q=eIRFd8tz6+zsN>T;8JiojrhG=JLOCs+1Y-wO2knrHM>5d0I=` zu(CyJYVo_?tX?1wOG)>(YD4|AsiO&9(JcV$)4T+3U z9!;LmjvzsJq7HUb(A1e3O+M$OEMt1X;G+?3Gc`_V?@O-`Y?MtyrYxe>>qZR-5;m`f zCy0lT;9T%xc#;n|nqQnlGlJ>1WS&i}I3k^l@}pF_5Hb)?~kDCZg?hMHg<)MzrlT*`-C%w%j*7M#vszbJ#|bp?~4HYE$*)2y3!Y zR_<(VSWu5WkDH?g4oQu~qXS|`bwk(cBZjyX+`;m_m{+NR7N8oVtFYD^B0P9K)3IbGOwrOE?OW;4 zZ69UdPu7ck>}TnWyK-W-c_=%t7813PdZ^I?w}S!7ntjqoPrh6iW!Hiim#a*A`~DLJ zpsEYLU3)sHd1D001E}KlY!yQn0_R7>;HO-NS8wlowRe9{tT)zoAlCJ?sFk<7+e;hq zyAvaXbriD%cns^A96sZ2No>Qm0@F@*!InzY3+t2U9oRC7Mqx!#I~j-dOLP;qTp~A~ z-cu6!f!0bi3WOJrh>x@ACH$z?N$z(bl#+n_C!l5pqb@6CJrEuQ)U7~O5)A^am*_2^ zH4=RSWJR0?vLYZ5@mzBdy^LHyt0kA0ImSb^N7VWV(aWV_}vMK-xVB$a+)%=hA z8e5F;(gMGGP*Q}r`4IpdxOw>lPq*VE z;ljHMcdB;;!oZ&=$x(_^VQ=DrB#ZS*~dDG3E&yk9#|v9bG*=9eq6I Yt>=ldy*yA}$&Y!<_`bCt@Ht=o|H`~`;{X5v literal 8458 zcmeHLe{2)y89pb51e(>MEFImDxNfF`2}~TIK+A?5oN{RmHIxwA0vBVS6H~{w&Xx^9z7%b?!#e)oer zpY59cy-)tWd+vFk@BMzg-*>)Ce)l$x(#K!oxE&06xqu=KD-7$!^Ind-+Q@M&H|h6x z;KFmUzCbdr#BI7tFvP{i1KSIQN;W&Uhjg;j;RFQFHFMnl7F{_F7x)VWhMl?v;CGYJ zmO@;6D3EvR{ILHDx(^)w+Cz($*eU|@$Zxv*#X^gMOC7>i++BihCFYKj2RYOV-O^?3 z-YiIW6}o%Mb;0(asi7pv*b)JdE(+anxo&ar&T`!r=$>%tmaZt*WuSYqT(_j%)$VTSe(cgMagFy$=zi+b zt#HlrVd#Ecu3Ng;vA{Im=b(GRrCa72$1&)Rm+S8AaE;?l=w5f}?sSdgUFgo1>y`yw z!rn{gu+0Va?WlTs^fQn0RblTbVjkWm zZVhh1M73ON zRGnmo;Muk6g`<<#I4)8YJf|c6d0y-pLCyI2Qk!075>*8CBI>dlW8=QDLa9_5UDX`b zzB9}By%cV=CZX6iOf4k5PY9lg())t8kX6^%`uXPUqdWAomyfESF-HPC?YoAKYM~aP z__Tiy?BSQ%NmZO3SX*4sgiacrC`SA-L3`SN5LU2)8u2ghR!<1p6cDHtLP=z(G$E{b z&o_F8jsN4|8Q+{eFmYN8O+;ETN6{HGg%#)Ij|BCN@JqCRf@i`H9zZfqhI#+7@8upXXGZE1?&x*j_HFn;&ZyQ<+j;|}WH2CI(xGrtU-fqvI zQsKRiPwAI@V_sP4rb!WfW0x_*bTciP^Nn4^&A)xQDYSChlyQ{dmv^Qih^QO=3Wk*T z&4~E>*r@0@i(+YnR}eZ}_pzUAftN2F(E@^c%-@cgh^nP-^|GM8hoCU#TYY_PG1vN9 z#Q$J(_vH_MEWkjoeFg=ZO6_PLhY8bMh8DrF<{^b!3@j!84goJ>5T6#Sk1nvIirB>F<$un0=C1)s34qtOolAGG# zrdGMB1#ap#H#HTMu}??GJ<%2Cd}HT9O?p44o?u64Yg$=I3q^Jw=-UHhT0Z$c`X4+q zxeoHK;3t!3$x|v|F7E+4CPpvug8D}m!-D!}Ru=&^6?q-J4z~krg5soa2Ire0wEAYm zcqWP#@53HC7d&H5Te0o2|4@fGVe}M_Lq@pbKYTn5M*VF3UP$tP| za|)kIXOsNg0-w&J4Dhjx6fa18E-z*Ic$QBW3PZTd^2&h3?}#U*v?B4cl+P8?N=_c( z3wbG#PK~6q{rpI7Nap+FgAy+#(@Hv*T_j8WxWG-4e^inSz}(l-p{@A;qabU@N05&q zPayvt`6JkSvgyHmMjDi|ij=$^1QKrIl9 zeHPkpp(ibLz(P-3=%9rFnCC`}(?rcc9mtIwy$VpfjqKm8j=pSJXIa+S7UC@{05^b) zIavyj6Gyro>r2VQ@m!T%(8P^tuq?%hEPOa|`aOX})i0 z@QPGb^IJnRqlV@KLvvdVjgNu=sTH|ef9^IkwEERF6xWn|$kjAY8Je%u(7bABZmyxZ zXlQP&p}BPmj7aoIuhyTip=qn388kGsFRJ-DXlQ7kRMVU?H1x@!n&uydW@Zh|*QVmE z!1yT+^_U8Pp+xak>kx=*g(pvVYH@2yOJx6Y~yoVkP^x3~HxR%-g?XP^eYZ*uG)V zvNd{6p`^&Zp6uT*XbKuV3$7atWdC+S18(&AQ9AvQbikO6CZ?ekai@Zzp?#{);WGw9 zyHaP484R_cGk-N0+HpEFl^Q{!{iQPt42E`-&a5{W+B-V4(_m<)=*%I5p?#q<;|4>! zKxaNQ7>aqFnMMnaL=mnt3k`0P9PvL{RLCv|AW?dfb>9uZ}!APy8{F_9JVF;pz1cS+@L%cb

Z?JSJ-<0+lIpOSR?qNKG?OD zI^h`G4aVsW&AB-fb#&O2*3(}zp6YOGO6zfJhIAcnO=&%DZ{Wl-rC;b4hd{k&rcKJ+ z(#sc4CS@ou=Hp6YK$6RkkQ$E%Ryi-pshm70D#K~UYUIlIWwo}=ULT~WEc^6gMrWd?VxPMMmTeKNzjmLpSB(~%j#wH%q6nvTqn zt>wtnRCi -enum game_id { - GAME_INVALID, - - GAME_HI3_GLB, - GAME_HI3_SEA, - GAME_HI3_CN, - GAME_HI3_TW, - GAME_HI3_KR, - GAME_HI3_JP, - - GAME_HSR_OS, - GAME_HSR_CN -}; - #define INVOKE_CALLBACK(callback, ...) if (callback) { callback(__VA_ARGS__); } typedef void (*unityplayer_callback_t)(HMODULE unityModule); struct game_data { - enum game_id id; // Temporary const char *base_module_name; const char *assembly_name; const char *txs_section_name; diff --git a/game_payload/src/hi3.c b/game_payload/src/hi3.c index 2bb3dee..5561cd2 100644 --- a/game_payload/src/hi3.c +++ b/game_payload/src/hi3.c @@ -8,37 +8,8 @@ const char *HI3_ASSEMBLY_NAME = "UserAssembly.dll"; const char *HI3_TXS_SECTION_NAME = ".bh3"; const char *HI3_TVM_SECTION_NAME = ".tvm0"; -struct crc_id_pair { - uint32_t crc; - enum game_id id; -}; - -const struct crc_id_pair HI3_REGIONS[] = { - // It may be possible to get rid of region-specific data altogether in the future - - { 0xcb8041ff, GAME_HI3_GLB }, // glb v6.8.0 - { 0x104cbfc5, GAME_HI3_SEA }, // sea v6.8.0 - { 0x2efd9099, GAME_HI3_CN }, // cn v6.8.0 - { 0x30fa5b0f, GAME_HI3_TW }, // tw v6.8.0 - { 0xe47327fb, GAME_HI3_KR }, // kr v6.8.0 - { 0x992b6b63, GAME_HI3_JP } // jp v6.8.0 -}; void hi3_fill_data(struct game_data *buf) { - uint32_t crc = utils_file_crc32c(L"UnityPlayer.dll"); - - enum game_id id = GAME_INVALID; - for (size_t i = 0; i < sizeof(HI3_REGIONS) / sizeof(struct crc_id_pair); i++) { - if (HI3_REGIONS[i].crc == crc) { - id = HI3_REGIONS[i].id; - } - } - - if (id == GAME_INVALID) { - msg_err_a("Invalid UnityPlayer.dll checksum: %x", crc); - } - - buf->id = id; buf->base_module_name = HI3_BASE_MODULE_NAME; buf->assembly_name = HI3_ASSEMBLY_NAME; buf->txs_section_name = HI3_TXS_SECTION_NAME; diff --git a/game_payload/src/hsr.c b/game_payload/src/hsr.c index b4b04ff..ba09a6a 100644 --- a/game_payload/src/hsr.c +++ b/game_payload/src/hsr.c @@ -9,16 +9,20 @@ const char *HSR_ASSEMBLY_NAME = "GameAssembly.dll"; const char *HSR_TXS_SECTION_NAME = ".ace"; const char *HSR_TVM_SECTION_NAME = ".tvm0"; -struct crc_id_pair { - uint32_t crc; - enum game_id id; +enum hsr_region { + HSR_INVALID, + HSR_OS, + HSR_CN }; -const struct crc_id_pair HSR_REGIONS[] = { - // It may be possible to get rid of region-specific data altogether in the future +struct crc_region_pair { + uint32_t crc; + enum hsr_region id; +}; - { 0x9eb3084e, GAME_HSR_OS }, // os v1.2.0 - { 0x14be07e9, GAME_HSR_CN } // cn v1.2.0 +const struct crc_region_pair HSR_REGIONS[] = { + { 0x9eb3084e, HSR_OS }, // os v1.2.0 + { 0x14be07e9, HSR_CN } // cn v1.2.0 }; #define JUMP_SIZE (6 + sizeof(void*)) @@ -73,18 +77,17 @@ static void _unityplayer_callback(HMODULE unityModule) { void hsr_fill_data(struct game_data *buf) { uint32_t crc = utils_file_crc32c(L"UnityPlayer.dll"); - enum game_id id = GAME_INVALID; - for (size_t i = 0; i < sizeof(HSR_REGIONS) / sizeof(struct crc_id_pair); i++) { + enum hsr_region id = HSR_INVALID; + for (size_t i = 0; i < sizeof(HSR_REGIONS) / sizeof(struct crc_region_pair); i++) { if (HSR_REGIONS[i].crc == crc) { id = HSR_REGIONS[i].id; } } - if (id == GAME_INVALID) { + if (id == HSR_INVALID) { msg_err_a("Invalid UnityPlayer.dll checksum: %x", crc); } - buf->id = id; buf->base_module_name = HSR_BASE_MODULE_NAME; buf->assembly_name = HSR_ASSEMBLY_NAME; buf->txs_section_name = HSR_TXS_SECTION_NAME;