闲来无事,做一个API拦截的简单程序,目标是拦截exploer.exe的CreateProcess.当打开桌面程序时,执行自定义的代码。
首先需要确认的是,explorer.exe创建进程是用了什么函数,创建进程自然想到用CreateProcess(CreateProcessA,CreateProcessW).
这里我拦截的是CreateProcessW。
执行以下命令:
dumpbin /imports explorer.exe | findstr CreateProcess
会发现explorer.exe只引用了CreateProcessW,这就是要拦截的API,我的试验机器是xp
大致过程如下,需开发一个exe,一个dll。
该exe查找explorer.exe的PID,调用CreateRemoteThread,让explorer.exe加载我们的dll,代码在《Windows核心编程》一书中可以找到。
该dll在被加载时执行API的地址替换,将CreateProcessW替换为我们自己的函数,函数原型和CreateProcessW一样,里面先执行我们自己的代码,
再return CreateProcessW即可。
(需要关闭360,不然会失败)