整个代码没有使用windows hook技术,而是利用将代码直接写入远程程序空间中。这个代码的运行过程是这样的,首先用CreateProcess来创建一个ie进程,创建时候就把它挂起。然后得到它的基址,通过这个基址使用函数ZwUnmapViewOfSection来卸载这个内存空间的数据,让这个空间的都为0。再用VirtualAllocEx来个ie进程重新分配内存空间,大小为本程序的大小。使用WriteProcessMemory重新写ie进程的基址,把它变为本程序的基址。再用WriteProcessMemory把本程序的内容写入 VirtualAllocEx分配来的内存空间。用SetThreadContext把ie进程的状态值重新设置,最后使用ResumeThread,ie进程运行。
写在最后
程序已经基本搞懂了,就有一个地方没有明白。CONTEXT结构体中各个域所代表的意思,比如ebx,eax