阅读:3070回复:2
NtCreateProcess和ZwCreateProcess,原来的贴太挤,开新帖
压根就没有导出这个函数,即使ntdll.lib有也没有用,驱动加载时就不会加载NTDLL.dll所以这个库对于驱动来说是无效的,这类问题我已经问过好多次了,可以在论坛里搜索zwcreateprocess你就知道大概了,正确的方法看看ntrootkit,应该是根据版本号决定中断2e子服务号然后从KeServiceDescriptorTable里面找。其实如果你不怕烦的话,应该从ntdll.dll文件中的引出表找到这个函数的文件偏移,在偏移处不远就是那个中断2e,前一句就是子服务号(一般是偏移+1),这样比较通用(2000和2000以前),xp、2003用的不是中断2e是sys类指令也可以考查询ntdll.dll完成,只是这种方法比较烦。
还有一种极端的方法,和查ntdll相似,就是载入ntdll,用MmLoadSystemImage把ntdll.dll当作驱动载入,再查zwcreateprocess地址,然后接着上一中方法的子服务号依次,细节不好告诉你了,知道原理自己研究一下就好搞定。 下面这个说法是引用别人的,比较正确 “你知道CreateProcess()实际上调用了ntdll的NtCreateProcess()/ZwCreateProcess(), 在usermode两个是一样的,但是进入ring0之后,ISR会调用NtCreateProcess()这个 system service, ring0的这个Zw和Nt不同,从user mode发出的调用会call NtCreateProcess(),他会检查参数的有效性,ZwCreateProcess()主要是为了给 从kernel mode发出的调用服务的。 我说了好几遍了,没有输出的系统服务要查询service table,这个网上有很多sample, 自己拿过来看一下,直接用即可。 ” [编辑 - 12/27/04 by pwpwpw123] |
|
沙发#
发布于:2004-12-29 08:37
是这样子呀
|
|
|
板凳#
发布于:2004-12-29 08:55
谢谢大虾讲解。
请问大虾: 我从KeServiceDescriptorTable找相关的服务函数,得到NtCreateProcess的指针,利用函数的指针调用可以加载驱动了,但是提示我第7个参数错误。我就是通过RootKit改写的,但是还是有问题啊。其中在RootKit里我用的是2000bate版的版本号对应的那个偏移。是不是这个地方有问题呢?那偏移应该是多少呢?请大虾指点。 还有一个问题就是关于SetTrojanRedirectSection这个函数,rootkit上的注释是“重定向CreatePorcess的Section”,这个函数没有定义啊,我怎样才能利用这个函数呢?是不是这个函数是必需的呢? |
|