BOOL WINAPI myCreateProcess(LPCWSTR lpApplicationName,LPWSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCWSTR lpCurrentDirectory,LPSTARTUPINFOW lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation
)
{
BOOL bRet =FALSE;
CHAR tcText[MAX_PATH];
if
( _tcsstr(lpCommandLine,_T(
"TASLogin.exe"
)) )
{
GetModuleFileNameA(g_hMod,tcText,MAX_PATH);
return
DetourCreateProcessWithDll(lpApplicationName,lpCommandLine,lpProcessAttributes,lpThreadAttributes,
bInheritHandles,dwCreationFlags,lpEnvironment,lpCurrentDirectory,lpStartupInfo,lpProcessInformation,tcText,RealCreateProcess);
}
return
RealCreateProcess(lpApplicationName,lpCommandLine,lpProcessAttributes,lpThreadAttributes,
bInheritHandles,dwCreationFlags,lpEnvironment,lpCurrentDirectory,lpStartupInfo,lpProcessInformation);
}
void StartWork()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
TCHAR tcText[100];
TCHAR lpProcessName[50]={0} ;
_tcscpy_s(lpProcessName, GetCurProcessName().c_str());
if
( !_tcsicmp ( lpProcessName,_T(
"tgp_daemon.exe"
)) )
{
DetourAttach((PVOID*)&RealCreateProcess,myCreateProcess);
//HOOK
CreateProcess,实现完美注入TSALogin.exe
}
if
( !_tcsicmp ( lpProcessName,_T(
"TASLogin.exe"
)) )
{
DWORD dwOldProtect;
//
自己构造 ZwSetContextThread ZwGetContextThread,因为等会这2个函数会被TX hook,所以我们先构造一份自己的
ZwSetContextThread=(fnZwSetContextThread)GetProcAddress(GetModuleHandle(_T(
"ntdll"
)),
"ZwSetContextThread"
);
ZwGetContextThread=(fnZwGetContextThread)GetProcAddress(GetModuleHandle(_T(
"ntdll"
)),
"ZwGetContextThread"
);
ReadProcessMemory((HANDLE)-1,(VOID*)ZwSetContextThread,g_ZwSetContextThreadZone,5,nullptr);
ReadProcessMemory((HANDLE)-1,(VOID*)ZwGetContextThread,g_ZwGetContextThreadZone,5,nullptr);
VirtualProtect(g_ZwSetContextThreadZone,10,PAGE_EXECUTE_READWRITE,&dwOldProtect);
VirtualProtect(g_ZwGetContextThreadZone,10,PAGE_EXECUTE_READWRITE,&dwOldProtect);
*(BYTE*)(g_ZwGetContextThreadZone+5)=0xE9;
*(BYTE*)(g_ZwSetContextThreadZone+5)=0xE9;
*(DWORD*)( g_ZwGetContextThreadZone+6)= (DWORD)ZwGetContextThread - (DWORD)g_ZwGetContextThreadZone -5;
*(DWORD*)( g_ZwSetContextThreadZone+6 )=(DWORD)ZwSetContextThread -(DWORD)g_ZwSetContextThreadZone -5;
/*_stprintf_s(tcText,_T(
"g_ZwGetContextThreadZone = 0x%x,g_ZwSetContextThreadZone =0x%x"
),g_ZwGetContextThreadZone,g_ZwSetContextThreadZone);
OutputDebugString(tcText);*/
//Hook
RtlDispatchException
ProcessDispatchException();
//
设置硬件断点,监视键盘输入
g_hHookId=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,g_hMod,GetCurrentThreadId());
OutputDebugString(_T(
"TSALogin.exe注入成功"
));
}
DetourTransactionCommit();
}
extern void StartWork();
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case
DLL_PROCESS_ATTACH:
g_hMod=hModule;
StartWork();
break
;
case
DLL_THREAD_ATTACH:
break
;
case
DLL_THREAD_DETACH:
break
;
case
DLL_PROCESS_DETACH:
break
;
}
return
TRUE;
}