
قم بهندسة عكسية لجافا سكريبت مبهمة بصريًا. قم بتسلسل التحويلات، وافحص تغييرات AST، واكتب إضافات إزالة الإبهام قابلة لإعادة الاستخدام.
منصة عمل مرئية لفك تشويش JavaScript. قم ببناء سلاسل تحويل، وتنقّل عبرها، واكتب إضافاتك الخاصة.


يكشف هذا التطبيق شجرة النحو المجرد (AST) لبرنامج JavaScript. جاءت الفكرة أثناء تحليل عينة برمجية ضارة مرتبطة بـ obfuscatio.io، مما قادني لتعلم المزيد عن BabelJS لفك التشويش. إذا حاولت من قبل إجراء هندسة عكسية لـ JS مشوش (مثل: حزم webpack، مخرجات obfuscator.io، عينات برمجية ضارة مضغوطة)، فأنت تعلم كم هو مؤلم. تتيح لك هذه الأداة:
npm install
npm start
# افتح http://localhost:3000
هذا كل شيء.
الشريط الجانبي الأيسر - جميع التحويلات المتاحة (المدمجة + وصفة الإضافات) بما في ذلك سلسلة الوصفة. (فكر في Cyberchef)
المنتصف - محررات الإدخال/الإخراج. ألصق الكود المشوش على اليسار وشاهد الكود المحول على اليمين.
اللوحات اليمنى - عارض AST، محلل النطاق، ملخص سهل المشاهدة.

يتيح لنا BabelJS عرض النطاق والروابط. وهذا مفيد بشكل خاص لرؤية ما إذا كانت هناك متغيرات غير مستخدمة على سبيل المثال. تسمح لنا هذه النظرة أيضًا بالبحث عن المواقع التي يُشار فيها إلى متغير ما.

اضغط على الزر + أو Ctrl+N لفتح محرر النص البرمجي. التحويلات هي مجرد كود JavaScript مع الوصول إلى:
// المتغيرات العالمية المتاحة:
ast // AST المعالجة من Babel
traverse // التجول في الشجرة: traverse({ Identifier(path) { ... } })
t // أنواع Babel: t.isStringLiteral(node)، t.identifier('x')
config // إعدادات المستخدم من بطاقة الوصفة
stats // تتبع تغييراتك: stats.replaced = 5
parser // تحليل الكود: parser.parse('var x = 1')
generate // توليد الكود: generate(node).code
run // مساعد التنفيذ: run('1+1') => 2 (خطر. يُقصد تشغيله على جهازك الخاص داخل صندوق حماية)
مثال - إزالة كل السلاسل النصية "debug" (StringLiteral):
// ما يلي سيظهر كمعاملات في سلسلة الوصفة كما في لقطة الشاشة التالية
const targetValue = config.targetValue || 'debug';
const removeMatches = config.removeMatches !== false;
traverse({
StringLiteral(path) {
if (path.node.value === targetValue) {
if (removeMatches) {
path.remove();
stats.removed = (stats.removed || 0) + 1;
}
}
}
});
يمكنك اختيار:
تظهر لقطة الشاشة أدناه:

لاحظ أن هذه قد تفشل اعتمادًا على أسلوب التشويش وقد تحتاج إلى نصوص مخصصة. يمكنك أيضًا تعديلها وحفظها كنص مخصص جديد.
| الاسم | الوظيفة |
|---|---|
| Beautify | تنسيق الكود بشكل مرتب |
| Constant Folding | 1 + 2 → 3، "a" + "b" → "ab" |
| Decode Strings | فك تشفير \x48\x65\x6c\x6c\x6f → "Hello" |
| Inline Array Values | تضمين الوصول البسيط لعناصر المصفوفة |
| Inline String Array | تضمين مصفوفات السلاسل المستخدمة من قبل أدوات التشويش |
| Opaque Predicate Removal | إزالة الشروط الصحيحة/الخاطئة دائمًا |
| Remove Comments | إزالة جميع التعليقات من الكود |
| Remove IIFE | فتح أغلفة (function(){...})() |
| Remove Unused Code | حذف المتغيرات والوظائف الميتة |
| Simplify Literals | !0 → true، void 0 → undefined |
ضع ملفات .js الخاصة بك في المجلدات الفرعية plugins/<category>/. ستظهر في الشريط الجانبي مجمعة حسب المجلد.

على سبيل المثال:
Bracket-to-dot-notation.js → "Decode Strings")plugins/Utilities/ → الفئة "nyx")/**
* Bracket to Dot Notation
* تغيير أشياء مثل console["log"] إلى console.log
*
* الفئة: utilities
*/
// محرر النصوص - Ctrl+Enter للتشغيل، Ctrl+E للإغلاق
// استخدم traverse(visitor) لتعديل AST
// الوصول إلى 't' لأنواع Babel
traverse({
MemberExpression(path) {
if(path.node.computed === true){
// هذه هي كتابة القوسين
prop = path.node.property
if(t.isStringLiteral(prop) &&
/^[a-zA-Z_][a-zA-Z_0-9]*$/.test(prop.value)
){
path.node.computed = false; // الخطوة 1
// الخطوة 2: تغيير الحرفية إلى معرف
path.node.property = t.identifier(prop.value)
}
}
}
});
هناك طريقتان لإضافة المعاملات:
targetValue و removeMatches)const targetValue = config.targetValue || 'debug';
const removeMatches = config.removeMatches !== false;

يتضمن:

| المفتاح | الإجراء |
|---|---|
Ctrl+E | تبديل محرر النصوص |
Ctrl+Shift+E | تبديل لوحة التقييم (خطير) |
Ctrl+S | حفظ المشروع |
لاحظ أن الملف المستقل قد يواجه مشاكل إذا كان هناك الكثير من العقد المتداخلة. قد لا يعمل الحل البديل أحيانًا.
للبناء باستخدام npm، يمكننا استخدام ما يلي
npm run build # لنظام ويندوز فقط
يتم الإخراج إلى dist/. انسخ مجلد plugins/ بجانب الملف التنفيذي إذا كنت تريد تحويلاتك المخصصة.
يمكن للكود المتداخل بعمق (مثل JSFuck) أن يتسبب في انفجار المكدس. يحاول سكريبت البناء زيادة حجمه تلقائيًا على ويندوز. إذا حدث تجاوز للمكدس، حاول التشغيل من المصدر باستخدام npm start (يستخدم --stack-size=65536)
لم أعرف كيفية زيادة حجم المكدس عند البناء في ملف تنفيذي مستقل. أرجو إخباري إذا كنت تعرف الطريقة!
بُني باستخدام:

أسئلة؟ مشاكل؟ افتح مشكلة على GitHub.