مهندسی معکوس در امنیت سایبری به فرایند بررسی یک نرمافزار، فایل اجرایی، بدافزار، Firmware یا سیستم موجود برای درک نحوه عملکرد داخلی آن گفته میشود. در این روش، تحلیلگر معمولاً بدون دسترسی به کد منبع، تلاش میکند ساختار برنامه، منطق اجرا، ارتباطات، توابع مهم و رفتارهای امنیتی یا مخرب آن را شناسایی کند.
این تکنیک یکی از ابزارهای مهم متخصصان امنیت برای تحلیل بدافزار، کشف آسیبپذیری، بررسی رخدادهای امنیتی، تحلیل باینری و شناخت رفتار نرمافزارهای ناشناخته است.
Software Engineering Institute دانشگاه Carnegie Mellon مهندسی معکوس را یکی از روشهای اصلی برای فهمیدن نحوه عملکرد بدافزار، اثرات آن و یافتن روش مناسب برای مقابله با آن معرفی میکند.
اگر میخواهید ابتدا با مفهوم عمومی، انواع و کاربردهای صنعتی این حوزه آشنا شوید، مقاله مهندسی معکوس چیست؟ را مطالعه کنید.
مهندسی معکوس در امنیت سایبری چیست؟
در بسیاری از پروژههای امنیتی، متخصص به Source Code یک برنامه دسترسی ندارد.
آنچه در اختیار او قرار میگیرد ممکن است فقط یک فایل مانند:
- EXE
- DLL
- ELF
- APK
- Firmware
- Driver
- Script
- یا یک فایل ناشناس و مشکوک
باشد.
در چنین شرایطی Reverse Engineering کمک میکند از فایل نهایی به ساختار و منطق داخلی برنامه برسیم.
فرایند بهصورت ساده میتواند چنین باشد:
Binary ← Assembly / Decompiled Code ← مدل منطقی و معماری
تحلیلگر تلاش میکند پاسخ پرسشهایی مانند موارد زیر را پیدا کند:
- این فایل دقیقاً چه کاری انجام میدهد؟
- چه تابعهایی را فراخوانی میکند؟
- با چه فایلها یا سرویسهایی در سیستم تعامل دارد؟
- آیا به اینترنت متصل میشود؟
- چه دادههایی را جمعآوری میکند؟
- آیا رفتار مخربی دارد؟
- آیا آسیبپذیری امنیتی در آن وجود دارد؟
- آیا برای جلوگیری از تحلیل، از روشهای مخفیسازی استفاده شده است؟
هدف نهایی صرفاً تبدیل کد ماشین به Assembly نیست؛ بلکه رسیدن از کد سطح پایین به درک رفتار و منطق برنامه است.
چرا مهندسی معکوس در امنیت سایبری اهمیت دارد؟
بخش بزرگی از تهدیدات سایبری به شکل کد کامپایلشده در اختیار تحلیلگران قرار میگیرند و کد منبع آنها در دسترس نیست. برای مثال، زمانی که یک فایل ناشناس در شبکه سازمان شناسایی میشود، ممکن است آنتیویروس فقط تشخیص دهد که فایل مشکوک است؛ اما تیم امنیت برای پاسخ به سوالات مهمتر باید آن را تحلیل کند.
مثلاً:
- آیا اطلاعات سرقت میکند؟
- آیا فایل دیگری دانلود میکند؟
- آیا در سیستم ماندگار میشود؟
- آیا Credentialها را استخراج میکند؟
- با چه سرورهایی ارتباط دارد؟
- چه سیستمهایی تحت تأثیر قرار میگیرند؟
SEI توضیح میدهد که مهندسی معکوس برای مشخص کردن اینکه بدافزار چه کاری انجام میدهد، چه بخشهایی را تحت تأثیر قرار میدهد و چگونه میتوان آن را حذف کرد اهمیت دارد.
مهمترین کاربردهای مهندسی معکوس در امنیت سایبری
تحلیل بدافزار
یکی از مهمترین کاربردهای مهندسی معکوس، تحلیل بدافزار است.
تحلیلگر ممکن است یک نمونه از موارد زیر را بررسی کند:
تا نحوه عملکرد، رفتار و هدف آن را مشخص کند.
برای مثال، فرض کنید یک فایل ناشناس روی سیستم یکی از کارکنان سازمان پیدا شده است.
پس از تحلیل مشخص میشود فایل:
- پس از اجرا در مسیر مشخصی کپی میشود؛
- یک Registry Key برای اجرای خودکار ایجاد میکند؛
- اطلاعات مرورگر را جمعآوری میکند؛
- به یک IP خارجی متصل میشود؛
- اطلاعات جمعآوریشده را ارسال میکند.
در این حالت، نتیجه مهندسی معکوس فقط شناخت فایل نیست.
تیم امنیت میتواند از اطلاعات استخراجشده برای ساخت:
- IOC
- Detection Rule
- YARA Rule
- EDR Detection
- Network Rule
استفاده کند.
MITRE نیز در چارچوب ATT&CK به استفاده از تحلیل ایستا، تحلیل پویا، بررسی حافظه و مهندسی معکوس برای استخراج مشخصات بدافزار و تولید Threat Intelligence اشاره میکند.
شناسایی آسیبپذیریهای نرمافزار
مهندسی معکوس فقط برای تحلیل بدافزار استفاده نمیشود. گاهی متخصص امنیت یک نرمافزار قانونی را بررسی میکند تا مشخص شود آیا در طراحی یا پیادهسازی آن ضعف امنیتی وجود دارد یا نه.
برای مثال ممکن است بررسی شود:
- دادهها چگونه اعتبارسنجی میشوند؟
- رمز عبور چگونه ذخیره میشود؟
- آیا تابع خطرناکی وجود دارد؟
- برنامه چگونه ورودی کاربر را مدیریت میکند؟
- آیا الگوریتم رمزنگاری بهدرستی پیادهسازی شده است؟
این نوع بررسی در Vulnerability Research اهمیت زیادی دارد. ابزارهایی مانند Ghidra نیز دقیقاً برای تحلیل کدهای کامپایلشده، بررسی ساختار برنامه و شناخت آسیبپذیریهای احتمالی طراحی شدهاند.
پاسخ به رخدادهای امنیتی
فرض کنید تیم SOC متوجه میشود یک فایل ناشناس روی چند نقطه پایانی اجرا شده است. لاگها نشان میدهند رفتار مشکوکی رخ داده، اما مشخص نیست فایل چه کاری انجام داده است.
در اینجا مهندسی معکوس میتواند پاسخ دهد:
- نقطه ورود حمله چه بوده؟
- بدافزار چه قابلیتهایی داشته؟
- چه فایلهایی ایجاد کرده؟
- چه Registry Keyهایی تغییر داده؟
- چه ارتباطات شبکهای برقرار کرده؟
- آیا Persistence ایجاد کرده؟
- چه اطلاعاتی در معرض خطر بودهاند؟
این اطلاعات به Incident Response کمک میکند تا Scope حمله مشخص شود و تیم امنیت بفهمد دقیقاً دنبال چه شواهدی باید بگردد.
تحلیل پروتکلهای ناشناخته
گاهی نرمافزار یا دستگاه از پروتکلی اختصاصی استفاده میکند که مستندات آن در دسترس نیست.
تحلیلگر میتواند:
- Traffic را Capture کند؛
- پیامها را بررسی کند؛
- ساختار Packetها را تشخیص دهد؛
- Request و Responseها را مقایسه کند؛
- و قواعد ارتباط را استخراج کند.
این نوع مهندسی معکوس در بررسی:
- IoT
- تجهیزات صنعتی
- نرمافزارهای قدیمی
- بدافزارها
- Command & Control
کاربرد دارد.
تحلیل فریمور
بسیاری از تجهیزات مانند:
- روتر
- دوربین
- دستگاههای اینترنت اشیا
- کنترلگرهای صنعتی
- مودم
دارای فریمور هستند.
متخصص امنیت ممکن است میانافزار یک دستگاه را استخراج و بررسی کند تا مواردی مانند:
- نام کاربری و رمز عبور ثابت و از پیشتعریفشده
- سرویسهای مخفی
- درِ پشتی
- کتابخانههای دارای آسیبپذیری
- کلیدهای رمزنگاری
- رابطهای برنامهنویسی ناشناخته
را شناسایی کند.
در سالهای اخیر، بررسی رابط میانافزار توسعهپذیر یکپارچه (UEFI) و میانافزارهای سطح پایین نیز به یکی از موضوعات مهم تحقیقات امنیتی تبدیل شده است. مؤسسه مهندسی نرمافزار دانشگاه کارنگی ملون (SEI) نیز در سال 2026 یک ابزار متنباز برای تحلیل ساختار UEFI و بررسی آسیبپذیریهای آن معرفی کرد.
تحلیل ایستا و تحلیل پویا در مهندسی معکوس
دو رویکرد اصلی برای تحلیل فایلها در Reverse Engineering عبارتاند از:
تحلیل ایستا چیست؟
در تحلیل ایستا فایل بدون اجرا شدن بررسی میشود.
تحلیلگر ممکن است موارد زیر را استخراج کند:
- Hash
- Strings
- Header
- Importها
- Exportها
- Sectionها
- منابع Embedded
- Assembly
- Decompiled Code
- ساختار توابع
مزیت اصلی تحلیل ایستا این است که فایل مشکوک اجرا نمیشود. اما محدودیت مهمی نیز دارد: برخی بدافزارها کد اصلی خود را تنها هنگام اجرا Decode یا Decrypt میکنند.
تحلیل پویا چیست؟
در تحلیل پویا برنامه در محیطی کنترلشده اجرا و رفتار آن مشاهده میشود.
تحلیلگر ممکن است بررسی کند:
- چه Processهایی ایجاد میشوند؟
- چه فایلهایی ساخته یا حذف میشوند؟
- چه Registry Keyهایی تغییر میکنند؟
- چه APIهایی فراخوانی میشوند؟
- چه ارتباطات شبکهای برقرار میشود؟
- چه بخشهایی از حافظه تغییر میکنند؟
MITRE تحلیل بدافزار را شامل هر دو بخش Static و Dynamic میداند و Dynamic Analysis را به مشاهده رفتار زمان اجرا، API Callها، تغییرات Registry، ترافیک شبکه و تحلیل حافظه مرتبط میکند.
تفاوت تحلیل ایستا و پویا
| تحلیل ایستا | تحلیل پویا |
|---|---|
| فایل اجرا نمیشود | برنامه اجرا میشود |
| کد و ساختار فایل بررسی میشود | رفتار واقعی بررسی میشود |
| ریسک اجرای بدافزار کمتر است | نیازمند محیط ایزوله است |
| برای شناخت ساختار مناسب است | برای شناخت رفتار Runtime مناسب است |
| Obfuscation میتواند. تحلیل را دشوار کند | Anti-VM و Anti-Debug میتواند مشکل ایجاد کند |
در پروژههای واقعی معمولاً این دو روش در کنار هم استفاده میشوند.
مهندسی معکوس یک بدافزار چگونه انجام میشود؟
یک Workflow معمول میتواند شامل مراحل زیر باشد.
1. جمعآوری و حفظ نمونه
در ابتدا نمونه فایل از محیط آلوده استخراج میشود. Hash فایل ثبت میشود تا هویت نمونه در مراحل مختلف قابل بررسی باشد
2. بررسی اولیه
بدون اجرای فایل، اطلاعات اولیه مانند:
- نوع فایل
- حجم
- Hash
- Strings
- Importها
- Header
بررسی میشوند.
گاهی در همین مرحله میتوان سرنخهایی مثل:
- URL
- IP
- نام فایل
- Registry Path
- Command
را مشاهده کرد.
3. تحلیل ایستا
فایل در Disassembler یا Decompiler بررسی میشود.
برای مثال:
فایل باینری ← کد اسمبلی ← شبهکد قابلفهمتر
تحلیلگر تلاش میکند Functionهای مهم را پیدا کند و Flow اجرای برنامه را درک کند.
4. تحلیل پویا
فایل در یک محیط ایزوله مانند سندباکس یا ماشین مجازی اجرا میشود.
سپس رفتار آن در بخشهای زیر بررسی میشود:
-
- فرایندها
- سامانه فایل
- رجیستری
- ارتباطات شبکه
- حافظه
5. Debugging
اگر نیاز به بررسی دقیقتر باشد، تحلیلگر از Debugger استفاده میکند.
Debugger اجازه میدهد:
- اجرا متوقف شود؛
- Breakpoint قرار داده شود؛
- Registerها بررسی شوند؛
- حافظه مشاهده شود؛
- و برنامه Instruction به Instruction اجرا شود.
این مرحله برای فهم رفتارهای پنهان اهمیت زیادی دارد.
6. استخراج IOC و رفتار
پس از تحلیل، اطلاعات قابل استفاده استخراج میشوند.
برای مثال:
- Domain
- IP
- File Hash
- Mutex
- Registry Path
- Filename
- Certificate
- User-Agent
این اطلاعات میتوانند وارد سیستمهای Detection و هوش تهدید شوند.
مثال ساده از مهندسی معکوس بدافزار
فرض کنید یک فایل با نام:
invoice.exe
برای یکی از کارکنان سازمان ایمیل شده است. کاربر فایل را اجرا میکند و EDR رفتار مشکوکی گزارش میدهد. در بررسی اولیه Strings فایل عبارتهایی مرتبط با PowerShell مشاهده میشود. تحلیل ایستا نشان میدهد برنامه تابعی برای اجرای Command دارد.
در تحلیل پویا مشاهده میشود فایل:
invoice.exe ← PowerShell ← Download Payload ← ایجاد Persistence ← ارتباط با C2
با ادامه مهندسی معکوس مشخص میشود برنامه پس از اجرا:
- Payload دوم را دانلود میکند؛
- Scheduled Task ایجاد میکند؛
- به Domain مشخصی متصل میشود.
نتیجه این تحلیل میتواند به تیم امنیت کمک کند تا:
- Domain را بلاک کند؛
- Rule تشخیص ایجاد کند؛
- سیستمهای آلوده دیگر را پیدا کند؛
- Persistence را حذف کند.
این دقیقاً نقطهای است که مهندسی معکوس از یک فعالیت آزمایشگاهی به ابزار عملی Incident Response و Threat Hunting تبدیل میشود.
ابزارهای مهم مهندسی معکوس در امنیت سایبری
Ghidra
Ghidra یکی از شناختهشدهترین ابزارهای مهندسی معکوس است که توسط Research Directorate آژانس امنیت ملی آمریکا توسعه داده شده و بهصورت متنباز منتشر شده است.
Ghidra امکاناتی مانند:
- Disassembly
- Decompilation
- Graphing
- Scripting
- Debugging
- تحلیل فرمتهای اجرایی مختلف
را ارائه میدهد. یکی از مهمترین قابلیتهای آن Decompiler است که کد ماشین را به شکلی شبیه زبانهای سطح بالاتر نمایش میدهد و فهم منطق برنامه را سادهتر میکند.
IDA Pro
IDA یکی از ابزارهای باسابقه و شناختهشده برای تحلیل فایلهای باینری و مهندسی معکوس نرمافزار است.
این ابزار برای موارد زیر استفاده میشود:
- تبدیل کد ماشین به کد اسمبلی
- تحلیل توابع برنامه
- بررسی نمودار جریان کنترل
- بررسی ارجاعات متقابل میان توابع و بخشهای مختلف برنامه
- اشکالزدایی و بررسی مرحلهبهمرحله اجرای برنامه
IDA در بسیاری از تیمهای تحلیل بدافزار و پژوهش آسیبپذیریهای امنیتی مورد استفاده قرار میگیرد.
Binary Ninja
Binary Ninja نیز پلتفرمی برای تحلیل باینری است که روی نمایشهای میانی کد و قابلیت اتوماسیون تمرکز دارد.
از آن برای:
- تحلیل برنامه
- بررسی Control Flow
- Scripting
- Vulnerability Research
استفاده میشود.
x64dbg
x64dbg یک دیباگر محبوب برای ویندوز است. کاربرد اصلی آن بررسی Runtime برنامه و اجرای مرحلهبهمرحله کد است. برای مثال تحلیلگر میتواند برنامه را درست قبل از Decrypt شدن Payload متوقف کند و محتوای حافظه را بررسی کند.
radare2 و Cutter
radare2 مجموعهای متنباز برای تحلیل باینری است. Cutter رابط گرافیکی مبتنی بر اکوسیستم radare2/Rizin ارائه میدهد و برای کسانی که محیط GUI را ترجیح میدهند مناسبتر است.
Wireshark
Wireshark ابزار مستقیم Reverse Engineering باینری نیست، اما یکی از ابزارهای مکمل مهم است.
در تحلیل پویا میتوان با آن:
- DNS
- HTTP
- TCP
- TLS
- ارتباط C2
را مشاهده کرد.
Disassembler و Decompiler چه تفاوتی دارند؟
این دو مفهوم در مهندسی معکوس بسیار مهماند.
Disassembler
Disassembler کد ماشین را به Assembly تبدیل میکند.
مثلاً:
Machine Code ← Assembly
خروجی بسیار نزدیک به چیزی است که CPU اجرا میکند.
Decompiler
Decompiler تلاش میکند Assembly یا Binary را به کدی شبیه زبانهای سطح بالاتر تبدیل کند.
مثلاً:
Binary ← Assembly ← Pseudocode
خروجی Decompiler معمولاً Source Code اصلی نیست. نام متغیرها، توضیحات و ساختار دقیق برنامه ممکن است از بین رفته باشد. Decompiler فقط تلاش میکند منطق برنامه را به شکل قابل فهمتری بازسازی کند. Ghidra یکی از ابزارهایی است که هر دو قابلیت Disassembly و Decompilation را در اختیار تحلیلگر قرار میدهد.
چالشهای مهندسی معکوس بدافزار
مهاجمان معمولاً تلاش میکنند تحلیل بدافزار را برای متخصصان امنیت دشوار کنند. به همین دلیل از تکنیکهای ضدتحلیل (Anti-Analysis) استفاده میکنند، از جمله:
- مبهمسازی کد (Obfuscation): کد عمداً پیچیده و نامفهوم میشود تا تحلیل منطق برنامه دشوارتر شود.
- بستهبندی کد (Packing): کد اصلی بدافزار داخل یک فایل بستهبندیشده قرار میگیرد و معمولاً هنگام اجرا از حالت فشرده یا رمزگذاریشده خارج میشود.
- رمزگذاری (Encryption): بخشهایی از کد یا محموله بدافزار ممکن است رمزگذاری شوند و فقط هنگام اجرا یا در حافظه رمزگشایی شوند.
- مقابله با اشکالزدایی (Anti-Debugging): برنامه بررسی میکند آیا ابزار اشکالزدایی فعال است یا خیر. در صورت شناسایی آن ممکن است اجرای برنامه متوقف شود، رفتار بدافزار تغییر کند یا برنامه عمداً دچار خطا شود.
- تشخیص ماشین مجازی (Anti-VM): بدافزار بررسی میکند آیا در یک ماشین مجازی اجرا شده است یا خیر. این تشخیص میتواند بر اساس مشخصات سختافزار مجازی، پردازشهای فعال، درایورها یا سایر نشانههای محیط مجازی انجام شود. در صورت تشخیص ماشین مجازی، بدافزار ممکن است رفتار مخرب اصلی خود را اجرا نکند.
- تشخیص سندباکس (Anti-Sandbox): برخی بدافزارها تلاش میکنند محیطهای خودکار تحلیل را شناسایی کنند. برای مثال ممکن است مدت زمان روشن بودن سیستم، میزان فعالیت کاربر، تعداد پردازشها یا ویژگیهای محیط را بررسی کنند و در صورت تشخیص سندباکس، رفتار عادی و بیخطر از خود نشان دهند.
مؤسسه مهندسی نرمافزار دانشگاه کارنگی ملون (SEI) نیز به استفاده نویسندگان بدافزار از مبهمسازی و سایر روشهای ضدتحلیل برای دشوارتر کردن فرایند بررسی اشاره کرده است.
تفاوت مهندسی معکوس و تحلیل بدافزار چیست؟
این دو مفهوم یکسان نیستند.
مهندسی معکوس یک روش فنی برای بررسی ساختار، کد و منطق داخلی یک نرمافزار یا فایل اجرایی است.
اما تحلیل بدافزار فرایند گستردهتری است که هدف آن شناخت رفتار، قابلیتها و میزان خطر یک بدافزار است و میتواند از مهندسی معکوس بهعنوان یکی از روشهای تحلیل استفاده کند.
تحلیل بدافزار ممکن است شامل موارد زیر باشد:
- بررسی هش فایل
- بررسی سابقه و اعتبار فایل
- استخراج رشتههای متنی
- اجرای نمونه در محیط سندباکس
- تحلیل ارتباطات شبکه
- تحلیل حافظه
- مهندسی معکوس فایل اجرایی
بنابراین هر فرایند تحلیل بدافزار الزاماً به مهندسی معکوس عمیق نیاز ندارد. در بسیاری از موارد، بررسی رفتار فایل در سندباکس، تحلیل ارتباطات شبکه یا استخراج شاخصهای آلودگی میتواند اطلاعات کافی در اختیار تحلیلگر قرار دهد.
با این حال، در مواجهه با بدافزارهای ناشناخته، پیچیده یا دارای روشهای ضدتحلیل، مهندسی معکوس یکی از مهمترین روشها برای درک دقیق منطق و عملکرد واقعی بدافزار است. مؤسسه مهندسی نرمافزار دانشگاه کارنگی ملون (SEI) نیز مهندسی معکوس را یکی از روشهای مهم برای تحلیل نمونههای پیچیده بدافزار معرفی میکند.
تفاوت مهندسی معکوس و تست نفوذ
مهندسی معکوس و Penetration Testing نیز دو مفهوم متفاوتاند.
| مهندسی معکوس | تست نفوذ |
|---|---|
| تمرکز روی شناخت داخل برنامه | تمرکز روی یافتن مسیر نفوذ |
| معمولاً کد یا Binary تحلیل میشود | معمولاً سیستم از دید مهاجم آزمایش میشود |
| Disassembler و Debugger کاربرد زیادی دارند | Scanner و Exploit Framework رایجترند |
| هدف شناخت منطق برنامه است | هدف ارزیابی قابلیت سوءاستفاده است |
| میتواند بخشی از Vulnerability Research باشد | ارزیابی عملی سطح حمله است |
البته این دو میتوانند مکمل یکدیگر باشند.
برای مثال Penetration Tester ممکن است Firmware دستگاهی را Reverse Engineer کند تا آسیبپذیری جدیدی پیدا کند و سپس امکان Exploit کردن آن را بررسی کند.
تفاوت مهندسی معکوس و شکار تهدید
شکار تهدید (Threat Hunting) بر جستوجوی فعالانه نشانههای نفوذ و رفتارهای مشکوک در محیط سازمان تمرکز دارد؛ در حالی که مهندسی معکوس برای بررسی عمیق یک فایل، بدافزار یا برنامه و درک نحوه عملکرد آن استفاده میشود.
مهندسی معکوس میتواند اطلاعات ارزشمندی در اختیار تیم شکار تهدید قرار دهد. برای مثال، تحلیل یک نمونه بدافزار ممکن است مشخص کند:
- چه کلیدهایی در رجیستری ایجاد یا تغییر میشوند؛
- بدافزار با چه دامنهها یا نشانیهای اینترنتی ارتباط برقرار میکند؛
- چه فایلهایی روی سیستم ایجاد میشوند؛
- چه زنجیرهای از فرایندها شکل میگیرد؛
- چه روشهایی برای ماندگاری در سیستم استفاده میشود؛
- و چه الگوهای رفتاری یا شاخصهای آلودگی قابل شناسایی هستند.
تیم شکار تهدید میتواند این اطلاعات را در تعداد زیادی از سامانهها و نقاط پایانی سازمان جستوجو کند تا سیستمهای آلوده یا رفتارهای مشابه را پیدا کند.
بهطور خلاصه، ارتباط این دو فرایند را میتوان چنین نشان داد:
مهندسی معکوس ← شناخت رفتار تهدید ← استخراج شاخصهای آلودگی و الگوهای رفتاری ← شکار تهدید
بنابراین، مهندسی معکوس و شکار تهدید جایگزین یکدیگر نیستند؛ بلکه مکمل هم هستند. مهندسی معکوس به شناخت دقیق تهدید کمک میکند و شکار تهدید از این شناخت برای یافتن نمونهها و آثار مشابه در محیط سازمان استفاده میکند.
مهندسی معکوس چه نقشی در هوش تهدید دارد؟
نتایج مهندسی معکوس میتوانند برای شناسایی خانوادههای بدافزاری و بررسی ارتباط میان نمونههای مختلف استفاده شوند.
برای مثال، اگر چند نمونه بدافزار ویژگیهای مشترکی داشته باشند، ممکن است به یک خانواده بدافزاری یا توسعهدهنده مشترک مرتبط باشند. این شباهتها میتوانند شامل موارد زیر باشند:
- الگوریتم رمزگذاری مشابه
- ساختار کد مشابه
- پیکربندی مشابه
- توابع مشترک
- الگوی ارتباطی مشابه
- روشهای یکسان برای ماندگاری در سیستم
- یا تکنیکهای مشابه برای مخفیسازی و مقابله با تحلیل
تحلیل این شباهتها به پژوهشگران امنیتی کمک میکند نمونههای مختلف یک خانواده بدافزاری را بهتر شناسایی و دستهبندی کنند و در بعضی موارد ارتباط میان نسخههای جدید و قدیمی یک بدافزار را تشخیص دهند.
مؤسسه مهندسی نرمافزار دانشگاه کارنگی ملون (SEI) نیز سالها روی شناسایی شباهت میان فایلهای باینری بدافزاری و خودکارسازی بخشی از فرایند تحلیل آنها تحقیق کرده است. یکی از نتایج این تحقیقات، مجموعه ابزار Pharos است که برای تحلیل ایستای فایلهای باینری و بازیابی اطلاعات فنی از برنامههای کامپایلشده توسعه یافته است.
پیشنیازهای یادگیری مهندسی معکوس در امنیت سایبری
مهندسی معکوس یکی از حوزههای تخصصی امنیت سایبری است و یادگیری آن به دانش پایه در چند حوزه فنی نیاز دارد. مهمترین پیشنیازها عبارتاند از:
- برنامهنویسی: آشنایی با زبانهایی مانند C، ++C و پایتون به درک منطق برنامهها، ساختار دادهها و نحوه اجرای کد کمک زیادی میکند.
- زبان اسمبلی: برای شروع لازم نیست متخصص اسمبلی باشید، اما باید با مفاهیمی مانند ثباتها (Register)، پشته (Stack)، دستورها (Instruction)، فراخوانی توابع، پرشها و شرطها آشنا باشید. این مفاهیم برای تحلیل فایلهای باینری اهمیت زیادی دارند.
- معماری کامپیوتر: شناخت معماریهای پردازنده مانند x86، x64 و ARM کمک میکند نحوه اجرای دستورها، مدیریت حافظه و تعامل نرمافزار با پردازنده را بهتر درک کنید.
- سیستمعامل: تحلیلگر باید با مفاهیمی مانند فرایندها، رشتههای اجرایی (Thread)، حافظه مجازی، سامانه فایل، رجیستری و رابطهای برنامهنویسی سیستمعامل آشنا باشد.
- شبکههای کامپیوتری: در تحلیل بدافزار و مهندسی معکوس پروتکلها، شناخت مفاهیم و پروتکلهایی مانند TCP/IP، DNS، HTTP و TLS ضروری است؛ زیرا بسیاری از بدافزارها برای دریافت دستور، دانلود فایل یا ارسال اطلاعات با شبکه ارتباط برقرار میکنند.
آیا میتوان مهندسی معکوس را خودکار کرد؟
بخشی از آن بله، اما تحلیل کامل همچنان در بسیاری از موارد نیازمند متخصص انسانی است.
ابزارها میتوانند:
- Functionها را شناسایی کنند؛
- Strings را استخراج کنند؛
- Control Flow بسازند؛
- رفتار Sandbox را ثبت کنند؛
- Binaryها را با یکدیگر مقایسه کنند.
SEI نیز سالها روی خودکارسازی Reverse Engineering و مقایسه Malware Familyها کار کرده است و توضیح میدهد که Automation میتواند سرعت تحلیل حجم بالای بدافزار را افزایش دهد.
اما در بدافزارهای پیچیده، تحلیلگر همچنان باید تصمیم بگیرد:
- کدام Function مهم است؛
- چرا برنامه رفتار مشخصی دارد؛
- چه بخشی از کد فریبدهنده است؛
- و رفتار مشاهدهشده چه معنای امنیتی دارد.
آیا هوش مصنوعی جای مهندس معکوس را میگیرد؟
هوش مصنوعی میتواند بسیاری از مراحل وقتگیر Reverse Engineering را سریعتر کند؛ برای مثال:
- توضیح Pseudocode
- نامگذاری Functionها
- دستهبندی رفتار
- پیدا کردن Pattern
- مقایسه Binaryها
- خلاصهسازی Control Flow
اما Reverse Engineering حرفهای به Context، تجربه و تحلیل منطقی وابسته است.
بهخصوص زمانی که با:
- Obfuscation
- Anti-Debug
- رفتارهای شرطی
- Exploit
- Firmware پیچیده
مواجهیم، خروجی خودکار نیازمند اعتبارسنجی تحلیلگر انسانی است.
جمعبندی
مهندسی معکوس به متخصصان امنیت کمک میکند فراتر از ظاهر یک فایل یا نرمافزار بروند و منطق واقعی عملکرد آن را کشف کنند. این روش در تحلیل بدافزار، کشف آسیبپذیری و پاسخ به تهدیدات، زمانی ارزشمندتر میشود که کد منبع در دسترس نیست.
در نهایت، مهندسی معکوس فقط خواندن کد نیست؛ بلکه تبدیل رفتار و ساختار یک برنامه به دانشی قابل استفاده برای تصمیمگیری امنیتی دقیقتر است.
سوالات متداول
فرایند بررسی نرمافزار، باینری، فریمور یا بدافزار برای فهم ساختار، عملکرد و رفتار آن بدون اتکا به سورس کد است.
تحلیل بدافزار، کشف آسیبپذیری، بررسی فریمور، Incident Response و هوش تهدید از مهمترین کاربردها هستند.
مهندسی معکوس یک تکنیک است، در حالی که تحلیل بدافزار فرایند گستردهتری است که میتواند شامل مهندسی معکوس، Sandbox، تحلیل شبکه و Memory Analysis باشد.
ابزار واحدی برای همه پروژهها وجود ندارد. Ghidra، IDA، Binary Ninja، x64dbg و radare2 از ابزارهای شناختهشده این حوزه هستند.
هیچکدام بهتنهایی کامل نیست. در پروژههای حرفهای معمولاً از ترکیب تحلیل ایستا و تحلیل پویا استفاده میشود.
برای تحلیلهای عمیق باینری، آشنایی با اسمبلی بسیار مهم است؛ هرچند Decompilerها میتوانند شروع کار را سادهتر کنند.


















