From bc651397e6180cb2103fbfe22ff74b97ac5e724f Mon Sep 17 00:00:00 2001 From: amizing25 Date: Sat, 15 Mar 2025 05:48:53 +0700 Subject: [PATCH] fix: remove hkcheck as it's not needed (yet?) --- hkrpg/src/addr.rs | 44 ++++++++++++++++++++++-------- hkrpg/src/util.rs | 69 ++++++++++++++++++++++++----------------------- 2 files changed, 68 insertions(+), 45 deletions(-) diff --git a/hkrpg/src/addr.rs b/hkrpg/src/addr.rs index 2638c16..4213e20 100644 --- a/hkrpg/src/addr.rs +++ b/hkrpg/src/addr.rs @@ -2,7 +2,7 @@ use std::sync::{LazyLock, OnceLock}; use windows::{Win32::System::LibraryLoader::GetModuleHandleA, core::s}; -use crate::util::{scan_il2cpp_section, scan_unity_player_section}; +use crate::util::scan_il2cpp_section; const PTR_TO_STRING_ANSI: &str = "E8 ? ? ? ? 48 ? ? 48 85 C0 75 ? 48 8D 4C 24"; const MAKE_INITIAL_URL: &str = "55 41 56 56 57 53 48 83 EC ? 48 8D 6C 24 ? 48 C7 45 ? ? ? ? ? 48 89 D6 48 89 CF E8 ? ? ? ? 84 C0"; // TODO @@ -10,8 +10,8 @@ const SET_ELEVATION_DITHER: &str = "E9 ? ? ? ? 0F 28 74 24 ? 48 83 C4 ? 5B 5F 5E const SET_DISTANCE_DITHER: &str = "E8 ? ? ? ? 49 8B 46 ? 48 85 C0 0F 84 ? ? ? ? 48 8B 4D"; // TODO const SET_DITHER_ALPHA: &str = "56 57 48 83 EC ? 0F 29 74 24 ? 44 89 C6 0F 28 F1 48 89 CF 80 3D ? ? ? ? ? 75 ? 80 7F"; // TODO const SET_DITHER_ALPHA_ANIM: &str = "56 57 55 53 48 83 EC ? 44 0F 29 44 24 ? 0F 29 7C 24 ? 0F 29 74 24 ? 44 0F 28 C3 0F 28 F2 0F 28 F9"; // TODO -const HK_CHECK1: &str = "55 41 56 56 57 53 48 81 EC 00 01 00 00 48 8D AC 24 80 00 00 00 C7 45 7C 00 00 00 00"; -const HK_CHECK2: &str = "55 41 57 41 56 41 55 41 54 56 57 53 48 81 EC B8 02 00 00"; +// const HK_CHECK1: &str = "55 41 56 56 57 53 48 81 EC 00 01 00 00 48 8D AC 24 80 00 00 00 C7 45 7C 00 00 00 00"; +// const HK_CHECK2: &str = "55 41 57 41 56 41 55 41 54 56 57 53 48 81 EC B8 02 00 00"; #[derive(Default)] pub struct RVAConfig { @@ -34,22 +34,24 @@ pub fn rva_config() -> &'static mut RVAConfig { pub static GAME_ASSEMBLY_BASE: LazyLock = LazyLock::new(|| unsafe { GetModuleHandleA(s!("GameAssembly.dll")).unwrap().0 as usize }); -pub static UNITY_PLAYER_BASE: LazyLock = - LazyLock::new(|| unsafe { GetModuleHandleA(s!("UnityPlayer.dll")).unwrap().0 as usize }); +// pub static UNITY_PLAYER_BASE: LazyLock = +// LazyLock::new(|| unsafe { GetModuleHandleA(s!("UnityPlayer.dll")).unwrap().0 as usize }); macro_rules! set_rva { - ($config:ident, $field:ident, $scan_fn:ident, $rva_pat:expr, $fallback:expr) => { + ($base:ident, $config:ident, $field:ident, $scan_fn:ident, $rva_pat:expr, $fallback:expr) => { if let Some(addr) = unsafe { $scan_fn($rva_pat) } { - $config.$field = addr - *GAME_ASSEMBLY_BASE; + $config.$field = addr - *$base; println!( - "[hkrpg::addr::set_rva] Found relative address for {} -> 0x{:X}", + "[hkrpg::addr::set_rva] Found relative address for {} [{}] -> 0x{:X}", stringify!($field), + stringify!($base), $config.$field ); } else { eprintln!( - "[hkrpg::addr::set_rva] Failed to find pattern for {} using {}", + "[hkrpg::addr::set_rva] Failed to find pattern for {} [{}] using {}", stringify!($field), + stringify!($base), stringify!($scan_fn) ); @@ -63,6 +65,7 @@ pub unsafe fn init_rvas() { // ptr_to_string_ansi set_rva!( + GAME_ASSEMBLY_BASE, config, ptr_to_string_ansi, scan_il2cpp_section, @@ -72,6 +75,7 @@ pub unsafe fn init_rvas() { // make_initial_url set_rva!( + GAME_ASSEMBLY_BASE, config, make_initial_url, scan_il2cpp_section, @@ -81,6 +85,7 @@ pub unsafe fn init_rvas() { // set_elevation_dither set_rva!( + GAME_ASSEMBLY_BASE, config, set_elevation_dither, scan_il2cpp_section, @@ -89,6 +94,7 @@ pub unsafe fn init_rvas() { ); // set_distance_dither set_rva!( + GAME_ASSEMBLY_BASE, config, set_distance_dither, scan_il2cpp_section, @@ -97,6 +103,7 @@ pub unsafe fn init_rvas() { ); // set_dither_alpha set_rva!( + GAME_ASSEMBLY_BASE, config, set_dither_alpha, scan_il2cpp_section, @@ -105,6 +112,7 @@ pub unsafe fn init_rvas() { ); // set_dither_alpha_anim set_rva!( + GAME_ASSEMBLY_BASE, config, set_dither_alpha_anim, scan_il2cpp_section, @@ -112,6 +120,20 @@ pub unsafe fn init_rvas() { 0x0 ); - set_rva!(config, hk_check1, scan_unity_player_section, HK_CHECK1, 0x0); - set_rva!(config, hk_check2, scan_unity_player_section, HK_CHECK2, 0x0); + // set_rva!( + // UNITY_PLAYER_BASE, + // config, + // hk_check1, + // scan_unity_player_section, + // HK_CHECK1, + // 0x0 + // ); + // set_rva!( + // UNITY_PLAYER_BASE, + // config, + // hk_check2, + // scan_unity_player_section, + // HK_CHECK2, + // 0x0 + // ); } diff --git a/hkrpg/src/util.rs b/hkrpg/src/util.rs index bcde408..041f295 100644 --- a/hkrpg/src/util.rs +++ b/hkrpg/src/util.rs @@ -10,7 +10,7 @@ use windows::{ core::s, }; -use crate::addr::{GAME_ASSEMBLY_BASE, UNITY_PLAYER_BASE}; +use crate::addr::GAME_ASSEMBLY_BASE; #[allow(static_mut_refs)] unsafe fn game_assembly_slice() -> &'static [u8] { @@ -38,39 +38,14 @@ unsafe fn game_assembly_slice() -> &'static [u8] { } } -#[allow(static_mut_refs)] -unsafe fn unity_player_slice() -> &'static [u8] { - static mut SLICE: OnceCell<&[u8]> = OnceCell::new(); - unsafe { - SLICE.get_or_init(|| { - let module = GetModuleHandleA(s!("UnityPlayer.dll")).unwrap(); - let mut module_info = MODULEINFO { - lpBaseOfDll: std::ptr::null_mut(), - SizeOfImage: 0, - EntryPoint: std::ptr::null_mut(), - }; - GetModuleInformation( - GetCurrentProcess(), - module, - &mut module_info, - std::mem::size_of::() as u32, - ) - .unwrap(); - std::slice::from_raw_parts( - module.0 as *const u8, - module_info.SizeOfImage.try_into().unwrap(), - ) - }) - } -} - pub unsafe fn scan_il2cpp_section(pat: &str) -> Option { let mut slice = unsafe { game_assembly_slice() }; scan_first_match(&mut slice, pat).unwrap().map(|address| { let slice = unsafe { game_assembly_slice() }; let instruction = &slice[address..address + 1][0]; if *instruction == 0xE8 { - let offset = i32::from_le_bytes((&slice[address + 1..address + 1 + 4]).try_into().unwrap()); + let offset = + i32::from_le_bytes((&slice[address + 1..address + 1 + 4]).try_into().unwrap()); let pointer = offset as usize + 5 + address; return GAME_ASSEMBLY_BASE.wrapping_add(pointer); } @@ -78,9 +53,35 @@ pub unsafe fn scan_il2cpp_section(pat: &str) -> Option { }) } -pub unsafe fn scan_unity_player_section(pat: &str) -> Option { - let mut slice = unsafe { unity_player_slice() }; - scan_first_match(&mut slice, pat) - .unwrap() - .map(|loc| UNITY_PLAYER_BASE.wrapping_add(loc)) -} +// #[allow(static_mut_refs)] +// unsafe fn unity_player_slice() -> &'static [u8] { +// static mut SLICE: OnceCell<&[u8]> = OnceCell::new(); +// unsafe { +// SLICE.get_or_init(|| { +// let module = GetModuleHandleA(s!("UnityPlayer.dll")).unwrap(); +// let mut module_info = MODULEINFO { +// lpBaseOfDll: std::ptr::null_mut(), +// SizeOfImage: 0, +// EntryPoint: std::ptr::null_mut(), +// }; +// GetModuleInformation( +// GetCurrentProcess(), +// module, +// &mut module_info, +// std::mem::size_of::() as u32, +// ) +// .unwrap(); +// std::slice::from_raw_parts( +// module.0 as *const u8, +// module_info.SizeOfImage.try_into().unwrap(), +// ) +// }) +// } +// } + +// pub unsafe fn scan_unity_player_section(pat: &str) -> Option { +// let mut slice = unsafe { unity_player_slice() }; +// scan_first_match(&mut slice, pat) +// .unwrap() +// .map(|loc| UNITY_PLAYER_BASE.wrapping_add(loc)) +// }