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()
{
CMem::WriteUChar((void *)(base::GlobalData::Init_fix_1 - 0x1), 0);
//.text:085BDE9D 83 F8 0A cmp eax, 10
CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_1 + 2), 0x7E); // 普通被击
//.text:085BDF30 83 F8 1E cmp eax, 30
CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_2 + 2), 0x7E); // 远古被击
//.text:085BDFC3 83 F8 32 cmp eax, 50
CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_3 + 2), 0x7E); // 异界被击
CMem::WriteUChar((void *)(0x081C025F + 1), 0x0B);
CMem::WriteUChar((void *)(0x081C029E + 1), 0x0B);
// CMem::WriteUChar((void *)(base::GlobalData::Init_fix_1 - 0x1), 0);
// //.text:085BDE9D 83 F8 0A cmp eax, 10
// CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_1 + 2), 0x7E); // 普通被击
// //.text:085BDF30 83 F8 1E cmp eax, 30
// CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_2 + 2), 0x7E); // 远古被击
// //.text:085BDFC3 83 F8 32 cmp eax, 50
// CMem::WriteUChar((void *)(base::CParty::addDungeonClear_fix_3 + 2), 0x7E); // 异界被击
// CMem::WriteUChar((void *)(0x081C025F + 1), 0x0B);
// CMem::WriteUChar((void *)(0x081C029E + 1), 0x0B);
/* 修正使用代币增加积分
08179043 0x1 97 B8
0817904E 0x1 8C AD
*/
CMem::WriteUChar((void *)(0x08179043), 0xB8);
CMem::WriteUChar((void *)(0x0817904E), 0xAD);
// /* 修正使用代币增加积分
// 地址 长度 原始字节 已修补字节
// 08179043 0x1 97 B8
// 0817904E 0x1 8C AD
// */
// CMem::WriteUChar((void *)(0x08179043), 0xB8);
// CMem::WriteUChar((void *)(0x0817904E), 0xAD);
// mov dword ptr [esp+4], 8E0F448h
Asm->lea(eax, dword_ptr(ebp, -0x84));
Asm->mov(dword_ptr(esp), eax);
Asm->mov(eax, int(&hook_importCashShopItemList));
Asm->call(eax);
Asm->mov(dword_ptr(esp, 4), 0x8E0F448);
Asm->mov(eax, base::importCashShopItemList_hook_end);
Asm->jmp(eax);
auto code_importCashShopItemList = assembler.GetBytes(true);
void *new_importCashShopItemList_addr = Utils::alloc(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_addr :%p", new_importCashShopItemList_addr);
// // mov dword ptr [esp+4], 8E0F448h
// Asm->lea(eax, dword_ptr(ebp, -0x84));
// Asm->mov(dword_ptr(esp), eax);
// Asm->mov(eax, int(&hook_importCashShopItemList));
// Asm->call(eax);
// Asm->mov(dword_ptr(esp, 4), 0x8E0F448);
// Asm->mov(eax, base::importCashShopItemList_hook_end);
// Asm->jmp(eax);
// auto code_importCashShopItemList = assembler.GetBytes(true);
// void *new_importCashShopItemList_addr = Utils::alloc(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_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 商城购买物品成功处理 */
/************************************************************************/
// mov dword ptr [ebp-0FCh], 0FFFFFFFFh
// /************************************************************************/
// /* HOOK 商城购买物品成功处理 */
// /************************************************************************/
// // mov dword ptr [ebp-0FCh], 0FFFFFFFFh
Asm->lea(eax, dword_ptr(ebp, -0xEC));
Asm->mov(dword_ptr(esp, 0x10), eax);
// Asm->lea(eax, dword_ptr(ebp, -0xEC));
// Asm->mov(dword_ptr(esp, 0x10), eax);
Asm->mov(eax, dword_ptr(ebp, -0x3A));
Asm->mov(dword_ptr(esp, 0xc), eax);
// Asm->mov(eax, dword_ptr(ebp, -0x3A));
// Asm->mov(dword_ptr(esp, 0xc), eax);
Asm->mov(eax, dword_ptr(ebp, -0x5C));
Asm->mov(dword_ptr(esp, 8), eax);
// Asm->mov(eax, dword_ptr(ebp, -0x5C));
// Asm->mov(dword_ptr(esp, 8), eax);
Asm->mov(eax, dword_ptr(ebp, -0x60));
Asm->mov(dword_ptr(esp, 4), eax);
// Asm->mov(eax, dword_ptr(ebp, -0x60));
// Asm->mov(dword_ptr(esp, 4), eax);
Asm->mov(eax, dword_ptr(ebp, 0xC));
Asm->mov(dword_ptr(esp), eax);
// Asm->mov(eax, dword_ptr(ebp, 0xC));
// Asm->mov(dword_ptr(esp), eax);
Asm->mov(eax, int(&hook_ProcessIPG_ResultOutput));
Asm->call(eax);
// Asm->mov(eax, int(&hook_ProcessIPG_ResultOutput));
// Asm->call(eax);
Asm->mov(dword_ptr(ebp, -0xfc), 0x0FFFFFFFF);
Asm->mov(eax, base::ItemVendingMachine::ProcessIPG_ResultOutput_hook_end);
Asm->jmp(eax);
auto code_ProcessIPG_ResultOutput = assembler.GetBytes(true);
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());
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);
// Asm->mov(dword_ptr(ebp, -0xfc), 0x0FFFFFFFF);
// Asm->mov(eax, base::ItemVendingMachine::ProcessIPG_ResultOutput_hook_end);
// Asm->jmp(eax);
// auto code_ProcessIPG_ResultOutput = assembler.GetBytes(true);
// 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());
// 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);
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(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(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()