JavaScript obfuscator
مُعاد التسمية، مُشفَّر، وما زال يعمل
يعيد هذا الـ JavaScript obfuscator كتابة برنامج بحيث تكفّ الأسماء عن الدلالة على شيء وتكفّ هيئة الشيفرة عن الإشارة إلى المنطق. أشّر على التحويلات، وأبقِ بادئة الاسم التي تحبها، ويفحص الـ obfuscator أن الناتج ما زال يُحلَّل. لا شيء مما تلصقه يغادر المتصفح.
- مجانيالسعر
- 4التحويلات
- أبدًايشغّل الشيفرة
- لا شيءالرفع
JavaScript obfuscator
الصق الكود أو أفلت ملفاتك — دون رفع أي شيء
النتيجة المُشوَّشة
- الأصل
- —
- مُشوَّش
- —
- تغيّر الحجم
- —
- الأسماء المُعاد تسميتها
- —
- النصوص المخفية
- —
- استغرق
- —
جاهز. الصق JavaScript ثم اضغط تشويش.
ماذا يفعل JavaScript obfuscator
يسلّم الكود المصدري شيئين معًا: ماذا يفعل البرنامج وكيف يفعله. لذلك يحصل القارئ الذي يستلم وحدة على المنطق مجانًا.
يفصل الـ obfuscator الاثنين. يحافظ هذا الـ JavaScript obfuscator على السلوك ويزيل الأسماء والنصوص الحرفية والأرقام البسيطة.
يعمل من شجرة الصياغة لا من النص. وبما أن الشجرة تعرف أصلًا أي اسم متغير وأيه خاصية، يمكن للمُعيد التسمية أن يعمل حسب النطاق لا عالميًا.
أربعة تحويلات تقع خلف محرر واحد، وكل منها مربع تأشير. لذلك يمكنك إعادة تسمية برنامج وحده، أو تشغيلها كلها لقراءة أصعب كثيرًا.
لا شيء يُشغَّل ولا يُرفع. وبما أن القارئ يحلل الوحدة ويعيد كتابتها فقط، فإن برنامجًا تحت بند سرية لا يختلف هنا عن برنامج عام.
كيف يعيد JavaScript obfuscator كتابة سكربت
تبني التمريرة الأولى شجرة الصياغة، تمامًا كما يفعل المدقق. والقاعدة هي ECMA-262، لذلك تطابق الشجرة ما قد يبنيه المحرك.
من الشجرة يمر المُعيد التسمية بكل نطاق بدوره. فيأخذ كل من المعامل والمتغير المحلي واسم الدالة واسم الصنف اسمًا غامضًا جديدًا، من مدى لا يمكن أن يتصادم مع اسم مستخدم بالفعل.
شيئان يُتركان عمدًا. خاصية كائن ليست متغيرًا، لذلك تحتفظ obj.userName بهجائها. والاسم الذي يمتد خارج الوحدة، كاسم مُصدَّر أو عنصر عام تستدعيه الصفحة، يبقى أيضًا، إلا أن تُفعّل إعادة تسمية المستوى الأعلى.
تنتج كل تمريرة شجرتها الخاصة بدل تحرير النص. ولا يعمل الكاتب إلا في النهاية، لذلك لا يُعاد كتابة برنامج لا يُحلَّل نصف كتابة أبدًا.
تعيد الخطوة الأخيرة تحليل الناتج. وبما أن الـ obfuscator يقرأ نتيجته قبل عرضها، فإن تمريرة أنتجت شيفرة غير صالحة تعيد لك ملفك الأصلي.
التحويلات الأربعة، بالترتيب الذي تعمل به
إعادة التسمية تعمل أولًا. تصبح المعاملات والمتغيرات المحلية وأسماء الدوال والأصناف أسماءً غامضة قصيرة مثل _0x1a2b، بنطاق يجعل دالتين تستخدمان الاسم نفسه بأمان. وتبقى الأسماء المُصدَّرة وأسماء المستوى الأعلى إلا أن تطلبها كذلك.
تمريرة النصوص تعمل بعدها. تنتقل كل سلسلة حرفية إلى مصفوفة في الأعلى، ويصبح كل استخدام بحثًا بالفهرس عبر وسيط صغير يدوّر الترتيب. وبما أن النصوص لم تعد بجانب الشيفرة التي تقرأها، يكفّ البحث عن رسالة عن إيجاد أي شيء مفيد.
يتبع ذلك تشفير الأرقام. يُطبع كل عدد صحيح بسيط بالنظام الست عشري، فيصبح 1000 هو 0x3e8. القيمة لا تتغير؛ لكن الأرقام تكفّ عن القراءة كرقم مألوف.
يأتي الضغط أخيرًا. تمر الوحدة كلها عبر المصغِّر، الذي يزيل التعليقات والمسافات، لذلك يصبح الناتج كتلة كثيفة بدل أسطر مرتبة.
ما لا يفعله التشويش
لا يخفي شيفرتك عن قارئ مُصرّ. فكل تحويل هنا قابل للعكس من حيث المبدأ، ولأغلبها أداة موجودة.

لا يحفظ سرًّا آمنًا. المفتاح المُترجَم داخل سكربت المتصفح مفتاح يملكه المتصفح، وكل من يحمّل الصفحة يستطيع قراءته. وبما أن التشويش يرفع الجهد فقط، فإن مفتاح API يبقى على خادم.
لا يمنع النسخ. ما زال بإمكان أحد أن يحفظ ملفًا معاد الكتابة ويقدّمه ويشغّله. والرخصة والعقد هما ما يعالج ذلك، وليس أي منهما خطوة بناء.
لا يجعل وحدة أسرع، وقد يبطّئها. وبما أن عمليات البحث في النصوص تكلّف بعض العمل وقت التشغيل، فالمقايضة قراءة أسهل مقابل بضعة أجزاء من الثانية.
ولا يحمي شيفرة على الخادم أيضًا. فمن يملك وصولًا للجهاز يملك الملف الأصلي، مهما تلقى المتصفح.
بادئة الاسم وإبقاء الناتج صالحًا
بادئة الاسم هي الإعداد الوحيد خلف المربعات، وهي موجودة لتجنّب تصادم. فمولّد يُصدِر مساعدًا اسمه a أو b قد يتصادم مع عنصر عام في الصفحة، لذلك تزيل بادئة قصيرة مميزة مثل _0x الخطر.

تبقى إعادة تسمية المستوى الأعلى مطفأة افتراضيًا. الشيفرة الملصوقة غالبًا وحدة كلاسيكية، حيث تصبح دالة المستوى الأعلى خاصية على window يستدعيها ملف آخر بالاسم، وإعادة تسميتها هناك ستكسر مستدعيًا لا يراه الـ obfuscator.
داخل وحدة أو IIFE لا يصل شيء من الخارج إلى تلك الأسماء، لذلك تفعيل إعادة تسمية المستوى الأعلى هناك آمن ويخفي أكثر بكثير.
ينتهي كل تشغيل بتحليل ناتجه. وبما أن الـ obfuscator يقرأ نتيجته قبل عرضها، فإنه يبلّغ عن تحويل أنتج شيفرة غير صالحة بدل تسليم الشيفرة.
شاهد JavaScript obfuscator أثناء العمل
يشرح فيديو قصير كل خطوة. ثم اختر لغتك أدناه، وشغّل الترجمة النصية إن أردت.
كيف تستخدم JavaScript obfuscator
أربع خطوات، ولا واحدة منها تحتاج حسابًا.
- 1
الصق الوحدة
الصق ملفًا كاملًا أو وحدة. وبما أن القارئ يبني شجرة صياغة، عليك أولًا أن تترجم إضافة مثل JSX أو تعليق نوع بعيدًا.
- 2
أشّر على التحويلات
ثم اختر أي التمريرات تعمل. إعادة تسمية المحلية وإخفاء النصوص هما الزوج الآمن؛ أما إعادة تسمية المستوى الأعلى فهي ما تتركه مطفأً حين يستدعي ملف آخر أسماءك.
- 3
اضبط بادئة الاسم
ثم أعطِ الأسماء المولَّدة بادئة قصيرة مميزة مثل _0x. هكذا لا يتصادم عنصر عام في الصفحة مع مساعد مولَّد.
- 4
افحص الحجم ثم اختبر
أخيرًا، اقرأ صف الحجم وانسخ الناتج. بعد ذلك شغّله على صفحة حقيقية، لأن البرنامج وهو يؤدي عمله وحده يثبت أن إعادة التسمية آمنة.
لماذا تستخدم JavaScript obfuscator هذا
خمسة أسباب، وكل منها عن القراءة لا عن القفل.
إعادة التسمية تعمل حسب النطاق
وبما أن المُعيد التسمية يعمل من شجرة الصياغة، يمكن لدالتين استخدام الاسم القصير نفسه دون تصادم. لذلك يخرج ملف كبير صغيرًا وصحيحًا بدل أن ينكسر.
كل تمريرة اختيار
أربعة مربعات بدل زر واحد. لذلك يمكنك إعادة تسمية وحدة وحدها، وهي التحويل الأقل خطرًا والأكثر فائدة.
الـ obfuscator يعيد تحليل ناتجه
وبما أن الخطوة الأخيرة تقرأ نتيجتها، فإنها تبلّغ عن تحويل أنتج شيفرة غير صالحة. لذلك يُلتقط بناء مكسور هنا لا في وحدة تحكم المتصفح.
لا شيء يُرفع
تجري كل إعادة الكتابة في هذا التبويب. لذلك لا يختلف ملف عميل تحت بند سرية هنا عن ملف عام.
صف الحجم صادق
التشويش يجعل برنامجًا أكبر عادة، والصف يقول بكم. لذلك تكون المقايضة ظاهرة قبل أن تلتزم بها.
عادات تُبقي الشيفرة المُشوَّشة تعمل
ست عادات تُبقي ملفًا معاد الكتابة يعمل في الإنتاج.
- احفظ الملف المقروء في التحكم بالإصدارات هكذا يسير البناء في اتجاه واحد فقط. وبما أنه لا ينبغي لأحد تحرير ملف مُشوَّش يدويًا، فإن مستودعًا يحفظ الناتج فقط فقد مصدره.
- لا تشوّش أبدًا مكتبة تنشرها يصل المستهلك إلى صادراتك بالاسم، لذلك تكسر إعادة التسمية كل مستدعٍ. ومن هنا تحتفظ حزمة منشورة بأسمائها الحقيقية وأنواعها.
- اترك إعادة تسمية المستوى الأعلى مطفأة افتراضيًا إعادة تسمية اسم مستوى أعلى تكسر أي ملف آخر يستدعيه، ووحدة كلاسيكية تضع دوالها على window حيث يصلها المستدعون. وبما أن ذلك لا يظهر إلا وقت التشغيل، اجعلها اختيارية واحفظها للوحدات.
- اترك الـ source map خارج الإنتاج الـ source map تراجع مثالي، ونشر واحدة بجانب البرنامج يلغي العمل كله. لذلك احفظ الخريطة لتقارير الأعطال وقدّمها من لا مكان عام.
- اختبر بعد التشويش لا قبله وحدها الوحدة التي تفعل الصواب تثبت أن إعادة التسمية آمنة. لذلك يقع الفحص على الناتج لا على المدخل.
- قل ما هو في ملاحظات البناء القائم على الصيانة مستقبلًا حين يلقى ملفًا مُشوَّشًا لا ينبغي أن يخمّن. لذلك يوفّر سطر في الـ readme عن التمريرات التي تعمل بعد ظهر يوم كامل.
ست طرق يكسر بها التشويش عملية بناء
كل واحدة من هذه تمرّ بالتحليل وتفشل في الإنتاج.
معاملته كأمان
انتبه هنا. كل تحويل قابل للعكس، وقارئ مُصرّ سيستعيد المنطق. لذلك يرفع التشويش كلفة القراءة، ولا يحمي شيئًا بذاته.
إعادة تسمية اسم يقرأه شخص آخر
عنصر عام تستدعيه الصفحة، أو دالة رد يمررها مضيف، أو اسم في قالب من الخادم. وبما أن العالم الخارجي ما زال يستخدم الهجاء القديم، يسقط الاستدعاء على لا شيء.
إعادة تسمية أسماء يستدعيها ملف آخر
دالة مستوى أعلى يستدعيها ملف آخر بالاسم تكفّ عن الوجود بذلك الاسم. لذلك يفشل الاستدعاء وقت التشغيل، بعد وقت طويل من بدو إعادة التسمية سليمة.
ترك source map على الخادم
طلب واحد للخريطة يتراجع عن البناء كله. وبما أن المنقّح يقرأ الخريطة، فهي تراجع كامل ودقيق.
الاعتماد عليه لإخفاء سر
مفتاح أو رمز في الوحدة ما زال في البرنامج؛ على المتصفح أن يقرأه لاستخدامه. ومن هنا يرفع التشويش جهد إيجاده فقط لا غير، لذلك يبقى السر على خادم.
التشويش بدل التصغير
الاثنان ليسا اختيارًا بين أفضل وأسوأ، لأنهما يستهدفان أشياء مختلفة. شغّل المصغِّر للبايتات والـ obfuscator لجهد القراءة، بهذا الترتيب.
أسئلة عن JavaScript obfuscator
هل هذا الـ JavaScript obfuscator مجاني؟
نعم. لا حساب ولا حد ولا خطة مدفوعة. لذلك تُشوّش ما تشاء من السكربتات.
هل يجعل التشويش شيفرتي آمنة؟
لا، ولا أداة تستطيع ذلك. إنه يرفع جهد قراءة الوحدة ولا يخفي شيئًا عن قارئ مُصرّ. لذلك يبقى السر على الخادم، لا في برنامج داخل المتصفح.
ماذا يغيّر فعلًا؟
أربعة أشياء على الأكثر: ماذا تصبح الأسماء، وأين تعيش النصوص، وكيف تُطبع الأرقام، وهل تُزال المسافات. أما السلوك فيبقى كما كان تمامًا.
هل يشغّل شيفرتي؟
أبدًا. يحلل الـ obfuscator الوحدة ويعيد كتابتها، ولا يستدعي أي دالة. لذلك لا يمكن لمقطع غير معروف أن يعمل وأنت تفتحه.
هل ستعمل النتيجة بعد؟
إنها تُحلَّل، والخطوة الأخيرة تثبت ذلك. أما السلوك فمسألة أخرى، لذلك مرّر الناتج عبر اختباراتك قبل أن يُطلق.
هل أعيد تسمية أسماء المستوى الأعلى؟
فقط حين لا يستدعيها شيء خارج السكربت. داخل وحدة أو IIFE يكون ذلك آمنًا؛ أما سكربت كلاسيكي دواله على window فلا، لأن ملفًا آخر يستدعيها بالاسم.
هل يصغّر السكربت؟
غالبًا لا؛ نقل النصوص إلى مصفوفة وكتابة الأسماء بالكامل قد يضيف بايتات. وعلى أي حال يبلّغ صف الحجم بالتغيير، ويستعيد الضغط جزءًا منه.
ماذا يفعل تشفير الأرقام إلى hex؟
يطبع كل عدد صحيح عادي بالنظام الست عشري، فيظهر 1000 بصيغة 0x3e8. القيمة متطابقة؛ لكن الأرقام تكفّ عن القراءة كرقم مألوف من النظرة الأولى.
لماذا يوجد حقل بادئة للاسم؟
لأن مساعدًا مولَّدًا اسمه a قد يتصادم مع عنصر عام في الصفحة. لذلك تزيل بادئة قصيرة مميزة ذلك الخطر.
هل أستطيع التراجع عن التشويش؟
ليس من هنا. يمكن لقارئ أن يرتب ملفًا معاد التسمية يدويًا، وأن يطوي مصفوفة نصوص، لكن لا مهمة منها تلقائية. ولهذا بالضبط يبطّئ القارئ.
هل يُرفع سكربتي إلى أي مكان؟
لا. تجري كل إعادة الكتابة في تبويب المتصفح هذا. لذلك يبقى ملف عميل تحت بند سرية على جهازك.
هل أستطيع لصق مقطع بدل سكربت كامل؟
نعم. دالة واحدة تكفي، وتبقى إعادة التسمية داخلها. لذلك يمكنك تجربة مقطع قبل الالتزام بالسكربت كله.
هل يتعامل مع JSX أو TypeScript؟
ليس مباشرة، لأن كليهما يضيف صياغة فوق JavaScript. لذلك شغّل المترجم أولًا وشوّش ما ينتجه.
هل أحتاج إلى source map؟
لتقارير الأعطال نعم، ويجب أن تبقى خاصة. وبما أن الخريطة المنشورة تراجع مثالي، احفظها في متتبع أخطائك ولا تنشرها علنًا.
هل هو نفسه التصغير؟
لا. المصغِّر يزيل المسافات ويقصّر الأسماء المحلية داخل سكربت. أما الـ obfuscator فيذهب أبعد ويعيد تشكيل الشيفرة، ويكلّف بايتات أكثر.
بأي ترتيب أشغّلها؟
صغّر أولًا، ثم شوّش، ثم دقّق. وبما أن المدقق يسمّي الأسطر، افحص الملف المقروء قبل أن يلمسه أي تحويل.
هل يستطيع تشويش مجلد كامل؟
في هذه الصفحة لا. سكربت واحد في كل مرة هو الاتفاق هنا، وأداة البناء هي المكان المناسب لمجلد.
هل يعمل على الهاتف؟
نعم. تتراكم اللوحات وتتوزع الإعدادات في صفوف. لذلك يمكن تشغيل سريع بعيدًا عن المكتب، رغم أن ملفًا طويلًا أسهل بلوحة مفاتيح.
هل أستطيع تنزيل النتيجة؟
نعم. يحفظ التنزيل الناتج كملف JavaScript، فتضعه في خطوة بناء دون نسخ ولصق.
هل أحتاج حسابًا أو إضافة؟
لا. لا تسجيل ولا مكوّن إضافي ولا إضافة تُضاف. لذلك تُغلق التبويب حين ينتهي البناء.
أدوات تسير مع هذه
أربع صفحات يقود إليها العمل نفسه عادة.
شغّل هذا أولًا. وبما أن المصغِّر يزيل بايتات ويترك الأسماء، فهو النصف الأرخص من خطوة البناء نفسها.
افتح الأداة ←ثم تحقّق أن المدخل والمخرج يُحلَّلان. وبما أن خطأ صياغة يوقف السكربت كله، فإن ذلك الفحص يسبق إطلاق أي شيء.
افتح الأداة ←حين يصلك ملف مضغوط أو معاد التسمية من مكان آخر، تعيد هذه الصفحة ترتيبه. وبما أن سطرًا واحدًا كثيفًا صعب التتبع بالعين، فإعادة الإزاحة هي الخطوة الأولى.
افتح الأداة ←نصف ورقة الأنماط من البناء نفسه. وبما أن المتصفح يحمّل كل تعليق وسطر جديد، تستحق الورقة المعاملة نفسها.
افتح الأداة ←
ارفع جهد قراءة سكربتك
أشّر على التحويلات والصق السكربت. لا شيء يُشغَّل ولا يُرفع، ويفحص الـ obfuscator كل تمريرة قبل أن يسلّمك النتيجة. لذلك عامله كمطبّ لا كقفل، فهو يؤدي عمله جيدًا.