`
helloyesyes
  • 浏览: 1323148 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

再说程序运行后自删除的方法(C++源代码)

阅读更多

JohnChen分析了一下Gary Nebbett写的一段程序自删除的程序。是很精妙的一段代码,精妙之处在于其进程尚在,但可执行文件已经被删除了。

我前段时间也写了一段自删除代码,不过没有那么高深,只是利用了批处理的功能,在程序的最后调用我这个函数,就能够将自己删除。现在把函数代码贴出来。

void SelfDelete()
{
static char templ[] =
":Repeat\r\n"
"del \"%s\"\r\n"
"if exist \"%s\" goto Repeat\r\n"
"rmdir %s \r\n"
"del \"%s\"" ;
static const char tempbatname[] = "_uninsep.bat" ;

char modulename[MAX_PATH] ;
char temppath[MAX_PATH] ;
char folder[MAX_PATH] ;

GetTempPath(MAX_PATH, temppath) ;
strcat(temppath, tempbatname) ;

GetModuleFileName(NULL, modulename, MAX_PATH) ;
strcpy (folder, modulename) ;
char *pb = strrchr(folder, '\\');
if (pb != NULL)
*pb = 0 ;

HANDLE hf ;

hf = CreateFile(temppath, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ;

if (hf != INVALID_HANDLE_VALUE)
{
DWORD len ;
char *bat ;

bat = (char*)alloca(strlen(templ) +
strlen(modulename) * 2 + strlen(temppath) + 20) ;

wsprintf(bat, templ, modulename, modulename, folder, temppath) ;

WriteFile(hf, bat, strlen(bat), &len, NULL) ;
CloseHandle(hf) ;

ShellExecute(NULL, "open", temppath, NULL, NULL, SW_HIDE);
}
}

JohnChen的分析见原文:

http://blog.csdn.net/byxdaz/archive/2005/11/26/537322.aspx

分享到:
评论

相关推荐

    Visual C++源代码 28 如何禁止程序同时运行两个

    Visual C++源代码 28 如何禁止程序同时运行两个Visual C++源代码 28 如何禁止程序同时运行两个Visual C++源代码 28 如何禁止程序同时运行两个Visual C++源代码 28 如何禁止程序同时运行两个Visual C++源代码 28 如何...

    Visual C++源代码 20 如何创建开机自启动程序

    Visual C++源代码 20 如何创建开机自启动程序Visual C++源代码 20 如何创建开机自启动程序Visual C++源代码 20 如何创建开机自启动程序Visual C++源代码 20 如何创建开机自启动程序Visual C++源代码 20 如何创建开机...

    3.如何设置系统启动自运行程序?(Visual C++编程 源代码)

    3.如何设置系统启动自运行程序?(Visual C++编程 源代码)3.如何设置系统启动自运行程序?(Visual C++编程 源代码)3.如何设置系统启动自运行程序?(Visual C++编程 源代码)3.如何设置系统启动自运行程序?...

    Visual C++源代码 30 如何为应用程序添加背景音乐

    Visual C++源代码 30 如何为应用程序添加背景音乐Visual C++源代码 30 如何为应用程序添加背景音乐Visual C++源代码 30 如何为应用程序添加背景音乐Visual C++源代码 30 如何为应用程序添加背景音乐Visual C++源代码...

    c++程序好玩的源代码

    "c++程序好玩的源代码"这个主题,旨在为初学者提供一些有趣且富有启发性的代码示例,让学习过程不再枯燥,充满乐趣。 首先,C++是一种强大的面向对象编程语言,它的灵活性和高效性使其在软件开发领域广泛应用。初学...

    Visual C++源代码 17 如何获取程序集版本信息

    Visual C++源代码 17 如何获取程序集版本信息Visual C++源代码 17 如何获取程序集版本信息Visual C++源代码 17 如何获取程序集版本信息Visual C++源代码 17 如何获取程序集版本信息Visual C++源代码 17 如何获取程序...

    Visual C++源代码 77 如何启动停止系统服务程序

    Visual C++源代码 77 如何启动停止系统服务程序Visual C++源代码 77 如何启动停止系统服务程序Visual C++源代码 77 如何启动停止系统服务程序Visual C++源代码 77 如何启动停止系统服务程序Visual C++源代码 77 如何...

    Visual C++源代码 16 如何获取程序集反射内容

    Visual C++源代码 16 如何获取程序集反射内容Visual C++源代码 16 如何获取程序集反射内容Visual C++源代码 16 如何获取程序集反射内容Visual C++源代码 16 如何获取程序集反射内容Visual C++源代码 16 如何获取程序...

    Visual C++源代码 18 如何获取程序集类型成员

    Visual C++源代码 18 如何获取程序集类型成员Visual C++源代码 18 如何获取程序集类型成员Visual C++源代码 18 如何获取程序集类型成员Visual C++源代码 18 如何获取程序集类型成员Visual C++源代码 18 如何获取程序...

    Visual C++源代码 19 如何查找程序集特殊成员

    Visual C++源代码 19 如何查找程序集特殊成员Visual C++源代码 19 如何查找程序集特殊成员Visual C++源代码 19 如何查找程序集特殊成员Visual C++源代码 19 如何查找程序集特殊成员Visual C++源代码 19 如何查找程序...

    Visual C++源代码 102 如何异步调用Web Service程序

    Visual C++源代码 102 如何异步调用Web Service程序Visual C++源代码 102 如何异步调用Web Service程序Visual C++源代码 102 如何异步调用Web Service程序Visual C++源代码 102 如何异步调用Web Service程序Visual ...

    Visual C++源代码 79 如何启动停止系统驱动程序

    Visual C++源代码 79 如何启动停止系统驱动程序Visual C++源代码 79 如何启动停止系统驱动程序Visual C++源代码 79 如何启动停止系统驱动程序Visual C++源代码 79 如何启动停止系统驱动程序Visual C++源代码 79 如何...

    C++源代码单词扫描程序(词法分析)

    假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮一个删除了所有不必要空格和注释的C++源程序的压缩文本。因此,程序中还应该有这样的压缩功能。 (5)选作部分:进一步思考或实现——如何进一步实现减小源文件...

    c++语言程序设计郑莉第四版 源代码 完整

    源代码中可能包含了try-catch块,演示了如何捕获和处理运行时可能出现的异常,这对于编写健壮的程序至关重要。 此外,C++还支持STL(Standard Template Library,标准模板库),这是C++库的一部分,提供了容器、...

    Visual C++源代码 33 如何限制用户使用软件次数

    Visual C++源代码 33 如何限制用户使用软件次数Visual C++源代码 33 如何限制用户使用软件次数Visual C++源代码 33 如何限制用户使用软件次数Visual C++源代码 33 如何限制用户使用软件次数Visual C++源代码 33 如何...

    4.如何在程序中启动程序?(Visual C++编程 源代码)

    (Visual C++编程 源代码)4.如何在程序中启动程序?(Visual C++编程 源代码)4.如何在程序中启动程序?(Visual C++编程 源代码)4.如何在程序中启动程序?(Visual C++编程 源代码)4.如何在程序中启动程序?...

    C++编写的ping程序源代码

    10. **编译与调试**:完成源代码后,需要使用C++编译器(如g++)进行编译链接,确保生成可执行文件。调试时,可以利用GDB等工具定位并修复代码中的问题。 综上所述,C++编写ping程序涉及到的知识点广泛,包括C++...

    Visual C++源代码 1 如何创建分隔应用程序窗体

    Visual C++源代码 1 如何创建分隔应用程序窗体Visual C++源代码 1 如何创建分隔应用程序窗体Visual C++源代码 1 如何创建分隔应用程序窗体Visual C++源代码 1 如何创建分隔应用程序窗体Visual C++源代码 1 如何创建...

    Visual C++源代码 48 如何实现文件与程序建立关联

    Visual C++源代码 48 如何实现文件与程序建立关联Visual C++源代码 48 如何实现文件与程序建立关联Visual C++源代码 48 如何实现文件与程序建立关联Visual C++源代码 48 如何实现文件与程序建立关联Visual C++源代码...

    6.如何使用内存映射文件实现多个程序间互斥运行?(Visual C++编程 源代码)

    (Visual C++编程 源代码)6.如何使用内存映射文件实现多个程序间互斥运行?(Visual C++编程 源代码)6.如何使用内存映射文件实现多个程序间互斥运行?(Visual C++编程 源代码)6.如何使用内存映射文件实现多个...

Global site tag (gtag.js) - Google Analytics