您的位置:程序门 -> vc/mfc -> 进程/线程/dll



关于hook createremotethread??


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于hook createremotethread??
发表于:2008-02-15 09:58:37 楼主
如何实现hook   createremotethread?还请大虾们指点一下!!!!!!!!!!    
发表于:2008-02-15 16:42:451楼 得分:0
用detour方法,大致做法是把createremotethread函数的入口处的代码复制到自己的代码段中,然后将其入口写入一条跳转指令,使其跳转到自己的程序里,然后根据需要再调用原本的createremotethread代码。
在网上搜一下hook   api,可以找到详细说明和源代码。
发表于:2008-02-15 21:07:282楼 得分:0
我有一个hookapilib.dll用这个可以轻松搞定api   hook,提供三种hook方法(均属于修改api头5个字节的方法)+2大种6小种注入方法,楼主需要可以和我联系,有源码,不过不太好看,写了很久了的东西
发表于:2008-02-16 16:03:303楼 得分:0
cnzdgs   和   zhaoyu_me   两位大虾不知道有没有hookcreateremotethread源码,请帮帮我啊!
我的qq   409206390
邮箱         jbuilder_9999@sian.com.cn
谢谢啊
发表于:2008-02-16 16:30:434楼 得分:0
你在网上搜hook   api,就可以找到源代码,稍稍改一下就可以。
我从不用detour的方法,这种方法对操作系统和硬件过于依赖,而且微软一直反对,说不定哪天微软更新一个补定这种方法就用不了了。
发表于:2008-02-16 20:13:035楼 得分:0
楼上说的有道理,不过我没想到怎么和硬件有扯上了关系呢?还有detour好象是ms自己开发的库吧,所以我想ms应该不会轻易把这种方法禁止掉的,而且这种方法目前用的也是比较广泛的,iat需要对pe格式有所了解,可惜我是菜鸟,有关pe的东西正在学习中
发表于:2008-02-16 20:55:376楼 得分:0
detour需要反汇编,汇编语言与cpu有关,cpu就是上面提的硬件喽。
vista   x64中patchguard已经禁止了对内核代码的detour,所以哪天把系统api也禁止detour不是不可能。
发表于:2008-02-16 21:36:417楼 得分:0
hehe
如果ms愿意的话iat式的hook也是可以禁止的嘛,到了那时候我们岂不是要静态path一个文件来实现hook?万一被hook的程序还带个crc之类的自校验那我这样的菜鸟就没得混了
发表于:2008-02-18 14:00:078楼 得分:0
cnzdgs   您好!我以前没接触过这方面知识,但这次毕业设计涉及hook   create   remote   thread   ,我这个寒假也一直是在网上找啊。也看到一些键盘钩子的源码,但看不懂,   找了那个《windows   核心编程》,也看不太懂,收获不大。现在这个时候,非常需要像您这样的热心前辈,给我带带路,让我能够迅速上手。
我希望您能够指导的更详细具体一些,比如如何上手,给个具体的例子指导下。我不怕吃苦,花功夫,但我需要您的帮忙,避免劲用错了地方。感激不尽!!!!
发表于:2008-02-18 22:54:589楼 得分:0
请问楼主你是要hook某个进程对createremotethread的调用还是hook系统中所有进程对他的调用?
发表于:2008-02-20 13:47:1010楼 得分:0
我是要hook   系统中所有进程啊!
请zhaoyu_me   指导!
发表于:2008-02-20 16:38:2911楼 得分:0
《windows   核心编程》里有代码,自己去看看吧,遍历所有的进程.
发表于:2008-02-20 21:44:3612楼 得分:0
遍历所有进程是一种办法,但我觉得那种方法不太好,我还是倾向于用驱动,   ssdt   hook,我分析了一下createremotethread的实现过程,估计在xp下用ssdt   hook挂钩ntcreatethread,在vista下挂钩ntcreatethreadex应该可以实现,但我没有时间去实践

我在qq上加过楼主,可是楼主没反应
发表于:2008-02-20 21:54:0513楼 得分:0
核心编程里的iat钩子容易被绕过,只要loadlibrary/gerprocaddress就可以绕过了.
如果是在ring3下做,我建议还是使用detours,它内带一个小型反汇编引擎,很好地解决了指令碎片的问题(网上很多inline hook都有个问题),而且不用做同步,网上有个ulhook需要还原才能对原api的调用,会产生同步问题,支持多种windows,32/64位cpu(64位的版本要钱).没什么可挑剔的了..
代码如下:
c/c++ code
handle winapi my_createremotethread( handle hprocess, lpsecurity_attributes lpthreadattributes, size_t dwstacksize, lpthread_start_routine lpstartaddress, lpvoid lpparameter, dword dwcreationflags, lpdword lpthreadid ); //挂接createremotethread detour_trampoline(handle winapi de_createremotethread( handle hprocess, lpsecurity_attributes lpthreadattributes, size_t dwstacksize, lpthread_start_routine lpstartaddress, lpvoid lpparameter, dword dwcreationflags, lpdword lpthreadid ), createremotethread); 在dllmain里加上 detourfunctionwithtrampoline((pbyte)de_createremotethread, (pbyte)my_createremotethread); 下面是代理函数 handle winapi my_createremotethread(handle hprocess, lpsecurity_attributes lpthreadattributes, size_t dwstacksize, lpthread_start_routine lpstartaddress, lpvoid lpparameter, dword dwcreationflags, lpdword lpthreadid) { #ifdef kout_debug_string dword dwcaller; __asm push dword ptr [ebp+4] __asm pop dword ptr [dwcaller] tchar path[1024]; zeromemory(path,sizeof(tchar)*1024); hmodule hdll = modulefromaddress((pvoid)dwcaller); getmodulefilename(hdll,path,1024*sizeof(tchar)); kdbgprint(_t("createremotethread %x call by:%s\n"),hprocess,path); #endif //判断是否是创建远程线程 if(hprocess==getcurrentprocess()||hdll==g_hkernel32) { return de_createremotethread(hprocess,lpthreadattributes,dwstacksize,lpstartaddress, lpparameter,dwcreationflags,lpthreadid); } else { *lpthreadid = 1017; return (handle)719; } }


注意:函数createthread最终还是调用createremotethread,所以要判断hprocess
上面的dll作为全局钩子注入到每个进程就行了,或者用createremotethread的方式注入..

看看createthread的执行流程
createthread   (kernel32.dll)
createremotethread   (kernel32.dll)
ntcreatethread   (ntoskrnl.exe)
pspcreatethread   (ntos\ps\create.c:237)
要可靠的话,挂接ntcreatethread好了..


快速检索

最新资讯
热门点击