mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-11-24 22:35:36 +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 となり<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;
|
|||
|
}
|