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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
fernflower — مفكك تحويل من بايت كود جافا إلى جافا، يُستخدم في IntelliJ IDEA. | Kitploit
أدوات/GitHubGitHub/jetbrains/fernflower
التحليل الثابتالهندسة العكسيةتحليل الملفات الثنائية
GitHubjetbrains/fernflower

fernflower

مفكك تحويل من بايت كود جافا إلى جافا، يُستخدم في IntelliJ IDEA.

عرض المستودعالموقع الإلكتروني
4.4k726منذ 10 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

Fernflower

Fernflower هو أول مفكك تحليلي عملي يعمل لجافا وربما لأي لغة برمجة عالية المستوى بشكل عام.

يتم نشر الإصدارات في مستودع IntelliJ Community.

يرجى إرسال تقارير الأخطاء وطلبات الميزات إلى [متتبع المشكلات] (في النظام الفرعي Java. Decompiler. Engine).

استخدام IntelliJ

يُضمَّن Fernflower في IntelliJ IDEA ويُستخدم بشكل أساسي لعرض كود جافا أثناء التصحيح أو التنقل عبر ملفات class.

استخدام سطر الأوامر

يمكن تشغيل Fernflower من سطر الأوامر في وضع مستقل باستخدام الأمر التالي:

root@kitploit:~
java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>

* تعني صفر مرات أو أكثر

+ تعني مرة واحدة أو أكثر

<source>: ملف أو دليل يحتوي على ملفات سيتم فك ترجمتها. يتم فحص الدلائل بشكل متكرر. امتدادات الملفات المسموح بها هي class و zip و jar. المصادر المسبوقة بـ -e= تعني ملفات "مكتبة" لن يتم فك ترجمتها ولكن سيتم أخذها في الاعتبار عند تحليل العلاقات بين الفئات أو الطرق. خاصة إعادة تسمية المعرفات (انظر الخيار ren) يمكن أن تستفيد من معلومات حول الفئات الخارجية.

<destination>: الدليل الوجهة لوضع كود جافا الناتج فيه

<option>=<value>: خيار سطر أوامر مع القيمة المقابلة (انظر "خيارات سطر الأوامر" أدناه).

أمثلة

root@kitploit:~
java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\
root@kitploit:~
java -jar fernflower.jar -dgs=1 c:\Temp\binary\library.jar c:\Temp\binary\Boot.class c:\Temp\source\

خيارات سطر الأوامر

باستثناء mpm و urc، فإن القيمة 1 تعني تفعيل الخيار، 0 - إلغاء التفعيل. القيمة الافتراضية، إن وجدت، مذكورة بين قوسين.

عادةً، سيتم تغيير الخيارات التالية من قبل المستخدم، إن وجدت: hes, hdc, dgs, mpm, ren, urc أما باقي الخيارات فيمكن تركها كما هي: فهي موجهة لمهندسي الهندسة العكسية المحترفين.

  • rbr (1): إخفاء طرق الجسر
  • rsy (0): إخفاء أعضاء الفئة الاصطناعية
  • din (1): فك ترجمة الفئات الداخلية
  • dc4 (1): طي مراجع الفئات 1.4
  • das (1): فك ترجمة التأكيدات
  • hes (1): إخفاء استدعاء super الفارغ
  • hdc (1): إخفاء المنشئ الافتراضي الفارغ
  • dgs (0): فك ترجمة التوقيعات العامة
  • ner (1): افتراض أن العائد لا يرمي استثناءات
  • den (1): فك ترجمة التعدادات
  • rgn (1): إزالة استدعاء getClass() عندما يكون جزءًا من عبارة new مؤهلة
  • lit (0): إخراج القيم الرقمية "كما هي"
  • (0): ترميز الأحرف غير ASCII في السلاسل وحرفية الأحرف كـ Unicode escapes

إعادة تسمية المعرفات

بعض أدوات التعتيم تمنح الفئات وعناصر أعضائها أسماء قصيرة لا معنى لها وفوق كل شيء غامضة. إعادة ترجمة هذا الكود تؤدي إلى عدد كبير من التعارضات. لذلك، من المستحسن السماح لمفكك الترجمة بإعادة تسمية العناصر بدوره، ضمانًا لتفرد كل معرف.

الخيار ren (أي -ren=1) يفعّل وظيفة إعادة التسمية. استراتيجية إعادة التسمية الافتراضية كالتالي:

  • إعادة تسمية عنصر إذا كان اسمه كلمة محجوزة أو أقصر من 3 أحرف
  • تُبنى الأسماء الجديدة وفق نمط بسيط: (class|method|field)_<رقم فريد متتالي> يمكنك تجاوز هذه القواعد بتوفير تطبيقك الخاص للطرق الأربع الرئيسية التي يستدعيها المفكك أثناء إعادة التسمية. ببساطة قم بتمرير فئة تنفذ واجهة org.jetbrains.java.decompiler.main.extern.IMemberIdentifierRenamer في الخيار urc (مثلًا -urc=com.example.MyRenamer) إلى Fernflower. يجب أن تكون الفئة متاحة على classpath التطبيق.

يجب أن يكون معنى كل طريقة واضحًا من التسمية: toBeRenamed تحدد ما إذا كان العنصر سيتم إعادة تسميته، بينما الثلاث الأخرى توفر أسماء جديدة للفئات والطرق والحقول على التوالي.

التطوير

بناء سكريبت بدء تشغيل قابل للتنفيذ:

root@kitploit:~
./gradlew :installDist

يتم إنشاء سكريبت بدء التشغيل في build/install/engine/bin.

المساهمة

Fernflower هو جزء من مشروع IntelliJ Community، المساهمات مرحب بها، والطريقة المفضلة لإرسال التصحيحات هي إنشاء طلب سحب في مستودع مجتمع IntelliJ. عند تقديم التصحيحات، يرجى اتباع إرشادات المساهمة.

الترخيص

Fernflower مرخص بموجب رخصة Apache الإصدار 2.0.

الإسناد

تم تطوير Fernflower في الأصل بواسطة Stiver ولكن تمت صيانته بواسطة JetBrains منذ 2014. تم دمج بعض التصحيحات من ForgeFlower في هذا المستودع. كما تم صيانة مرآة Fernflower بواسطة Andrew McRae لفترة طويلة جدًا.

التسمية

الاسم الصحيح هو Fernflower، وليس FernFlower.

تنزيل الأداة
asc
  • bto (1): تفسير int 1 على أنها boolean true (حل مؤقت لخطأ مترجم)
  • nns (0): السماح بعدم تعيين السمة الاصطناعية (حل مؤقت لخطأ مترجم)
  • uto (1): اعتبار الأنواع غير المسماة كـ java.lang.Object (حل مؤقت لخلل في بنية المترجم)
  • udv (1): إعادة بناء أسماء المتغيرات من معلومات التصحيح، إذا وجدت
  • ump (1): إعادة بناء أسماء المعلمات من السمات المقابلة، إذا وجدت
  • rer (1): إزالة نطاقات الاستثناء الفارغة
  • fdi (1): إزالة تضمين هياكل finally
  • mpm (0): أقصى وقت معالجة مسموح به لكل طريقة مفككة، بالثواني. 0 يعني عدم وجود حد أعلى
  • ren (0): إعادة تسمية الفئات وعناصر الفئة الغامضة (أو المشوشة)
  • urc (-): الاسم الكامل لفئة يقدمها المستخدم تطبق واجهة IIdentifierRenamer. يُستخدم لتحديد معرفات الفئة التي يجب إعادة تسميتها ويوفر أسماء معرفات جديدة (انظر "إعادة تسمية المعرفات")
  • inn (1): التحقق من وجود تعليق @NotNull الخاص بـ IntelliJ IDEA وإزالة الكود المُدرج إذا وجد
  • lac (0): فك ترجمة تعبيرات لامبدا إلى فئات مجهولة
  • nls (0): تعريف حرف سطر جديد لاستخدامه في الإخراج. 0 - '\r\n' (Windows)، 1 - '\n' (Unix)، الافتراضي يعتمد على نظام التشغيل
  • ind: سلسلة المسافة البادئة (الافتراضي هو 3 مسافات)
  • crp (0): استخدام أنماط السجل حيثما أمكن
  • cps (0): استخدام switch مع أنماط حيثما أمكن
  • log (INFO): مستوى تسجيل، القيم الممكنة هي TRACE, INFO, WARN, ERROR
  • iec (0): تضمين classpath بالكامل في السياق عند فك الترجمة
  • isl (1): تضمين تعبيرات لامبدا البسيطة
  • ucrc (1): إخفاء المنشئ والدوال الجالبة غير الضرورية للسجل
  • cci (1): التحقق مما إذا كان المورد في try-with-resources يقوم بالفعل بتطبيق واجهة AutoCloseable
  • jvn (0): استبدال أي أسماء متغيرات محلية بأسماء على نمط JAD
  • jpr (0): تضمين أسماء المعلمات في تسمية JAD
  • pbo (0): إضافة أقواس توضيحية عند خلط العوامل البتية/النقل مع العمليات الحسابية