مهندسی معکوس: لبهٔ تکنولوژی با گیدرا (Ghidra) – شماره 02

مهندسی معکوس: لبهٔ تکنولوژی با گیدرا (Ghidra) – شماره 02

مهندسی معکوس: لبهٔ تکنولوژی با گیدرا (Ghidra) – شماره 02
مهندسی معکوس: لبهٔ تکنولوژی با گیدرا (Ghidra) – شماره 02

در قسمت قبل تاریخ مختصر و هیجان‌انگیز گیدرا رو باهم مرور کردیم. بعدش دیدیم که چطوری دانلود، نصب و از سورس کد کامپایلش کنیم و به‌طور کلی باید حالا توی موقعیتی باشید که بتونید به‌تنهایی گیدرا رو بررسی و آزمایش کنید! توی این قسمت بازهم بیشتر با گیدرا آشنا میشیم و اون رو باهم سفارشی‌سازی می‌کنیم.

در قسمت‌های قبل، منابع و ابزارهای مهم، آشنایی اولیه و نکات مهم دررابطه‌با این آموزش‌ها معرفی شد. اگر اولین‌بار است که این مقاله را می‌بینید، برای استفاده هر چه بیشتر و بهتر از قسمت صفر شروع کنید!

 

پاسخ سؤالات قسمت قبل

اگه یادتون باشه، قرار بود آخر هر قسمت قبل سؤالاتی رو به عنوان تمرین مطرح کنم و شما جوابش رو جایی یادداشت کنید تا با جواب‌های درستی که قسمت بعد قرار میدم مقایسشون کنید.

هیچ‌کدام از فریم‌ورک‌های مهندسی معکوس کامل‌ترین ابزار نیستن. هر فریم‌ورک نقاط ضعف و قدرت خودشو داره.

بریم نقاط مثبت گیدرا رو یک‌بار دیگه باهم بررسی کنیم:

  • متن‌باز و رایگان بودن (شامل دی کامپایلر هم میشه)
  • پشتیبانی از معماری‌های زیاد
  • امکان بارگذاری تعداد زیادی فایل باینری توی یک پروژه
  • امکان مهندسی معکوس گروهی
  • پشتیبانی از فریم ورهای بزرگ (بیشتر از یک گیگابایت)
  • داکیومنتیشن عالی به همراه مثال و آموزش
  • کنترل نسخهٔ مناسب برای کنترل کار

حالا بریم سراغ نقاط ضعف گیدرا:

  • به علت وابسته بودن به Jython باید پشتیبانی از اسکریپت‌های پایتون 3 رو فراموش کنید و از پایتون 2 استفاده کنید.
  • مسئلهٔ بالا شاید ساده باشه ولی بسیار بزرگه و اینکه هنوز رفع نشده و ربطی هم به توسعه‌دهنده‌های گیدرا نداره که رفعش کنن، باعث شده کسی در مورد باقی نقاط منفی گیدرا صحبت نکنه.

 

فصل 1 – آشنایی با گیدرا (ادامه)

در ادامه مرورگر کد گیدرا و نحوه سفارشی‌سازی اون رو با هم بررسی می‌کنیم.

بررسی CODEBROWSER گیدرا

مرورگر کد گیدرا، با تنظیمات پیش‌فرض خودش خیلی زیبا و کاربردی طراحی شده و مهندسی NSA رو به‌وضوح میشه توش دید:

بریم ببینیم که بخش‌های مختلف این مرورگر چی هستن و چه وظیفه‌ای به عهده دارن:

  1. مثل همهٔ فریم‌ورک‌های مهندسی معکوس، وسط صفحه و با ابعاد خیلی بزرگ، نمایش دیس اسمبلی فایل رو داریم.
  2. از اونجایی که دیس اسمبلی خیلی‌خیلی به زبان ماشین نزدیکه (low-level)، گیدرا دیکامپایلر خودش رو برامون سمت راست دیس اسمبلی قرارداد. اگر کارایی که در قسمت قبل گفتیم رو دنبال کرده باشید، می‌بینید که تابع main برنامه توسط گیدرا شناسایی شده و پارامترها به طور خودکار تولید شدن. همین‌طور گیدرا بهتون اجازه میده که کلی بلا سر کد دی کامپایل شده بیارید. همین‌طور میتونید نمایش هگزادسیمال برنامه رو هم توی این بخش از صفحه ببینید. همچنین اگر چیزی رو تغییر بدید، هگزا دسیمال، دی کامپایل شده و اسمبلی برنامه به‌صورت هم‌زمان تغییر میکنن.
  3. درخت‌های برنامه که سمت چپ قرار دارن، کمک میکنن که به هر بخش از فایل‌ها که نیاز دارید سریعاً سر بزنید.
  4. درخت‌های سمبل‌ها زیربخش 3 قرار دارن: اینجا سمبل‌های برنامه قرار دارن (اسم متغیرها، کلاس‌ها و توابع و…) از اینجا میتونید به هرکدوم از سمبل هاتون سر بزنید.
  5. اگر میخواین با انواع داده‌ها سروکله بزنید هم مدیریت نوع داده اینجا قرار داره.
  6. اینجا نتایج اجرای اسکریپت‌های مهندسی معکوستون رو می‌بینید. همچنین توی صفحهٔ bookmarks میتونید بوک مارک هاتون رو داکیومنت، مرتب و مدیریت کنید و به هر بخشی از حافظه که خواستین سر بزنید.
  7. نوارابزار دسترسی سریع
  8. مشخص‌کنندهٔ آدرس فعلی
  9. عملگر وابسته به آدرس فعلی
  10. خط مربوطه در دیس اسمبلی به آدرس فعلی
  11. نوارابزار اصلی

 

سفارشی سازی گیدرا

تا محیطی که ازش استفاده می‌کنیم رو تغییر ندیم، توسعه‌دهنده نشدیم! میتونیم توی منوی Window ابزاری که بهش نیاز داریم رو انتخاب کنیم تا به محیط گیدرا اضافه بشه:

سفارشی سازی گیدرا

ضمناً گیدرا خیلی کارکردهای جالب دیگه ای هم داره؛ برای مثال، توی نوارابزار بالای صفحهٔ دیس اسمبلی میتونید صفحهٔ دیس اسمبلر رو تغییر بدید و کلی کار مختلف انجام بدید:

دیس اسمبلر گیدرا

مثلاً اگر روی گزینه‌ای که توی تصویر بالا نشون دادیم کلیک کنید کلی تنظیمات رو برای دیس اسمبلر می‌بینید. یکی از ویژگی‌های خیلی عالی گیدرا همینجا قرار داره. این ویژگی بهتون اجازه میده که بتونید یه چیزی به اسم PCode رو ببینید. پی کد یه نمایش سطح متوسط یا یه زبان سطح متوسطه که بهتون اجازه میده که بتونید ابزار مهندسی معکوس خودتون رو برای بررسی کد اسمبلی، با یه زبان واسط و یکم قابل‌فهم‌تر توسعه بدید. برای فعال‌سازی مطابق تصویر زیر عمل کنید:

تنظیمات دیس اسمبلر

 

وقتی که فعالش کردید، سریعاً متوجه میشید که PCode اصلا خوانا نیست ولی مطمئن باشید ترجیح میدید که اسکریپت های اسمبلیتون رو با PCode بنویسید به جای زبان اسمبلی. توی تصویر زیر خروجی دیس اسمبلر رو با PCode میبینید:

خروجی دیس اسمبلر با PCode

 

سؤال‌ها

  • چطوری میشه نمایش دیس اسمبلی رو تنظیم کرد که PCode فعال بشه؟
  • تفاوت بین نمایش دیس اسمبلی و نمایش دی کامپایلر چیه؟

 

تاریخ انتشار قسمت بعدی:

1400/08/08

0 نفر

پــــســنــدیـده انـد

توجه

کایوش آکادمی
کایوش آکادمی

صفحه ی سیسوگ آکادمی برنامه نویسی کایوش: در سیسوگ مطالب منحصر بفرد آموزشی را به صورت رایگان با شما به اشتراک میگذاریم.

دیدگاه ها

7 دیدگاه

  • مهدی
    ۲۵ آذر ۱۴۰۰

    سپاس از شما

  • Mahdi.h  
    Mahdi.h  
    ۲۰ آذر ۱۴۰۰

    سلام.
    ممنون از سری مطالب جذاب و تخصصیتون
    pcode رو از کجا میتونیم یاد بگیریم ؟ و آیا یادگیری زبان اسمبلی قبل از اون کمک کننده (یا نیاز) هست یا نه؟

    • کایوش آکادمی
      کایوش آکادمی
      ۲۰ آذر ۱۴۰۰

      سلام. مطمئنا آشنایی با اسمبلی برای درک پی کد کمک کننده هست اما ضروری نیست. ابزار زیادی PCode رو تولید میکنن و بعضیاشون خوانا تر از بقیه هستن. مثلا IDA یک افزونه داره که کد اسمبلی رو برای مثال به این صورت در میاره:

      add a b
      تبدیل میشه به a+b به عنوان PCode که خوانا تره و واقعا درک خاصی نمیخواد.
      برای درک بهتر PCode گیدرا هم داکیومنتهای توسعه ی سطح بالا و سطح بالای نرم افزار توی مسیر ./docs/GhidraClass کامل موضوع رو پوشش دادن.(هرچند بازم باید تمرین کنید تا دقیقا متوجه بشید.)

  • علی
    ۲۷ آبان ۱۴۰۰

    سیسوگ جان

    ادامه این مقاله آموزشی منتشر نمیشه ؟

    • Sisoog Os
      Sisoog Os
      ۲۷ آبان ۱۴۰۰

      سلام مجموعه فعال کایوش قسمت بعدی را اماده کردند و بزودی منتشر میشه

    • کایوش آکادمی
      کایوش آکادمی
      ۲۸ آبان ۱۴۰۰

      پوزش میطلبیم برای تاخیر پیش آمده

  • حسین
    ۳ آبان ۱۴۰۰

    بسیار عالی?

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک