天天看点

向低权限(低完整性?)进程注入的问题 向低权限(低完整性?)进程注入的问题



向低权限(低完整性?)进程注入的问题

搬运自我的百度空间

一个让人崩溃的bug:Chrome程序在钩子下运行失败。正常情况下,在HOOK了CreateProcessInternalW后,我的钩子会在新进程插入自己的DLL进行连环钩子。调试了几天不见端倪。在windbg中看到卡住的原因是Chrome一个子进程在创建时Terminate了自己。使用windbg追溯到是LdrInitializeProcess的初始化进程操作失败,错误码是ACCESS_DENIED。查看了好多资料,包括reactos的代码,都不见LDR会产生ACCESS_DENIED的错误。

然后发现如果不在进程创建时用Detours插入我的DLL,就不会产生错误。发现MSDN中CreateProcess中写道: If a required DLL cannot be located or fails to initialize, the process is terminated.联想到可能是DLL插入错误。

仍然死胡同。最后发现Chrome的CreateProcessInternalW的一个参数hToken也是决定初始化成功与否的因素。结果使用较高权限的Token来创建子进程,Chrome正常运行了

应该是Chrome的子进程的Token是低权限的(低完整性?),连我的DLL也不允许加载,才造成这个问题。我的解决办法是先用当前进程的token创建进程,等DLL加载完毕再把低权限Token复制给新进程,完成降级。

为什么IE也是低权限的,却没有这个问题?。。。。。。

2014-04-22