- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
作者:未知
译者按:本文提供了一种在win NT下悄声无息的加载“驱动”的方法。这里所将的“驱动”并不是指平常的驱动,而是指将程序载入系统的内核中,采用该方式将不通过任何注册表项,因此将无法使用任何方法(包括各种杀毒软件)查出这一加载项,达到隐藏自身的目的。为了翻译的方便,本人暂将里面提到的Driver直接译作“驱动”,本人E文也不是很好,之所以翻译这篇文章是想给大家提供以下参考。错译之处在所难免,希望各位兄台多多批评指正。
译文:
“怎样在不经过注册表的情况下加载驱动”,这是很多人常常问到的一个问题。现在,我们一起来分析WINDOWS操作系统是怎样加载驱动的,既而找到一种实现加载驱动而不通过注册表的办法。
我们必须注意到即使我们在对系统内核进行溢出的过程中,你仍然无法让其加载任何驱动因为几乎所有的防毒措施都会监控WINDOWS系统内核调用的API(这些API就是让系统写入特殊注册地址的)
加载驱动的第一种方法通常为:
WIN NT利用函数ZwLoadDriver实现加载驱动。
它的描述如下:
NTSTATUS ZwLoadDriver (IN PUNICODE_STRING DriverServiceName);
驱动服务名称:指定一个Unicode字符串以区分驱动的注册键值,\Registry\Machine\System\CurrentControlSet\Services\DriverName,DriverName就是该驱动的名称。
第二种方法如下:
一般情况下win2000启动后会开始加载特别的驱动win2k.sys。然而它并不是以其他驱动那样调用函数ZwLoadDriver, NtLoadDriver等。
事实上它是通过内核API函数ZwSetSystemInformation载入的。
该API通常用来设置类似文件分卷等系统信息,以及加载上面提到的驱动,文件缓存等等。
该函数调用方法如下:
- ZwSetSystemInformation(
- IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
- //识别操作指令
- IN PVOID SystemInformation, //识别操作数
- IN ULONG SystemInformationLength ) //识别数据长度
- 其内部调用方法如下:
- Switch (SystemInformationClass)
- Case 0:
-
- Case 1:
- \ Case 5: ;this actually extends the system service descrīptor table
- \ MmLoadSystemImage(SystemInforMation,NULL,NULL,TRUE,imagehandle,baseaddress);
-
- call entrypoint(driverobject,NULL) ;
-
- break ;
- case 6:
- \
复制代码 |
|