تشخيص أخطاء التشغيل في VM
اتبع هذه الخطوات بالترتيب. تستبعد كل خطوة منها سببًا شائعًا قبل أن تقضي وقتًا في حصر الكود الفاشل.
1. الاختبار وCI
استبعد أولًا دفاعات وقت التشغيل (VM Self Defending وVM Debug Protection وVM Domain Lock): أعد إنتاج العطل باستخدام بناء اختبار يطبّق التجاوزات الواردة في الاختبار وCI. فإذا عمل بناء الاختبار، فالدفاعات تتفاعل مع أدواتك أو بيئتك ولا تعطّل كودك.
2. توافق بيئة التشغيل
تحقّق من أن target وخط البناء وأي تصريحات للبيئة تطابق المكان الذي يعمل فيه الكود فعليًا.
تنطبق حماية VM على الدوال المؤهلة. في وضع root، يمكن للخيار vmWrapTopLevelInitializers أيضًا تغليف المهيِّئات المؤهلة لتحويلها إلى الآلة الافتراضية؛ وتفعّله إعدادات VM المسبقة الحالية. راجع تحذيرات التغطية مثل VMNoFunctionsToVirtualize، واستخدم وضع comment لاختيار الدوال الحساسة صراحةً.
اختصر الحالة الفاشلة إلى أصغر دالة وموضع استدعاء لا يزالان يُعيدان إنتاجها. استخدم وضع comment لتضييق نطاق الدوال التي تُحوَّل إلى الآلة الافتراضية.
إذا كنت تستخدم vmBytecodeArrayEncoding مع vmBytecodeArrayEncodingKeyGetter، فيجب أن تعيد دالة جلب المفتاح المفتاحَ المستخدم وقت البناء بالضبط، ويجب أن يكون هذا المفتاح مضبوطًا بالفعل عند تشغيل الكود المشوَّش؛ وإلا فلن يمكن فك ترميز البايت كود.
توافق بيئة التشغيل · مفتاح Bytecode Array Encoding
3. أرسل تقريرًا عن الخطأ
راسل support@obfuscator.io. كلما أرفقت المزيد مما يلي، أسرعنا في الإصلاح:
- تتبّع المكدس الكامل للخطأ، تمامًا كما يظهر في وحدة التحكم، لا إعادة صياغة له.
- خيارات المشوِّش بصيغة JSON. انسخ كائن الخيارات الذي استخدمته بالكامل (أو اسم الإعداد المسبق مع أي تجاوزات). التفاعلات الدقيقة بين الخيارات شائعة، لذا نحتاج إلى المجموعة الدقيقة.
- تحذيرات البناء، إن وُجدت: قيم
typeوmessageوfunctionNameلكل منها. - إصدار المشوِّش، ويظهر في محدد الإصدار في لوحة التحكم أسفل المحرر. أما لبناءات API وحزمة npm، فهو الحقل
versionفي رسالةresultأوchunk_endمن API. - البيئة: المتصفح وإصداره، وإصدار Node.js، ونظام التشغيل، وأي شيء غير معتاد في بيئة التشغيل (الإضافات، وpolyfills، والكائنات المدمجة المخصصة).
- إعادة إنتاج مصغّرة: يُفضَّل أن تكون الدالة الواحدة من القسم 2، مع أي موضع استدعاء يلزم لإطلاق الخطأ.
- المصدر الأصلي (قبل التشويش) متى أمكن. فالناتج المشوَّش مبهم من جهتنا أيضًا؛ ومن دون المدخلات سنضطر إلى الهندسة العكسية للبايت كود الخاص بنا.
إذا كان المصدر مملوكًا لجهة خاصة، فاذكر ذلك في رسالتك، إذ يمكننا توقيع اتفاقية عدم إفصاح قبل أن تشاركه. لا يمكننا تشخيص أخطاء VM بشكل موثوق دون رؤية نمط المدخلات الذي أنتج البايت كود المعطوب، لذا فإن هذه الخطوة الإضافية تستحق العناء.
