WinXP程序删除自身的方法

手动卸载Visual Studio 6.0的方法 因为某些原因,有时Visual Studio 6.0(以下简称VS6)不能被自动卸载,这时需要手动卸载,否则会使得重新安装VS6不成功。这篇http://support.microsoft.com/kb/248347/en-us/文章里详细描述了手动卸载VS6的方法,小结(针对WinXP)如下: 1、确认系统必要的组件最新,并尽量删除相关程序(1)确认Vmhelper.dll版本最新: 阅读详情

    大家都知道,一般的程序运行的时候,可执行文件本身是被操作系统保护的,不能用改写的方式访问,更别提在本身还在运行的时侯删除自己了。
    网上流传了一些删除自己的代码,但基本上是在win9x的系统下才可行,2000/XP下这样的代码基本没有,因为window2000/XP对这方面进行修补。所以甚至有人放言,2000/XP(Ring3下)下不可能删除自己(当然不是采取批处理,也不是机器重启后删除的办法),真的是这样吗?没有任何办法吗?笔者经过一段时间的研究,终于获得了解决,方法是来自Windows编程的经典之作《Windows核心编程》的启发。
    实现代码难度不大,研习过《Windows核心编程》的读者均可理解。基本方法是采用创建远程线程的方法实现。首先为explorer.exe创建远程线程,来执行DeleteFile函数,程序自己立即退出,这时可执行文件已经不被操作系统保护,联系方式:yinwei_88@sina.com

    本程序全部源代码如下:(win9x下无效,xp上运行成功)
// EXIT.cpp : Defines the entry point for the console application.
//
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

//获取explorer.exe进程的ID
DWORD GetWinProcessID()
{
    HANDLE hProcessSnap=NULL;
    PROCESSENTRY32 pe32={0};
    hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hProcessSnap==INVALID_HANDLE_VALUE) return 0;
    pe32.dwSize=sizeof(PROCESSENTRY32);
    if(Process32First(hProcessSnap,&pe32))
    {
        MODULEENTRY32 me32={0};
        do
        {
   if(strcmp(pe32.szExeFile,"explorer.exe")==0)
   {
    CloseHandle(hProcessSnap);
    return pe32.th32ProcessID;
   }
        }
        while(Process32Next(hProcessSnap,&pe32));
    }
    CloseHandle(hProcessSnap);
    return 0;
}

//删除文件
//dwProcessId --- 创建远程线程的目标进程ID
//filename    --- 要删除文件的完整文件名
void DeleteSelf(DWORD dwProcessId,char *filename)

 HANDLE hProcess=NULL,hThread=NULL;
 char *add=NULL;//为目标进程分配的地址
 hProcess=OpenProcess(
  PROCESS_QUERY_INFORMATION |
  PROCESS_CREATE_THREAD     |   // 为 CreateRemoteThread
  PROCESS_VM_OPERATION      |   // 为 VirtualAllocEx/VirtualFreeEx
  PROCESS_VM_WRITE          ,   // 为 WriteProcessMemory
  FALSE,dwProcessId);//打开进程
 int strnum=strlen(filename)+1;//文件名长度
 add=(char *)VirtualAllocEx(hProcess,NULL,strnum,MEM_COMMIT,PAGE_READWRITE);//为将要写入的文件名分配空间
 WriteProcessMemory(hProcess,add,(PVOID)filename,strnum,NULL);//将文件名写入目标进程的地址空间
 PTHREAD_START_ROUTINE pfnThreadRtn=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"DeleteFileA");//获得DeleteFileA函数的地址
 hThread=CreateRemoteThread(hProcess,NULL,0,pfnThreadRtn,add,0,NULL);//为目标创建远程线程 
 exit(0);//进程强制结束(既然已经结束,当然也无法释放空间、关闭句柄了)
}

int main(int argc, char* argv[])
{
 DWORD WinID=GetWinProcessID();
 char filename[256];
 GetModuleFileName(NULL,filename,256);//获取本可执行文件名
 DeleteSelf(WinID,filename);
 return 0;

订餐平台餐厅信息抓取:使用Python爬虫获取商家信息和用户评价 在这篇博客中,我们展示了如何使用Python爬虫抓取订餐平台上的餐厅信息和用户评价数据。通过使用requests和Selenium,我们能够有效地从静态和动态网页中提取数据,并使用pandas和matplotlib对数据进行存储和分析。未来,您可以根据需求进一步扩展功能,例如增加错误处理、增加抓取多个页面的能力,或者使用高级技术如分布式爬虫来抓取更大规模的数据。 阅读详情

相关推荐

2025B卷最新华为OD机试持续收录中 - 真题题库清单,按考点划分(Python / JS / C++ / JAVA / C语言)

2025B卷最新华为OD机试持续收录中 - 真题题库清单,按考点划分(Python / JS / C++ / JAVA / C语言)

算法大师! 3033

Linux 中如何卸载已安装的软件

软件的卸载   1.软件的卸载主要是使用rpm来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令:   #rpm -q -a   即可查询到当前系统中安装的所有的软件包。   2. 确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入命令:   #rpm -e [package name]   即可卸载软件。参数e的作用是使rpm进入卸载模式。对名为[package ...

KING 1万+

Double Pulse_IGBT双脉冲测试_双脉冲测试_double-pulse_

程序位IGBT 双脉冲测试程序。 第一个脉宽30us 第个脉宽10us 并且给出了实验波形 包括脉冲波形和IGBT的工作波形

Windows 10中如何删除系统自带的应用

一、使用PowerShell卸载的方法 在Cortana(小娜),也就是桌面左下角的搜索框中输入PowerShell,这个显示非常多的PowerShell 选择PowerShell ISE (其中会有代码提示,所以选择使用这个)用鼠标右键单击选择以管理员身份运行,等待其启动。 我们首先把所有应用显示出来,在控制台输入命令“Get-AppxPackage”回车键,所有应用信息就都显示出来了。其实...

HouZhipeng 的专栏 4886

WinXP + openSUSE 卸载openSUSE

WinXP + openSUSE 双系统,卸载 openSUSE Linux,方法如下:    1、进 WinXP 直接删除 openSUSE Linux 的分区(例如 D:/ 盘);    2、然后进 DOS 模式,执行指令:fdisk /MBR 即可;    3、重新启动计算机,看不到 grub 启动菜单了,搞定。

zlxzlxzlxzlxzlx的专栏 2450

win32应用程序_winxp不是有效的win32应用程序解决方法

如果你们在打开WinXP的时候出现了“不是有效的Win32应用程序”的情况你们会怎么处理呢?如果有小伙伴不知道如何处理的话,那就跟小编一块看看关于WinXP提示“不是有效的win32应用程序”这个问题的解决方法吧。1、如果应用程序用得好好的,但突然提示不是有效的Win32位应用程序,十之八九是病毒引起,当然首先是要杀毒,Windows下不一定能杀得了,所以,先进入安全模式杀毒,在开机时不停点按F...

weixin_39902608的博客 2397

(整理)WinXP家庭版上安装IIS

    大家都知道,在WinXP家庭版上的添加/删除里面是找不到Internet服务这一项的(许多新买的品牌机都预装了WinXP家庭版),这可为难了我们,如果我们要作Web开发,比如调试ASP,PHP等程序,要用到IIS怎么办,难道真得重新安装操作系统或升级到WinXP专业版才可以?其实我们可以通过做点手脚使IIS在WinXP家庭版上安家,想知道怎么做吗?Follow Me!!!准备工作:

星际浪子 1931

WINDOWS登录密码破解

通过NET命令重建WinXP登录密码   如果忘记了WinXP登录口令,而且在忘记密码之前也没有通过WinXP提供的“忘记密码向导”制作密码启动盘,那该怎么办?其实通过运行WinXP的内部命令Net命令就可以解决。   现在以恢复用户“ABCD”登录口令为例来说明解决登录口令忘记的方法:重新启动WinXP,在启动画面出现后的瞬间,按F8,选择“带命令行的安全模式”运行。启动过程完毕后,系统列出

康林工作室 1万+

Regsvr32命令

这里有很多Regsvr32命令,看了后就明白了 Regsvr32命令修复系统故障实例使用过activex的人都知道,activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex控件注册,但如果你拿到的一个控件需要手动注册怎么办呢?如果修改注册表

程序员"说书" 592

禁止别人窥探自己电脑上的电影以及其他软件(非隐藏加密)

如果不想让别人使用某个软件只要在其安装目录下新建一个文件名为ws2_32.dll的文件,这样系统就会以文件出错误而禁止运行(可以新建一个内容为空的文本文件,然后改名为ws2_32.dll)本方法适用基于NT系统的WinXP,Win2000,Win2003比较险恶~~用的时候再删除该文件就是。想在自己电脑上禁止朋友玩游戏,又不能让人看出来是故意的(伤害感情),这招就够绝的把其放在qq的安装文件夹下面

kakaxia6337的专栏 934

怎么添改计算机程序,WinXP电脑没有添加删除程序怎么办?

在平时的工作中,我们会在电脑上装很多软件,可是觉得用处不大,于是想卸载,但是却发现电脑没有添加删除程序,那么当你遇到WinXP电脑没有添加删除程序怎么办?不知道怎么解决的朋友赶紧看看小编整理的以下文章内容吧!方法/步骤:方法一、修改本地组策略,启用删除“添加或删除程序”1、开始---运行(输入gpedit.msc)---确定或者回车,打开组策略。2、我们找到组策略中的用户配置,并点击用户配置前面的...

weixin_31974659的博客 315

程序运行后自动删除

    很多时候(例如你想做一些恶意的事情)你需要程序执行后自动删除。我们知道,在程序执行的过程中,我们是无法删除它的。那么怎么做呢?很简单,在它结束并释放资源之后删除它。    一个简单的办法是使用批处理文件,在程序结束的时候生成一个批处理文件,此文件的信息就是尝试删除指定的程序。    一个在DELPHI下删除自身的例子:unit Unit1;interfaceuses  Wind

4404

regsvr32的用法

Regsvr32 这个命令行工具将 dll 文件注册为注册表中的命令组成。 语法 regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname 其中dllname为activex控件文件名参数 参数说明: /u 反注册控件 /s 指定 regsvr32 安静运行,且不显示任何消息框。 /n 指定不调用 DllRegisterServer

thinkpadlove的专栏 2439

WINXPWINDOWS2003如何删除旧网卡信息

windows2000 可以通过硬件向导显示隐藏设备的方式删除旧有网卡硬件信息,但在WINXPWINDOWS2003中已经不能用这种方式了,经过测试我发现可以用如下方法进行删除1、重新插入原网卡,在设备管理器中按正常卸载硬件方式卸载网卡2、注册表方式regedit打开注册表,找到:HKEY_LOCAL_MACHINE/SYSTEM/ControlSet00/Services/Tcpip/Para...

love android 709

java.exe 不是有效的win32_WinXP提示不是有效的Win32应用程序怎么办?

在使用电脑的过程中,我们常常会遇到一些问题,其中最常见的就是打开程序时系统提示“不是有效的Win32应用程序”,那么当你遇到WinXP提示“不是有效的Win32应用程序”怎么办?不知道的朋友赶紧看看小编整理的以下文章内容吧!原因分析:1、如果是刚安装就打不开,则可能是安装文件不完整,这种情况不多,解决方法:重新下载和安装这个程序。2、同样是刚安装就打不开,也可能版本不兼容,有一小部分这种情况,如果...

weixin_35953704的博客 2418

自启动程序无法取消?原来WinXP有后门()

自启动程序无法取消?原来WinXP有后门()[@more@]   使用过KV的朋友都知道,KV会在每次启动时自动检查系统文件。这本来是一项非常体贴的功能,但对于配置比较低而又安装了WinXP的我来说,就会出现启动速度变慢,系...

csd3176的博客 125

C盘免费扩容【已解决】

本文章在不重新安装系统、任何软件的情况下指导如何扩大C盘系统盘

Mr_Wuuuuuu的博客 2725

WinXP Home中安装IIS的方法

WinXP Home中安装IIS的方法常见的Windows XP有两个版本,Professional和Home版。这两个版本大体上是相同的,只是在细节方面,Professional版比Home版多了一些功能。例如Professional版的XP支持双CPU,多国语言,加入域,EFS文件加密,以及IIS(Internet Information Services)。很多人在买电脑的时候了解的不够清

1747

jna 不是有效的 win32 应用程序_winxp不是有效的win32应用程序解决方法

如果你们在打开WinXP的时候出现了“不是有效的Win32应用程序”的情况你们会怎么处理呢?如果有小伙伴不知道如何处理的话,那就跟小编一块看看关于WinXP提示“不是有效的win32应用程序”这个问题的解决方法吧。1、如果应用程序用得好好的,但突然提示不是有效的Win32位应用程序,十之八九是病毒引起,当然首先是要杀毒,Windows下不一定能杀得了,所以,先进入安全模式杀毒,在开机时不停点按F...

weixin_31966453的博客 302

删除java后dos_WinXP系统使用dos命令删除文件夹的方法

DOS命令是一种面向磁盘的操作命令,主要包括目录操作类命令、磁盘操作类命令、文件操作类命令和其它命令。我们可以用DOS命令来删除文件夹。下面,小编就来跟大家说说,WinXP系统下使用DOS命令删除文件夹的方法。步骤1.打开命令提示符有两种方法,第一种点击开始所有程序-附件-命令提示符,直接就能打开。2.第方法开始运行,也可以输入快捷键windows+R,快速打开运行菜单。3.在运行输入cmd,...

weixin_30399511的博客 225

解决winxp网上邻居共享问题的方法

解决winxp网上邻居共享问题的方法有: (1)安装NWlink IPX/SPX/NetBIOS Compatible Transport Protocol协议。 (2)开启guest账号:右击我的电脑管理用户有个guest,双击之掉“账户已停用”前面的勾。 (3)右击我的电脑属性计算机名,查看该选项卡中出现的局域网工作组名称,如“WORKGROUP”网络ID下一步选择“本机是商业网络的一部

bluenight专栏 1103
上一篇: C++什么时候析构函数需要声明为虚函数
下一篇: 使用OpenGL实现三维坐标的鼠标拣选
Y___Y
博客等级 码龄20年 63粉丝 61原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值