حذف الملف 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 ضيف