From 52adef33a49f2e85df7c5fb0f6e0fdc98f1626a0 Mon Sep 17 00:00:00 2001 From: mireado Date: Wed, 20 Apr 2016 23:18:15 +0900 Subject: [PATCH] AOS engine pattern update --- vnr/vnrhook/src/engine/engine.cc | 48 +++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/vnr/vnrhook/src/engine/engine.cc b/vnr/vnrhook/src/engine/engine.cc index 148c85c..60153d9 100644 --- a/vnr/vnrhook/src/engine/engine.cc +++ b/vnr/vnrhook/src/engine/engine.cc @@ -10924,7 +10924,8 @@ bool InsertTencoHook() * 00e3c354 |. 85c9 test ecx,ecx * 00e3c356 |. 74 32 je short 恋する�00e3c38a */ -bool InsertAOSHook() + +bool InsertAOS1Hook() { // jichi 4/2/2014: The starting of this function is different from ヂ�モノツキ // So, use a pattern in the middle of the function instead. @@ -10982,6 +10983,51 @@ bool InsertAOSHook() return true; } +bool InsertAOS2Hook() +{ + const BYTE bytes[] = { + 0x51, // 00C4E7E0 /$ 51 PUSH ECX ; mireado: hook here, function begins + 0x33,0xc0, // 00C4E7E1 |. 33C0 XOR EAX,EAX + 0x53, // 00C4E7E3 |. 53 PUSH EBX + 0x55, // 00C4E7E4 |. 55 PUSH EBP + 0x8b,0x2d, 0x40,0xa3,0xcf,0x00, // 00C4E7E5 |. 8B2D 40A3CF00 MOV EBP,DWORD PTR DS:[0CFA340] + 0x89,0x07, // 00C4E7EB |. 8907 MOV DWORD PTR DS:[EDI],EAX + 0x89,0x47, 0x04, // 00C4E7ED |. 8947 04 MOV DWORD PTR DS:[EDI+4],EAX + 0x56, // 00C4E7F0 |. 56 PUSH ESI + 0x8b,0x75, 0x44, // 00C4E7F1 |. 8B75 44 MOV ESI,DWORD PTR SS:[EBP+44] + }; + + enum { addr_offset = 0 }; // distance to the beginning of the function, which is 0x51 (push ecx) + ULONG range = min(module_limit_ - module_base_, MAX_REL_ADDR); + ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), module_base_, module_base_ + range); + //GROWL(reladdr); + if (!addr) { + ConsoleOutput("vnreng:AOS: pattern not found"); + return false; + } + addr += addr_offset; + //GROWL(addr); + enum { push_ecx = 0x51 }; // beginning of the function + if (*(BYTE *)addr != push_ecx) { + ConsoleOutput("vnreng:AOS: beginning of the function not found"); + return false; + } + + HookParam hp = {}; + hp.address = addr; + hp.length_offset = 1; + hp.offset = 8; + hp.type = DATA_INDIRECT; + + ConsoleOutput("vnreng: INSERT AOS2"); + NewHook(hp, "AOS2"); + return true; +} + +bool InsertAOSHook() +{ return InsertAOS1Hook() || InsertAOS2Hook();} + + /** * jichi 1/10/2014: Rai7 puk * See: http://www.hongfire.com/forum/showthread.php/421909-%E3%80%90Space-Warfare-Sim%E3%80%91Rai-7-PUK/page10