fix: fixed client damaged error
This commit is contained in:
@@ -2,13 +2,16 @@ use ilhook::x64::{
|
||||
CallbackOption, HookFlags, HookPoint, HookType, Hooker, JmpBackRoutine, RetnRoutine,
|
||||
};
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Interceptor {
|
||||
hooks: Vec<HookPoint>,
|
||||
}
|
||||
|
||||
type Result<T> = std::result::Result<T, ilhook::HookError>;
|
||||
impl Interceptor {
|
||||
pub const fn new() -> Self {
|
||||
Interceptor { hooks: Vec::new() }
|
||||
}
|
||||
|
||||
pub fn attach(&mut self, addr: usize, routine: JmpBackRoutine) -> Result<()> {
|
||||
let hooker = Hooker::new(
|
||||
addr,
|
||||
|
||||
@@ -4,7 +4,7 @@ use std::{thread, time::Duration};
|
||||
|
||||
use modules::{
|
||||
HkrpgModuleManager, censorship_patch::CensorshipPatch, crypto::Crypto, hk_check::HkCheck,
|
||||
network::Network,
|
||||
misc::Misc, network::Network,
|
||||
};
|
||||
use windows::{
|
||||
Win32::System::{Console, LibraryLoader::GetModuleHandleA},
|
||||
@@ -27,6 +27,11 @@ pub fn main() {
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
}
|
||||
|
||||
let mut mm1 = HkrpgModuleManager::default();
|
||||
mm1.add::<Misc>();
|
||||
mm1.init()
|
||||
.expect("[hkrpg::main] failed to initialize module (Misc)");
|
||||
|
||||
addr::init_rvas();
|
||||
|
||||
let mut module_manager = HkrpgModuleManager::default();
|
||||
|
||||
@@ -10,14 +10,10 @@ impl HkrpgModule for HkrpgModuleContext<HkCheck> {
|
||||
unsafe fn init(&mut self) -> Result<(), ilhook::HookError> {
|
||||
let config = rva_config();
|
||||
if config.hk_check1 != 0 && config.hk_check2 != 0 {
|
||||
self.interceptor.replace(
|
||||
self.base.wrapping_add(config.hk_check1),
|
||||
HkCheck::replacement,
|
||||
)?;
|
||||
self.interceptor.replace(
|
||||
self.base.wrapping_add(config.hk_check2),
|
||||
HkCheck::replacement,
|
||||
)?;
|
||||
self.interceptor
|
||||
.replace(config.hk_check1, HkCheck::replacement)?;
|
||||
self.interceptor
|
||||
.replace(config.hk_check2, HkCheck::replacement)?;
|
||||
println!("[hk_check::init] hk_check bypassed")
|
||||
}
|
||||
Ok(())
|
||||
|
||||
39
hkrpg/src/modules/misc.rs
Normal file
39
hkrpg/src/modules/misc.rs
Normal file
@@ -0,0 +1,39 @@
|
||||
use crate::modules::{HkrpgModule, HkrpgModuleContext};
|
||||
use ilhook::x64::Registers;
|
||||
use std::ffi::CStr;
|
||||
use windows::{
|
||||
Win32::System::LibraryLoader::{GetModuleHandleA, GetProcAddress},
|
||||
core::s,
|
||||
};
|
||||
|
||||
pub struct Misc;
|
||||
|
||||
impl HkrpgModule for HkrpgModuleContext<Misc> {
|
||||
unsafe fn init(&mut self) -> Result<(), ilhook::HookError> {
|
||||
unsafe {
|
||||
let ws32 = GetModuleHandleA(s!("Ws2_32.dll")).unwrap();
|
||||
let get_addr_info = GetProcAddress(ws32, s!("getaddrinfo")).unwrap();
|
||||
self.interceptor
|
||||
.attach(get_addr_info as usize, Misc::on_get_addr_info)?;
|
||||
|
||||
println!("[misc::init] initialized")
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Misc {
|
||||
pub unsafe extern "win64" fn on_get_addr_info(reg: *mut Registers, _: usize) {
|
||||
unsafe {
|
||||
let host = CStr::from_ptr((*reg).rcx as *const i8).to_string_lossy();
|
||||
|
||||
if host.contains("globaldp-")
|
||||
&& (host.contains("bhsr.com") || host.contains("starrails.com"))
|
||||
{
|
||||
println!("[*] [on_get_addr_info] {host} -> 0.0.0.0");
|
||||
std::ptr::copy_nonoverlapping(c"0.0.0.0".as_ptr(), (*reg).rcx as *mut i8, 9);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,10 @@ pub mod censorship_patch;
|
||||
pub mod crypto;
|
||||
pub mod hk_check;
|
||||
pub mod network;
|
||||
pub mod misc;
|
||||
|
||||
pub struct HkrpgModuleContext<T> {
|
||||
base: usize,
|
||||
_base: usize,
|
||||
interceptor: Interceptor,
|
||||
_module_type: PhantomData<T>,
|
||||
}
|
||||
@@ -16,8 +17,8 @@ pub struct HkrpgModuleContext<T> {
|
||||
impl<T> HkrpgModuleContext<T> {
|
||||
fn new(base: usize) -> Self {
|
||||
Self {
|
||||
base,
|
||||
interceptor: Interceptor::default(),
|
||||
_base: base,
|
||||
interceptor: Interceptor::new(),
|
||||
_module_type: PhantomData,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user