مهندسی معکوس عملی: راهنمای شروع عملی
اصول کار مهندسی معکوس باینری را یاد بگیرید، از تحلیل ایستا تا دیباگینگ پویا، با نکات ابزارهای عملی.
مهندسی معکوس فرآیند تجزیه نرمافزار کامپایلشده برای درک منطق، رفتار و نیت آن بدون دسترسی به کد منبع است. چه بخشهای بدافزار را تحلیل کنید، چه باینریهای بدون دسترسی را بررسی کنید، یا چه چالشهای CTF را مطالعه کنید، همان گردش کار اصلی اعمال میشود: اطلاعات را بهطور ایستا جمعآوری کنید، سپس فرضیات خود را بهطور پویا تأیید کنید. این راهنما از آن گردش کار با مراحل عملی و ابزار-آزاد میگذرد که میتوانید بلافاصله اعمال کنید.
تنظیم محیط تحلیل ایمن
پیش از هرگونه تماس با باینری نامشناس، فضای کار خود را جداسازی کنید. از یک ماشین مجازی اختصاصی بدون دسترسی شبکه به میزبان خود استفاده کنید، پیش از تحلیل یک snapshot بگیرید، و پوشههای مشترک و همگامسازی کلیپبورد را غیرفعال کنید. ابزارهایی مانند Linux VM با radare2، Ghidra، gdb و objdump بیشتر نیازهای ایستا و پویا را پوشش میدهند، در حالی که Windows VM با x64dbg و Process Monitor برای فایلهای PE ضروری است. هرگز نمونههای مریب را بر روی ماشین اصلی تحلیل نکنید، و همیشه بین جلسات snapshot را بازگردانید تا از آلودگی متقاطع جلوگیری کنید.
تحلیل ایستا: خواندن بدون اجرا
با شناسایی نوع فایل و معماری با استفاده از file و readelf -h (Linux) یا یک بازرس سرپایگی PE (Windows) شروع کنید. با تحلیل آنتروپی برای فشردهسازی یا ابهامزدایی بررسی کنید — ابزارهایی مانند Detect It Easy بخشهای آنتروپی مریبطور بلند را پرچمگذاری میکنند که نشاندهنده فشردهسازی یا رمزگذاری هستند.
سپس باینری را در یک disassembler مانند Ghidra یا IDA Free بارگذاری کنید. بر موارد زیر تمرکز کنید:
- Import و export — فراخوانی API مانند
CreateRemoteThreadیاVirtualAllocExنشاندهنده injection فرآیند هستند؛WSAStartupشبکه را نشان میدهد. - Strings —
strings -n 8 binaryرا اجرا کنید تا URL، مسیرهای فایل یا پیامهای دیباگ کدگذاریشده را سطحدهی کنید که عملکرد را آشکار کند. - گرافیهای جریان کنترل — نمای decompiler Ghidra assembly خام را به pseudo-C قابلخواندگی تبدیل میکند، درک حلقهها و شرطها را بهشدت سریع میکند.
نام تابع را وقتی درک میکنید حاشیهنویسی کنید. تغییر نام sub_401020 به decrypt_config بلافاصله بقیه تحلیل شما را دنبال کردن آسانتر میکند.
تحلیل پویا: تماشای اجرا
تحلیل ایستا تنها تا حدودی کار میکند، بخاصه برای کد ابهامزدایی یا فشردهشده. باینری را در debugger بارگذاری کنید و breakpoint را در فراخوانی API مریب شناساییشده قبلی تنظیم کنید. در x64dbg، شکستن بر VirtualAlloc یا WriteProcessMemory اغلب routineهای unpacking را آشکار میکند زیرا کد رمزگشاییشده را در حافظه درست پیش از اجرا مینویسند.
برای ثبت فایل، registry و فعالیت شبکه در real time از Process Monitor یا strace/ltrace بر روی Linux استفاده کنید. این نمای خارجی نمای داخلی از debugger را تکمیل میکند و اغلب رفتاری را سطحدهی میکند که شناسایی آن در disassembly سخت است، مانند ایجاد فایل موقت یا lookupهای DNS.
برای باینریهای قابل شبکه، آنها را در کنار Wireshark یا یک شبیهساز اینترنت جعلی مانند INetSim اجرا کنید تا ترافیک command-and-control را مشاهده کنید بدون اینکه نمونه واقعاً به اینترنت برسد.
مقابله با ترفندهای ضدتحلیل
بسیاری از باینریها — بخاصه بدافزار — بررسیهایی شامل هستند که برای تشخیص debugger، ماشین مجازی یا sandbox طراحیشدهاند. تکنیکهای رایج شامل فراخوانی IsDebuggerPresent، بررسی کلیدهای registry مخصوص VM یا اندازهگیری timing اجرا برای تشخیص single-stepping هستند. وقتی این بررسیها را در تحلیل ایستا مشاهده کنید، میتوانید jump شرطی را در debugger patch کنید تا
با کمک هوش مصنوعی نوشتهشده، بازبینی و منتشرشده توسط Michal Pilch (CISSP)، Korra Studio.
این یکی از یادداشتهای پایگاه دانش Korra Studio است — پلتفرم هر موضوع را با مربی یکبهیک جفت میکند.
شروع رایگانarrow_forward