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

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

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

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

  1.  اسکریپت‌های گیدرا به این علت کاربردی هستند که می‌توانند وظایف مهندسی معکوس را به‌صورت اتوماتیک انجام دهند. بعضی از این وظایف عبارت‌اند از: جستجو برای رشته‌ها و الگوهای تکراری کد، رفع ابهام خودکار کد و افزودن کامنت ها و توضیحات برای بهبود دیس اسمبلی
  2. اسکریپت‌ها بر اساس کارکرد آنها مرتب شده‌اند. در ظاهر اسکریپت‌ها با توجه به محل آنها روی سیستم شما مرتب شده‌اند اما در حقیقت در ابتدای هر اسکریپت  در بخش ‎@category برچسب مربوط به کارکرد هر اسکریپت تعیین می‌شود.

 

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

 

فصل 2- اتوماسیون مهندسی معکوس با گیدرا (ادامه)

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

 

کلاس اسکریپت

برای توسعه‌ی یک اسکریپت جدید در گیدرا ابتدا روی Create New Script در منوی Script Manager کلیک کنید. بعد از آن باید مشخص کنید که از چه زبانی استفاده خواهید کرد:

script type selector

ابتدا ساختار اسکریپت‌ها به زبان جاوا را بررسی می‌کنیم:

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

اینکه چه چیزی را باید در ادامه‌ی کامنت ها بنویسید واضح است و فقط ‎@menupath را توضیح می‌دهیم. این کامنت به شما این امکان را می‌دهد تا بتوانید اسکریپت‌های خود را در منوی گیدرا قرار دهید:

دسته‌بندی اسکریپت در ‎@category انجام شده است اما با استفاده از ‎@menupath می‌توان به شکل دیگری اسکریپت را انتخاب کرد. مثلاً اگر بنویسیم:

دقت کنید که مسیر با کاراکتر. مشخص می‌شود؛ می‌توانید از منوی گیدرا اسکریپت را انتخاب کنید:

بخش بعدی یک اسکپریت جاوا import ها هستند. ترجیحاً به این بخش دست نزنید و اولین ماژول اضافه شده به برنامه به هیچ وجه نباید دست‌کاری شود. تمام اسکریپت‌های گیدرا باید GhidraScript و متد ‎run()‎ را به ارث ببرند:

تمام ابزاری که به برنامه import شده‌اند دارای داکیومنتیشن کامل و مناسبی هستند که در JAVADOC گیدرا قرار دارد و برای توسعه‌ی اسکریپت باید به آن رجوع کنید.

 

داکیومنتیشن API های گیدرا برای JAVADOC

با کلیک بر روی منوی Help و انتخاب Ghida API Help برای بار اول، داکیومنتیشن API های گیدرا بصورت خودکار ایجاد می شود. پس از آن میتوانید برای ابزاری که به برنامه import شده داکیومنتیشن ها را بخوانید.

در آخر بخش بدنه ی اسکریپت وجود دارد که از GhidraScript متد run()‎ را وارد برنامه ی خود می کنید. در ادامه ی این آموزش با بخش های مختلف ابزار import شده بیشتر کار خواهیم کرد:

اگر می‌خواهید اسکریپت‌های خود را به زبان پایتون بنویسید هم API دقیقاً مشابه زبان جاواست اما اسکریپت دو بخشی است و شامل یک header که همان کامنت ها هستند و بدنه اسکریپت که کد شما را در خود جای می‌دهد، می‌شود:

در اینجا به این علت هیچ چیزی را به برنامه import نمی‌کنیم که پایتون مستقیماً از API جاوا بهره می‌برد و این اتفاق به علت اجرا شدن برنامه‌ی پایتون در بستر Jython تنظیم شده‌ی گیدرا رخ می‌دهد.

از آنجایی که داکیومنتیشن مذکور ممکن است برای توسعه دهندگان پایتون ناخوانا یا دشوار باشد می‌توانید از منوی Window و گزینه‌ی Python مفسر پایتون را فعال کنید و از گزینه‌ی کامل کردن خودکار بهره ببرید (با کلید TAB) و یا به روش مرسوم دیگری داکیومنیشن را ببینید.

اگر با زبان پایتون آشنا باشید میدانید که استفاده از تابع help()‎ در مفسر می‌توانید توضیحات و داکیومنتیشن دستورات مختلف را بخوانید. به همین علت استفاده از حداقل 2 مانیتور و باز نگه‌داشتن مفسر پایتون برای نوشتن اسکریپت‌های پایتون در گیدرا بسیار توصیه می‌شود.

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

 

توسعه ی اسکریپت

برنامه‌ای که در این قسمت توسعه می‌دهیم تمام بایت‌های برنامه را به دستور بدون عملیات (NOP) برای پردازنده تبدیل می‌کند. ابتدا برنامه را به زبان جاوا می‌نویسیم. توجه کنید که به بخش وسط برنامه دست نمی‌زنیم و تنها بخش کامنت ها و بدنه برای ما مهم است. می‌توانید برنامه را از اینجا دریافت کنید.

در قسمت ‎@keybinding تنظیم می‌کنیم که برنامه با فشردن کلیدهای Ctrl +Alt+ Shift + N اجرا شود.

در ادامه به import ها دست نمی‌زنیم و بدنه‌ی تابع را می‌نویسیم:

ابتدا باید آدرس اشاره‌گر فعلی گیدرا را استخراج کنیم (خط 03) در این آدرس دستوری تعریف نشده است (خط 06 تا 08)، بایت‌ها را با opcode مورد نظرمان (دستور NOP) که مقدار 144 دارد (0x90) جایگزین می‌کنیم خط 09 تا 11) و دوباره بایت‌ها را دیس اسمبل می‌کنیم خط 12). داکیومنت های دستورات استفاده شده را بررسی کنید تا عملیات انجام شده را بهتر بفهمید. کد پایتون برنامه‌ی بالا هم به شکل زیر است:

 

خلاصه

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

 

سؤال ها

  1. چرا تفاوتی بین API های اسکریپت نویسی پایتون و جاوا وجود ندارد؟

0 نفر

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

توجه

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

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

دیدگاه ها

2 دیدگاه

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

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

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

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان 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 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

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

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

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

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

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

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

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

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

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

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