Rootkit隐形技术入门
作者: 宇文, 出处:51CTO.com , 责任编辑: 韩博颖,
2008-03-24 09:28
在安全界,rootkit已越来越引起人们的关注,而rootkit技术的过人之处就在于它的隐形技术,本文旨在向读者打开一扇通向rootkit隐形技术的大门。
五、rootkit的安装
对于应用程序来说,加载和执行是同时进行的;与此不同,设备驱动程序的加载和启动是截然不同的两个步骤。这种分步处理的方式,使得驱动程序可以在操作系统引导过程中就提前载入,但直至将来需要时才启动它们——有时候倒有些“起个大早,赶个晚集”的意味。如果需要,我们还可以利用注册表项让系统每次引导时都加载指定的驱动程序,甚而启动它们。
虽然现实中的rootkit在引导过程中装入就不再卸载,但在设备驱动程序开发过程中,利用能够随时装卸rootkit的“请求式启动”加载技术能带来极大的便利。这样的话,不必重新引导系统就可以重复终止、卸载、重新编译、重装入和重启动驱动程序。就本例而言,SCMLoader程序利用服务控制管理器将comint16.sys装入内核空间;可以利用“net start MyDeviceDriver”命令启动该驱动程序,也可以利用“net stop MyDeviceDriver”命令停止该驱动程序的运行;最后,SCMUnloader程序利用服务控制管理器将comint16.sys从内核空间卸载。
为简单起见,我们使用一个小巧的可执行文件来安装rootkit。该程序只需要打开服务控制管理器,然后加载一个内核设备驱动程序就可以了。
| //SCMLoader.c //本程序用于加载c:\comint16.sys #include #include #include void main( int argc, char *argv[ ] ) { SC_HANDLE sh1; SC_HANDLE sh2; sh1 = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS ); if ( !sh1 ) { printf( "OpenSCManager Failed!\n" ); return; } sh2 = CreateService( sh1, "MyDeviceDriver", "MyDeviceDriver", SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, "c:\\comint16.sys", NULL, NULL, NULL, NULL, NULL ); if ( !sh2 ) { if ( GetLastError() == ERROR_SERVICE_EXISTS ) printf("DeviceDriver already loaded!\n"); else printf("CreateService Failed!\n"); } else { printf("\nDriver loaded!\n"); } } |
- 本文关键词:

