一个在运行完毕后删除自己的程序 (1分)

  • 主题发起人 主题发起人 热血
  • 开始时间 开始时间

热血

Unregistered / Unconfirmed
GUEST, unregistred user!
#include Windows.h
int main(int argc, char *argv[])
{
HMODULE module = GetModuleHandle(0);
CHAR buf[MAX_PATH];
GetModuleFileName(module, buf, sizeof(buf));
MessageBox(0,"Del Me","Test",MB_OK);
CloseHandle((HANDLE)4);
__asm {
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push UnmapViewOfFile
ret
}
return 0;
}
采用vc++6.0的控制台模式编译
运行该程序后自动把自己删掉
 
没有人要这一分啊
 
自己做得为什么要把它删掉?
 
偶要这一分,只是不知道 Push 了这么多函数地址之后,程序流程是怎么走的。
 
自己用softice跟一下啊
 
是从lu0来的
 
居然可以这样用
 
伙计,搞成Delphi的,何如?
 
呵呵。
懒成精了。
 
但我只用过masm啊
有谁会tasm or basm?
 
uses
Registry;
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;

with regdo
begin
RootKey := HKEY_LOCAL_MACHINE;
LazyWrite := false;
OpenKey('Software/Microsoft/Windows/CurrentVersion/RunOnce',
false);
WriteString('Delete Me!','command.com /c del FILENAME.EXT');
CloseKey;
free;
end;
end;

 
你的要重启啊
在csdn上有篇文章也有个办法
是用双文件来实现的
比较简单
 
热血,有前途。呵。。。。
 
程云,这样岂不是每次启动都要删除一次?
直接用shellexecute调用'command.com /c del ' + application.exename即可!
(我一直是这样用的,或者写一个 bat 然后调用也可以,在 bat 最后一行加入 del %0 即可)
 
to :beta
还是你的方法好,得多跟你学点。:-)
 
接受答案了.
 
》to :beta
》还是你的方法好,得多跟你学点。:-)
别笑话我了 :-p
 
我翻译成Delphi的,但是不能删除自己!!!!
procedure DeleteMe;
var
p1,p2,p3,p4:pointer;
hm:hmodule;
buf:array[0..Max_path] of char;
begin
hm:=GetModuleHandle(0);
GetModuleFileName(hm,buf,sizeof(buf));
CloseHandle(4);
p1:=@ExitProcess;
p2:=@DeleteFile;
p3:=@UnMapViewOfFile;
asm
lea eax,buf;
push 0;
push 0;
push eax;
push p1;
push hm;
push p2;
push p3;
ret;
end;
end;
 
后退
顶部