读书人

一个注入DLL拦截API的程序EXE和DLL都

发布时间: 2012-03-11 18:15:38 作者: rapoo

一个注入DLL拦截API的程序,EXE和DLL都加入360信任名单了,可是每次开机第一次运行都失败。
RT。
每次开机第一次运行都是失败的,360也不报什么提示。非要第2次运行以后,第2到N次才成功。不知道谁碰到过。我拦截的是COPYFILEEXW。

[解决办法]
会不会是启动先后顺序问题? 试试取消自启动

开机后直接打开程序看看?可以运行那估计就是先后顺序问题

也有可能是你程序依赖的某些组件还没加载好 你程序就已经启动了
[解决办法]
用什么方法注入的,CReateRemoteThread()还是用SetWindowsHookEx()注入的.
[解决办法]

探讨
引用:
用什么方法注入的,CReateRemoteThread()还是用SetWindowsHookEx()注入的.

SetWindowsHookEx

[解决办法]
第一次运行都是失败,这个时候用dllspy检查一下EXPLORER的进程空间中是否有你的dll
[解决办法]
探讨
引用:
引用:
用什么方法注入的,CReateRemoteThread()还是用SetWindowsHookEx()注入的.

SetWindowsHookEx


消息钩子?SetWindowsHookEx要目标窗口接收消息之后才会注入成功
第一次失败应该是因为碰巧没有窗口消息,你的注入还没有完成吧

[解决办法]
我好像在 《深入WINDOWS内核》这本书里见过这种问题。书在单位里没拿,所以没法说清具体原因是什么
EXPLORER其实也是资源管理器吧。书中说,资源管理器常开线程什么的,或是将DLL文件重载什么的。总之是我忘了~ 反正书中大体意思是说资源管理器是最不好拦截API的进程。~~~~~~
谁有这书帮忙给查下,在书中《DLL高级技术(或者是编程) 拦截API》那节里有介绍。或者明天我去单位把书拿回来帮你查下,具体什么原因,或者怎么解决
[解决办法]
《深入WINDOWS内核》书中说,资源管理器,经常会用线程迅速的加载或卸载一个DLL,所以,当你注入DLL,并拦截一个DLL的 API,有可能这个DLL又被卸载,并且又重新加载了次,所以,会给人造成种时常会拦截不成功,但有的时间又会成功的感觉
[解决办法]
好像这问题并不太好解决,如果你想解决,也同时要拦截LoadLibraryA,LoadLibraryW,LoadLibraryExW.LoadLibraryExA.这几个函数让你知道你所拦截的API所在的DLL是否被重新加载了。并且需要拦截FreeLibrary,因为如果你正在拦截API的时间,如果资源管理器调用了FreeLibrary卸载正在被拦截的DLL的API,那么将会出现无效的句柄之类的错误
[解决办法]
刚刚还碰见这个问题...
不过我是开机fopen文件出错的,具体代码是:

FILE *stream;
stream = fopen("C:\\Windows\\System32\\Option.txt", "r");

正常情况下当System32下不存在Option.txt时fopen将会创建一个Option.txt并以读权限打开
但是如果开机启动时运行该程序,且此时System32下不存在Option.txt时,将出错。

后来发现开机启动时运行该程序,如果System32下已经存在Option.txt,就将一切正常。

可能是开机时没有创建文件的权限?(猜的)

[解决办法]
用r+
[解决办法]
上代码
[解决办法]
用进程管理器看目标进程有没有加载你的dll
[解决办法]
为什么要发送消息再安装钩子,直接在dllmain的processattach中安装就可以

[解决办法]
探讨

引用:
用进程管理器看目标进程有没有加载你的dll

貌似XP没这功能;
引用:
为什么要发送消息再安装钩子,直接在dllmain的processattach中安装就可以

会不会跟这个有关系?我试试。

读书人网 >VC/MFC

热点推荐