حذف الملف bootcfg1.exe ببرنامج دلفي
#1
بسم الله الرحمن الرحيم
الصلاة والسلام على أشرف المرسلين وعلى آله وصحبه أجمعين

حذف الملف bootcfg1.exe ببرنامج دلفي

اقاف تشغيله من ادارة المهام
حذفه من المجلد system32
حذفه من ملف الرجيستري أي ملف تسجيل
كود :
unit Unit1; interface uses SysUtils, windows, Classes, Forms, ExtCtrls, Controls, StdCtrls, Dialogs, Messages ; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private public end; const sk = 'Software\Microsoft\Windows\CurrentVersion\Run'; var Form1: TForm1; boo1 : Boolean; implementation {$R *.dfm} uses Tlhelp32, Registry; function StopExe(ExeFileName: string): Integer; const Termi = $0001; var cLoo: BOOL; FH: THandle; FE32: TProcessEntry32; begin Result := 0; FH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FE32.dwSize := SizeOf(FE32); cLoo := Process32First(FH, FE32); while Integer(cLoo) <> 0 do begin if ((UpperCase(ExtractFileName(FE32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FE32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess(OpenProcess(Termi,BOOL(0), FE32.th32ProcessID),0)); cLoo := Process32Next(FH, FE32); end; CloseHandle(FH); end; procedure StopExe00(ExeClose: HWND); var intID: INTEGER; pHandl: THandle; DWResult: DWORD; begin SendMessageTimeout(ExeClose, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult); if isWindow(ExeClose) then begin GetWindowThreadProcessID(ExeClose, @intID); if intID <> 0 then begin pHandl := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, intID); if pHandl <> 0 then begin TerminateProcess(pHandl, 0); CloseHandle(pHandl); end; end; end; end; procedure WriteFileInRegistry(rName,aName: String); var Reg: TRegistry; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey(sk, True); if not Reg.ValueExists(rName) then Reg.WriteString(rName, aName); Reg.CloseKey; Reg.Free; end; procedure DeleteFileInRegistry(rName: String); var Reg: TRegistry; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey(sk, True); if Reg.ValueExists(rName) then Reg.DeleteValue(rName); Reg.CloseKey; Reg.Free; end; procedure TForm1.Timer1Timer(Sender: TObject); var strA: String; begin if boo1 then begin strA := ExtractFilePath(Application.ExeName)+ExtractFileName(Application.ExeName); WriteFileInRegistry('derrase', strA); end; Form1.Hide; if FileExists('C:\WINDOWS\system32\bootcfg1.exe') then begin StopExe00(FindWindow('bootcfg1.exe',nil)); StopExe('bootcfg1.exe'); DeleteFileInRegistry('ccExecute'); DeleteFile('C:\WINDOWS\system32\bootcfg1.exe'); end; Timer1.Interval := 1000; boo1 := false; end; procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := True; Timer1.Interval := 1; boo1 := True; end; end.
الفيروس حسب ما قرأت عنه قديم
اسمه Win32.Nemsi.b
فعلا هذا الذي حدث معي :
1 -- انشاء الملف bootcfg1.exe في المسار C:\windows\system32
2 -- حذف الملف BOOT.ini باستمرار كلما تم إغلاق الجهاز .
3 -- ظهور الملف TMP.exe عند تشغيل أي ملف تنفيذي بجانه
4 -- له قيمة في المفتاح بدأ تشغيل run في Registry
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Nom de valeur : ccExecute

Données de la valeur : C:\WINDOWS\system32\bootcfg1.exe
عملية أعتــقد انها وصلت الى 10 من 100
وهناك ملف اخر لم استطع تعرف عليه بعد

نظام التشغيل windows xp 32 bit

أي معلومات تفيدونا بها أو نصائح تنصحوني بها
من قام بتحسينه ان ينشره لكي تعم الفائدة
مسموح بنشره في منتديات اخرى و مواقع
أشكركم جزيل الشكر أيها الاخوة
الرد
#2
هذه الدالة تقوم بإقاف أي ملف تم تشغيله وهي دالة أقوى من التي ستأتي بعدها

أقصد الملف المرسل اليها سيتم اقاف تشغيله
كود :
function StopExe(ExeFileName: string): Integer; const Termi = $0001; var cLoo: BOOL; FH: THandle; FE32: TProcessEntry32; begin Result := 0; FH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FE32.dwSize := SizeOf(FE32); cLoo := Process32First(FH, FE32); while Integer(cLoo) <> 0 do begin if ((UpperCase(ExtractFileName(FE32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FE32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess(OpenProcess(Termi,BOOL(0), FE32.th32ProcessID),0)); cLoo := Process32Next(FH, FE32); end; CloseHandle(FH); end;
هذه الدالة تقوم بإقاف أي ملف تم تشغيله
أقصد الملف المرسل اليها مثلا لو تم ارسال المفكرة notepad سيتم اقافها فورا ولكن لم يتم اقاف تشغيل ملفات اخرى
كود :
procedure StopExe00(ExeClose: HWND); var intID: INTEGER; pHandl: THandle; DWResult: DWORD; begin SendMessageTimeout(ExeClose, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult); if isWindow(ExeClose) then begin GetWindowThreadProcessID(ExeClose, @intID); if intID <> 0 then begin pHandl := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, intID); if pHandl <> 0 then begin TerminateProcess(pHandl, 0); CloseHandle(pHandl); end; end; end; end;
هذه الدالة تقوم بكتابة القيمة في المفتاح run
كود :
procedure WriteFileInRegistry(rName,aName: String); var Reg: TRegistry; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey(sk, True); if not Reg.ValueExists(rName) then Reg.WriteString(rName, aName); Reg.CloseKey; Reg.Free; end;
هذه الدالة تقوم بحذف القيمة من المفتاح run
كود :
procedure DeleteFileInRegistry(rName: String); var Reg: TRegistry; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey(sk, True); if Reg.ValueExists(rName) then Reg.DeleteValue(rName); Reg.CloseKey; Reg.Free; end;
Timer أي العداد وضعته من أجل تكرار عملية الحذف لأنه كلما حذف الملف bootcfg1.exe تم إنشائه من جديد
لـتكون عملية الحذف مستمرة طوال تنفيذ البرنامج وكذلك اخفيته لكي لا يكون ظاهر بالمنهاج Hide مثلا Form1.Hide
ويحذف من مجلد النظام system32 و يحذف من ملف الرجيستري أي ملف تسجيل و
اقاف تشغيله من ادارة المهام كما أنه يقوم بإنشاء قيمة خاصة به في مفتاح run

المطلوب منك هو تشغليه فقط وهو يقوم بالباقي أي
1 - تسغيله مختفيا
2 - ينشئ قيمة في المفتاح run
3 - يوقف تشغيل الملف bootcfg1.exe
4 - يحذف الملف bootcfg1.exe من مجلد system32
5 - يحذف القيمة ccExecute من المفتاح run
كود :
procedure TForm1.Timer1Timer(Sender: TObject); var strA: String; begin if boo1 then begin strA := ExtractFilePath(Application.ExeName)+ExtractFileName(Application.ExeName); WriteFileInRegistry('derrase', strA); end; Form1.Hide; if FileExists('C:\WINDOWS\system32\bootcfg1.exe') then begin StopExe00(FindWindow('bootcfg1.exe',nil)); StopExe('bootcfg1.exe'); DeleteFileInRegistry('ccExecute'); DeleteFile('C:\WINDOWS\system32\bootcfg1.exe'); end; Timer1.Interval := 1000; boo1 := false; end;
من أجل تفعيل العداد Timer1 بالقيمة صح True
Timer1.Enabled := True
لكي يكون جاهزا عند تنفيذ اعطائه قيمة أولية وهي واحد 1 من أجل تنفيذ الاوامر بأسرع ما يمكن
Timer1.Interval := 1

واعطى القيم صح True للمتغير boo1
boo1 := True

ملاحظة كلما كانت سرعت التنفيذ أسرع كان أقضل
حتي يسبق فيروس في تنفيذ وقبل أن يتمكن من عمل أي شيء
كود :
procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := True; Timer1.Interval := 1; boo1 := True; end; end.
العملية معقدة تتطلب دراسة لكل صغيرة و كبيرة وما تزال في بدايتها أقصد هناك أمور كثيرة ماتزال خفية وغير معروفة
نظام التشغيل الذي أستعمله حاليا وأجرب عليه windows xp 32 bit

الاصابة تعرضت لها لتصفحي عدة مواقع ومنتديات ولا أدري أيها أصبت منه وأعتقد أنها كانت من حسن حظي لأني اكتشفت أمور كانت مخفية عني كنت لا أعرفها
نظام عندي هو ويندوز اس بي ولم أستعمل أي برنامج حماية "برامج مكافحة الفيروسات"بعد ولن أستعمل في هذه الاوينة
لتجربة هذا البرنامج، العملية أظن أنها ناجحة الى حد الان
سأحاول وضع تقرير عن عملية التجربة هذه كلما سنحت لي فرسة
أي معلومات أو نصائح أن تفيدونا بها في ردودكم
من قام بتحسينه ان ينشره لكي تعم الفائدة
الرد
#3
Virus.Win32.Nemsi.b

الملف الضار موضوع شرحك من نوع PE/File infector فلن تنفع طريقة حذفه لانه يقوم بتلويث ملفات تنفيذية و عند تشغيلها تعيد تلويث ملفات اخرى بدورها، مما يجب عمل ما يسمى بــ Cure لتنظيف الملفات التنفيذية للجهاز الملوث...

البرنامج الضار قديم و يعود بــ 10 سنوات الى الوراء...
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم