Compare commits

..

No commits in common. "master" and "0.1.4" have entirely different histories.

3 changed files with 3 additions and 47 deletions

View file

@ -3,7 +3,7 @@
use std::{sync::RwLock, time::Duration};
use lazy_static::lazy_static;
use modules::{CcpBlocker, Misc};
use modules::Misc;
use windows::core::PCSTR;
use windows::Win32::System::Console;
use windows::Win32::System::SystemServices::DLL_PROCESS_ATTACH;
@ -18,12 +18,8 @@ use crate::modules::{Http, MhyContext, ModuleManager, Security};
unsafe fn thread_func() {
let base = GetModuleHandleA(PCSTR::null()).unwrap().0 as usize;
let mut module_manager = MODULE_MANAGER.write().unwrap();
// Block query_security_file ASAP
module_manager.enable(MhyContext::<CcpBlocker>::new(base));
std::thread::sleep(Duration::from_secs(14));
std::thread::sleep(Duration::from_secs(12));
util::disable_memprotect_guard();
Console::AllocConsole().unwrap();
@ -31,6 +27,7 @@ unsafe fn thread_func() {
println!("Genshin Impact encryption patch\nMade by xeondev\nTo work with XilonenImpact: git.xeondev.com/reversedrooms/XilonenImpact");
println!("Base: {:X}", base);
let mut module_manager = MODULE_MANAGER.write().unwrap();
module_manager.enable(MhyContext::<Http>::new(base));
module_manager.enable(MhyContext::<Security>::new(base));
module_manager.enable(MhyContext::<Misc>::new(base));

View file

@ -1,38 +0,0 @@
use std::ffi::CStr;
use super::{MhyContext, MhyModule, ModuleType};
use anyhow::Result;
use ilhook::x64::Registers;
use windows::{
core::s,
Win32::System::LibraryLoader::{GetModuleHandleA, GetProcAddress},
};
pub struct CcpBlocker;
impl MhyModule for MhyContext<CcpBlocker> {
unsafe fn init(&mut self) -> Result<()> {
let winsock2 = GetModuleHandleA(s!("Ws2_32.dll")).unwrap();
let getaddrinfo = GetProcAddress(winsock2, s!("getaddrinfo")).unwrap();
self.interceptor
.attach(getaddrinfo as usize, on_getaddrinfo)
}
unsafe fn de_init(&mut self) -> Result<()> {
Ok(())
}
fn get_module_type(&self) -> super::ModuleType {
ModuleType::CcpBlocker
}
}
unsafe extern "win64" fn on_getaddrinfo(reg: *mut Registers, _: usize) {
let host_ptr = (*reg).rcx as *const i8;
let host = CStr::from_ptr(host_ptr);
if host.to_string_lossy() == "dispatchcnglobal.yuanshen.com" {
std::ptr::copy_nonoverlapping(c"0.0.0.0".as_ptr(), (*reg).rcx as *mut i8, 9);
}
}

View file

@ -4,12 +4,10 @@ use anyhow::Result;
use crate::interceptor::Interceptor;
mod ccp_blocker;
mod http;
mod misc;
mod security;
pub use ccp_blocker::CcpBlocker;
pub use http::Http;
pub use misc::Misc;
pub use security::Security;
@ -43,7 +41,6 @@ pub enum ModuleType {
Http,
Security,
Misc,
CcpBlocker,
}
pub trait MhyModule {