در قسمت قبل تاریخ مختصر و هیجانانگیز گیدرا رو باهم مرور کردیم. بعدش دیدیم که چطوری دانلود، نصب و از سورس کد کامپایلش کنیم و بهطور کلی باید حالا توی موقعیتی باشید که بتونید بهتنهایی گیدرا رو بررسی و آزمایش کنید! توی این قسمت بازهم بیشتر با گیدرا آشنا میشیم و اون رو باهم سفارشیسازی میکنیم.
در قسمتهای قبل، منابع و ابزارهای مهم، آشنایی اولیه و نکات مهم دررابطهبا این آموزشها معرفی شد. اگر اولینبار است که این مقاله را میبینید، برای استفاده هر چه بیشتر و بهتر از قسمت صفر شروع کنید!
پاسخ سؤالات قسمت قبل
اگه یادتون باشه، قرار بود آخر هر قسمت قبل سؤالاتی رو به عنوان تمرین مطرح کنم و شما جوابش رو جایی یادداشت کنید تا با جوابهای درستی که قسمت بعد قرار میدم مقایسشون کنید.
هیچکدام از فریمورکهای مهندسی معکوس کاملترین ابزار نیستن. هر فریمورک نقاط ضعف و قدرت خودشو داره.
بریم نقاط مثبت گیدرا رو یکبار دیگه باهم بررسی کنیم:
- متنباز و رایگان بودن (شامل دی کامپایلر هم میشه)
- پشتیبانی از معماریهای زیاد
- امکان بارگذاری تعداد زیادی فایل باینری توی یک پروژه
- امکان مهندسی معکوس گروهی
- پشتیبانی از فریم ورهای بزرگ (بیشتر از یک گیگابایت)
- داکیومنتیشن عالی به همراه مثال و آموزش
- کنترل نسخهٔ مناسب برای کنترل کار
حالا بریم سراغ نقاط ضعف گیدرا:
- به علت وابسته بودن به Jython باید پشتیبانی از اسکریپتهای پایتون 3 رو فراموش کنید و از پایتون 2 استفاده کنید.
- مسئلهٔ بالا شاید ساده باشه ولی بسیار بزرگه و اینکه هنوز رفع نشده و ربطی هم به توسعهدهندههای گیدرا نداره که رفعش کنن، باعث شده کسی در مورد باقی نقاط منفی گیدرا صحبت نکنه.
فصل 1 – آشنایی با گیدرا (ادامه)
در ادامه مرورگر کد گیدرا و نحوه سفارشیسازی اون رو با هم بررسی میکنیم.
بررسی CODEBROWSER گیدرا
مرورگر کد گیدرا، با تنظیمات پیشفرض خودش خیلی زیبا و کاربردی طراحی شده و مهندسی NSA رو بهوضوح میشه توش دید:
بریم ببینیم که بخشهای مختلف این مرورگر چی هستن و چه وظیفهای به عهده دارن:
- مثل همهٔ فریمورکهای مهندسی معکوس، وسط صفحه و با ابعاد خیلی بزرگ، نمایش دیس اسمبلی فایل رو داریم.
- از اونجایی که دیس اسمبلی خیلیخیلی به زبان ماشین نزدیکه (low-level)، گیدرا دیکامپایلر خودش رو برامون سمت راست دیس اسمبلی قرارداد. اگر کارایی که در قسمت قبل گفتیم رو دنبال کرده باشید، میبینید که تابع main برنامه توسط گیدرا شناسایی شده و پارامترها به طور خودکار تولید شدن. همینطور گیدرا بهتون اجازه میده که کلی بلا سر کد دی کامپایل شده بیارید. همینطور میتونید نمایش هگزادسیمال برنامه رو هم توی این بخش از صفحه ببینید. همچنین اگر چیزی رو تغییر بدید، هگزا دسیمال، دی کامپایل شده و اسمبلی برنامه بهصورت همزمان تغییر میکنن.
- درختهای برنامه که سمت چپ قرار دارن، کمک میکنن که به هر بخش از فایلها که نیاز دارید سریعاً سر بزنید.
- درختهای سمبلها زیربخش 3 قرار دارن: اینجا سمبلهای برنامه قرار دارن (اسم متغیرها، کلاسها و توابع و…) از اینجا میتونید به هرکدوم از سمبل هاتون سر بزنید.
- اگر میخواین با انواع دادهها سروکله بزنید هم مدیریت نوع داده اینجا قرار داره.
- اینجا نتایج اجرای اسکریپتهای مهندسی معکوستون رو میبینید. همچنین توی صفحهٔ bookmarks میتونید بوک مارک هاتون رو داکیومنت، مرتب و مدیریت کنید و به هر بخشی از حافظه که خواستین سر بزنید.
- نوارابزار دسترسی سریع
- مشخصکنندهٔ آدرس فعلی
- عملگر وابسته به آدرس فعلی
- خط مربوطه در دیس اسمبلی به آدرس فعلی
- نوارابزار اصلی
سفارشی سازی گیدرا
تا محیطی که ازش استفاده میکنیم رو تغییر ندیم، توسعهدهنده نشدیم! میتونیم توی منوی Window ابزاری که بهش نیاز داریم رو انتخاب کنیم تا به محیط گیدرا اضافه بشه:
ضمناً گیدرا خیلی کارکردهای جالب دیگه ای هم داره؛ برای مثال، توی نوارابزار بالای صفحهٔ دیس اسمبلی میتونید صفحهٔ دیس اسمبلر رو تغییر بدید و کلی کار مختلف انجام بدید:
مثلاً اگر روی گزینهای که توی تصویر بالا نشون دادیم کلیک کنید کلی تنظیمات رو برای دیس اسمبلر میبینید. یکی از ویژگیهای خیلی عالی گیدرا همینجا قرار داره. این ویژگی بهتون اجازه میده که بتونید یه چیزی به اسم PCode رو ببینید. پی کد یه نمایش سطح متوسط یا یه زبان سطح متوسطه که بهتون اجازه میده که بتونید ابزار مهندسی معکوس خودتون رو برای بررسی کد اسمبلی، با یه زبان واسط و یکم قابلفهمتر توسعه بدید. برای فعالسازی مطابق تصویر زیر عمل کنید:
وقتی که فعالش کردید، سریعاً متوجه میشید که PCode اصلا خوانا نیست ولی مطمئن باشید ترجیح میدید که اسکریپت های اسمبلیتون رو با PCode بنویسید به جای زبان اسمبلی. توی تصویر زیر خروجی دیس اسمبلر رو با PCode میبینید:
سؤالها
- چطوری میشه نمایش دیس اسمبلی رو تنظیم کرد که PCode فعال بشه؟
- تفاوت بین نمایش دیس اسمبلی و نمایش دی کامپایلر چیه؟
تاریخ انتشار قسمت بعدی:
1400/08/08
سپاس از شما
سلام.
ممنون از سری مطالب جذاب و تخصصیتون
pcode رو از کجا میتونیم یاد بگیریم ؟ و آیا یادگیری زبان اسمبلی قبل از اون کمک کننده (یا نیاز) هست یا نه؟
سلام. مطمئنا آشنایی با اسمبلی برای درک پی کد کمک کننده هست اما ضروری نیست. ابزار زیادی PCode رو تولید میکنن و بعضیاشون خوانا تر از بقیه هستن. مثلا IDA یک افزونه داره که کد اسمبلی رو برای مثال به این صورت در میاره:
add a b
تبدیل میشه به a+b به عنوان PCode که خوانا تره و واقعا درک خاصی نمیخواد.
برای درک بهتر PCode گیدرا هم داکیومنتهای توسعه ی سطح بالا و سطح بالای نرم افزار توی مسیر ./docs/GhidraClass کامل موضوع رو پوشش دادن.(هرچند بازم باید تمرین کنید تا دقیقا متوجه بشید.)
سیسوگ جان
ادامه این مقاله آموزشی منتشر نمیشه ؟
سلام مجموعه فعال کایوش قسمت بعدی را اماده کردند و بزودی منتشر میشه
پوزش میطلبیم برای تاخیر پیش آمده
بسیار عالی?