mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-12-27 13:44:11 +08:00
73 lines
2.4 KiB
C++
73 lines
2.4 KiB
C++
#include"GSX.h"
|
|
|
|
namespace
|
|
{
|
|
|
|
bool GSX1() {
|
|
//https://vndb.org/v7585
|
|
//PersonA ~オペラ座の怪人~ 体验版
|
|
//http://www.mirai-soft.com/products/persona/download.html
|
|
//https://dlsoft.dmm.co.jp/detail/stone_0015/
|
|
ULONG addr = MemDbg::findCallerAddress((ULONG)::GetCharWidth32W, 0xec8b55, processStartAddress, processStopAddress);
|
|
if(addr==0)return false;
|
|
HookParam hp;
|
|
hp.address=addr;
|
|
hp.type=USING_CHAR|CODEC_UTF16|DATA_INDIRECT;
|
|
hp.offset=get_stack(4);
|
|
return NewHook(hp,"GSX");
|
|
}
|
|
bool GSX2() {
|
|
//https://vndb.org/v1930
|
|
//星の王女 体验版
|
|
//https://dlsoft.dmm.co.jp/detail/stone_0016/
|
|
//https://vndb.org/v1931
|
|
//星の王女2 体验版
|
|
//https://dlsoft.dmm.co.jp/detail/stone_0017/
|
|
//https://vndb.org/v2989
|
|
//ツンデレ★S乙女 ―sweet sweet sweet― 体验版
|
|
//https://dlsoft.dmm.co.jp/detail/stone_0027/
|
|
//https://vndb.org/v1952
|
|
//星の王女 ~宇宙意識に目覚めた義経~ 体验版
|
|
//https://dlsoft.dmm.co.jp/detail/stone_0023/
|
|
//https://vndb.org/v1400
|
|
//仁義なき乙女 恋恋三昧 体验版
|
|
//https://dlsoft.dmm.co.jp/detail/stone_0032/
|
|
//https://vndb.org/v856
|
|
//仁義なき乙女 体验版
|
|
//https://dlsoft.dmm.co.jp/detail/stone_0031/
|
|
ULONG addr = findiatcallormov((DWORD)GetGlyphOutlineA,processStartAddress, processStartAddress, processStopAddress,false,XX);
|
|
if(addr==0)
|
|
addr = findiatcallormov((DWORD)GetGlyphOutlineA,processStartAddress, processStartAddress, processStopAddress);
|
|
if(addr==0)return false;
|
|
auto addr1=findfuncstart(addr);
|
|
auto addr2=MemDbg::findEnclosingAlignedFunction(addr);
|
|
if(addr1) addr=addr1;
|
|
else addr=addr2;
|
|
if(addr==0)return false;
|
|
auto xrefs=findxref_reverse_checkcallop(addr,processStartAddress,processStopAddress,0xe8);
|
|
if(xrefs.size()!=2)return false;
|
|
addr=xrefs[1];
|
|
addr1=findfuncstart(addr,0x180);
|
|
addr2=MemDbg::findEnclosingAlignedFunction(addr);
|
|
if(addr1)addr=addr1;
|
|
else addr=addr2;
|
|
if(addr==0)return false;
|
|
ConsoleOutput("%p",addr);
|
|
HookParam hp;
|
|
hp.address=addr;
|
|
hp.type=USING_CHAR;
|
|
hp.text_fun=[](hook_stack* stack, HookParam* hp, uintptr_t* data, uintptr_t* split, size_t* len){
|
|
|
|
if(IsBadReadPtr((VOID*)stack->stack[3],4))
|
|
*data=*(WORD*)stack->stack[4];
|
|
else
|
|
*data=*(WORD*)stack->stack[3];
|
|
*len=2;
|
|
};
|
|
return NewHook(hp,"GSX");
|
|
}
|
|
|
|
}
|
|
bool GSX::attach_function() {
|
|
return GSX1()||GSX2();
|
|
}
|