ProcessHacker 的版本在不断更新,版本2.33相应的开发环境也于是俱进地更新到了VS2013.之前研究的是2.88版本相应的是VS2010.
下定决心好好研究 ProcessHacker 和 ReatOS的代码。结合的参考资料有:毛德操的《windows 内核情景分析》还用潘爱民的《windows内核原理与实验》、经典的《Windows Internal》系列书籍、零散资料。
ProcessHacker主要分为两部分,用户程序部分ProcessHacker.exe和一个驱动程序kprocesshacker.sys .分析工作也自然地分为两部分.
先贴出main函数。
INT WINAPI wWinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ PWSTR lpCmdLine,
_In_ INT nCmdShow
)
{
LONG result;
#ifdef DEBUG
PHP_BASE_THREAD_DBG dbg;
#endif
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);/*This function initializes the Component Object Model (COM) for use by the current thread.
Applications are required to use CoInitializeEx before they make any other COM library calls except for memory allocation functions.
*/
//(struct _TEB *) (ULONG_PTR)__readfsdword(PcTeb);
pTeb = (struct _TEB *) (ULONG_PTR)__readfsdword(PcTeb);//线程环境块 地址
pPeb = pTeb->ProcessEnvironmentBlock;//进程环境块
PhInstanceHandle = pPeb->ImageBaseAddress;//进程主模块地址
// PhInstanceHandle = (HINSTANCE)NtCurrentPeb()->ImageBaseAddress;//handle。线程环境块,进程环境块,值得认真看看。与CPU相关,编译器内部函数 __readfsdword 查看FS段中内容
//TEB 在FS段 0x18位置处
if (!NT_SUCCESS(PhInitializePhLib()))
return 1;
if (!PhInitializeAppSystem())
return 1;