مجموعة أدوات الهندسة العكسية: مفكك تجميع، ومفكك SSA، واستعادة أصناف C++، وتحليل العمليات الحية لملفات PE وELF. واجهة سطر أوامر قابلة للبرمجة النصية، وكل إجابة بصيغة JSON. المصدر متاح (PolyForm Noncommercial).
مجموعة أدوات لهندسة العكس: مفكك تجميع، ومفكك SSA، واستعادة أصناف C++، وتحليل العمليات الحية لـ PE وELF. تمر الملفات الثابتة والعمليات قيد التشغيل عبر مسار واحد، وكل إجابة هي JSON يمكن للسكربت التصرف بناءً عليها.
تتشارك ثلاث واجهات أمامية هذا النواة: واجهة سطر الأوامر (CLI)، حيث يجيب الأمر بكائن JSON واحد (جلسة serve مع غلاف جاهز، ثم واحد لكل طلب)؛ و
واجهة رسومية سطح مكتب في مستودعها الخاص، n0xis-gui؛ و
خادم MCP، n0xis-mcp — 27 أداة تُرجع الغلاف نفسه عبر JSON-RPC على stdio.

تشغيل حقيقي لـ examples/config-demo: يحتفظ برنامج بإعداداته مشفّرة ويفك تشفيرها إلى الذاكرة؛ اعثر على النص الصريح، واضبط نقطة مراقبة عتادية عليه، واحصل على الكود المفكك الذي كتبه. أعد تشغيله بنفسك باستخدام demo.sh.
$ n0xis provenance trace --pid 181529 --addr 0x564e32cb7060 --kind write
"instruction_va": "0x564e32cb4266", // the byte store that wrote the watched address
"function_va": "0x564e32cb4230", // the function it sits in, on this build (see below)
"decompiled_context": [
"rcx.3 = (uint32_t)((uint32_t)(uint32_t)*(uint8_t*)((rsi.1 + v2)) ^ (uint32_t)v1);",
"*(uint8_t*)((rdi.1 + v2)) = (uint8_t)rcx.3;", // ← the write
"rcx.4 = (uint32_t)(v1 + (v1 * 0x2));",
"v2 = (v2 + 0x1);",
"v1 = (uint32_t)((v1 + (rcx.4 * 0x4)) + 0x7);"
]
في المصدر هذا هو config[i] = sealed[i] ^ key; key = key * 13 + 7;: العبارتان
rcx.4 = v1 + v1 * 2 و v1 = v1 + rcx.4 * 4 + 7 معًا تساويان v1 * 13 + 7. الإجابة تعطي
عناوين، وليس الأسماء config و decrypt_config: الأسماء من رموز الملف الثنائي لم
تُنقل إليه بعد. هذا البناء هو gcc -O2، حيث function_va هو بداية الدالة؛ على بناءات clang
-O2 و gcc -O1 من المصدر نفسه فهو رأس الحلقة، ويُجاب بـ ok:true دون ملاحظة.
هذا التشغيل على Linux؛ آخر تشغيل على Windows لـ provenance trace موجود في السجل.
yes: كل الفحوصات متوافقة · partial: قابل للاستخدام، مع الفجوات أدناه · wrong: ok:true مع نتائج
خاطئة على مدخلات مقيسة · refused: خطأ مُصنَّف · not yet: لا مسار برمجي. قيس في أكتوبر
2026 على برامج مبنية من مصدر معروف، مقابل المعالج وأدوات مستقلة.
| التنسيق | ملف ثابت | عملية حية |
|---|---|---|
| PE32+, PE32 (x86-64, x86, ARM64) | partial: الفجوات والإجابات الخاطئة أدناه | Windows: لم يُقس لهذا الجدول |
| ELF64, ELF32 (x86-64, x86, AArch64, ARMv7) | partial: الفجوات والإجابات الخاطئة أدناه؛ big-endian: التفكيك وإعادة RTTI مرفوضان | Linux x86-64: partial: المدخلات الحية أدناه؛ معماريات أخرى لم تُقس |
| Mach-O، رقيق وعالمي | مرفوض (load-failed) | not yet |
| WebAssembly | partial: قائمة الدوال، والتفكيك، والاستدعاءات من وإلى دالة، والواردات، والصادرات، وprofile وstrings (مع موضع كل سلسلة في الذاكرة الخطية) توافقت مع wasm-objdump على كل وحدة قيست؛ التفكيك وإعادة IR والأوامر الأخرى التي تحتاج الرفع مرفوضة (not-lifted: الرفع هو المرحلة 3) | not yet |
بايتات خام (--bytes) | تفكيك، وإحالات مرجعية، وسلاسل مع نطاق؛ discover وdecompile جزئيان؛ profile وrtti scan مرفوضان | — |
| ISA | تفكيك | اكتشاف الدوال | إعادة التفكيك |
|---|---|---|---|
| x86-64 | yes | yes مع جداول unwind؛ partial بدونها | partial |
| x86 (i386) | yes | partial: حتى مع .eh_frame، حشو GCC و.plt مُدرجان كدوال، والنقاط في الأسماء مُعاد كتابتها، ونهاية مفقودة | partial |
| AArch64، little- وbig-endian | yes | little-endian yes مع .eh_frame؛ big-endian partial: يفوّت دوالًا يعلنها .eh_frame؛ partial بدونها؛ على PE يكون --pdata خاطئًا | partial؛ big-endian مرفوض |
| ARMv7 A32 | partial: لا NEON، والبيانات في الكود تُفكَّك ككود | partial | wrong: جداول القفز، والاستدعاءات الذيلية |
ARMv7 Thumb-2 (--arch thumb) | wrong: أهداف التفرع، وشروط IT | partial: لا أسماء ولا نهايات | wrong: عودة مشروطة بـ IT تُنهي الدالة |
| WebAssembly | yes؛ هدف التفرع هو عمق تسمية، لا يُعطى حتى المرحلة 3 | yes: كل جسم، ومداه، وفهرسه واسمه | مرفوض (المرحلة 3) |
ok:true: RTTI الخاص بـ Itanium في ملف MinGW PE (يُبلَّغ عنه كغائب)، و--pdata على ARM64 PE، وأسماء مقاطع MinGW الطويلة في profile (/4)، وقائمة التصدير لكائن مشترك ELF وأسماء .localalias التي يمنحها لدوال ذلك الكائن، وحشو i386 الخاص بـ GCC وكتلة .plt المدرجة كدوال، والنقاط في أسماء الرموز المطبوعة كشرطات سفلية (__x86_get_pc_thunk_bx بدلاً من __x86.get_pc_thunk.bx)، واكتشاف AArch64 ذي النهاية الكبرى الذي يفتقد دوال يعلنها .eh_frame الخاص به.
يُسقط المُفكِّك الوسائط المارّة، ويطبع الإزاحات الحسابية كغير موقّعة وعمليات الضرب 64-بت كـ 32-بت، ويمكنه التبديل على سجل أو قراءته دون أن يعيّنه قط، وعلى AArch64 يمكنه تسمية السلسلة الخاطئة، وعلى A32 (وبالشكل نفسه على AArch64) يشغّل حلقة عدّ تنازلي بإحصاء قصير بتكرار واحد، وعلى x86 32-بت يفقد وسائط المكدس والنصف الأعلى من النتائج 64-بت. حقل quality الخاص به ليس درجة صحة. القائمة الكاملة، مع الأعداد، موجودة في السجل.ok مع أقل: بدون جداول فك التكديس، الدوال التي يُوصَل إليها فقط عبر vtables، ونقطة دخول MSVC-ABI ومعظم كائن مشترك ELF؛ والمراجع المحفوظة في قيم فورية مطلقة، أو adrp+add أو adr في AArch64، أو GOT الخاص بـ i386؛ وvtables الثانوية لـ Itanium، وكل صنف Itanium في صورة مجرّدة؛ والأسماء التي يحتفظ بها جدول رموز COFF فقط. أعطى PDB بجانب x64 PE كل بداية واسم ونهاية على صورتي lld-link المقاستين (35 من 35، 18 من 18).provenance trace عنوانًا مكتوبًا كسلسلة نصية حرفية عندما تصادف أن تكون البايتات هناك قابلة للطباعة، وعلى بعض البِنى يسمّي رأس الحلقة كدالة (أعلاه)؛ ويحتاج مسح أنماط البايتات (scan aob) إلى --start/--size لتجاوز منطقة غير قابلة للقراءة؛ ويخمّن scan dissect أنواع الحقول؛ وترفض الأوامر الخاصة بـ Windows العمل في مكان آخر.ملفات ثنائية مبنية مسبقًا لـ Linux وWindows، وخادم MCP وsha256sums.txt: أحدث إصدار.
curl -LO https://github.com/Structio-labs/N0xis/releases/latest/download/n0xis-linux-x86_64
curl -LO https://github.com/Structio-labs/N0xis/releases/latest/download/sha256sums.txt
sha256sum -c --ignore-missing sha256sums.txt
chmod +x n0xis-linux-x86_64 && mv n0xis-linux-x86_64 n0xis && ./n0xis --version
أو ابنِه باستخدام Rust المستقر، على Linux أو Windows: cargo build --workspace --release. يثبّت rust-toolchain.toml
القناة فقط، ويوضح كيفية البناء على Windows دون MSVC Build Tools.
كل أمر يطبع كائن JSON واحد، بما في ذلك أخطاء الوسائط: {"ok":true,"data":…,"meta":…} أو
{"ok":false,"error":…}. خادما الجلسة هما الاستثناء: يطبع serve مظروفًا واحدًا لكل
سطر، مظروف جاهزية ثم واحدًا لكل طلب من طلبات جلسته، ويتحدث remote-serve ببروتوكوله الخاص سطرًا بسطر إلى
جانب --remote-cmd. أضف --pretty لقراءته؛ رمز الخروج غير صفري عند الفشل. فقط --help و
--version يطبعان نصًا عاديًا. تشير الوثائق المرجعية إلى الملف التنفيذي باسم n0x (ln -s n0xis n0x).
n0xis doctor # environment check
n0xis profile --file app.exe # triage: sections, exports, runtime hints
n0xis function discover --file app.exe --pdata # functions from the x64 unwind table
n0xis decomp pseudo --file app.exe --addr 0x140012a00 --style ssa --pretty
n0xis xref to --file app.exe --addr 0x140012a00 # what calls or references it
n0xis rtti scan --file app.exe # C++ classes from RTTI
n0xis provenance trace --pid 4821 --addr 0x1a2b3c40 --kind write --pretty # live: what wrote it