自己在测试过程中,感觉效率不是很好,所以希望哪位大佬能提出宝贵的意见,在此深表感谢!
1、遍历磁盘中PE文件
2、进程提权、保护文件
// 打开当前进程的Token,就是一个权限令牌,第二个参数可以用TOKEN_ALL_ACCESS
if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
TOKEN_PRIVILEGES tkp;
if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid))
{
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//通知系统修改进程权限
BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);
}
CloseHandle(hToken);
}
}
/************************************************************************/
/* 函数说明:保护文件防止被轻易删除
/* 参 数:无
/* 返 回 值:无
/* By:Koma 2009.12.17 21:42
/************************************************************************/
BOOL OccupyFile(LPCTSTR lpFileName)
{
RaiseToDebug(); // 提升权限
// 打开syetem进程,打开前必须赋予PROCESS_DUP_HANDLE权限
HANDLE hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, 4);
if (hProcess == NULL)
{
hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, 8);
if (hProcess == NULL)
return FALSE;
}
HANDLE hFile = NULL;
HANDLE hTargetHandle = NULL;
// 创建一个文件,当然这个文件可以是本来就存在的
hFile = CreateFile(lpFileName, GENERIC_READ | GENERIC_EXECUTE | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
// 文件创建或打开失败
CloseHandle( hProcess );
return FALSE;
}
return TRUE;
}