quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3005回复:16

在驱动中如何执行一个程序如cmd.exe

楼主#
更多 发布于:2002-07-19 10:08
请问是否在驱动中可以让一个应用程序执行起来?如何做?

最新喜欢:

kwxkzkkwxkzk
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-19 10:15
目前还不知道啊
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-07-19 11:40
那取决于你希望在谁的地址空间中运行,如果你想在一个独立的地址空间中运行的话,那就麻烦大了~~~~ :D
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-19 13:30
你的意思是通过别的程序来运行目标程序?

如果我希望在单独的地址空间来运行,能不能给我提一个思路,谢谢!
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-07-20 12:28
试试ZwCreateProcess看~
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-20 21:46
请问是否在驱动中可以让一个应用程序执行起来?如何做?

贴一点写过的片断:
要实现个人版的CreateProcess,仅对Win32程序:
(1)打开要运行的win32程序文件;
(2)利用文件句柄创建一个区域对象
(3)以此区域对象句柄为参数创建一个进程对象,自然是使用ZwCreateProcess,一看到这个名称就会想到CreateProcess,它们干的事莫非差不多?呵呵,差多了。相比而言,ZwCreateProcess这个系统服务做的少得多,它仅仅创建进程对象(设置内核进程块)、创建可切换的内存空间、设置用户空间进程环境(PEB)等等,此时还没有可执行的东西,毕竟实现内核级线程的NT基本调度单位是线程而非进程。此步正是我们可做文章的一步,CreateProcess在内部调用ZwCreateProcess,我们无从干预,所以要自己来用。
(4)获取区域映像的信息、设置用户stack、设置Context结构,所有这些为创建线程打好基础。
(5)创建线程。
(6)向Win32子系统通知新进程并启动主线程。

上面的过程在Ring3进程环境中执行没问题。考虑在Ring0下,虽然ZwCreateProcess等一干函数并未向驱动一级程序导出,但不难有变通方法。若驱动在合适的环境下1、2、3、5乃至4都还好,但6相较困难的。所以你想直接在驱动中将“cmd.exe”跑起来困难重重。加一句:cmd.exe与一般程序有点不同,还因微软故意在nt较新版改动了pe头造了点麻烦

[编辑 -  2/11/03 by  pjf]
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-22 08:43
[quote]请问是否在驱动中可以让一个应用程序执行起来?如何做?

贴一点写过的片断:
要实现个人版的CreateProcess,仅对Win32程序:
(1)打开要运行的win32程序文件;
(2)利用文件句柄创建一个区域对象
(3)以此区域对象句柄为参数创建一个进程对象,自然是使用ZwCreateProcess,一看到这个名称就会想到CreateProcess,它们干的事莫非差不多?呵呵,差多了。相比而言,ZwCreateProcess这个系统服务做的少得多,它仅仅创建进程对象(设置内核进程块)、创建可切换的内存空间、设置用户空间进程环境(PEB)等等,此时还没有可执行的东西,毕竟实现内核级线程的NT基本调度单位是线程而非进程。此步正是我们可做文章的一步,CreateProcess在内部调用ZwCreateProcess,我们无从干预,所以要自己来用。
(4)获取区域映像的信息、设置用户stack、设置Context结构,所有这些为创建线程打好基础。
(5)创建线程。
(6)向Win32子系统通知新进程并启动主线程。

上面的过程在Ring3进程环境中执行没问题。考虑在Ring0下,虽然ZwCreateProcess等一干函数并未向驱动一级程序导出,但不难有变通方法。若驱动在合适的环境下1、2、3、5乃至4都有希望(并未试过),但6是不可能的。所以你想直接在驱动中将“cmd.exe”跑起来困难重重,基本上不可能。 [/quote]

以上的方法在驱动程序中是可行的。我已经实验成功了。http://www.driverdevelop.com/forum/viewthread.php?tid=18266
我想这种方法应该可用于杀毒软件的监控程序,在杀毒软件发现有异常时启动其应用程序,这样是不是可以有效的防止杀毒软件被感染呢?
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-22 10:12
谢谢大家的帮助,能不能加驱动代码共享一下?谢谢:)
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-22 18:44
以上的方法在驱动程序中是可行的。我已经实验成功了。http://www.driverdevelop.com/forum/viewthread.php?tid=18266
我想这种方法应该可用于杀毒软件的监控程序,在杀毒软件发现有异常时启动其应用程序,这样是不是可以有效的防止杀毒软件被感染呢?
 


第六步用的函数?
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-23 08:32
CsrClientCallServer
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-23 10:30
呵呵!这个函数我哦看见了
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-23 10:38
最近看了内幕揭密的书,应该是模拟一个用户环境吧
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
12楼#
发布于:2002-07-23 11:21
最近看了内幕揭密的书,应该是模拟一个用户环境吧


看的是哪本秘籍?
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-07-23 19:05
CsrClientCallServer


仍然是这个ring3函数。真正实现是要构造一个ring0的替代品,开始由于没有ring0下替代品,所以说困难重重。今天看了一下此函数的代码,并未看到ring3紧密相关的代码,由你的实践看来证实这一点,所以构造一个替代品变得容易了,没以前想象的难度。

“http://www.driverdevelop.com/forum/html_18266.html?1027421280”看这个贴子的问题似乎表明你直接在驱动中调用ntdll.dll这个ring3dll中的函数?呵呵,若是这样存在一定问题。本身ntdll存在的意义是为ring3应用服务,驱动是不应调用的。但为何往往调用成功呢?这是有条件的:2000及老版本、进程环境等。成功的原因是2000及以前ntdll.dll用int2e实现特权切换,这与ntoskrnl.exe中Zw*函数所用重入内核的方法一致,可以说ntdll服务在驱动中的正确调用是与2000采用的系统服务方式的巧合。

我这没有XP,但想象一下使用sysenter入ring0的XP(PII以上机器),进入可以、但由于sysexit会将特权级变为ring3(由windows描述符排列所定),调用的驱动就会出问题了。

所以要用到ntdll中同功能函数而ntoskrnl没有我总会写一个个人版本。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-23 20:00
我想这种方法应该可用于杀毒软件的监控程序,在杀毒软件发现有异常时启动其应用程序,这样是不是可以有效的防止杀毒软件被感染呢?
 

呵呵,感觉意义不大。你是想防止在程序启动时被感染吧?就像老的挂接int21h的病毒与9x下CIH这类原理的病毒。
nt下这类病毒不多见,要实现往往是ring0病毒,对ring0病毒上面的做法没有意义,不用说绕不过监控,就算它想改写正在运行的程序对应文件也不是难事。
而ring3病毒要感染文件也喜欢像funlove一样,主动感染磁盘上的静态文件,上面的做法也没意义。hoho
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-07-24 08:58
真是佩服PJF的功底啊。其实我对这个程序实现的原理真的还没有搞太清楚,见笑见笑。主要是没有时间也没有条件搞懂这些系统调用问题,我写这个程序还怕被老板知道。哎,惭愧惭愧。希望PJF多多指导。 :)
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2002-07-24 09:13
不得不pf pjf呀。
游客

返回顶部