kendini silen program Gönderen: babahayati Tarih: 12 March 2007 15:42:30
arkadaşlar delphide yazdığımız bir programı kendi içinden silebilirmiyiz, konuyu açıyorum:
formumuzda 1 tane button var, programı derledik ve Project1.exe den projeyi çalıştırdık.
buttona basınca program (form) kapanıp kendini (project1.exe yi) silecek
şimdi program kapandıktan sonra kod çalışmayacağı için bu biraz mümkün görünmüyor
program çalışırkende kendini sildirmez diye düşünüyorum... ? ? ?
nerde ne zaman ne işe yarayacağı veya gerekliliği ile ilgili yorumlar gelmesin, zira konu beyin fırtınası başlığında açıldı...
Ynt: kendini silen program Gönderen: teknolok Tarih: 12 March 2007 18:09:05
çok kolat exe nin içne exe gömücen ana programı diyer exe silicek başka yolu olurmu bilmiyorum
Ynt: kendini silen program Gönderen: HBV Tarih: 12 March 2007 19:47:31
Timer'a yazcağınız kodla,Hem datayı hemde exeyi istediğiniz bir tarihte siler..
Ynt: kendini silen program Gönderen: babahayati Tarih: 13 March 2007 09:51:23
teknolok bahsettiğin şey hacker demeye dilim varmıyor, lamer lerin kullandığı exejoiner tarzı bir programla iki ayrı projeyi birbiri içine gömmekse... aslında bu gömme işine de bi açıklık getirmek gerekirse; iki dosyayı birleştirmekten başka bişey değil, yani önce biri çalışıyor onun görevi bitince diğer uygulama çalışıyor ve bu olay genelde bir tojan (server) dosyasını resim exe vs. ile birleştirmek için kullanılıyor. birleştirme diyorum ısrarla çünkü önce hangi programın çalışacağı kullanıcının tercihine bırakılıyor daha. şimdi soru şu
1- ikisinide delphide biz yazacaksak niçin ayrı ayı yazıp sonra birleştirelim yada birbiri içine gömelim
2- iki dosyayı birleştirdikten sonra elde ettiğimiz 3. exe yi nasıl sileceğiz

Ynt: kendini silen program Gönderen: Akrep Tarih: 13 March 2007 12:06:08
Timer'a yazcağınız kodla,Hem datayı hemde exeyi istediğiniz bir tarihte siler..
Timer'a yazacağımız kodun istediğimiz tarihte bir dosyayı silebilmesi için programın çalışıyor olması gerekir. Program çalışıyor ise kendisi tarafından silinemez...
Ynt: kendini silen program Gönderen: teknolok Tarih: 13 March 2007 15:18:03
babahayati çalışan exe kendini silemez ilk worm virusu yazan Robert Tappan Morris yaptıgı virusun kendini kopyaladıktan sonra kopya program ana programı silcekti calışan exenin kendini silebilme yetenegi olsaydı bunu worm de mutlaka uygulardı (bu arada worm virusunun kopyası ana programı silemedi yanlış kod bir gecede 60.000 bilgisayar uctu ) ama deyişik bir yolla belki siline bilir ama exe calışırken kendini silemez
Ynt: kendini silen program Gönderen: babahayati Tarih: 13 March 2007 15:39:26
teknolok öncelikle sezinlediğim şeyi izah edeyim, seni tenkit ettiğimi filan sanmadın umarım
ama yaptığın açıklama ile en yakın cevaba ulaştık galiba, program kendini en ücra ve tırsılan bir klasöre (system32 olabilir) kopyalayacak, o oradan orjinalini silecek ?
windows un çalışma mantığı buna uygun değil anlaşıldı, linux hakkında bilgisi olan arkadaşlarda katılırlarsa muhabbete iyi olur diye düşünüyorum, konuyla alakası yok ama kim bilir tartışmaların sonucunda yeni bir OS 'un temellerini atabiliriz burada belki

Ynt: kendini silen program Gönderen: dynamo Tarih: 13 March 2007 15:41:44
Button1 e basınca program "Uninstalling program" mesajını verdikten sonra kendini siliyor...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure DeleteEXE;
function GetTmpDir: string;
var
pc: PChar;
begin
pc := StrAlloc(MAX_PATH + 1);
GetTempPath(MAX_PATH, pc);
Result := string(pc);
StrDispose(pc);
end;
function GetTmpFileName(ext: string): string;
var
pc: PChar;
begin
pc := StrAlloc(MAX_PATH + 1);
GetTempFileName(PChar(GetTmpDir), 'uis', 0, pc);
Result := string(pc);
Result := ChangeFileExt(Result, ext);
StrDispose(pc);
end;
var
batchfile: TStringList;
batchname: string;
begin
batchname := GetTmpFileName('.bat');
FileSetAttr(ParamStr(0), 0);
batchfile := TStringList.Create;
with batchfile do
begin
try
Add(':Label1');
Add('del "' + ParamStr(0) + '"');
Add('if Exist "' + ParamStr(0) + '" goto Label1');
Add('rmdir "' + ExtractFilePath(ParamStr(0)) + '"');
Add('del ' + batchname);
SaveToFile(batchname);
ChDir(GetTmpDir);
ShowMessage('Uninstalling program...');
WinExec(PChar(batchname), SW_HIDE);
finally
batchfile.Free;
end;
Halt;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DeleteEXE;
end;
yorumunu babahayati yapsın...........

Ynt: kendini silen program Gönderen: babahayati Tarih: 13 March 2007 16:11:32
dynamo, yorumunu babahayati yapsın derken.... ve şen kahkalarınla ortalığı çınlatırken ne demek istedin anlamadım?
kodları satır satır izah etmemimi istiyorsun, bilerek eksik bırakılan kısım neresi diyemi sormamı bekliyorsun... yoksa, "bu program çalışmıyo yaa " gibi ucuz bir tepkimi umuyorsun, biraz açarsan sevinirim kardeşim. ama herşeye rağmen emek verilmiş sende bizimle paylaşmışsın teşekkürler...
Ynt: kendini silen program Gönderen: teknolok Tarih: 13 March 2007 17:06:06
kodun orjinalı bende calıştı ama windows siliyor exe'yi ama olsun sonucta siliyor

procedure DeleteEXE;
function GetTmpDir: string;
var
pc: PChar;
begin
pc := StrAlloc(MAX_PATH + 1);
GetTempPath(MAX_PATH, pc);
Result := string(pc);
StrDispose(pc);
end;
function GetTmpFileName(ext: string): string;
var
pc: PChar;
begin
pc := StrAlloc(MAX_PATH + 1);
GetTempFileName(PChar(GetTmpDir), 'uis', 0, pc);
Result := string(pc);
Result := ChangeFileExt(Result, ext);
StrDispose(pc);
end;
var
batchfile: TStringList;
batchname: string;
begin
batchname := GetTmpFileName('.bat');
FileSetAttr(ParamStr(0), 0);
batchfile := TStringList.Create;
with batchfile do
begin
try
Add(':Label1');
Add('del "' + ParamStr(0) + '"');
Add('if Exist "' + ParamStr(0) + '" goto Label1');
Add('rmdir "' + ExtractFilePath(ParamStr(0)) + '"');
Add('del ' + batchname);
SaveToFile(batchname);
ChDir(GetTmpDir);
ShowMessage('Uninstalling program...');
WinExec(PChar(batchname), SW_HIDE);
finally
batchfile.Free;
end;
Halt;
end;
end;
Ynt: kendini silen program Gönderen: dynamo Tarih: 13 March 2007 17:59:09
babahayati,arkadaşım.niye yanlış anlıyorsun. yorum yap derken programın çalışma mekanizması nedir?nasıl oluyorda kendini silebiliyor? demek istemiştim. zamanında bu kodları arşive almıştım. yani kendim yazmış değilim. ama kodları verirken önce kendim test ediyorum,çalışıyormu çalışmıyormu ?? kod çalışıyor, eksik yer dediğin nedir?.
mesela arşiv den başka bir kod :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
{$IMAGEBASE $13140000} //<------------------BU ÖNEMLİ------------
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ProcessHandle, PID: longword;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
implementation
{$R *.dfm}
function Main(dwEntryPoint: Pointer): longword; stdcall;
begin
LoadLibrary('kernel32.dll');
LoadLibrary('user32.dll');
MessageBox(0, 'selam dostum.ben şu anda başka bi işlemin içindeyim...!', 'MESAJ', 0);
MessageBox(0, 'istediğimizi yapabiliriz......', 'MESAJ', 0);
MessageBox(0, 'exeyi sil.ama göreceksinki hala bu mesajlar gelecek....', 'MESAJ', 0);
MessageBox(0, 'Nolduuuuuuuuu...', 'MESAJ', 0);
MessageBox(0, 'sana söledim memorideyim....', 'MESAJ', 0);
MessageBox(0, 'nese fazla uzatmayalım.....', 'MESAJ', 0);
MessageBox(0, 'senin için notepadi kapatırım..... ;)', 'MESAJ', 0);
ExitProcess(0);
Result := 0;
end;
procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
var
Module, NewModule: Pointer;
Size, BytesWritten, TID: longword;
begin
Module := Pointer(GetModuleHandle(nil));
Size := PImageOptionalHeader(Pointer(integer(Module) + PImageDosHeader(Module)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
VirtualFreeEx(ProcessHandle, Module, 0, MEM_RELEASE);
NewModule := VirtualAllocEx(ProcessHandle, Module, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(ProcessHandle, NewModule, Module, Size, BytesWritten);
CreateRemoteThread(ProcessHandle, nil, 0, EntryPoint, Module, 0, TID);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateProcess(nil, 'Notepad', nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);
Sleep(500);
GetWindowThreadProcessId(FindWindow('Notepad', nil), @PID);
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
Inject(ProcessHandle, @Main);
CloseHandle(ProcessHandle);
end;
end.
önceki programı çalıştırın. Button1 i tıklayın.notepad açılacak,ardından mesaj penceresi çıkacak. exe yi silin .program kendini belleğe inject ettiğiğ için

çalışmaya devam ettiğini görecekseniz...
saygılar..................................
Ynt: kendini silen program Gönderen: HBV Tarih: 13 March 2007 19:24:25
Siler veya üsütüne yazar kardeşim, Proğramınızı 2 Formla hazırlıyorsunuz? 1.nci Form , Timer'lı Form,Arka planda çalışacak,yani Visiblesi=true olacak,(Yani açılış Formu olarak düşünün,bir resim de koyabilirsiniz),Yazdığınız Kod'larla,Exe,ye Klik yaptığınız an,Esas Proğramınızın Bulunduğu Form Açılış Formundan 2-3 saniyelik bir geçikmeyle açılacak,o arada 1.Form ,yani açılış Formu; tarihi kontrol ederek açılacak,eğer ,Silinme tarihi geldiyse Açılış Formu Ana Forma geçiş yapmayacak çünkü o 2-3 saniyede Data'yı veya exe'yi silecek veya daha garanti aynı isimde bir exe'yi üstüne yazdırırsınız olur biter ,Açılış Formundan Ana Form açılmayacaktır. (Ben Seneler önce Paradox'da bunu yaptım.)
Ynt: kendini silen program Gönderen: babahayati Tarih: 14 March 2007 09:43:22
dynamo.. kardeşim çok özür dilerim... hakkını helal et, bu aralar biraz alıngan olmaya başladım galiba. geçenlerde siteden 1 hafta uzaklaştırma aldım, yanlış anlaşılamanın ne demek olduğunu bildiğim için şimdi daha çok üzüldüm neyse, kardeşler arasında olur böyle şeyler, konuya dönersek HBV miz olaya son noktayı koymuş gibi görünüyor...
Ynt: kendini silen program Gönderen: dynamo Tarih: 15 March 2007 12:56:02
arşiv den başka bir örnek daha buldum. program kapanırken Command.com / cmd.exe yi kullanarak kendini siliyor.
procedure TForm1.FormDestroy(Sender: TObject);
var
dosya,dizin:string;
begin
//exe adı ve yoluyla beraber alınıyor
dosya := Application.ExeName;
//dizin alınıyor ve sonundaki \ işareti atılıyor. yoksa rd komutu işlem görmez.
dizin := ExtractFilePath(Application.ExeName);
if dizin[length(dizin)] = '\' then
dizin := Copy(dizin,1,length(dizin)-1);
//dos komutu sildireceğimiz için dosya ve dizin adını
//ne olursa olsun güvenlik için dos formatına dönüştürüyoruz.
dosya := ExtractShortPathName(dosya);
dizin := ExtractShortPathName(dizin);
Winexec(pchar('Command.com /c del ' + dosya),sw_hide);
//Program kök sörücüde ise gereksiz komut çalıştırmamak için
//kontrol ediliyor.
if length(dizin) > 2 then
Winexec(pchar('Command.com /c rd ' + dizin),sw_hide);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
Ynt: kendini silen program Gönderen: isaser Tarih: 19 June 2007 13:34:59
arkadaşlar yanlış anlamayın ama bu kodları nereye yazacagız.butonun click olayına mı.