add d3dx hooks
This commit is contained in:
parent
7e4cc13bcf
commit
b873ecbc96
@ -84,6 +84,11 @@ bool DeterminePCEngine()
|
||||
// return true;
|
||||
//}
|
||||
|
||||
for (std::wstring DXVersion : { L"d3dx9", L"d3dx10" })
|
||||
if (HMODULE module = GetModuleHandleW(DXVersion.c_str())) PcHooks::hookD3DXFunctions(module);
|
||||
else for (int i = 0; i < 50; ++i)
|
||||
if (HMODULE module = GetModuleHandleW((DXVersion + L"_" + std::to_wstring(i)).c_str())) PcHooks::hookD3DXFunctions(module);
|
||||
|
||||
if (GetProcAddress((HMODULE)processStartAddress, "?Write@String@v8@@QBEHPAGHHH@Z"))
|
||||
InsertV8Hook((HMODULE)processStartAddress);
|
||||
if (HMODULE module = GetModuleHandleW(L"node.dll"))
|
||||
|
@ -153,6 +153,52 @@ void PcHooks::hookGDIPlusFunctions()
|
||||
NEW_MODULE_HOOK(hModule, GdipMeasureDriverString, s_arg1, 0,s_arg3,0, USING_UNICODE|USING_STRING, s_arg2 / arg_sz)
|
||||
}
|
||||
|
||||
|
||||
bool PcHooks::hookD3DXFunctions(HMODULE d3dxModule)
|
||||
{
|
||||
ConsoleOutput("Textractor: inserting Direct3D hooks (EXPERIMENTAL)");
|
||||
uintptr_t createFont = (uintptr_t)GetProcAddress(d3dxModule, "D3DXCreateFontIndirectA");
|
||||
if (!createFont) createFont = (uintptr_t)GetProcAddress(d3dxModule, "D3DX10CreateFontIndirectA");
|
||||
if (!createFont)
|
||||
{
|
||||
ConsoleOutput("Textractor: D3DX failed: couldn't find entry function");
|
||||
return false;
|
||||
}
|
||||
|
||||
struct D3DXFont
|
||||
{
|
||||
uintptr_t(*vtable)[20];
|
||||
DWORD data[2000];
|
||||
} font;
|
||||
for (int i = 0, calls = 0; i < 100; ++i)
|
||||
{
|
||||
if (*(BYTE*)(createFont + i) == 0xe8) ++calls;
|
||||
if (calls == 2)
|
||||
{
|
||||
union
|
||||
{
|
||||
void(D3DXFont::*ctor)();
|
||||
uintptr_t addr;
|
||||
} fuckTheTypeSystem;
|
||||
fuckTheTypeSystem.addr = *(uintptr_t*)(createFont + i + 1) + createFont + i + 5;
|
||||
(font.*(fuckTheTypeSystem.ctor))();
|
||||
|
||||
HookParam hp = {};
|
||||
hp.address = (*font.vtable)[14];
|
||||
hp.offset = s_arg3;
|
||||
hp.length_offset = s_arg4 / arg_sz;
|
||||
hp.type = USING_STRING;
|
||||
NewHook(hp, "ID3DXFont::DrawTextA");
|
||||
hp.address = (*font.vtable)[15];
|
||||
hp.type = USING_STRING | USING_UNICODE;
|
||||
NewHook(hp, "ID3DXFont::DrawTextW");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
ConsoleOutput("Textractor: D3DX failed: couldn't find vtable");
|
||||
return false;
|
||||
}
|
||||
|
||||
// jichi 10/2/2013
|
||||
// Note: All functions does not have NO_CONTEXT attribute and will be filtered.
|
||||
void PcHooks::hookOtherPcFunctions()
|
||||
|
@ -7,6 +7,7 @@ namespace PcHooks {
|
||||
|
||||
void hookGDIFunctions();
|
||||
void hookGDIPlusFunctions();
|
||||
void hookD3DXFunctions(HMODULE d3dxModule);
|
||||
void hookOtherPcFunctions();
|
||||
|
||||
} // namespace PcHooks
|
||||
|
Loading…
x
Reference in New Issue
Block a user