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

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

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #1
؟ پکر
سلام

چطور میشه پکر نوشت ؟؟
روشهای مختلفی داره ؟؟

منبع یا سایتی هم اگه شد ممنون میشم.

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

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

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #2
RE: ؟ پکر
نوشتن پکر ها بحث مفصلی داره به صورت ساده پکر ها فایلهای اجرایی رو از حالت طبیعی خارج میکنن تا به کد باینری اون نشه دسترسی داشت ساده ترین روش کد کردن code section هست و قرار دادن ادرس شروع و طول code section به decoder با اجرای برنامه decoder کد برنامه رو به حالت اولیه بر میگردونه و برنامه اجرا میشه و از روشهای مختلفی استفاده میکنن مثلا بعضی ها code section رو کد میکنن بعضی ها IAT رو کد یا دستکاری میکنن بعضی ها جای Section ها رو تغییر میدن و البته این روشها به تنهایی کارساز نیست بلکه با ترکیب این روشها به علاوه تکنیکهای anti dumping و anti debuger و anti trace استفاده میشه
۲۶-اردیبهشت-۱۳۸۸, ۲۲:۵۶:۵۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : sav68, babyy, alaska, sharin
babyy آفلاین
بازنشسته
*****

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

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #3
RE: ؟ پکر
سلام

باید چه مهارتهایی کسب کرد تا بشه یک پکر نوشت ؟؟
دقیقا چه اطلاعاتی نیاز مند هستش ؟؟

و اینکه باید از کجا شروع کنم ؟؟ (چه مراحلی داره)

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

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

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #4
RE: ؟ پکر
اشنایی کامل با ساختار فایلهای pe اشنایی با شیوه اجرای برنامه ها توسط ویندوز اشنایی با الگورتمهای coding و encryptiong وکمی کرک
(چند نمونه سورس پکر ساده رو بگیرین و روش کار کنین)

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


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;

برای استفاده ازش هم به صورت زیر خواهد بود

کد:
var
  MyStream: TMemoryStream;

begin
   MyStream := TMemoryStream.Create;
  try
    MyStream.LoadFromFile('Pro.exe');
    //MyStream.LoadFromStream(yourstream);
    CreateProcessEx(MyStream.Memory);
  finally
    MyStream.Free;
  end;
end;
این یه نمونه ساده هست که ادرس یک فایل exe رو میدین و این برنامه اونو تو حافظه load میکنه حالا شما میتونین این فایل رو به هر صورت که دوست دارین با یکی از الگوریتم های کد یا encrypt کد کرده در یک stub ذخیره کنین و موقع اجرا با چک کردن مسایل امنیتی برنامه رو از حالت کد خارج و در حافظه اجرا کنید
۲۷-اردیبهشت-۱۳۸۸, ۱۰:۱۲:۲۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, sav68, sharin
babyy آفلاین
بازنشسته
*****

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

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #5
RE: ؟ پکر
سلام

نقل قول: اشنایی با الگورتمهای coding و encryptiong
منبعی ندارین که این روشها رو توضیح بده ؟؟

یه سوال دیگه هم دارم ، بهترین زبان برای اینکار چه زبونیه ؟؟ (هم از نظر شما هم از نظر احاد مردم Biggrin )

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

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

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #6
RE: ؟ پکر
احاد مردم که چه عرض کنم
ولی معمولا زبانهایی مثل asemble و ++c در اولویت هستن و بعد از اون زبانهای غیر net.
۲۸-اردیبهشت-۱۳۸۸, ۲۳:۱۵:۰۴
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, sav68, sharin
babyy آفلاین
بازنشسته
*****

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

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #7
RE: ؟ پکر
(۲۸-اردیبهشت-۱۳۸۸, ۲۳:۱۵:۰۴)lord_viper نوشته است: ولی معمولا زبانهایی مثل asemble و ++c در اولویت هستن و بعد از اون زبانهای غیر net.

فکر کنم یادگیری asemble واجب شد Tongue


نقل قول: منبعی ندارین که این روشها رو توضیح بده ؟؟
در این موردم فکر کنم احترامم رو نگه داشتین نگفتین گوگل سرچ کن Biggrin

ممنون که جواب دادین ، سوال داشتم همینجا میپرسم.
۲۹-اردیبهشت-۱۳۸۸, ۰۰:۵۲:۰۴
وب سایت ارسال‌ها
پاسخ


پرش به انجمن:


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

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