mireado

AOS engine pattern update

...@@ -10924,7 +10924,8 @@ bool InsertTencoHook() ...@@ -10924,7 +10924,8 @@ bool InsertTencoHook()
10924 * 00e3c354 |. 85c9 test ecx,ecx 10924 * 00e3c354 |. 85c9 test ecx,ecx
10925 * 00e3c356 |. 74 32 je short 恋する�00e3c38a 10925 * 00e3c356 |. 74 32 je short 恋する�00e3c38a
10926 */ 10926 */
10927 -bool InsertAOSHook() 10927 +
10928 +bool InsertAOS1Hook()
10928 { 10929 {
10929 // jichi 4/2/2014: The starting of this function is different from ヂ�モノツキ 10930 // jichi 4/2/2014: The starting of this function is different from ヂ�モノツキ
10930 // So, use a pattern in the middle of the function instead. 10931 // So, use a pattern in the middle of the function instead.
...@@ -10982,6 +10983,51 @@ bool InsertAOSHook() ...@@ -10982,6 +10983,51 @@ bool InsertAOSHook()
10982 return true; 10983 return true;
10983 } 10984 }
10984 10985
10986 +bool InsertAOS2Hook()
10987 +{
10988 + const BYTE bytes[] = {
10989 + 0x51, // 00C4E7E0 /$ 51 PUSH ECX ; mireado: hook here, function begins
10990 + 0x33,0xc0, // 00C4E7E1 |. 33C0 XOR EAX,EAX
10991 + 0x53, // 00C4E7E3 |. 53 PUSH EBX
10992 + 0x55, // 00C4E7E4 |. 55 PUSH EBP
10993 + 0x8b,0x2d, 0x40,0xa3,0xcf,0x00, // 00C4E7E5 |. 8B2D 40A3CF00 MOV EBP,DWORD PTR DS:[0CFA340]
10994 + 0x89,0x07, // 00C4E7EB |. 8907 MOV DWORD PTR DS:[EDI],EAX
10995 + 0x89,0x47, 0x04, // 00C4E7ED |. 8947 04 MOV DWORD PTR DS:[EDI+4],EAX
10996 + 0x56, // 00C4E7F0 |. 56 PUSH ESI
10997 + 0x8b,0x75, 0x44, // 00C4E7F1 |. 8B75 44 MOV ESI,DWORD PTR SS:[EBP+44]
10998 + };
10999 +
11000 + enum { addr_offset = 0 }; // distance to the beginning of the function, which is 0x51 (push ecx)
11001 + ULONG range = min(module_limit_ - module_base_, MAX_REL_ADDR);
11002 + ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), module_base_, module_base_ + range);
11003 + //GROWL(reladdr);
11004 + if (!addr) {
11005 + ConsoleOutput("vnreng:AOS: pattern not found");
11006 + return false;
11007 + }
11008 + addr += addr_offset;
11009 + //GROWL(addr);
11010 + enum { push_ecx = 0x51 }; // beginning of the function
11011 + if (*(BYTE *)addr != push_ecx) {
11012 + ConsoleOutput("vnreng:AOS: beginning of the function not found");
11013 + return false;
11014 + }
11015 +
11016 + HookParam hp = {};
11017 + hp.address = addr;
11018 + hp.length_offset = 1;
11019 + hp.offset = 8;
11020 + hp.type = DATA_INDIRECT;
11021 +
11022 + ConsoleOutput("vnreng: INSERT AOS2");
11023 + NewHook(hp, "AOS2");
11024 + return true;
11025 +}
11026 +
11027 +bool InsertAOSHook()
11028 +{ return InsertAOS1Hook() || InsertAOS2Hook();}
11029 +
11030 +
10985 /** 11031 /**
10986 * jichi 1/10/2014: Rai7 puk 11032 * jichi 1/10/2014: Rai7 puk
10987 * See: http://www.hongfire.com/forum/showthread.php/421909-%E3%80%90Space-Warfare-Sim%E3%80%91Rai-7-PUK/page10 11033 * See: http://www.hongfire.com/forum/showthread.php/421909-%E3%80%90Space-Warfare-Sim%E3%80%91Rai-7-PUK/page10
......