程序自杀方式

原创 2007年09月17日 10:51:00

     有点电脑常识的人都知道,在Windows下如果程序正在运行,那么是无法将其删除的,当然,也不是绝对不可以。CIH大家应该知道吧,它的核心有两个,一个就是取得Ring0级权限,然后就可以随便干想干的事(比如说修改正在运行的文件),而我们一般的程序是运行在Ring3级上的。顺便提一句---NT下没有Ring的概念,所以CIH对其无效。用Delphi内镶汇编也可以取得Ring0级权限,但如果我们的程序运行在NT或者Win2000下就没有效果了。在说句题外话,现在的编译器都很不错了,大多数程序员都编不出比编译器编译出的更理想的代码,象Delphi,如果将它的某些单元代码改用内镶汇编,在某些方面如字符串处理方面会提高5倍左右的效率,但NT不支持某些汇编代码,如果程序在NT下工作就会出错,怎么办?稳定第一!所以我们不用这个方法,而且,用这个方法有点杀鸡用牛刀的味道。
   用过DOS的朋友应该还记得批处理文件吧,新建一个批处理文件a.bat,编辑其内容为:del %0,然后运行它,怎么样?a.bat把自己删除掉了!!!好,我们就用它来进行程序的“自杀”!
找一个EXE可执行文件,比如说abc.exe,新建一个批处理文件a.bat,编辑其内容为:
:pp
del abc.exe
if exist abc.exe goto pp
del %0
先运行abc.exe,再运行a.bat,然后将abc.exe退出,你会发现a.exe和a.bat都没有了!!!按照这个思路,我们可以在程序中根据文件名称写一个批处理,将上面的abc.exe换成自己的EXE文件名就可以了。运行Delphi,新建一个工程,添加一个Button到窗体上,点击Button,写下如下代码:

procedure TForm1.Button1Click(Sender: TObject);
var Selfname,BatFilename,s1,s2:string;
BatchFile: TextFile;
begin
Selfname:=Extractfilename(application.exename);//取EXE文件自己的名称
BatFilename:=ExtractFilePath(Application.ExeName)+ 'a.bat';//批处理文件名称
S1:='@del '+Selfname;
S2:='if exist '+Selfname+' goto pp';
assignfile(BatchFile,BatFilename);
rewrite(BatchFile);
writeln(BatchFile,':pp');
writeln(BatchFile,S1);
writeln(BatchFile,S2);
writeln(BatchFile,'@del %0');
closefile(BatchFile);
winexec(pchar(BatFilename),sw_hide);//隐藏窗口运行a.bat
application.Terminate;//退出程序
end;
那我们的事情是不是就完了?NO!上面的程序原理是对的,但如果你的程序是运行在系统目录下如Windows目录下或者Windows/System等目录下,除非你打开那个目录看着它删除,否则根本没法卸掉的。那怎么办?别急,我们请出一个函数CreateProcess,它的原型为:
BOOL CreateProcess(
LPCTSTR lpApplicationName, // pointer to name of executable module 
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes 
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes 
BOOL bInheritHandles, // handle inheritance flag 
DWORD dwCreationFlags, // creation flags 
LPVOID lpEnvironment, // pointer to new environment block 
LPCTSTR lpCurrentDirectory, // pointer to current directory name 
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO 
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION 
);
这个函数和OpenProcess、ReadProcessMemory、WriteProcessMemory使用可以用来读取和修改内存数据,常用的游戏修改器就是用它。由于这些不是本文的重点所以这里不作详细介绍,感兴趣的读者可自行翻阅Delphi自带的帮助文件。用CreateProcess函数创建一个进程就可以完美的完成我们的“程序自杀”了。
运行Delphi,新建一个工程,添加一个Button到窗体上,全部代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure My_DeleteMe; //自定义程序自杀过程
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
My_DeleteMe;
end;
procedure TForm1.My_DeleteMe; //程序自杀
//-----------------------------------------------------------
function GetShortName(sLongName: string): string; //转换长文件名
var
sShortName: string;
nShortNameLen: integer;
begin
SetLength(sShortName, max_PATH);
nShortNameLen := GetShortPathName(PChar(sLongName),
PChar(sShortName), MAX_PATH - 1);
if (0 = nShortNameLen) then
begin
// handle errors...
end;
SetLength(sShortName, nShortNameLen);
Result := sShortName;
end;
//-------------------------------------------------
var
BatchFile: TextFile;
BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
BatchFileName := ExtractFilePath(ParamStr(0)) + '$$a$$.bat';
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile, ':try');
Writeln(BatchFile, 'del "' + GetShortName(
该文章转载自1024k:http://www.1024k.cn/faq/2007/200706/39794.html 

相关文章推荐

『other』恶搞自杀小程序

去年写过一个关于键盘钩子控制视频播放的程序,今年偶然想起来都不知道怎么弄的了。 于是,今天又研究了一下。 之前有想过利用它可以写点恶搞的小程序。今天想了想,于是就有了这篇恶搞自杀小程序。 原理比较...

自杀小程序

  • 2013年12月01日 15:31
  • 445KB
  • 下载

VC编写的自杀程序演示范例

  • 2013年05月05日 19:06
  • 2.31MB
  • 下载

研究者绘制神经信号图,利用AI识别人脑中的"自杀倾向" | 研究

本文系网易新闻-智能工作室出品 聚焦AI,读懂下一个大时代! 网易年度AI人物评选——2017网易AI英雄风云榜,自荐提名进行中! 奖项设置:技术创新人物TOP 10,商业创...

一段电脑自杀程序.txt

  • 2010年07月25日 16:32
  • 694B
  • 下载

网传跷二郎腿等于慢性自杀 专家称此说法有点过头

“跷二郎腿等于慢性自杀,会造成静脉曲张、脊柱变形和男性生殖能力下降。亲,快把这条信息发给你爱的人,不要再跷二郎腿了! ”这两天,微博上一条关于跷二郎腿的信息被热转,有这个习惯的人看了无不惊叹,小小的二...
  • DL10129
  • DL10129
  • 2012年03月24日 10:13
  • 1008

DLL自杀程序

  • 2008年03月10日 12:51
  • 2KB
  • 下载

Delphi自杀程序

  • 2014年04月03日 16:50
  • 8KB
  • 下载

nyistOJ 游戏AOE技能分析(1)自杀还是他杀?beta (计算几何)

抄模版1A #include #include #include #include #include #include #include #include #define LL lo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序自杀方式
举报原因:
原因补充:

(最多只允许输入30个字)