Kong؛ مهندسی معکوس باینری با کمک مدلهای زبانی
خلاصهٔ کاملتر
به گفتهٔ سازنده، مهندسی معکوس یه کاره که سختیِ فکریش نسبتاً کمه ولی زمانِ اجراش میتونه ساعتها و حتی روزها طول بکشه، حتی برای یه باینری با چند صد تابع. Kong همین لایهٔ مکانیکی رو خودکار میکنه: یه باینریِ کاملاً مبهمسازیشده و استریپشده رو میگیره و یه پایپلاین کامل روش اجرا میکنه — تریاژ توابع، ساختن بافتِ گراف فراخوانی، و بازیابی نوعها و نمادها با decompilation راهنماییشده با LLM.
مشکلی که Kong حلش میکنه اینه که باینریِ استریپشده همهٔ چیزی که کد رو خونا میکنه از دست داده: اسم تابع، اطلاعات نوع، اسم متغیر و چیدمان struct. بازیابی این بافت بیشترِ کارِ مهندسی معکوسه و عمدتاً تطبیق الگوئه؛ تشخیص توابع کتابخونهٔ استاندارد، حدس نوع از روی نحوهٔ استفاده، و پخشکردن اسمها توی گراف فراخوانی. سازنده میگه LLMها دقیقاً تو همین جور تطبیق الگو خوبن.
نکتهٔ کلیدی اینه که پرتکردن خروجی خام دیکامپایلر جلوی مدل و پرسیدن «این چیه؟» نتیجهٔ متوسط میده، چون مدل بافتِ فراخوانی و ارجاعهای متقابل رو نداره. Kong بهجاش قبل از اینکه اصلاً به LLM دست بزنه، از تحلیل برنامهٔ Ghidra یه پنجرهٔ بافتِ غنی میسازه — گراف فراخوانی، ارجاعهای متقابل، ارجاع رشتهها و جریان داده — و تحلیل رو به ترتیب وابستگی هدایت میکنه تا هر تابع از قبل اسمگذاریشدنِ توابعِ زیرمجموعهش سود ببره.
پایپلاین پنجفازهست: تریاژ توابع رو میشماره و دستهبندی میکنه و امضای توابع کتابخونهای و رمزنگاری شناختهشده رو تطبیق میده تا از تحلیل LLM رد بشن؛ فاز Analysis توابع رو از پایین به بالا پردازش میکنه؛ Cleanup نوعهای struct رو یکی میکنه؛ Synthesis با یه نگاه سراسری اسمها رو یکدست میکنه؛ و Export همهچیو توی دیتابیس برنامهٔ Ghidra برمیگردونه. یه پایپلاین agentic مبهمزدایی هم داره که تکنیکهایی مثل تختکردن جریان کنترل و رمزنگاری رشته رو تشخیص میده و برمیداره.
از نظر پشته، Kong با Python نوشته شده و Ghidra رو بهصورت in-process با PyGhidra و JPype اجرا میکنه، برای حل نمادین از z3 استفاده میکنه و هم Anthropic (Claude) و هم OpenAI (GPT-4o) رو پشتیبانی میکنه. یه هارنسِ ارزیابی داخلی هم داره که خروجی رو با کد منبعِ واقعی میسنجه و دقت نماد و نوع رو نمره میده.
برجستهترین بنچمارک اینه که Kong بهصورت خودکار کل زنجیرهٔ بکدور معروف XZ (با شناسهٔ CVE-2024-3094) رو از یه فایلِ استریپشدهٔ liblzma بازسازی کرده و هر پنج تابع اصلیِ کاشتهشده رو با اطمینان ۹۰ تا ۹۵ درصد، در ۱۵ دقیقه و با هزینهٔ حدود ۶.۶۳ دلار پیدا کرده. سازنده Kong رو تحت لایسنس Apache 2.0 متنباز کرده و میگه الهامش پروژهٔ Shannon بوده که همین جور پایپلاین رو برای تستِ نفوذِ وب اجرا میکنه.
نکات کلیدی:
- Kong مهندسی معکوس باینریهای استریپشده رو با LLM و Ghidra خودکار میکنه
- بهجای خروجی خام، اول بافتِ غنی از گراف فراخوانی و ارجاعها میسازه
- تحلیل از پایین به بالا انجام میشه تا هر تابع از اسمگذاریِ توابع زیرش سود ببره
- پایپلاین agentic مبهمزدایی، تکنیکهای obfuscation رو تشخیص میده و برمیداره
- بکدور XZ (CVE-2024-3094) رو در ۱۵ دقیقه و ۶.۶۳ دلار بازسازی کرد




