RKU的这招确实不错。在DebugMan上看到一点关于内存清零的提示信息,准备在RING0下实践下,结果BSOD的受不了,调试驱动偶还木有入门啊。无赖之下看到了RING3下实现的code,于是学习之。
/*************************************************************************
* 学习者: sudami
* 时间: 07/12/24
*
* 备注: 学习RING3下通过内存清零结束大部分进程的方法.思路如下:
*
* 遍历所有进程[隐藏进程暂时不在考虑之内]获得csrss.exe的PID,ZwOpenProcess得到其句柄-->
* 为ZwQuerySystemInformation 函数传递16号参数.获得系统句柄信息 -->
* 几乎系统所有的HANDLE结构体中,里面的ProcessId都是指向csrss.exe的,遍历每个进程-->
* 调用ZwDuplicateObject复制此进程的句柄表,ZwQueryInformationProcess得到
* PROCESS_BASIC_INFORMATION结构信息; 判断其中的UniqueProcessId是否和指定的PID相同-->
* 若相同,则相指定进程中写入垃圾数据,使进程死掉; 若不同,继续遍历.
*
*************************************************************************/
#include <windows.h>
#include <Ntsecapi.h>
#include <Aclapi.h>
#include <tlhelp32.h>
#include "G:/sudamiDriver/RootKit.h"
//
#pragma comment (lib,"ntdll.lib")
#pragma comment (lib, "Kernel32.lib")
#pragma comment (lib, "Advapi32.lib")
#pragma comment (linker, "/subsystem:windows")
#pragma comment (linker, "/ENTRY:main")
//------------------------------------------------------------------
DWORD GetPidByName (char *szName);
void KillProcess (ULONG dwProcessId);
BOOL EnablePrivilege(HANDLE hToken,LPCTSTR szPrivName,BOOL fEnable);
//
// 主函数入口
//
void main()
{
ULONG Pid;
HANDLE hToken;
OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hTok