木马编程天天练 第5天 程序自删除
来源:互联网 发布:网络电视盒多少钱 编辑:程序博客网 时间:2024/05/01 10:47
程序自删除的方式有很多,不过最终的思想不过是关闭本身进程,开启新进程用于删除自身。下面这个方法是用windows自带命令行程序实现删除。
命令行为 cmd.exe /c del filename
--------------------------------------------------------------------------------
代码示例:C语言形式
#include <windows.h>
#include <shellapi.h>
#include <shlobj.h>
BOOL SelfDel()
{
SHELLEXECUTEINFO sei;
TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];
// 获得自身文件名. 获取cmd的全路径文件名
if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&
(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&
(GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))
{
// 设置命令参数.
lstrcpy(szParams,"/c del ");
lstrcat(szParams, szModule);
lstrcat(szParams, " > nul");
// 设置结构成员.
sei.cbSize = sizeof(sei);
sei.hwnd = 0;
sei.lpVerb = "Open";
sei.lpFile = szComspec;
sei.lpParameters = szParams;
sei.lpDirectory = 0; sei.nShow = SW_HIDE;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
// 创建cmd进程.
if(ShellExecuteEx(&sei))
{
// 设置cmd进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出.
SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
// 将自身进程的优先级置高
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
// 通知Windows资源浏览器,本程序文件已经被删除.
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
return TRUE;
}
}
return FALSE;
}
---------------------------------------------------------------------------------
代码示例:汇编形式
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
include urlmon.inc
includelib urlmon.lib
include shell32.inc
includelib shell32.lib
.data?
szModule db MAX_PATH dup (?)
sComspec db MAX_PATH dup (?); 自删除
szParams db MAX_PATH dup (?)
hCurProcess dd ?
hCurThread dd ?
.data
sei SHELLEXECUTEINFO <0>
.const
szComspec db 'COMSPEC',0
Verb1 db 'open',0
szCom1 db '/c del ',0
szCom2 db ' > nul',0
.code
start:
invoke GetModuleFileName,0,addr szModule,MAX_PATH
invoke GetEnvironmentVariable,addr szComspec,addr sComspec,MAX_PATH
invoke lstrcpy,addr szParams,addr szCom1
invoke lstrcat,addr szParams,addr szModule
invoke lstrcat,addr szParams,addr szCom2
mov sei.cbSize,sizeof sei ;1
mov sei.hwnd,0 ;2
mov sei.lpVerb,offset Verb1 ;3
lea eax,szParams
mov sei.lpParameters,eax ;4
lea eax,sComspec
mov sei.lpFile,eax ;5
mov sei.lpDirectory,0
mov sei.nShow,SW_HIDE
mov sei.fMask,SEE_MASK_NOCLOSEPROCESS
invoke ShellExecuteEx, addr sei
.if eax
invoke SetPriorityClass,sei.hProcess,IDLE_PRIORITY_CLASS
invoke GetCurrentProcess
mov hCurProcess,eax
invoke SetPriorityClass,hCurProcess,REALTIME_PRIORITY_CLASS
invoke GetCurrentThread
mov hCurThread,eax
invoke SetThreadPriority,hCurThread,THREAD_PRIORITY_TIME_CRITICAL
invoke SHChangeNotify,SHCNE_DELETE,SHCNF_PATH,addr szModule,0
.endif
invoke ExitProcess,0
end start
- 木马编程天天练 第5天 程序自删除
- 木马编程天天练 步入第2天 进程管理
- 木马编程天天练 进入第3天 服务管理
- 木马编程天天练 第4天 网络通信
- 木马编程天天练 第6天 用户账户管理
- 木马编程天天练 开始第1天 获取系统信息
- 程序天天练(2):字符串中删除子字符串
- 程序天天练(1)
- 木马EXE程序自删除C语言代码
- java天天练2
- java天天练
- 天天天天天天天
- 程序的自删除
- 自删除程序技术
- Delphi程序自删除
- 自删除程序
- 实验: 程序自删除
- 程序自删除代码
- servfox源码分析
- excel数据批量导入到Mysql数据库
- 事业的胜利 是团队的胜利 也是价值观的胜利
- 具有软件特色的电子小硕求职记
- error C2061: syntax error : identifier ‘XXXX’
- 木马编程天天练 第5天 程序自删除
- 对一次多核程序设计比赛的总结
- .NET修改xml文件
- cmem模块
- 将异常写入事件日志中(一):将异常写入应用程序的事件日志中
- 未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项
- 10 interesting projects from Google Code
- VC6.0编译时声音提示设置!!!
- .NET修改txt文本文件