مجموعة أدوات الهندسة العكسية القائمة على الذكاء الاصطناعي أولاً: التحليل الساكن، مفكك التجميع SSA، الذاكرة الحية، التتبع المصدر. المصدر متاح (PolyForm Noncommercial).
من نقطة مراقبة عتادية في عملية حية إلى العبارة المفكوكة بالضبط التي غيّرت القيمة.
تجد ماسحات الذاكرة العنوان. تشرح المفككات الكود. N0xis يربط بينهما.
$ n0x provenance trace --pid 9348 --addr 0x7ff68bef3010 --kind write
"function_va": "0x7ff68bef1580", // containing function, auto-resolved
"decompiled_context": [
"rax.2 = (*(uint32_t*)(0x7ff68bef3010) - 0x1);",
"*(uint32_t*)(0x7ff68bef3010) = rax.2;" // ← the statement that moved your value
]
هذا هو hp -= 1; في المصدر، مستعادًا من عملية قيد التشغيل — يظهر العنوان
المراقَب في العبارة. تم التحقق منه على Windows و Linux.
عادةً ما تتوقف عملية فحص "ابحث عمّا يصل إلى هذا" عند سطر تفكيك خام، وعادةً لا يكون للمفكك أي مدخل من نقطة مراقبة حية على الإطلاق. هذا هو دمج النصفين: يتم حل إصابة نقطة المراقبة عبر نفس مسار SSA الذي يفكك الملف.
ملفات تنفيذية جاهزة لـ Linux و Windows — أحدث إصدار.
curl -LO https://github.com/Structio-labs/N0xis/releases/latest/download/n0xis-linux-x86_64
chmod +x n0xis-linux-x86_64 && ./n0xis-linux-x86_64 --version
أو قم ببنائه: cargo build --workspace --release (Windows و Linux؛ لا حاجة إلى MSVC Build
Tools — يثبّت rust-toolchain.toml مضيف gnu).
كل أمر يطبع كائن JSON واحدًا — بما في ذلك أخطاء الوسائط: {"ok":true,"data":…,"meta":…} أو
{"ok":false,"error":…}. أضف --pretty لقراءته؛ رمز الخروج غير صفري عند الفشل.
n0x doctor # environment check
n0x profile --file game.exe # triage: sections, exports, engine hints
n0x function discover --file game.exe --pdata # exact .pdata discovery
n0x decomp pseudo --file game.exe --addr 0x140012a00 --style ssa --pretty
n0x provenance trace --pid 4821 --addr 0x1a2b3c40 --kind write --pretty
تعمل الأوامر نفسها على --pid حي، أو --file ثابت، أو --snapshot ملتقط، أو
عملية بعيدة عبر SSH. إنها سباكة Unix عادية —
n0x function discover --file game.exe --pdata | jq -r '.data.functions[].va' يغذّي الأمر
التالي. يسرد n0x guide جميع الأوامر الـ 113، مولّدة من الملف التنفيذي بحيث لا تنحرف أبدًا — ويفشل
اختبار البناء إذا تغيّر هذا الرقم.
من وكيل: وجّه أي عميل MCP إلى n0xis-mcp — 25 أداة تُرجع نفس
مغلّف {ok,data,meta}، JSON-RPC عبر stdio.
{ "mcpServers": { "n0xis": { "command": "/path/to/n0xis-mcp" } } }
--explain: أي تمرير فرعي غيّر ماذا، وفي أي عنوان)، وليس إجابة صندوق أسود..rdata ورموز
Itanium _ZTV)، و.NET NativeAOT RVA ↔ Namespace.Type.Method، وLuaJIT، وBitsquid، وIL2CPP —
بحيث تُقرأ صورة مجرّدة ككود مصدري، لا sub_XXXX..n0xt، تعليقات مُصدَّرة، تخزين مؤقت معنون بالمحتوى،
ومقارنة الدوال/الإصدارات.Windows و Linux، PE و ELF، مسار واحد — الملفات الثابتة والعمليات الحية واللقطات والأهداف البعيدة كلها تمر عبر نفس التمريرات ونفس JSON المُصدَّر.
لا يوجد عدم حتمية من ML في النواة، أبدًا. توجد واجهة رسومية سطح مكتب في مستودع منفصل: n0xis-gui.
ألفا. كل ادعاء أدناه هو قياس مقابل مصدر خارج الأداة — النواة، أو جداول الصورة نفسها، أو العملية الهدف ذاتها. حيث لا يوجد مصدر كهذا، يُذكر ذلك، لأن المُنفَّذ والمُتحقَّق منه ليسا نفس الادعاء.
الذاكرة الحية، مقابل هدف قابل للتخلص منه يزرع قيمًا معروفة:
/proc/<pid>/mem، واحد خاطئ وتم إصلاحه. الأمران
الآخران خاصان بـ Windows فقط ويرفضان العمل مع ذكر ذلك. الخطأ الواحد كان scan dissect، الذي
اختار عرض حقل قبل محاذاته فقرأ بنيةً بإزاحة أربعة بايتات من أول خطأ له: حقل واحد من ستة
صحيح مقابل تخطيط معروف من مصدره، وخمسة من ستة بعد ذلك.ui focus بشكل صحيح عدم وجود نافذة على هدف طرفية؛ وstack backtrace هو
Linux-only — المكان الوحيد الذي يتقدم فيه محوّل Linux.المفكك، مقابل مفكك مستقل — الأساس الذي يقف عليه كل شيء آخر، وحتى الآن كان يُفحص فقط بواسطة التمريرات المبنية فوقه، والتي تقرأ جميعها نفس التدفق:
objdump. ثلاثة أشكال مبنية لغرض محدد دقيقة،
20 000 تعليمة من مكتبة مشتركة و20 000 من DLL نظام 32-بت، صفر
خلافات وصفر حدود امتلكها أحد الجانبين وحده. وُسِّع إلى 60 000 تعليمة
من ملف متصفح مجرّد بحجم 334 ميغابايت: خلافان، كلاهما داخل سلسلة ASCII مضمّنة
في .text حيث يفكّ المرجع نفسه (bad) — ليس كودًا، ولا أي من القراءتين
هي الصحيحة.llvm-objdump (التشفيرات ثابتة العرض تجعل الحدود
بلا معنى). انظر سطر ARM64 أدناه.llvm-mc --mattr=+all وبواسطة n0xis. 241 يسميها كلاهما تعليمة، و304 يرفضها كلاهما —
و48 (8.0%) تشفيرات محجوزة يقرأها n0xis كتعليمات، مع 7 (1.2%) تعليمات
حقيقية يرفضها (معظمها LSE atomics). ثلاثة من الـ 48 فُكّت يدويًا وهي
حقًا UNALLOCATED. هذه الفجوة مقيّدة بحد يفشل إذا نمت، ومذكورة
هنا بدلًا من تركها خارجًا: كلمة محجوزة تُقرأ كتعليمة تحوّل البيانات إلى
برنامج معقول.امتدادات الدوال، مقابل جدول فك الالتفاف الخاص بالصورة وقائمة تصدير الرابط:
start..end لكل FDE من objdump --dwarf=frames مساوٍ للامتداد المستعاد —
3 787 مقارنة على هذا الجهاز (10 + 3 777 لـ libc)، البداية والنهاية، دقيقة؛ قيست
بشكل منفصل عند 15 467 و14 355 على مكتبتين كبيرتين.المراجع المتقاطعة ورسم الاستدعاء، مقابل تفكيك مصدر ليس هذه الأداة:
call، وjmp الاستدعاء الذيل، ومراجع البيانات النسبية
لـ RIP كلها مُصنَّفة بـ kind، وكل واحدة قورنت بما يُظهره objdump.حقول البنية المستعادة، مقابل المترجم الذي خطّط البنية:
gcc -g يذكر إزاحة كل عضو؛ 15 إزاحة حقل مستعادة عبر 10 دوال،
كل واحدة عضو حقيقي — لا شيء مُختلق. أحادي الاتجاه عن قصد: المحسِّن يطوي
ويُسقط وصولات الحقول، فعضو لا يظهر أبدًا هو فعل المترجم، لا خطأ فائت.