This commit is contained in:
lenheart 2024-08-07 13:31:23 +08:00
parent be9ef942e9
commit a8a7025f55
3 changed files with 62 additions and 62 deletions

View File

@ -23,91 +23,91 @@ Controller::~Controller()
void Controller::init() void Controller::init()
{ {
CMem::WriteUChar((void *)(base::GlobalData::Init_fix_1 - 0x1), 0); // CMem::WriteUChar((void *)(base::GlobalData::Init_fix_1 - 0x1), 0);
//.text:085BDE9D 83 F8 0A cmp eax, 10 // //.text:085BDE9D 83 F8 0A cmp eax, 10
CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_1 + 2), 0x7E); // 普通被击 // CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_1 + 2), 0x7E); // 普通被击
//.text:085BDF30 83 F8 1E cmp eax, 30 // //.text:085BDF30 83 F8 1E cmp eax, 30
CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_2 + 2), 0x7E); // 远古被击 // CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_2 + 2), 0x7E); // 远古被击
//.text:085BDFC3 83 F8 32 cmp eax, 50 // //.text:085BDFC3 83 F8 32 cmp eax, 50
CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_3 + 2), 0x7E); // 异界被击 // CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_3 + 2), 0x7E); // 异界被击
CMem::WriteUChar((void *)(0x081C025F + 1), 0x0B); // CMem::WriteUChar((void *)(0x081C025F + 1), 0x0B);
CMem::WriteUChar((void *)(0x081C029E + 1), 0x0B); // CMem::WriteUChar((void *)(0x081C029E + 1), 0x0B);
/* 修正使用代币增加积分 // /* 修正使用代币增加积分
// 地址 长度 原始字节 已修补字节
08179043 0x1 97 B8 // 08179043 0x1 97 B8
0817904E 0x1 8C AD // 0817904E 0x1 8C AD
*/ // */
CMem::WriteUChar((void *)(0x08179043), 0xB8); // CMem::WriteUChar((void *)(0x08179043), 0xB8);
CMem::WriteUChar((void *)(0x0817904E), 0xAD); // CMem::WriteUChar((void *)(0x0817904E), 0xAD);
// mov dword ptr [esp+4], 8E0F448h // // mov dword ptr [esp+4], 8E0F448h
Asm->lea(eax, dword_ptr(ebp, -0x84)); // Asm->lea(eax, dword_ptr(ebp, -0x84));
Asm->mov(dword_ptr(esp), eax); // Asm->mov(dword_ptr(esp), eax);
Asm->mov(eax, int(&hook_importCashShopItemList)); // Asm->mov(eax, int(&hook_importCashShopItemList));
Asm->call(eax); // Asm->call(eax);
Asm->mov(dword_ptr(esp, 4), 0x8E0F448); // Asm->mov(dword_ptr(esp, 4), 0x8E0F448);
Asm->mov(eax, base::importCashShopItemList_hook_end); // Asm->mov(eax, base::importCashShopItemList_hook_end);
Asm->jmp(eax); // Asm->jmp(eax);
auto code_importCashShopItemList = assembler.GetBytes(true); // auto code_importCashShopItemList = assembler.GetBytes(true);
void *new_importCashShopItemList_addr = Utils::alloc(code_importCashShopItemList.size()); // void *new_importCashShopItemList_addr = Utils::alloc(code_importCashShopItemList.size());
CMem::WriteBytes(new_importCashShopItemList_addr, code_importCashShopItemList.data(), code_importCashShopItemList.size()); // CMem::WriteBytes(new_importCashShopItemList_addr, code_importCashShopItemList.data(), code_importCashShopItemList.size());
YLOG("code :%s", Utils::ToHexString((const unsigned char *)code_importCashShopItemList.data(), code_importCashShopItemList.size()).c_str()); // YLOG("code :%s", Utils::ToHexString((const unsigned char *)code_importCashShopItemList.data(), code_importCashShopItemList.size()).c_str());
YLOG("code_addr :%p", new_importCashShopItemList_addr); // YLOG("code_addr :%p", new_importCashShopItemList_addr);
CMem::HookJmp(base::importCashShopItemList_hook_begin, (int)new_importCashShopItemList_addr); // CMem::HookJmp(base::importCashShopItemList_hook_begin, (int)new_importCashShopItemList_addr);
/************************************************************************/ // /************************************************************************/
/* HOOK 商城购买物品成功处理 */ // /* HOOK 商城购买物品成功处理 */
/************************************************************************/ // /************************************************************************/
// mov dword ptr [ebp-0FCh], 0FFFFFFFFh // // mov dword ptr [ebp-0FCh], 0FFFFFFFFh
Asm->lea(eax, dword_ptr(ebp, -0xEC)); // Asm->lea(eax, dword_ptr(ebp, -0xEC));
Asm->mov(dword_ptr(esp, 0x10), eax); // Asm->mov(dword_ptr(esp, 0x10), eax);
Asm->mov(eax, dword_ptr(ebp, -0x3A)); // Asm->mov(eax, dword_ptr(ebp, -0x3A));
Asm->mov(dword_ptr(esp, 0xc), eax); // Asm->mov(dword_ptr(esp, 0xc), eax);
Asm->mov(eax, dword_ptr(ebp, -0x5C)); // Asm->mov(eax, dword_ptr(ebp, -0x5C));
Asm->mov(dword_ptr(esp, 8), eax); // Asm->mov(dword_ptr(esp, 8), eax);
Asm->mov(eax, dword_ptr(ebp, -0x60)); // Asm->mov(eax, dword_ptr(ebp, -0x60));
Asm->mov(dword_ptr(esp, 4), eax); // Asm->mov(dword_ptr(esp, 4), eax);
Asm->mov(eax, dword_ptr(ebp, 0xC)); // Asm->mov(eax, dword_ptr(ebp, 0xC));
Asm->mov(dword_ptr(esp), eax); // Asm->mov(dword_ptr(esp), eax);
Asm->mov(eax, int(&hook_ProcessIPG_ResultOutput)); // Asm->mov(eax, int(&hook_ProcessIPG_ResultOutput));
Asm->call(eax); // Asm->call(eax);
Asm->mov(dword_ptr(ebp, -0xfc), 0x0FFFFFFFF); // Asm->mov(dword_ptr(ebp, -0xfc), 0x0FFFFFFFF);
Asm->mov(eax, base::ItemVendingMachine::ProcessIPG_ResultOutput_hook_end); // Asm->mov(eax, base::ItemVendingMachine::ProcessIPG_ResultOutput_hook_end);
Asm->jmp(eax); // Asm->jmp(eax);
auto code_ProcessIPG_ResultOutput = assembler.GetBytes(true); // auto code_ProcessIPG_ResultOutput = assembler.GetBytes(true);
void *new_ProcessIPG_ResultOutput_addr = Utils::alloc(code_ProcessIPG_ResultOutput.size()); // void *new_ProcessIPG_ResultOutput_addr = Utils::alloc(code_ProcessIPG_ResultOutput.size());
CMem::WriteBytes(new_ProcessIPG_ResultOutput_addr, code_ProcessIPG_ResultOutput.data(), code_ProcessIPG_ResultOutput.size()); // CMem::WriteBytes(new_ProcessIPG_ResultOutput_addr, code_ProcessIPG_ResultOutput.data(), code_ProcessIPG_ResultOutput.size());
YLOG("code_2 :%s", Utils::ToHexString((const unsigned char *)code_ProcessIPG_ResultOutput.data(), code_ProcessIPG_ResultOutput.size()).c_str()); // YLOG("code_2 :%s", Utils::ToHexString((const unsigned char *)code_ProcessIPG_ResultOutput.data(), code_ProcessIPG_ResultOutput.size()).c_str());
YLOG("code_addr_2 :%p", new_ProcessIPG_ResultOutput_addr); // YLOG("code_addr_2 :%p", new_ProcessIPG_ResultOutput_addr);
CMem::HookJmp(base::ItemVendingMachine::ProcessIPG_ResultOutput_hook_begin, (int)new_ProcessIPG_ResultOutput_addr); // CMem::HookJmp(base::ItemVendingMachine::ProcessIPG_ResultOutput_hook_begin, (int)new_ProcessIPG_ResultOutput_addr);
// HOOK_SETUP(IPacketDispatcher_ParamBase_dispatch_template); // HOOK_SETUP(IPacketDispatcher_ParamBase_dispatch_template);
HOOK_SETUP(UseJewel_dispatch_sig); // HOOK_SETUP(UseJewel_dispatch_sig);
HOOK_SETUP(Dispatcher_ModItemAttr_dispatch_sig); // HOOK_SETUP(Dispatcher_ModItemAttr_dispatch_sig);
HOOK_SETUP(PacketDispatcher_doDispatch); HOOK_SETUP(PacketDispatcher_doDispatch);
HOOK_SETUP(DisPatcher_MoveMap_dispatch_sig); // HOOK_SETUP(DisPatcher_MoveMap_dispatch_sig);
HOOK_SETUP(Inter_LoadEtc_dispatch_sig); // HOOK_SETUP(Inter_LoadEtc_dispatch_sig);
HOOK_SETUP(DisPatcher_ReturnToSelectCharacter_dispatch_sig); // HOOK_SETUP(DisPatcher_ReturnToSelectCharacter_dispatch_sig);
HOOK_SETUP(Init); // HOOK_SETUP(Init);
YLOG("Controller::init()"); // YLOG("Controller::init()");
} }
void Controller::Jinit() void Controller::Jinit()