LunaHook-mirror/LunaHook/engine32/Tanuki.cpp

70 lines
2.1 KiB
C++
Raw Normal View History

2024-02-07 20:59:24 +08:00
#include"Tanuki.h"
/** jichi 9/14/2013
* TanukiSoft (*.tac)
*
* Seems to be broken for new games in 2012 such like <EFBFBD>
*
* : /HSN4@004983E0
* This is the same hook as ITH
* - addr: 4817888 (0x4983e0)
* - text_fun: 0x0
* - off: 4
* - type: 1025 (0x401)
*
* <EFBFBD><EFBFBD><EFBFBD> /HSN-8@200FE7:TONARINO.EXE
* - addr: 2101223 (0x200fe7)
* - module: 2343491905 (0x8baed941)
* - off: 4294967284 = 0xfffffff4 = -0xc
* - type: 1089 (0x441)
*/
bool InsertTanukiHook()
{
ConsoleOutput("trying TanukiSoft");
for (DWORD i = processStartAddress; i < processStopAddress - 4; i++)
if (*(DWORD *)i == 0x8140)
if (DWORD j = SafeFindEnclosingAlignedFunction(i, 0x400)) { // jichi 9/14/2013: might crash the game without admin priv
//GROWL_DWORD2(i, j);
HookParam hp;
hp.address = j;
hp.offset=get_stack(1);
hp.type = USING_STRING | NO_CONTEXT|EMBED_ABLE|EMBED_BEFORE_SIMPLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
hp.hook_font=F_GetGlyphOutlineA;
ConsoleOutput("INSERT TanukiSoft");
return NewHook(hp, "TanukiSoft");
}
//ConsoleOutput("Unknown TanukiSoft engine.");
ConsoleOutput("TanukiSoft: failed");
return false;
}
bool InsertTanukiHook2() {
const BYTE bytes[] = {
//0x55,0x8b,0xec,0x53,0x8b,0x5d,0x08,0x56,0x8b,0xf1,0x85,0xdb string too long hook。但是这个会把所有字符串全提出来
XX,0x9F,0x88,0x00,0x00,
0x66
};
ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStopAddress);
ConsoleOutput("Tanuki %p", addr);
if (addr == 0)return false;
addr = MemDbg::findEnclosingAlignedFunction(addr,0x1000);
if (addr == 0)return false;
HookParam hp;
hp.address = addr;
hp.offset=get_stack(2);
hp.type = USING_STRING;
ConsoleOutput("Tanuki %p", addr);
return NewHook(hp, "Tanuki");
}
bool Tanuki::attach_function() {
bool b1= InsertTanukiHook();
bool b2=InsertTanukiHook2();
return b1||b2;
}
bool Tanuki_last::attach_function() {
bool b1= InsertTanukiHook();
return b1;
}