设为首页 加入收藏

TOP

多线程防关,防杀,防删除自身保护程序编写思路(二)
2014-11-23 21:27:43 来源: 作者: 【 】 浏览:8
Tags:线程 防杀 删除 自身 保护 程序 编写 思路
重新启动我们的可执行文件;

4.获得进程ID:processtopid
EnumProcesses(lpidprocesses,sizeof(lpidprocesses),&cbneeded);
//列举所有的进程
OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,lpidprocesses[i]);
//以查询信息和读取的方式打开进程
EnumProcessModules(hprocess,&hmodule,sizeof(hmodule),&cbneeded);
//获得进程模块的句柄
GetModuleBaseName(hprocess,hmodule,normalname,sizeof(normalname));
//获得特定模块的名字,以备比较

5.创建远程线程:createremote
OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,remotepid);
//PROCESS_CREATE_THREAD for CreateRemoteThread
//PROCESS_VM_OPERATION for VirtualAllocEx
//PROCESS_VM_WRITE for WriteProcessMemory
VirtualAllocEx(rphandle,NULL,cb,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//在远程进程中分配空间,以备将线程代码置入其中;
WriteProcessMemory(rphandle,remotethr,(LPVOID)remote,cb,NULL);
//将远程线程remote的代码写入到远程进程的地址空间中
WriteProcessMemory(rphandle,remotepar,(LPVOID)&rp,cb,NULL);
//将远程线程所需的参数也写入到远程进程的地址空间中
CreateRemoteThread(rphandle,NULL,0,(LPTHREAD_START_ROUTINE)remotethr,(LPVOID)remotepar,0,NULL);
//创建远程监视线程


我们已经看到,创建三线程就是为了更好的保护程序自身不被关闭和删除。两个辅助线程相互实时监视,如果监视对象被关闭了,就重新创建线程或进程。其实,在程序中我们选择的远程进程驻体为Explorer.exe和Taskmgr.exe,除了对主线程实时监视之外,如果才两个线程当中添加相应关闭杀软代码,那么程序会视为Explorer.exe或Tskmgr.exe将杀软关闭或删除,在通常情况下,如果用户知道了远程线程的驻体为资源管理器后,就会打开任务管理器来结束Explorer,这时我们再把远程线程驻入到任务管理器中。也就是说,只要Explorer或Taskmgr有一个存在,就不可能结束主进程。如果有其他Kill进程的工具,你就可以将其关闭掉,只要资源管理器和任务管理器均不存在时,就没有驻体来维持远程进程。不过,如果我们选择的远程进程为随机的,这就不容易发现了;如果我们选择的远程进程为系统文件(如smss.exe会话管理器),那么你是不会安全的结束远程

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇初探编译器static、const之实现原.. 下一篇如何获得另一个应用程序窗口中的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: