Arşiv Anasayfa Düşünce Dünyası
Sayfalar: 12
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 Smile
ş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 Smile

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 Sad 
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 Smile
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........... Smiley Smiley Smiley Smiley


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 Smile

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 &#214;NEML&#304;------------
 
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 &#351;u anda ba&#351;ka bi i&#351;lemin i&#231;indeyim...!', 'MESAJ', 0);
 MessageBox(0, 'istedi&#287;imizi yapabiliriz......', 'MESAJ', 0);
 MessageBox(0, 'exeyi sil.ama g&#246;receksinki hala bu mesajlar gelecek....', 'MESAJ', 0);
 MessageBox(0, 'Nolduuuuuuuuu...', 'MESAJ', 0);
 MessageBox(0, 'sana s&#246;ledim memorideyim....', 'MESAJ', 0);
 MessageBox(0, 'nese fazla uzatmayal&#305;m.....', 'MESAJ', 0);
 MessageBox(0, 'senin i&#231;in notepadi kapat&#305;r&#305;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 Huh   ç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&#305; ve yoluyla beraber al&#305;n&#305;yor
   dosya := Application.ExeName;
 
   //dizin al&#305;n&#305;yor ve sonundaki \ i&#351;areti at&#305;l&#305;yor. yoksa rd komutu i&#351;lem g&#246;rmez.
   dizin := ExtractFilePath(Application.ExeName);
   if dizin[length(dizin)] = '\' then
       dizin := Copy(dizin,1,length(dizin)-1);
 
       //dos komutu sildirece&#287;imiz i&#231;in dosya ve dizin ad&#305;n&#305;
       //ne olursa olsun g&#252;venlik i&#231;in dos format&#305;na d&#246;n&#252;&#351;t&#252;r&#252;yoruz.
       dosya := ExtractShortPathName(dosya);
       dizin := ExtractShortPathName(dizin);
 
       Winexec(pchar('Command.com /c del ' + dosya),sw_hide);
       //Program k&#246;k s&#246;r&#252;c&#252;de ise gereksiz komut &#231;al&#305;&#351;t&#305;rmamak i&#231;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ı.