Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
View8 — يفكّك تجميع كود V8 الثنائي المتسلسل (ملفات JSC) إلى كود JavaScript عالي المستوى قابل للقراءة ويشبه الكود الأصلي، مع دعم لإصدارات متعددة من V8، وإخراج شجري، وتسمية حتمية للدوال لتحليل البرمجيات الخبيثة. | Kitploit
أدوات/GitHubGitHub/suleram/view8
التحليل الثابتتحليل الثغرات الأمنيةالهندسة العكسيةتحليل البرمجيات الخبيثةتحليل الملفات الثنائية
GitHubsuleram/view8

View8

يفكّك تجميع كود V8 الثنائي المتسلسل (ملفات JSC) إلى كود JavaScript عالي المستوى قابل للقراءة ويشبه الكود الأصلي، مع دعم لإصدارات متعددة من V8، وإخراج شجري، وتسمية حتمية للدوال لتحليل البرمجيات الخبيثة.

عرض المستودع
3756010منذ شهر واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

View8

View8 هي أداة تحليل ثابتة مصممة لفك تجميع كائنات V8 bytecode المتسلسلة (ملفات JSC) إلى كود قابل للقراءة عالي المستوى. لتحليل وتفكيك هذه الكائنات المتسلسلة، تستخدم View8 ثنائي V8 مُجمّعًا ومُعدّلًا. ونتيجة لذلك، تُنتج View8 مخرجات نصية مشابهة لجافاسكريبت.

المتطلبات

  • Python 3.x
  • ثنائي المفكك. الإصدارات المتاحة:
    • إصدار V8 9.4.146.24 (المستخدم في Node V16.x)
    • إصدار V8 10.2.154.26 (المستخدم في Node V18.x)
    • إصدار V8 11.3.244.8 (المستخدم في Node V20.x)

للإصدارات المُجمّعة، قم بزيارة صفحة الإصدارات.

الاستخدام

وسائط سطر الأوامر

  • --inp, -i: اسم ملف الإدخال.
  • --out, -o: مسار المخرج. اعتمادًا على الخيارات المحددة، قد يكون المخرج ملفًا واحدًا أو شجرة مجلدات.
  • --input_format, -f: تحديد صيغة الإدخال. الخيارات هي:
    • raw: الإدخال هو ملف JSC خام.
    • disassembled: ملف الإدخال مفكك بالفعل.
    • serialized: الإدخال مفكك التجميع بالفعل ومخزن في صيغة متسلسلة. الصيغة المتسلسلة الحالية هي Python pickle؛ استخدم الإدخال الموثوق فقط.
  • --export_format, -e: تحديد صيغة (صيغ) التصدير. الخيارات هي v8_opcode وtranslated وdecompiled وserialized. يمكن دمج خيارات متعددة. الافتراضي: decompiled.
  • --path, -p: مسار ثنائي المفكك. مطلوب إذا كان الإدخال بصيغة raw ولم تتمكن View8 من تحديد موقع المفكك المطابق تلقائيًا.
  • --scope: نشر وسائط النطاق. الافتراضي: 1.
  • --normalize: استبدال معرفات الدوال المشتقة من العناوين بأسماء حتمية بناءً على ترتيب التحليل.
  • --normalize-map [CSV]: أثناء استخدام --normalize، كتابة ملف CSV يربط كل اسم دالة أصلي باسمه المُطبّع. عند حذف المسار، تستنتج View8 <output>.name_map.csv من --out، أو من --inp عندما لا يتم تعيين مسار مخرج.
  • --tree, -t: تقسيم المخرج إلى بنية شجرية بدلاً من تخزين جميع الدوال في ملف واحد. حدد الدالة التي ستُستخدم كجذر الشجرة. للبدء من الدالة الرئيسية الافتراضية، استخدم start.
  • --split_mode: وضع تقسيم الشجرة. الخيارات هي declarers وcalls وreferences. الافتراضي: declarers.
  • --inline_depth, -d: في وضعي calls وreferences، تضمين الدوال التي يمكن الوصول إليها من جذر الشجرة المحدد حتى العمق N في ملف الشجرة الرئيسي. العمق 0 يعني الجذر المحدد فقط؛ العمق 1 يشمل المستدعين/المراجع المباشرة؛ العمق 2 يشمل توابعهم. لا يُستخدم مع declarers.
  • --inline_branch_limit, -l: في وضع الشجرة، تضمين فروع فرعية كاملة تحتوي على N دوال على الأكثر في ملف الشجرة الرئيسي عندما يتم تضمين الفروع الفرعية بواسطة --inline_depth. يتم حفظ الفروع الأكبر بشكل منفصل.
  • --split_depth: في وضعي calls وreferences، تحديد مدى عمق اجتياز فروع الاستخدام المُصدَّرة. الافتراضي: 4.
  • --include, -n: ملف يحتوي على الدوال المراد تضمينها في المخرج.
  • --exclude, -x: ملف يحتوي على الدوال المراد استبعادها من المخرج.
  • --func: عرض دالة محددة.
  • --show_all: في وضع عرض الدالة، إظهار الأسطر المميزة كمخفية أيضًا.
  • --verbosity, -v: مستوى التفصيل. النطاق المقبول: 0 إلى 3.
  • الاستخدام الأساسي

    لفك تجميع ملف V8 bytecode وتصدير الكود المفكك:

    root@kitploit:~
    python view8.py -i input_file -o output_file

    مسار المفكك

    افتراضيًا، تكتشف View8 إصدار V8 bytecode لملف الإدخال باستخدام VersionDetector.exe وتبحث تلقائيًا عن ثنائي مفكك متوافق في مجلد Bin. يمكن تغيير ذلك بتحديد ثنائي مفكك مختلف باستخدام خيار --path أو -p:

    root@kitploit:~
    python view8.py -i input_file -o output_file --path /path/to/disassembler

    معالجة الملفات المفككة

    لتخطي عملية التفكيك وتقديم ملف مفكك بالفعل كإدخال، استخدم خيار --input_format disassembled أو -f disassembled:

    root@kitploit:~
    python view8.py -i input_file -o output_file -f disassembled

    أسماء الدوال الحتمية وملف CSV للربط

    استخدم --normalize لاستبدال أسماء الدوال المشتقة من العناوين بمعرفات حتمية. للحفاظ على العلاقة بين الأسماء الأصلية والمطبّعة، أضف --normalize-map:

    root@kitploit:~
    python view8.py \
      --input_format disassembled \
      --inp sample.jsc.disasm.txt \
      --normalize \
      --normalize-map \
      --out decompiled/sample.dec.txt \
      --export_format decompiled serialized

    يكتب هذا ملف decompiled/sample.dec.name_map.csv بالأعمدة التالية:

    root@kitploit:~
    original_name,normalized_name
    func_start_0x268514e9dcd9,func_start_0x100000000
    func_rne_0x268514eb0779,func_rne_0x100000001

    يمكن أيضًا تقديم مسار CSV صريح:

    root@kitploit:~
    python view8.py \
      --input_format disassembled \
      --inp sample.jsc.disasm.txt \
      --normalize \
      --normalize-map mappings/sample.names.csv \
      --out decompiled/sample.dec.txt

    إنشاء ومعالجة الملفات المتسلسلة

    أحيانًا يكون من المفيد فك تجميع الملف إلى صيغة متسلسلة تحافظ على الكائنات والهياكل المُحلَّلة. قد يكون هذا النوع من المخرجات أسهل في المعالجة اللاحقة من الصيغة النصية، على سبيل المثال أثناء مزيد من إزالة التعتيم. لإنشاء مخرج متسلسل، استخدم صيغة التصدير serialized:

    root@kitploit:~
    python view8.py -i input_file -o output_file -e serialized

    تحذير أمني: الصيغة المتسلسلة الحالية هي ملف Python pickle (.pkl). يمكن أن يؤدي إلغاء تسلسل البيانات من مصادر غير موثوقة إلى تنفيذ كود عشوائي. قم فقط بتحميل الملفات المتسلسلة التي أنشأتها بنفسك.

    لتحميل مخرج متسلسل مرة أخرى وتصديره بصيغة أخرى، استخدم --input_format serialized أو -f serialized:

    root@kitploit:~
    python view8.py -i input_file -o output_file -f serialized

    صيغ التصدير

    حدد صيغة (صيغ) التصدير باستخدام خيار --export_format أو -e. يمكنك دمج صيغ متعددة:

    • v8_opcode
    • translated
    • decompiled
    • serialized

    على سبيل المثال، لتصدير كل من V8 opcodes والكود المفكك جنبًا إلى جنب:

    root@kitploit:~
    python view8.py -i input_file -o output_file -e v8_opcode decompiled

    افتراضيًا، الصيغة المستخدمة هي decompiled.

    مخرج الشجرة

    بالنسبة للحمولات المجمّعة الكبيرة، قد يكون كتابة جميع الدوال المفككة في ملف واحد صعب التحليل. يقسم مخرج الشجرة الجذر المحدد والدوال ذات الصلة إلى بنية مجلدات.

    استخدم --tree لتحديد جذر الشجرة:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_out/ \
      --tree start

    القيمة الخاصة start تعني الدالة الرئيسية الافتراضية التي استعادتها View8.

    أوضاع تقسيم الشجرة

    يمكن تقسيم الشجرة باستخدام أحد الأوضاع الثلاثة:

    • declarers: يتبع علاقات التصريح المعجمي، أي الدوال المُصرَّح عنها داخل أو تحت دالة أخرى. هذا مفيد لفهم البنية المجمّعة أو الشبيهة بالوحدات، لكنه لا يمثل تدفق التنفيذ.
    • calls: يتبع استدعاءات الدوال المباشرة، مثل func_x(...). هذا مفيد لاستعادة الهيكل التنفيذي من جذر محدد.
    • references: يتبع جميع مراجع الدوال المرئية، وليس فقط الاستدعاءات المباشرة. يشمل ذلك عمليات الاسترجاع ومعالجات التصدير ومعالجات المسارات وخصائص الكائنات والدوال المعينة الأخرى. هذا الوضع مفيد لاكتشاف أسطح القدرات، لكنه قد ينتج أشجارًا أكبر بكثير من calls.

    مثال:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls

    تضمين الملف الرئيسي

    يحتوي ملف الشجرة الرئيسي دائمًا على دالة الجذر المحددة.

    في وضعي calls وreferences، يتحكم --inline_depth في عدد مستويات الرسم البياني المضمنة في الملف الرئيسي:

    root@kitploit:~
    --inline_depth 0  -> الجذر فقط
    --inline_depth 1  -> الجذر + المستدعين/المراجع المباشرة
    --inline_depth 2  -> الجذر + المستدعين/المراجع المباشرة + توابعهم

    على سبيل المثال، ينشئ الأمر التالي نظرة عامة تنفيذية مدمجة تحتوي على الجذر والمستدعين المباشرين:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 1

    لتضمين طبقة استدعاء إضافية واحدة:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 2

    --inline_depth مدعوم فقط مع وضعي calls وreferences. لا يُستخدم مع declarers.

    تقسيم الفروع

    يتم حفظ الفروع الفرعية الكبيرة في ملفات منفصلة. في وضعي calls وreferences، يتحكم --split_depth في مدى عمق اجتياز فروع الاستخدام المُصدَّرة:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 1 \
      --split_depth 5

    يتحكم خيار --inline_branch_limit في ما إذا كانت الفروع الفرعية الكاملة الصغيرة مضمنة أيضًا في الملف الرئيسي:

    root@kitploit:~
    --inline_branch_limit 3

    هذا يعني أن الفروع الفرعية الكاملة التي تحتوي على 3 دوال على الأكثر قد يتم تضمينها في الملف الرئيسي. يتم حفظ الفروع الأكبر بشكل منفصل.

    في وضعي calls وreferences، يتم تضمين الفروع الفرعية فقط عندما يتضمن --inline_depth المحدد بالفعل دوال فرعية. على سبيل المثال، --inline_depth 0 يعني الجذر فقط، لذلك لا يتم تضمين الفروع الفرعية حتى لو كانت صغيرة.

    سير العمل الموصى به للشجرة

    للحصول على نظرة عامة تنفيذية مدمجة:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 1 \
      --split_depth 5

    للحصول على نظرة عامة معمارية أوسع:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 2 \
      --split_depth 5

    لعمليات الاسترجاع المُصدَّرة والمعالجات والمسارات وأسطح القدرات:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_refs/ \
      --tree start \
      --split_mode references \
      --inline_depth 1 \
      --split_depth 3

    للبنية المعجمية أو الشبيهة بالوحدات:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_declarers/ \
      --tree start \
      --split_mode declarers \
      --split_depth 3

    وضع عرض الدالة

    لعرض دالة محددة، استخدم --func:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --func func_name

    لإظهار الأسطر المميزة كمخفية أيضًا:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --func func_name \
      --show_all

    VersionDetector.exe

    يتم تخزين إصدار V8 bytecode كقيمة تجزئة (hash) في بداية الملف. فيما يلي الخيارات المتاحة لـ VersionDetector.exe:

    • -h: استرداد إصدار وإرجاع قيمة التجزئة الخاصة به.
    • -d: استرداد قيمة تجزئة بصيغة little-endian وإرجاع الإصدار المقابل باستخدام القوة الغاشمة.
    • -f: استرداد ملف وإرجاع إصداره.
    تنزيل الأداة