pwpwpw123
驱动牛犊
驱动牛犊
  • 注册日期2004-01-26
  • 最后登录2007-08-20
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:3070回复:2

NtCreateProcess和ZwCreateProcess,原来的贴太挤,开新帖

楼主#
更多 发布于:2004-12-27 21:21
压根就没有导出这个函数,即使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]
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-29 08:37
是这样子呀
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
Yanky
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2021-09-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望95点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-12-29 08:55
谢谢大虾讲解。

请问大虾:

我从KeServiceDescriptorTable找相关的服务函数,得到NtCreateProcess的指针,利用函数的指针调用可以加载驱动了,但是提示我第7个参数错误。我就是通过RootKit改写的,但是还是有问题啊。其中在RootKit里我用的是2000bate版的版本号对应的那个偏移。是不是这个地方有问题呢?那偏移应该是多少呢?请大虾指点。

还有一个问题就是关于SetTrojanRedirectSection这个函数,rootkit上的注释是“重定向CreatePorcess的Section”,这个函数没有定义啊,我怎样才能利用这个函数呢?是不是这个函数是必需的呢?
游客

返回顶部