用户级权限实现简单防杀
Guest权限下实现防杀!全网首创思路!
无意中翻出小学时候写的程序,应该是全网首创的无权限防杀手段,拿出来分享下。这个程序运行不需要任何权限,应该是为数不多的能抗住PChunter强制结束的用户级程序(除了双进程)。程序只有一个主程序,主程序通常情况下杀不掉,被保护的程序只要不在运行则创建一个进程。写的比较仓促还有很多不足,分享一下思路而已,利用获取进程句柄和结束进程之间的时差“更换”自己的pid和句柄来让对方只能找到上一个进程的句柄从而无法结束,并不是真正意义上的防杀。因为没有权限,所以同等权限级的taskkill反而可以轻易将其结束(速度快)。如果驱动级防杀程序可以利用这个思路基本上就无敌了,只能利用内核hook阻止创建进程,强制删除主程序等方法将其关闭。如果同样的思路而使用用效率更高的语言来完成(如汇编语言)那么也许taskkill也拿它没办法。缺点就是因为频繁创建销毁进程因此会占用较多系统资源。
新的加强版已写好,可以避免被taskkill这类简单高效的工具杀死,友链https://blog.csdn.net/Hnnnbhnnnb/article/details/104035114
感谢聆听,有想法可在评论区留言哈~
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <shellapi.h>
#include <tchar.h>
#include <tlhelp32.h>
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
int FindProcess(char *name)
{
int i=0;
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
i+=0;
}
int bMore = ::Process32First(hProcessSnap, &pe32);
while(bMore)
{
if(stricmp(name,pe32.szExeFile)==0) //name是进程名
{
i+=1;
}
bMore = ::Process32Next(hProcessSnap, &pe32);
}
return i;
}
int main(int argc,char* argv[])
{
TCHAR SelfFilePath[MAX_PATH + 1]={0};
GetModuleFileName(NULL, SelfFilePath, MAX_PATH);//这里是获取自身完整路径
fopen(SelfFilePath,"r");//自锁,不然重命名文件的话时差肯能导致程序崩溃(找不到自己的新名字)
ShellExecute(NULL,NULL,SelfFilePath, NULL, NULL, SW_SHOWNORMAL);//运行自己
//这里是看一看要保护的其他进程还在不在(这里写的比较仓促,仅根据名称判断并不保险)这里可以根据需要替换成其他的功能,但是时间不宜过长应当立即让程序返回
if(!FindProcess("cmd.exe"/*要保护的进程名*/))
{ShellExecute(NULL,NULL,"cmd.exe"/*需要保护的进程名*/, NULL, NULL, SW_SHOWNORMAL);}
return 0;
}