mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-12-25 20:54:15 +08:00
42 lines
1.1 KiB
C++
42 lines
1.1 KiB
C++
|
#include"SYSD.h"
|
||
|
|
||
|
|
||
|
bool InsertSysdHook() {
|
||
|
|
||
|
/*
|
||
|
* Sample games:
|
||
|
* https://vndb.org/v2069
|
||
|
*/
|
||
|
const BYTE bytes[] = {
|
||
|
0xC1, 0xE9, 0x02, // shr ecx,02 <- hook here
|
||
|
0xF3, 0xA5, // repe movsd
|
||
|
0x8B, 0xCA, // mov ecx,edx
|
||
|
0x83, 0xE1, 0x03, // and ecx,03
|
||
|
0xF3, 0xA4, // repe movsb
|
||
|
0x5F, // pop edi
|
||
|
0xB8, 0x01, 0x00, 0x00, 0x00 // mov eax,00000001
|
||
|
};
|
||
|
|
||
|
ULONG range = min(processStopAddress - processStartAddress, MAX_REL_ADDR);
|
||
|
ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStartAddress + range);
|
||
|
if (!addr) {
|
||
|
ConsoleOutput("Sysd: pattern not found");
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
HookParam hp;
|
||
|
hp.address = addr;
|
||
|
hp.offset=get_reg(regs::esi);
|
||
|
hp.index = 0;
|
||
|
hp.padding = 0x12;
|
||
|
hp.split = get_stack(2);
|
||
|
hp.split_index = 0;
|
||
|
hp.type = USING_STRING | NO_CONTEXT | USING_SPLIT;
|
||
|
hp.filter_fun = NewLineCharFilterA;
|
||
|
ConsoleOutput("INSERT Sysd");
|
||
|
return NewHook(hp, "Sysd");
|
||
|
}
|
||
|
|
||
|
bool SYSD::attach_function() {
|
||
|
return InsertSysdHook();
|
||
|
}
|