CreateRemoteThread与Terminal Service

今天和项目组同事使用MS的终端服务,远程连接到某河南客户的服务器上调试程序。该功能使用了Hook API的技术,具体来说采用了修改IAT与CreateRemoteThread的方式来实现Hook API。

具 体方法不必多说,网上绝大多数Hook API都是使用这样的技术来实现。但今天发现的问题却很奇怪,开始使用控制台方式运行,该功能一切正常,改为服务方式运行后,Hook dll无法被注入到目标进程中。增加调试日志后发现,原来是CreateRemoteThread返回错误,错误信息为: "CreateRemoteThread() failed: 存储空间不足,无法处理此命令"。开始怀疑是Hook dll文件太大,目标进程内没有这么充足的空间。仔细考虑一下后排除了这种想法,因为在控制台模式下一切正常,而在服务模式下却不能进行注入。应该是和程 序运行的模式有关,但具体原因呢?放狗搜一下,发现小四哥的一篇文章提到CreateRemoteTread返回的这个错误,但当时他也没有找到解决方法。

MSDN也提到在远程终端服务上运行CreateRemoteThread会返回错误的说法:

Terminal Services isolates each terminal session by design. Therefore, CreateRemoteThread fails if the target process is in a different session than the calling process.

这下郁闷了,不知道如何才能在Terminal Services上成功调用CreateRemoteThread?

posted on 2006-12-20 10:32  fiestay  阅读(1424)  评论(2编辑  收藏  举报

导航