mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-11-27 15:54:03 +08:00
67 lines
2.0 KiB
C++
67 lines
2.0 KiB
C++
#include"ScrPlayer.h"
|
|
|
|
bool ScrPlayer_attach_function1() {
|
|
auto func=MemDbg::findCallerAddress((ULONG)GetGlyphOutlineA,0x90909090,processStartAddress,processStopAddress);
|
|
if(func==0)return false;
|
|
func+=4;
|
|
BYTE check[]={
|
|
0x83,0xf8,0x20,
|
|
0x74,XX,
|
|
0x3d,0x40,0x81,0x00,0x00,
|
|
0x74,XX
|
|
};
|
|
auto addr=MemDbg::findBytes(check,sizeof(check),processStartAddress,processStopAddress);
|
|
if(addr==0)return false;
|
|
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
|
if(addr==0)return false;
|
|
if(addr!=func)return false;
|
|
HookParam hp;
|
|
hp.address=func;
|
|
hp.offset=get_stack(5);
|
|
//会把多行分开导致翻译不对。
|
|
hp.type=USING_STRING;//|EMBED_ABLE|EMBED_BEFORE_SIMPLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
|
//hp.hook_font=F_GetGlyphOutlineA;
|
|
hp.filter_fun=[](LPVOID data, size_t* size, HookParam*) {
|
|
static int idx=0;
|
|
idx+=1;//这个函数总是连续被调用两次,一个绘制上层文字,一个绘制阴影。
|
|
return bool(idx%2);
|
|
};
|
|
return NewHook(hp,"ScrPlayer");
|
|
}
|
|
|
|
bool ScrPlayer_attach_function2() {
|
|
//https://vndb.org/v7056
|
|
//Rendezvous ~ランデブー~
|
|
// _DWORD *__stdcall sub_41DC10(
|
|
// _DWORD *a1,
|
|
// int a2,
|
|
// int a3,
|
|
// int a4,
|
|
// int a5,
|
|
// unsigned __int8 *a6, <---
|
|
// int a7,
|
|
// int a8,
|
|
// int a9,
|
|
// char a10,
|
|
// int a11)
|
|
BYTE bs[]={
|
|
0x51,
|
|
0x56,
|
|
0x8b,0x74,0x24,0x20,
|
|
0x8a,0x06,
|
|
0x84,0xc0,
|
|
0x89,0x4c,0x24,0x04,
|
|
0x0f,0x84,XX4
|
|
};
|
|
auto addr=MemDbg::findBytes(bs,sizeof(bs),processStartAddress,processStopAddress);
|
|
if(addr==0)return false;
|
|
HookParam hp;
|
|
hp.address=addr;
|
|
hp.offset=get_stack(6);
|
|
hp.type=USING_STRING;//有内部的multibyte函数使得无法内嵌显示中文字符
|
|
return NewHook(hp,"ScrPlayer2");
|
|
}
|
|
bool ScrPlayer::attach_function()
|
|
{
|
|
return ScrPlayer_attach_function1()||ScrPlayer_attach_function2();
|
|
} |