mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-11-30 17:15:38 +08:00
70 lines
2.1 KiB
C++
70 lines
2.1 KiB
C++
#include"Tanuki.h"
|
||
|
||
/** jichi 9/14/2013
|
||
* TanukiSoft (*.tac)
|
||
*
|
||
* Seems to be broken for new games in 2012 such like となり<E381AA>
|
||
*
|
||
* 微少女: /HSN4@004983E0
|
||
* This is the same hook as ITH
|
||
* - addr: 4817888 (0x4983e0)
|
||
* - text_fun: 0x0
|
||
* - off: 4
|
||
* - type: 1025 (0x401)
|
||
*
|
||
* 隣り<E99AA3>ぷ<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;
|
||
}
|