求exe程序进程自我保护功能不被系统自带的任务管理器结束掉

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求exe程序进程自我保护功能不被系统自带的任务管理器结束掉相关的知识,希望对你有一定的参考价值。

求exe程序进程自我保护功能不被系统自带的任务管理器结束掉
就是我打开了一个exe程序后怎样才能让他 不被系统自带的任务管理结束掉 求代码VC++6.0的
给高分

参考技术A //进程守护之打不死的小强 云守护
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include "PSAPI.H"
#pragma comment( lib, "PSAPI.LIB" )

HANDLE CreateRemoteThreadProc(char* ProcessName);
DWORD WINAPI WatchThread(LPVOID lparam);
DWORD WINAPI remote(LPVOID pvparam);
DWORD processtopid(char *processname);
BOOL EnablePriv();
//先打开notepad,在运行本程序

typedef struct _remoteparameter

DWORD rpWaitForSingleObject;
DWORD rpOpenProcess;
DWORD rpWinExec;
DWORD rpProcessPID;
HANDLE rpProcessHandle;
char path[MAX_PATH];
REMOTEPARAM;

int main(int argc, char* argv[])

HANDLE RemoteThreadHandle;
HANDLE LocateThreadHandle;
EnablePriv();
RemoteThreadHandle=CreateRemoteThreadProc("notepad.exe");
//本地线程循环注入notepad
LocateThreadHandle=CreateThread(NULL,NULL,WatchThread,(LPVOID)RemoteThreadHandle,NULL,NULL);
WaitForSingleObject(LocateThreadHandle,INFINITE);

WaitForSingleObject(RemoteThreadHandle,INFINITE);//线程等待,循环等待notepad的远程线程执行完毕。即 notepad关闭本程序才关闭
return 0;

//创建远程线程,线程注入
HANDLE CreateRemoteThreadProc(char* ProcessName)

HANDLE ThreadHandle;
char FilePath[MAX_PATH];

GetModuleFileName(NULL,FilePath,MAX_PATH);//得到文件所在路径
printf("%s\n",FilePath);
//根据进程名获取进程ID
int procID=processtopid(ProcessName);
printf("The process pid is %d\n",procID);
HINSTANCE hkernel32;
HANDLE rphandle;
char *remotethr;
char *remotepar;
int cb;
//根据ID打开notepad的进程空间
rphandle=OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION |
PROCESS_VM_WRITE, FALSE,procID);
if(rphandle==NULL)

printf("Open Remote Process is Error\n");

else

printf("open process is ok\n");


/*****************************************************************/
/*将远程线程函数代码拷入目标进程*/
/*****************************************************************/
cb=sizeof(TCHAR)*4*1024;
//在notepad进程中分配空间,存储函数remote
remotethr=(PTSTR)VirtualAllocEx(rphandle,NULL,cb,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(remotethr==NULL)

printf("VirtualAllocEx for Thread Error\n");
CloseHandle(rphandle);

else
printf("VirtualAllocEx is ok\n");
//往notepad空间中写入数据指针remote指向的数据,大小为cb
if(WriteProcessMemory(rphandle,remotethr,(LPVOID)remote,cb,NULL)==FALSE)

printf("WriteProcessMemory for Thread Error\n");
CloseHandle(rphandle);

else
printf("WriteProcessMemory is ok\n");

/*****************************************************************/
/*将远程线程函数参数拷入目标进程*/
/*这里需要重定位远程线程需要的API*/
/*****************************************************************/
REMOTEPARAM rp;
memset((char*)&rp,0,sizeof(rp));

hkernel32=GetModuleHandle("kernel32.dll");

if(hkernel32==NULL)

printf("hKernel32 is Error\n");

//通过让目标进程执行OpenProcess,WinExec,WaitForSingleObject,函数重新打开本程序

rp.rpProcessPID =GetCurrentProcessId();
rp.rpOpenProcess =(DWORD)GetProcAddress(hkernel32,"OpenProcess");
rp.rpWinExec =(DWORD)GetProcAddress(hkernel32,"WinExec");
rp.rpWaitForSingleObject=(DWORD)GetProcAddress(hkernel32,"WaitForSingleObject");
_tcscpy(rp.path,FilePath);
cb=sizeof(char)*sizeof(rp);
//rphandle指向notepad进程,分配空间,存储参数
remotepar=(PTSTR)VirtualAllocEx(rphandle,NULL,cb,MEM_COMMIT,PAGE_READWRITE);
if(remotepar==NULL)

printf("VirtualAllocEx for Parameter Error\n");
CloseHandle(rphandle);

//往notepad进程写入传给remote的参数
if(WriteProcessMemory(rphandle,remotepar,(LPVOID)&rp,cb,NULL)==FALSE)

printf("WriteProcessMemory for Parameter Error\n");
CloseHandle(rphandle);


/*****************************************************************/
/*将远程线程注入目标进程*/
/*****************************************************************/
//在noetpad进程中创建新线程执行remote函数,参数为remotepar,返回线程句柄
ThreadHandle=CreateRemoteThread(rphandle,NULL,0,(LPTHREAD_START_ROUTINE)remotethr,(LPVOID)remotepar,0,NULL);

if(ThreadHandle==NULL)

printf("CreateRemotThreadHandle Error\n");
CloseHandle(rphandle);

else
printf("CreateRemotThreadHandle is ok\n");

return ThreadHandle;

//获取进程ID
DWORD processtopid(char *processname)

DWORD lpidprocesses[1024],cbneeded,cprocesses;
HANDLE hprocess;
HMODULE hmodule;
UINT i;
TCHAR normalname[MAX_PATH]=("UnknownProcess");

if(!EnumProcesses(lpidprocesses,sizeof(lpidprocesses),&cbneeded))

return -1;

cprocesses=cbneeded/sizeof(DWORD);
for(i=0;i<cprocesses;i++)

hprocess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,lpidprocesses[i]);
if(hprocess)

if(EnumProcessModules(hprocess,&hmodule,sizeof(hmodule),&cbneeded))

GetModuleBaseName(hprocess,hmodule,normalname,sizeof(normalname));
if(!strcmp(normalname,processname))

CloseHandle(hprocess);
return (lpidprocesses[i]);




CloseHandle(hprocess);
return 0;

//提升进程权限
BOOL EnablePriv()

HANDLE hToken;
if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) )

TOKEN_PRIVILEGES tkp;

LookupPrivilegeValue( NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid ); //修改进程权限
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL ); //通知系统修改进程权限

return 0;

//远程线程要执行的函数
DWORD WINAPI remote(LPVOID pvparam)

REMOTEPARAM *rp=(REMOTEPARAM*)pvparam;

typedef UINT (WINAPI *EWinExec) (LPCSTR, UINT);
typedef HANDLE (WINAPI *EOpenProcess) (DWORD, BOOL, DWORD);
typedef DWORD (WINAPI *EWaitForSingleObject) (HANDLE, DWORD);

EWinExec tWinExec;
EOpenProcess tOpenProcess;
EWaitForSingleObject tWaitForSingleObject;

tOpenProcess =(EOpenProcess)rp->rpOpenProcess;
tWaitForSingleObject =(EWaitForSingleObject)rp->rpWaitForSingleObject;
tWinExec =(EWinExec)rp->rpWinExec;

// 重新打开本进程ID,使本进程可以访问
rp->rpProcessHandle=tOpenProcess(PROCESS_ALL_ACCESS,FALSE,rp->rpProcessPID);

tWaitForSingleObject(rp->rpProcessHandle,INFINITE);
//打开本程序
tWinExec(rp->path, SW_SHOW);
return 0;

//守护进程
DWORD WINAPI WatchThread(LPVOID lparam)

HANDLE RemoteThreadHandle=(HANDLE)lparam;
DWORD ExitCode;

GetExitCodeThread(RemoteThreadHandle,&ExitCode);

while(true)

if(ExitCode!=STILL_ACTIVE)//如果远程线程不激活,就重新激活

printf("RemoteThreadHandle is over\n");
RemoteThreadHandle=CreateRemoteThreadProc("notepad.exe");

Sleep(3000);

return 0;

希望帮到楼主 给个采纳吧追问

给你一份源码能否帮我加下?

本回答被提问者和网友采纳

mmc.exe是啥进程?

  MMC.exe进程程序文件是Microsoft®微软公司为其发布的Windows操作系统定义的一个系统自带的程序,这是一个从Windows 2000开始便存在于随后微软发布的几乎所有Windows操作系统中的可执行的安全程序,微软官方描述为为:Microsoft管理控制台。

  本进程主要功能是为.msc管理单元的运行提供支持,比如:设备管理器、事件查看器、性能监视器、任务计划程序、组件服务、计算机管理、高级安全Windows防火墙、打印管理、本地安全策略等等管理工具。此为,本程序也可以单独的运行,不过它们的界面大多具备基本框架,如下图:

  MMC.exe程序不会随Windows系统自动启动,只在系统中运行上述工具,MMC.exe进程才会被触发启动,并且当你同时打开多个上述管理工具的时候会出现多个MMC.exe进程运行的情况,而这些通常都是安全的,并且常常也是已当前用户的用户名来运行,比如上右图中的mtoou。本进程存储位置:(拓展:rundll32.exe是什么进程)

  C:WindowsSystem32mmc.exe(C为系统盘,会根据系统安装位置不同而不同)

  危险的MMC.exe

  任何Windows系统自身的进程都是木马、病毒们感染的重点目标,它们通常采用完全相同或者很相似的名称来欺骗用户以获得信任。这些恶意的MMC.exe木马病毒的存在会危害用户财产和个人隐私,如果计算机出现以下情况:

  开机之后就存在MMC.exe进程在运行;在没有任何本文开头所述的那些管理工具运行时看到有本进程;打开一个上述管理工具同时会出现两个或多个MMC.exe;不在C:WindowsSystem32目录下;频繁的出现MMC.exe应用程序错误提示;

  若出现以上情况请及时更新杀毒软件病毒库对电脑进行全盘查杀,必要时可考虑重装系统。

参考技术A MMC是系统管理程序的一个框架程序,全称是Microsoft Management Console,它提供给扩展名为msc的管理程序一个运行的平台,比如组策略,系统清单,任务管理器等,你试着运行这些管理程序看看有没有问题,如果没有可能是暂时的逻辑错误,如果有问题,可以到XP的安装盘里把这个程序重新拷一次 参考技术B mmc - mmc.exe - 进程信息
进程文件: mmc or mmc.exe
进程名称: Microsoft Management Console

进程名称: mmc.exe是Windows管理控制程序,是显示管理插件的控制面板,例如驱动器管理。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。
参考技术C mmc.exe是Windows管理控制程序,是显示管理插件的控制面板,例如驱动器管理。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。 参考技术D mmc是系统控制台程序,当你运行它的时候就会出现一个mmc.exe进程。当你不用的时候,关闭它对系统没有什么影响。

以上是关于求exe程序进程自我保护功能不被系统自带的任务管理器结束掉的主要内容,如果未能解决你的问题,请参考以下文章

360sdrun.exe 进程怎么结束

如何保护一个程序执行,不被任何打断或改变?

如何查找任务管理器里的进程位置?

TerminateProcess HOOK

任务管理器哪些可以删的?哪位高手来指点一下?

XP系统的最关键进程有那些