forked from Public-Mirror/Textractor
refactors
This commit is contained in:
parent
588b013392
commit
e621155e25
10
host/host.cc
10
host/host.cc
@ -19,6 +19,8 @@ ProcessEventCallback OnAttach, OnDetach;
|
|||||||
|
|
||||||
DWORD DUMMY[100];
|
DWORD DUMMY[100];
|
||||||
|
|
||||||
|
ThreadParameter CONSOLE{ 0, -1UL, -1UL, -1UL };
|
||||||
|
|
||||||
#define HOST_LOCK std::lock_guard<std::recursive_mutex> hostLocker(hostMutex) // Synchronized scope for accessing private data
|
#define HOST_LOCK std::lock_guard<std::recursive_mutex> hostLocker(hostMutex) // Synchronized scope for accessing private data
|
||||||
|
|
||||||
namespace Host
|
namespace Host
|
||||||
@ -27,17 +29,19 @@ namespace Host
|
|||||||
DLLEXPORT void Start(ProcessEventCallback onAttach, ProcessEventCallback onDetach, ThreadEventCallback onCreate, ThreadEventCallback onRemove)
|
DLLEXPORT void Start(ProcessEventCallback onAttach, ProcessEventCallback onDetach, ThreadEventCallback onCreate, ThreadEventCallback onRemove)
|
||||||
{
|
{
|
||||||
OnAttach = onAttach; OnDetach = onDetach; OnCreate = onCreate; OnRemove = onRemove;
|
OnAttach = onAttach; OnDetach = onDetach; OnCreate = onCreate; OnRemove = onRemove;
|
||||||
OnCreate(textThreadsByParams[{ 0, -1UL, -1UL, -1UL }] = new TextThread({ 0, -1UL, -1UL, -1UL }, USING_UNICODE));
|
OnCreate(textThreadsByParams[CONSOLE] = new TextThread(CONSOLE, USING_UNICODE));
|
||||||
CreateNewPipe();
|
CreateNewPipe();
|
||||||
}
|
}
|
||||||
|
|
||||||
DLLEXPORT void Close()
|
DLLEXPORT void Close()
|
||||||
{
|
{
|
||||||
// Artikash 7/25/2018: This is only called when NextHooker is closed, at which point Windows should free everything itself...right?
|
// Artikash 7/25/2018: This is only called when NextHooker is closed, at which point Windows should free everything itself...right?
|
||||||
|
#ifdef _DEBUG
|
||||||
HOST_LOCK;
|
HOST_LOCK;
|
||||||
OnRemove = [](TextThread* textThread) { delete textThread; };
|
OnRemove = [](TextThread* textThread) { delete textThread; };
|
||||||
for (auto i : processRecordsByIds) UnregisterProcess(i.first);
|
for (auto i : processRecordsByIds) UnregisterProcess(i.first);
|
||||||
delete textThreadsByParams[{ 0, -1UL, -1UL, -1UL }];
|
delete textThreadsByParams[CONSOLE];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DLLEXPORT bool InjectProcess(DWORD processId, DWORD timeout)
|
DLLEXPORT bool InjectProcess(DWORD processId, DWORD timeout)
|
||||||
@ -155,7 +159,7 @@ namespace Host
|
|||||||
DLLEXPORT void AddConsoleOutput(std::wstring text)
|
DLLEXPORT void AddConsoleOutput(std::wstring text)
|
||||||
{
|
{
|
||||||
HOST_LOCK;
|
HOST_LOCK;
|
||||||
textThreadsByParams[{ 0, -1UL, -1UL, -1UL }]->AddSentence(std::wstring(text));
|
textThreadsByParams[CONSOLE]->AddSentence(std::wstring(text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,46 +5,6 @@
|
|||||||
// 8/23/2013 jichi
|
// 8/23/2013 jichi
|
||||||
// Branch: ITH/common.h, rev 128
|
// Branch: ITH/common.h, rev 128
|
||||||
|
|
||||||
// jichi 9/9/2013: Another importnat function is lstrcatA, which is already handled by
|
|
||||||
// Debonosu hooks. Wait until it is really needed by certain games.
|
|
||||||
// The order of the functions is used in several place.
|
|
||||||
// I need to recompile all of the dlls to modify the order.
|
|
||||||
|
|
||||||
// jichi 10/14/2014
|
|
||||||
#define HOOK_GDI_FUNCTION_LIST \
|
|
||||||
GetTextExtentPoint32A \
|
|
||||||
, GetTextExtentExPointA \
|
|
||||||
, GetTabbedTextExtentA \
|
|
||||||
, GetCharacterPlacementA \
|
|
||||||
, GetGlyphIndicesA \
|
|
||||||
, GetGlyphOutlineA \
|
|
||||||
, ExtTextOutA \
|
|
||||||
, TextOutA \
|
|
||||||
, TabbedTextOutA \
|
|
||||||
, GetCharABCWidthsA \
|
|
||||||
, GetCharABCWidthsFloatA \
|
|
||||||
, GetCharWidth32A \
|
|
||||||
, GetCharWidthFloatA \
|
|
||||||
, GetTextExtentPoint32W \
|
|
||||||
, GetTextExtentExPointW \
|
|
||||||
, GetTabbedTextExtentW \
|
|
||||||
, GetCharacterPlacementW \
|
|
||||||
, GetGlyphIndicesW \
|
|
||||||
, GetGlyphOutlineW \
|
|
||||||
, ExtTextOutW \
|
|
||||||
, TextOutW \
|
|
||||||
, TabbedTextOutW \
|
|
||||||
, GetCharABCWidthsW \
|
|
||||||
, GetCharABCWidthsFloatW \
|
|
||||||
, GetCharWidth32W \
|
|
||||||
, GetCharWidthFloatW \
|
|
||||||
, DrawTextA \
|
|
||||||
, DrawTextExA \
|
|
||||||
, DrawTextW \
|
|
||||||
, DrawTextExW
|
|
||||||
//, CharNextA
|
|
||||||
//, CharPrevA
|
|
||||||
//enum { HOOK_FUN_COUNT = 30 }; // total number of GDI hooks
|
|
||||||
// jichi 1/16/2015: Though called max hook, it means max number of text threads
|
// jichi 1/16/2015: Though called max hook, it means max number of text threads
|
||||||
enum { MAX_HOOK = 64 }; // must be larger than HOOK_FUN_COUNT
|
enum { MAX_HOOK = 64 }; // must be larger than HOOK_FUN_COUNT
|
||||||
|
|
||||||
@ -117,138 +77,6 @@ enum { FIXED_SPLIT_VALUE = 0x10001 };
|
|||||||
|
|
||||||
enum { PIPE_BUFFER_SIZE = 0x1000};
|
enum { PIPE_BUFFER_SIZE = 0x1000};
|
||||||
|
|
||||||
// jichi 12/18/2013:
|
|
||||||
// These dlls are used to guess the range for non-NO_CONTEXT hooks.
|
|
||||||
//
|
|
||||||
// Disabling uxtheme.dll would crash certain system: http://tieba.baidu.com/p/2764436254
|
|
||||||
#define IHF_FILTER_DLL_LIST \
|
|
||||||
/* ITH original filters */ \
|
|
||||||
L"gdiplus.dll" /* Graphics functions like TextOutA */ \
|
|
||||||
, L"lpk.dll" /* Language package scripts and fonts */ \
|
|
||||||
, L"msctf.dll" /* Text service */ \
|
|
||||||
, L"psapi.dll" /* Processes */ \
|
|
||||||
, L"usp10.dll" /* UNICODE rendering */ \
|
|
||||||
, L"user32.dll" /* Non-graphics functions like lstrlenA */ \
|
|
||||||
, L"uxtheme.dll" /* Theme */ \
|
|
||||||
\
|
|
||||||
/* Windows DLLs */ \
|
|
||||||
, L"advapi32.dll" /* Advanced services */ \
|
|
||||||
, L"apphelp.dll" /* Appliation help */ \
|
|
||||||
, L"audioses.dll" /* Audios */ \
|
|
||||||
, L"avrt.dll" /* Audio video runtime */ \
|
|
||||||
, L"cfgmgr32.dll" /* Configuration manager */ \
|
|
||||||
, L"clbcatq.dll" /* COM query service */ \
|
|
||||||
, L"comctl32.dll" /* Common control library */ \
|
|
||||||
, L"comdlg32.dll" /* Common dialogs */ \
|
|
||||||
, L"crypt32.dll" /* Security cryption */ \
|
|
||||||
, L"cryptbase.dll"/* Security cryption */ \
|
|
||||||
, L"cryptsp.dll" /* Security cryption */ \
|
|
||||||
, L"d3d8thk.dll" /* Direct3D 8 */ \
|
|
||||||
, L"d3d9.dll" /* Direct3D 9 */ \
|
|
||||||
, L"dbghelp.dll" /* Debug help */ \
|
|
||||||
, L"dciman32.dll" /* Display cotrol */ \
|
|
||||||
, L"devobj.dll" /* Device object */ \
|
|
||||||
, L"ddraw.dll" /* Direct draw */ \
|
|
||||||
, L"dinput.dll" /* Diret input */ \
|
|
||||||
, L"dsound.dll" /* Direct sound */ \
|
|
||||||
, L"DShowRdpFilter.dll" /* Direct show */ \
|
|
||||||
, L"dwmapi.dll" /* Windows manager */ \
|
|
||||||
, L"gdi32.dll" /* GDI32 */ \
|
|
||||||
, L"hid.dll" /* HID user library */ \
|
|
||||||
, L"iertutil.dll" /* IE runtime */ \
|
|
||||||
, L"imagehlp.dll" /* Image help */ \
|
|
||||||
, L"imm32.dll" /* Input method */ \
|
|
||||||
, L"ksuser.dll" /* Kernel service */ \
|
|
||||||
, L"ole32.dll" /* COM OLE */ \
|
|
||||||
, L"oleacc.dll" /* OLE access */ \
|
|
||||||
, L"oleaut32.dll" /* COM OLE */ \
|
|
||||||
, L"kernel.dll" /* Kernel functions */ \
|
|
||||||
, L"kernelbase.dll" /* Kernel functions */ \
|
|
||||||
, L"midimap.dll" /* MIDI */ \
|
|
||||||
, L"mmdevapi.dll" /* Audio device */ \
|
|
||||||
, L"mpr.dll" /* Winnet */ \
|
|
||||||
, L"msacm32.dll" /* MS ACM */ \
|
|
||||||
, L"msacm32.drv" /* MS ACM */ \
|
|
||||||
, L"msasn1.dll" /* Encoding/decoding */ \
|
|
||||||
, L"msimg32.dll" /* Image */ \
|
|
||||||
, L"msvfw32.dll" /* Media play */ \
|
|
||||||
, L"netapi32.dll" /* Network service */ \
|
|
||||||
, L"normaliz.dll" /* Normalize */ \
|
|
||||||
, L"nsi.dll" /* NSI */ \
|
|
||||||
, L"ntdll.dll" /* NT functions */ \
|
|
||||||
, L"ntmarta.dll" /* NT MARTA */ \
|
|
||||||
, L"nvd3dum.dll" /* Direct 3D */ \
|
|
||||||
, L"powerprof.dll"/* Power profile */ \
|
|
||||||
, L"profapi.dll" /* Profile API */ \
|
|
||||||
, L"propsys.dll" /* System properties */ \
|
|
||||||
, L"quartz.dll" /* OpenGL */ \
|
|
||||||
, L"rpcrt4.dll" /* RPC runtime */ \
|
|
||||||
, L"rpcrtremote.dll" /* RPC runtime */ \
|
|
||||||
, L"rsabase.dll" /* RSA cryption */ \
|
|
||||||
, L"rsaenh.dll" /* RSA cryption */ \
|
|
||||||
, L"schannel.dll" /* Security channel */ \
|
|
||||||
, L"sechost.dll" /* Service host */ \
|
|
||||||
, L"setupapi.dll" /* Setup service */ \
|
|
||||||
, L"shell32.dll" /* Windows shell */ \
|
|
||||||
, L"shlwapi.dll" /* Light-weighted shell */ \
|
|
||||||
, L"slc.dll" /* SLC */ \
|
|
||||||
, L"srvcli.dll" /* Service client */ \
|
|
||||||
, L"version.dll" /* Windows version */ \
|
|
||||||
, L"wdmaud.drv" /* Wave output */ \
|
|
||||||
, L"wldap32.dll" /* Wireless */ \
|
|
||||||
, L"wininet.dll" /* Internet access */ \
|
|
||||||
, L"winmm.dll" /* Windows sound */ \
|
|
||||||
, L"winsta.dll" /* Connection system */ \
|
|
||||||
, L"wtsapi32.dll" /* Windows terminal server */ \
|
|
||||||
, L"wintrust.dll" /* Windows trust */ \
|
|
||||||
, L"wsock32.dll" /* Windows sock */ \
|
|
||||||
, L"ws2_32.dll" /* Terminal server */ \
|
|
||||||
, L"wkscli.dll" /* ACIS */ \
|
|
||||||
\
|
|
||||||
/* MSVCRT */ \
|
|
||||||
, L"msvcrt.dll" /* VC rutime */ \
|
|
||||||
, L"msvcr80.dll" /* VC rutime 8 */ \
|
|
||||||
, L"msvcp80.dll" /* VC rutime 8 */ \
|
|
||||||
, L"msvcr90.dll" /* VC rutime 9 */ \
|
|
||||||
, L"msvcp90.dll" /* VC rutime 9 */ \
|
|
||||||
, L"msvcr100.dll" /* VC rutime 10 */ \
|
|
||||||
, L"msvcp100.dll" /* VC rutime 10 */ \
|
|
||||||
, L"msvcr110.dll" /* VC rutime 11 */ \
|
|
||||||
, L"msvcp110.dll" /* VC rutime 11 */ \
|
|
||||||
\
|
|
||||||
/* VNR */ \
|
|
||||||
, L"vnrhook.dll" \
|
|
||||||
, L"vnrhookxp.dll" \
|
|
||||||
\
|
|
||||||
/* Sogou IME */ \
|
|
||||||
, L"sogoupy.ime" \
|
|
||||||
, L"PicFace.dll" \
|
|
||||||
, L"AddressSearch.dll" \
|
|
||||||
\
|
|
||||||
/* QQ IME */ \
|
|
||||||
, L"QQPINYIN.IME" \
|
|
||||||
\
|
|
||||||
/* AlphaROM */ \
|
|
||||||
, L"kDays.dll" \
|
|
||||||
\
|
|
||||||
/* 360Safe */ \
|
|
||||||
, L"safemon.dll" \
|
|
||||||
\
|
|
||||||
/* Locale changers */ \
|
|
||||||
, L"AlLayer.dll" /* AppLocale */ \
|
|
||||||
, L"LocaleEmulator.dll" /* Locale Emulator */ \
|
|
||||||
, L"LSH.dll" /* LocaleSwitch */ \
|
|
||||||
, L"ntleah.dll" /* NTLEA */
|
|
||||||
|
|
||||||
// Google Japanese IME
|
|
||||||
//, L"GoogleIMEJaTIP32.dll"
|
|
||||||
|
|
||||||
enum {
|
|
||||||
//IHF_FILTER_COUNT = 7
|
|
||||||
IHF_FILTER_COUNT = 7 + 72 + 9 + 4 + 3 + 1 + 1 + 1 + 4 // count of total dlls to filter
|
|
||||||
, IHF_FILTER_CAPACITY = IHF_FILTER_COUNT + 1 // one more than the dll count
|
|
||||||
};
|
|
||||||
|
|
||||||
// jichi 12/25/2013: Header in each message sent to vnrsrv
|
// jichi 12/25/2013: Header in each message sent to vnrsrv
|
||||||
// There are totally three elements
|
// There are totally three elements
|
||||||
// - 0x0 dwAddr hook address
|
// - 0x0 dwAddr hook address
|
||||||
|
@ -21,7 +21,7 @@ struct HookParam {
|
|||||||
// jichi 8/24/2013: For special hooks.
|
// jichi 8/24/2013: For special hooks.
|
||||||
typedef void (*text_fun_t)(DWORD esp, HookParam *hp, BYTE index, DWORD *data, DWORD *split, DWORD *len);
|
typedef void (*text_fun_t)(DWORD esp, HookParam *hp, BYTE index, DWORD *data, DWORD *split, DWORD *len);
|
||||||
|
|
||||||
// jichi 10/24/2014: Add filter function. Return the if skip the text
|
// jichi 10/24/2014: Add filter function. Return true if skip the text
|
||||||
typedef bool (*filter_fun_t)(LPVOID str, DWORD *len, HookParam *hp, BYTE index);
|
typedef bool (*filter_fun_t)(LPVOID str, DWORD *len, HookParam *hp, BYTE index);
|
||||||
|
|
||||||
// jichi 10/24/2014: Add generic hook function, return false if stop execution.
|
// jichi 10/24/2014: Add generic hook function, return false if stop execution.
|
||||||
@ -49,29 +49,6 @@ struct HookParam {
|
|||||||
HANDLE readerHandle;
|
HANDLE readerHandle;
|
||||||
};
|
};
|
||||||
|
|
||||||
// jichi 6/1/2014: Structure of the esp for extern functions
|
|
||||||
struct HookStack
|
|
||||||
{
|
|
||||||
// pushad
|
|
||||||
DWORD edi, // -0x24
|
|
||||||
esi, // -0x20
|
|
||||||
ebp, // -0x1c
|
|
||||||
esp, // -0x18
|
|
||||||
ebx, // -0x14
|
|
||||||
edx, // -0x10
|
|
||||||
ecx, // -0xc
|
|
||||||
eax; // -0x8
|
|
||||||
// pushfd
|
|
||||||
DWORD eflags; // -0x4
|
|
||||||
DWORD retaddr; // 0
|
|
||||||
DWORD args[1]; // 0x4
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SendParam {
|
|
||||||
DWORD type;
|
|
||||||
HookParam hp;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Hook { // size: 0x80
|
struct Hook { // size: 0x80
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
LPSTR hook_name;
|
LPSTR hook_name;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user