شرکت Hex-Rays که ابزار مهندسی معکوس IDA رو توسعه میده، هر ساله مسابقه ای برای توسعه دهندگان پلاگین، برای این ابزار برگزار میکنه. این مسابقات در سال 2024 هم برگزار و نتایج اون اخیرا منتشر شده که در این پست بررسیشون میکنیم.
در مسابقات امسال 20 پلاگین برای داوری ارسال شده بود:
- aiDAPal
- Assemport
- Community_base
- Delphi Helper
- Graffiti
- hexhinlay
- hrtng
- IDA-Notepad-Plus
- idalib Rust bindings
- IDAscope
- IDAxLM
- instrlen
- LabSync
- Mnemocrypt
- Navcolor
- RevEng.AI
- Shannon
- Unknown Cyber
- Xrefer
- YaraVM
از این 20 مورد، پلاگین های زیر مقام اول تا سوم رو به خودشون اختصاص دادن:
- مقام اول: hrtng
- مقام دوم :aiDAPal
- مقام سوم: idalib Rust bindings
در ادامه نگاهی کوتاه به عملکرد این 20 پلاگین انداختیم تا در صورتیکه موردی براتون کاربردی بود، بتونید ازش استفاده کنید. پلاگین ها براساس حروف الفبا بررسی شدن.
پلاگین aiDAPal :
اگه مخاطب سایت ما باشید، قطعا با این پلاگین آشنا هستید، چون قبلا براش یک ویدیو ساختیم و در اون ویدیو پلاگین رو معرفی، نصب و استفاده کردیم.
این پلاگین برای IDA Pro و توسط Chris Bellows توسعه داده شده و کاری که انجام میده این هستش که یک مدل هوش مصنوعی (LLM) رو بصورت لوکال روی سیستم شما بالا میاره که در آنالیز شبه کدهای تولید شده در IDA میتونه کمک کنه. کمکی هم که میکنه این هستش که یک توضیحی در خصوص عملکرد این شبه کدها میده و میتونه متغیرهارو تغییر نام بده تا فرایند مهندسی معکوس رو ساده تر کنه. مثلا شما یک تابع رو بهش میدید بصورت شبه کد، و این پلاگین میگه که این تابع چیکار میکنه. همچنین متغیرها رو هم براساس کاربردی که دارن تغییر نام میده تا درکشون راحت باشه.
پلاگین Assemport :
این پلاگین توسط Adrian Preuss و در پایتون توسعه داده شده. کاری که انجام میده این هستش که هر تابع رو بصورت جداگانه در یک فایل اسمبلی میریزه. بنابراین شما میتونید این فایلهای اسمبلی رو بصورت خودکار آنالیز کنید، یا از طریق مدلهای هوش مصنوعی فرایند آنالیز رو جلو ببرید. در کل فرایند مهندسی معکوس رو میتونه ساده تر کنه.
برای IDA Pro 9.0 توسعه داده شده. نحوه استفاده هم به این صورت هستش که پلاگین رو دانلود و از حالت فشرده خارج کنید و به مسیر پلاگین های IDA انتقالش بدید. احتمالا یک همچین مسیری:
1 |
C:\Program Files\IDA Professional 9.0\plugins |
حالا یک پروژه رو داخل IDA باز کنید و کلید F12 رو بزنید. فرایند استخراج شروع میشه و توابع بصورت اسمبلی استخراج میشن. برای نمونه، من فایل جلسه مربوط به قراردادهای فراخوانی از دوره ی رایگان مهندسی معکوس رو دادم به برنامه و خروجی زیر رو گرفتم:
فرایند استخراج تموم بشه، میتونیم فایلهای اسمبلی استخراج شده رو مشاهده کنیم. این فایلها در یک فولدری بنام Assemport در کنار فایل اجرایی قرار میگیرن.
نمونه یکی از فایلهای اسمبلی که مربوط به تابع Main برنامه هستش:
پلاگین Community_base :
این پلاگین توسط Jimmy Hermansson و در پایتون توسعه داده شده.
فرض کنید اسکریپتی برای IDA توسط IDA Python API توسعه دادید. بعد از مدتی، IDA تغییراتی در APIهای خودش میده. بنابراین این اسکریپت شما دیگه کار نمیکنه و شما مجبور هستید، اسکریپت رو براساس APIهای جدید بازنویسی یا تغییر بدید. برای حل این مشکلات میتونید از این پلاگین استفاده کنید.
community_base رو بعنوان یک لایه میانی بین اسکریپتهای ایجاد شده توسط کاربر و IDA Python API در نظر بگیرید. اگه اسکریپتهای خودتون رو بر پایه این اسکریپت توسعه بدید، در صورتی که Hex-Rays تغییری در API خودش بده، بجای اینکه نیاز باشه همه اسکریپتهای موجود رو اصلاح کنید، community_base میتونه این اسکریپت رو بروزرسانی کنه و تمام اسکریپتهای کاربران (که به این اسکریپت وابسته هستن) دوباره کار خواهند کرد.
هدف اصلیش ساده سازی توسعه اسکریپتهای IDA و کاهش وابستگی مستقیم به API داخلی IDA هستش.
روی ویندوز 10 با IDA pro 9 و پایتون 3.12 و همچنین IDA pro 8.4 و پایتون 3.8 تست شده.
پلاگین Delphi Helper :
این پلاگین توسط Juraj Hornàk از ESET و در پایتون توسعه داده شده. کاری که این ابزار انجام میده این هستش که فرایند مهندسی معکوس باینری های x86/x86_64 توسعه داده شده در دلفی رو ساده تر میکنه.
پلاگین Graffiti :
این پلاگین توسط Yoav Sternberg توسعه داده شده و امکان ایجاد یک Call graph سفارشی رو برای شما فراهم میکنه. علاوه بر IDA از ادیتورهای مختلف مانند VSCode و PyCharm هم پشتیبانی میکنه.
پلاگین hexhinlay :
پلاگین توسط Milan Bohacek توسعه داده شده. کاری که در مجموع انجام میده این هستش که میاد Inlay Hints به خروجی شبه کدهای ما اضافه میکنه. Inlay Hints به معنی نمایش اطلاعات اضافی درون کد هستش، بدون اینکه ساختار کد رو تغییر بده. در این پلاگین، نام هر پارامتر قبل از مقدارش در فراخوانی توابع نمایش داده میشه. برای مثال:
1 2 3 4 5 |
// بدون پلاگین: printf("%d", 42); // با پلاگین: printf(format: "%d", value: 42); |
برای استفاده از پلاگین، اونو دانلود کرده و به فولدر پلاگین در IDA انتقالش بدید.
برای استفاده هم کار خاصی نمیخواد انجام بدید، موقع دیکامپایل در IDA خودش همه چیز اوکی میکنه. من روی یک تابع MessageBox تستش کردم، خروجی زیر داد:
پلاگین hrtng:
پلاگین توسط Sergey Belov از کسپرسکی توسعه داده شده. امکانات متنوعی داره از جمله: رمزگشایی، Deobfuscation، پچ کردن، تشخیص کدهای کتابخانه ای و تبدیل شبه کدها و … . بصورت کلی اگه در زمینه ی آنالیز بدافزار فعالیت دارید، این پلاگین میتونه خیلی کمک کننده باشه.
پلاگین IDA-Notepad-Plus :
این پلاگین توسط ddd0ng و در پایتون توسعه داده شده. معمولا موقع مهندسی معکوس، نیاز هستش تا مواردی که موقع آنالیز بهشون رسیدیم رو در جایی بنویسیم. این کار باعث میشه اگه در آینده دوباره به پروژه رجوع کنیم، اطلاعاتی در خصوص پروژه داشته باشیم، هم اینکه موقع تحلیل کدها، کمک میکنه تا چیزهایی که آنالیز کردیم رو جایی بنویسیم و راحتتر بتونیم ادامه کد رو آنالیز کنیم. (بافر مغزمون رو طولانی نکنیم، این بافرهارو داخل فایل ذخیره کنیم). برای این کار برخی روی کاغذ یادداشت برداری میکنن، برخی از ابزارهای ویرایش متن استفاده میکنن. خود IDA هم ابزاری برای یادداشت ها داره که برای دسترسی بهش از مسیر زیر میتونید استفاده کنید:
1 |
View > Open subview > Notepad |
با توجه به اینکه چیزی که IDA Pro در اختیارمون قرار میده، خیلی ساده و محدود هستش، میتونیم از پلاگین IDA-Notepad-plus استفاده کنیم. این پلاگین امکان ایجاد یادداشت های مختلف رو برای ما میده. مثلا میتونیم برای توابع، مواردی که در IDA هایلایتشون کردیم، یک یادداشت مجزا داشته باشیم. هر یادداشت داخل یک فایل ذخیره میشه و این فایلها بصورت مجزا در کنار IDB ذخیره میشن. همچنین این امکان رو دارید که یادداشتی رو انتخاب کنید و برید به اون تابع یا … .
برای نصبش باید فایل ida_notepad_plus.py رو به فولدر پلاگین های IDA اضافه کنید.
بعد از کپی، در منوی Edit و بخش Plugins، میتونید Doc viewer رو ببینید. از طریق شورتکات هم میتونید بازش کنید. Meta + Shift + [. کلید META روی کیبوردها بصورت یک لوزی تو پر هستش اگه این گزینه رو مثل من نداشتید میتونید از کلید Winkey یا Windows Key که علامت ویندوز داره استفاده کنید. اگه اذیت میشید میتونید از منوی Options و بخش Shortcuts، گزینه ی Edit/Plugins/Docs Viewer رو پیدا و کلید دلخواهتون رو تنظیم کنید.
در شکل زیر من اومدم دستور call رو هایلایت کردم و کلید [+win+shift رو زدم و اطلاعات رو وارد یادداشت کردم.
اگه روی یادداشت راست کلید کنید، گزینه AutoJump رو فعال کنید، اگه مثلا در شکل بالا روی آدرس کلید کنید، میتونید اونجا بپرید.
پلاگین idalib Rust bindings :
این پلاگین توسط Sam Thomas از BINARLY Labs و در Rust توسعه داده شده. این پروژه به کاربران IDA Pro 9.0 امکان میده که ابزارهای مستقل رو بر پایهی IDA SDK، با زبان Rust و به روشی بهینه بنویسن.
پلاگین IDAscope :
این پلاگین توسط Chris Anders توسعه داده شده. کاری که انجام میده این هستش که IDA Pro رو با ویرایشگر Neovim ادغام میکنه و به شما این امکان رو میده که توابع رو بصورت fuzzy search (مثلا اگه یک قسمت از تابع رو میدونید، براساس اون قسمت جستجو کنید) پیدا کنید و شبه کد یا اسمبلی اونارو بدون خروج از ویرایشگر مشاهده کنید.
یک ویژگی دیگه این ابزار این هستش که شبه کدها رو در قالب فایل c. استخراج میکنه. اینجوری میشه برخی توابع رو اجرا کرد تا عملکردشون رو راحت فهمید یا میشه اصلا فازشون کرد و … .
پلاگین IDAxLM :
این پلاگین توسط Sergejs Harlamovs توسعه داده شدن که سال پیش بدلیل ارسال پلاگین IDAClu مقام اول رو کسب کردن. این پلاگین از مدلهای هوش مصنوعی (LLMها) برای کمک به مهندسی معکوس استفاده میکنه. مدلهایی که پشتیبانی میکنه OpenAI, Mistral, Groq هستن. مثلا کارهایی که میتونید باهاش انجام بدید با استفاده از پرامپت نویسی میتونید در خصوص عملکرد کدها اطلاعاتی بدست بیارید، کد معادل در زبانی که شما بهتر درکش میکنید، مثلا پایتون، تولید کنید و … .
این پلاگین اینجور که در توضیحاتش اومده یکمی استفاده ازش پیچیده هستش.
پلاگین instrlen :
پلاگین توسط Milan Bohacek توسعه داده شده. به کمک این پلاگین میتونید طول یک دستورالعمل رو به اندازه ای که میخوایید تغییر بدید. معمولا در باینری هایی که کدهاشون مبهم شدن و به وسط دستورالعملها میپرن میتونه مفید باشه.
نکته ای که هست برای هر دستور، تنظیمات رو باید بصورت دستی اعمال کنید.
پلاگین LabSync :
این پلاگین توسط Tomer Harpaz از Cellebrite Labs توسعه داده شده. امکان همگام سازی IDBها بین کاربران مختلفی که روی یک باینری کار میکنن رو فراهم میکنه. این افزونه مواردی مانند نام توابع، پروتوتایپها و انواع محلی رو بین IDBهای کاربران همگام سازی میکنه. از یک منطق ساده و مخازن مبتنی بر Git استفاده میکنه که باعث ایجاد سیستمی قوی و کم هزینه میشه. این ابزار بهرهوری رو افزایش داده و اطمینان حاصل میکنه که همهی اعضای تیم با جدیدترین اطلاعات کار میکنن.
پلاگین Mnemocrypt :
این پلاگین توسط Simone Aonzo توسعه داده شده. از الگوریتم یادگیری ماشین Random Forest برای شناسایی توابع رمزنگاری در فایلهای اجرایی استفاده میکنه و تنها نسخه ی x86 رو پوشش میده. قابلیت تحلیل سریع رو داره و از یک سیستم رنگ بندی برای نمایش نتایج استفاده میکنه. این ابزار برای پردازش فایلهای بزرگ بهینهسازی شده و عملکرد خوبی داره. با توجه به اینکه فقط فایلهای 32 بیتی x86 رو پوشش میده، بیشتر یک ابزار تحقیقاتی هستش تا یک راهحل عملی برای کاربردهای گسترده.
پلاگین Navcolor:
این پلاگین توسط Milan Bohacek توسعه داده شده. افزونهی Navcolor ابزاری برای IDA Pro هستش که قابلیتهای navigation band رو با نمایش رنگ توابع بهبود میده. این ویژگی به شما امکان میده توابع رو براحتی شناسایی کرده و در بین کدهای Disassembly جابهجا بشید.
IDA امکان تنظیم یک رنگ خاص برای هر تابع رو فراهم میکنه. این رنگ بندی هم در بخش Disassembly و هم در لیست توابع نمایش داده میشه.
Navigation Band در IDA Pro یک ابزار بصری است که به تحلیلگران کمک میکنه تا به سرعت در میان کدهای Disassembly و Pseudocode جابهجا بشن. این نوار معمولاً در بالای پنجره ی IDA نمایش داده میشه و یک نمای کلی از کل فایل باینری رو ارائه میده.
به کمک این پلاگین میتونید توابعی که براشون رنگی مشخص کردید، رنگشون رو روی این نوار هم اعمال کنید.
پلاگین RevEng.AI:
این پلاگین توسط David Rushmer et al توسعه داده شده و امکان استفاده از پلتفرم RevEng.AI رو در IDApro میده. این پلتفرم امکان آنالیز باینری با استفاده از هوش مصنوعی رو میده. مثلا کارهایی که میتونید باهاش انجام بدید:
- شناسایی پکرها
- تخمن مخرب بودن یک فایل براساس داده های هوش مصنوعی
- امکان شناسایی آسیب پذیری ها براساس تحلیل استاتیک و یادگیری ماشین
- توابع ناشناخته رو با نمونه های قبلی بررسی میکنه و نامشون رو براساس شباهتشون مشخص میکنه.
- توابع رو تحلیل و توضیحات مختصری در مورشون میده.
پلاگین Shannon :
این پلاگین توسط Alexander Pick توسعه داده شده. افزونه Shannon یک لودر مخصوص IDA Pro است که برای پردازش و بارگذاری ایمیجهای Baseband از نوع Shannon طراحی شده. این ایمیجها معمولاً در مودمهای سامسونگ و سایر سختافزارهای ارتباطی استفاده میشن.
فرایند نصب ساده داره و به سرعت راه اندازی میشه. هنگام بارگذاری ایمیج، بخشهای حافظه مناسب رو ایجاد میکنه. برخی از ساختارهای شناختهشده در این نوع ایمیجهارو پردازش میکنه تا تحلیل راحتتر بشه. در برخی نسخههای این نوع ایمیجها، میتونه Task Functionهای سیستمعامل RTOS رو هم تشخیص بده. با خودکارسازی برخی مراحل، زمان موردنیاز برای تحلیل این نوع ایمیجها رو کاهش میده.
پلاگین Unknown Cyber :
این پلاگین توسط Arun Lakhotia توسعه داده شده. افزونه Unknown Cyber به کاربران IDA Pro اجازه میده تا از API مبتنی بر فضای ابری شرکت Unknown-Cyber-Inc استفاده کنن. این ابزار تمرکز ویژهای روی مقایسهی شباهت کدها و تولید قوانین YARA داره.
کاربران میتونن:
- فایلهای باینری رو آپلود کرده و توابع مشابه رو جستجو کنن.
- امکان مشاهدهی نتایج تحلیل رویهها و یافتن توابع مشابه در باینریهای دیگر رو دارن.
- اطلاعات حاصل از تحلیل، در یک رابط کاربری ساده و قابلفهم نمایش داده میشه.
- فرآیند نصب ساده است و مستندات روشنی برای استفاده از افزونه ارائه شده.
پلاگین Xrefer :
این پلاگین توسط Muhammad Umair از Mandiant توسعه داده شده. پلاگین میاد مسیر اجرا رو از Entry Point بررسی میکنه و توابع رو براساس الگوهای خاصی خوشه بندی و برچسب گذاری میکنه. این کار باعث سریعتر شدن آنالیز استاتیک میشه. امکان وارد کردن داده های بیرونی (API traces, capa results, user-defined xrefs) رو برای بهتر کردن نتایج داره. با مدل هوش مصنوعی Gemini گوگل هم ادغام شده.
بصورت پیشفرض، افزونه 10,000 زنجیرهی فراخوانی (Call Chains) رو آنالیز میکنه. در آزمایشها، تحلیل یک فایل 1.3 مگابایتی حدود 1 دقیقه و یک فایل 12 مگابایتی حدود 19 دقیقه طول کشیده. برای نصب نیاز به JRE دارید.
در شکل زیر اومده خوشه بندی کرده مثلا براساس رجیستری، پروسس و …
پلاگین YaraVM :
این پلاگین توسط Milan Bohacek توسعه داده شده. افزونه YaraVM شامل یک ماژول پردازنده و یک لودر برای IDA Pro است که به کاربران اجازه میده قوانین Yara کامپایلشده رو بارگذاری و تحلیل کنن. متادیتای قوانین Yara پردازش و در قالبی خواناتر ارائه میشه. افزونه توابع رو شناسایی و نامهای اونارو بطور خودکار تغییر میده تا خوانایی کد بهتر بشه. این پلاگین یک نمونه مفید از دیس اسمبل کردن ماشین مجازی بایتکد Yara محسوب میشه.