انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: [آموزش] دی‌اسمبل کردن فایلهای لینوکسی فاقد سکشن  (دفعات بازدید: 320 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین B

  • Sr. Member
  • *
  • ارسال: 354
  • جنسیت : پسر
    • ایران ویج
برنامه‌های موجود در لینوکس نظیر objdump , readelf و .. توانایی کار با فایلهای اجرایی لینوکسی (ELF) که فاقد سکشن هستند رو ندارند؛ و برای اینکه بتونیم فایل اجراییمون رو دی اسمبل کنیم باید فایلمون رو به صورت یک فایل باینری به برنامه‌ها معرفی کنیم؛
 
 برای مثال:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=5150 -f elf  -o ./rt
 فایل خروجی بدون سکشن رو درست میکنه؛ که نه توسط objdump و نه توسط gdb‌ توانایی دی اسمبل شدن رو نداره
 
 و بعدش توسط objdump میتونیم به صورت ناقص دی‌اسمبلش کنیم:
objdump -b binary -m i386 -D ./rt مشکل دستور بالا اینه که هدر رو از فایل حذف نمیکنه - یعنی در واقع هدر فایل رو هم که دیتا هست دی‌اسمبل میکنه که خب معلومه که هیچ نتیجه مفیدی نداره
 
 راه حل:
 
 اسکریپت کوچیکی به زبان ruby‌ نوشتم که EP رو با توجه به Little endian یا Big Endian بودن فایل اجراییمون پیدا میکنه؛ و از نقطه شروع برنامه تا پایانش رو دامپ میکنه
 
 برای مثال :
 
./elfsl -f ./rt > RAW و به این شکل تمام کد رو به صورت باینری دامپ میکنه و در فایل ذخیره میکنیم و توسط objdump میتونیم دی‌اسمبل کنیم و یا اینکه به توسط ابزارهای موجود دیگه اونو نبدیل به فایل اجرایی سکشن داری کنیم و دیباگش کنیم و . . .
 
 در تصویر زیر فرقش رو میتونید ببینید؛ که در واقع بخاطر یک بایت (که هدر باعثش هست هست) چندین عبارتمون به صورت نا درست دی اسمبل شدن..
 
 
 
 
 
 در این اسکریپت میتونییم:
 * توسط پارمتر endian-- نوع L و با B رو که معرف endian برنامه هست به برنامه تفهیم کنیم - در صورت ست نکردن از فایلشمون تشخیص میده
 
 * توسط پارامتر E-‌ شروع EP‌ رو مشخص میکنیم - به صورت پیش فرض از فایل اجرایی میخونه
 
 * توسط پارمتر b-‌ شروع base رو مشخص کنیم - مقدار پیش فرض 0x08048000 هست
 
 * توسط l-‌ تعداد بایتی که میخواییم دامپ کنیم رو مشخص میکنیم - عبارت end یعنی تا آخر و همچنین میشه عباراتی شبیه end-2 رو هم بکار برد که یعنی تا دو بایت قبل از بایت آخر (یعنی دو بایت آخر رو دامپ نکن)
 
 * توسط s- میتونیم آدرس شروع برای دامپ رو مشخص کنیم که در صورت ست کردن دیگه از روش EP استفاده نمیشه و از این مقدار استفاده میکنیم
 
 * توسط offset-- هم میتونیم از مقدار شروع به سمت جلو یا عقب کم و یا اضافه کنیم؛ برای مثال با آفست 2-‌ یعنی دو بایت قبل‌تر از نقطه شروع رو دامپ کن و یا 2 offset-- یعنی از دو بایت بعد از نقطه شروع دامپ رو شروع کن

دریافت برنامه در گیت هاب
https://github.com/babyy/elfsl

پیش نیازها:
فقط ruby
   
« آخرین ویرایش: 11 آبان 1395، 05:24 ق‌ظ توسط B »