阅读:3005回复:16
在驱动中如何执行一个程序如cmd.exe
请问是否在驱动中可以让一个应用程序执行起来?如何做?
|
|
最新喜欢:![]()
|
沙发#
发布于:2002-07-19 10:15
目前还不知道啊
|
|
板凳#
发布于:2002-07-19 11:40
那取决于你希望在谁的地址空间中运行,如果你想在一个独立的地址空间中运行的话,那就麻烦大了~~~~ :D
|
|
地板#
发布于:2002-07-19 13:30
你的意思是通过别的程序来运行目标程序?
如果我希望在单独的地址空间来运行,能不能给我提一个思路,谢谢! |
|
|
地下室#
发布于:2002-07-20 12:28
试试ZwCreateProcess看~
|
|
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] |
|
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 我想这种方法应该可用于杀毒软件的监控程序,在杀毒软件发现有异常时启动其应用程序,这样是不是可以有效的防止杀毒软件被感染呢? |
|
|
7楼#
发布于:2002-07-22 10:12
谢谢大家的帮助,能不能加驱动代码共享一下?谢谢:)
|
|
|
8楼#
发布于:2002-07-22 18:44
以上的方法在驱动程序中是可行的。我已经实验成功了。http://www.driverdevelop.com/forum/viewthread.php?tid=18266 第六步用的函数? |
|
9楼#
发布于:2002-07-23 08:32
CsrClientCallServer
|
|
|
10楼#
发布于:2002-07-23 10:30
呵呵!这个函数我哦看见了
|
|
11楼#
发布于:2002-07-23 10:38
最近看了内幕揭密的书,应该是模拟一个用户环境吧
|
|
12楼#
发布于:2002-07-23 11:21
最近看了内幕揭密的书,应该是模拟一个用户环境吧 看的是哪本秘籍? |
|
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没有我总会写一个个人版本。 |
|
14楼#
发布于:2002-07-23 20:00
我想这种方法应该可用于杀毒软件的监控程序,在杀毒软件发现有异常时启动其应用程序,这样是不是可以有效的防止杀毒软件被感染呢? 呵呵,感觉意义不大。你是想防止在程序启动时被感染吧?就像老的挂接int21h的病毒与9x下CIH这类原理的病毒。 nt下这类病毒不多见,要实现往往是ring0病毒,对ring0病毒上面的做法没有意义,不用说绕不过监控,就算它想改写正在运行的程序对应文件也不是难事。 而ring3病毒要感染文件也喜欢像funlove一样,主动感染磁盘上的静态文件,上面的做法也没意义。hoho |
|
15楼#
发布于:2002-07-24 08:58
真是佩服PJF的功底啊。其实我对这个程序实现的原理真的还没有搞太清楚,见笑见笑。主要是没有时间也没有条件搞懂这些系统调用问题,我写这个程序还怕被老板知道。哎,惭愧惭愧。希望PJF多多指导。 :)
|
|
|
16楼#
发布于:2002-07-24 09:13
不得不pf pjf呀。
|
|