Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
fernflower — जावा बाइटकोड से जावा में डीकंपाइलर, IntelliJ IDEA में उपयोग किया जाता है। | Kitploit
उपकरण/GitHubGitHub/jetbrains/fernflower
स्थैतिक विश्लेषणरिवर्स इंजीनियरिंगबाइनरी विश्लेषण
GitHubjetbrains/fernflower

fernflower

जावा बाइटकोड से जावा में डीकंपाइलर, IntelliJ IDEA में उपयोग किया जाता है।

रिपॉजिटरी देखेंवेबसाइट
4.4k72610 दिन पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Fernflower

Fernflower, Java और संभवतः सामान्यतः एक उच्च-स्तरीय प्रोग्रामिंग भाषा के लिए पहला वास्तविक रूप से कार्यशील विश्लेषणात्मक डीकंपाइलर है।

रिलीज़ Intellij Community repository में प्रकाशित की जाती हैं।

कृपया अपनी बग रिपोर्ट और फीचर अनुरोध issue tracker (सबसिस्टम Java. Decompiler. Engine में) पर भेजें।

IntelliJ उपयोग

Fernflower IntelliJ IDEA में बंडल किया जाता है और इसका प्राथमिक उपयोग डिबगिंग या क्लास फ़ाइलों में नेविगेट करते समय Java कोड दिखाने के लिए किया जाता है।

कमांड लाइन उपयोग

Fernflower को निम्नलिखित कमांड का उपयोग करके स्टैंड-अलोन मोड में कमांड लाइन से चलाया जा सकता है:

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

* का अर्थ है शून्य या अधिक बार

+ का अर्थ है एक या अधिक बार

<source>: डीकंपाइल की जाने वाली फ़ाइलों वाली फ़ाइल या निर्देशिका। निर्देशिकाओं को पुनरावर्ती रूप से स्कैन किया जाता है। अनुमत फ़ाइल एक्सटेंशन class, zip और jar हैं। -e= के साथ उपसर्गित स्रोतों का अर्थ "लाइब्रेरी" फ़ाइलें हैं जिन्हें डीकंपाइल नहीं किया जाएगा लेकिन कक्षाओं या विधियों के बीच संबंधों का विश्लेषण करते समय उन्हें ध्यान में रखा जाएगा। विशेष रूप से पहचानकर्ताओं का नाम बदलना (नीचे ren विकल्प देखें) बाहरी कक्षाओं की जानकारी से लाभ उठा सकता है।

<destination>: परिणामी Java स्रोत को रखने के लिए गंतव्य निर्देशिका

<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): खाली सुपर इन्वोकेशन को छुपाएं
  • hdc (1): खाली डिफ़ॉल्ट कंस्ट्रक्टर को छुपाएं
  • dgs (0): जेनेरिक सिग्नेचर को डीकंपाइल करें
  • ner (1): मान लें कि रिटर्न अपवाद नहीं फेंकता
  • den (1): एनुमरेशन को डीकंपाइल करें
  • rgn (1): getClass() इन्वोकेशन को हटाएं, जब वह एक योग्य नए स्टेटमेंट का हिस्सा हो
  • lit (0): संख्यात्मक लिटरल को "ज्यों का त्यों" आउटपुट करें

पहचानकर्ताओं का नाम बदलना

कुछ ऑबफस्केटर कक्षाओं और उनके सदस्य तत्वों को छोटे, अर्थहीन और सबसे बढ़कर अस्पष्ट नाम देते हैं। ऐसे कोड का पुनर्संकलन करने से बड़ी संख्या में विरोध उत्पन्न होते हैं। इसलिए, डीकंपाइलर को अपनी ओर से तत्वों का नाम बदलने देना उचित है, ताकि प्रत्येक पहचानकर्ता की विशिष्टता सुनिश्चित हो सके।

विकल्प ren (अर्थात -ren=1) नाम बदलने की कार्यक्षमता को सक्रिय करता है। डिफ़ॉल्ट नाम बदलने की रणनीति इस प्रकार है:

  • किसी तत्व का नाम बदलें यदि उसका नाम आरक्षित शब्द है या 3 वर्णों से छोटा है
  • नए नाम एक सरल पैटर्न के अनुसार बनाए जाते हैं: (class|method|field)_<लगातार अद्वितीय संख्या>
    आप इन नियमों को ओवरराइट कर सकते हैं, नाम बदलते समय डीकंपाइलर द्वारा आमंत्रित 4 मुख्य विधियों का अपना कार्यान्वयन प्रदान करके। बस एक क्लास पास करें जो org.jetbrains.java.decompiler.main.extern.IMemberIdentifierRenamer को लागू करता है, विकल्प urc में (उदा. -urc=com.example.MyRenamer) Fernflower को। क्लास एप्लिकेशन क्लासपाथ पर उपलब्ध होनी चाहिए।

प्रत्येक विधि का अर्थ नामकरण से स्पष्ट होना चाहिए: toBeRenamed यह निर्धारित करता है कि तत्व का नाम बदला जाएगा या नहीं, जबकि अन्य तीन क्रमशः कक्षाओं, विधियों और फ़ील्ड के लिए नए नाम प्रदान करते हैं।

विकास

एक निष्पादन योग्य स्टार्टअप स्क्रिप्ट बनाएं:

root@kitploit:~
./gradlew :installDist

स्टार्टअप स्क्रिप्ट build/install/engine/bin में उत्पन्न होती है।

योगदान

Fernflower IntelliJ Community प्रोजेक्ट का हिस्सा है, योगदान का स्वागत है, पैच भेजने का पसंदीदा तरीका IntelliJ कम्युनिटी रिपॉजिटरी में पुल रिक्वेस्ट बनाना है। पैच जमा करते समय, कृपया योगदान दिशानिर्देशों का पालन करें।

लाइसेंस

Fernflower Apache License Version 2.0 के तहत लाइसेंस प्राप्त है।

श्रेय

Fernflower मूल रूप से Stiver द्वारा विकसित किया गया था, लेकिन 2014 से JetBrains द्वारा बनाए रखा गया है। ForgeFlower से कुछ पैच इस रिपॉजिटरी में विलय किए गए थे। Fernflower का मिरror भी Andrew McRae द्वारा लंबे समय तक बनाए रखा गया था।

नामकरण

सही नाम Fernflower है, न कि FernFlower।

टूल डाउनलोड करें
  • asc (0): स्ट्रिंग और कैरेक्टर लिटरल में गैर-ASCII वर्णों को यूनिकोड एस्केप के रूप में एनकोड करें
  • bto (1): int 1 को बूलियन true के रूप में व्याख्या करें (एक कंपाइलर बग के लिए वर्कअराउंड)
  • nns (0): सिंथेटिक एट्रीब्यूट सेट न होने की अनुमति दें (एक कंपाइलर बग के लिए वर्कअराउंड)
  • uto (1): नामहीन प्रकारों को java.lang.Object के रूप में मानें (एक कंपाइलर आर्किटेक्चर दोष के लिए वर्कअराउंड)
  • udv (1): यदि उपलब्ध हो, तो डीबग जानकारी से वेरिएबल नामों का पुनर्निर्माण करें
  • ump (1): यदि उपलब्ध हो, तो संबंधित एट्रीब्यूट से पैरामीटर नामों का पुनर्निर्माण करें
  • rer (1): खाली अपवाद रेंज हटाएं
  • fdi (1): फाइनली स्ट्रक्चर को डी-इनलाइन करें
  • mpm (0): प्रति डीकंपाइल विधि अधिकतम अनुमत प्रसंस्करण समय, सेकंड में। 0 का अर्थ कोई ऊपरी सीमा नहीं
  • ren (0): अस्पष्ट (या अस्पष्ट) कक्षाओं और क्लास तत्वों का नाम बदलें
  • urc (-): IIdentifierRenamer इंटरफ़ेस को लागू करने वाली उपयोगकर्ता-प्रदत्त क्लास का पूरा नाम। इसका उपयोग यह निर्धारित करने के लिए किया जाता है कि किन क्लास पहचानकर्ताओं का नाम बदला जाना चाहिए और नए पहचानकर्ता नाम प्रदान करता है (देखें "पहचानकर्ताओं का नाम बदलना")
  • inn (1): IntelliJ IDEA-विशिष्ट @NotNull एनोटेशन की जाँच करें और यदि मिले तो डाले गए कोड को हटा दें
  • lac (0): लैम्ब्डा एक्सप्रेशन को अनाम कक्षाओं में डीकंपाइल करें
  • nls (0): आउटपुट के लिए उपयोग करने के लिए एक नई पंक्ति वर्ण परिभाषित करें। 0 - '\r\n' (Windows), 1 - '\n' (Unix), डिफ़ॉल्ट OS-निर्भर है
  • ind: इंडेंटेशन स्ट्रिंग (डिफ़ॉल्ट 3 स्पेस है)
  • crp (0): जहाँ संभव हो, रिकॉर्ड पैटर्न का उपयोग करें
  • cps (0): जहाँ संभव हो, पैटर्न वाले स्विच का उपयोग करें
  • log (INFO): एक लॉगिंग स्तर, संभावित मान TRACE, INFO, WARN, ERROR हैं
  • iec (0): डीकंपाइल करते समय संपूर्ण क्लासपाथ को संदर्भ में शामिल करें
  • isl (1): सरल लैम्ब्डा एक्सप्रेशन को इनलाइन करें
  • ucrc (1): अनावश्यक रिकॉर्ड कंस्ट्रक्टर और गेटर्स को छुपाएं
  • cci (1): जाँचें कि try-with-resources में संसाधन वास्तव में AutoCloseable इंटरफ़ेस को लागू करता है या नहीं
  • jvn (0): किसी भी स्थानीय वेरिएबल नाम को JAD शैली के नामों से ओवरराइट करें
  • jpr (0): JAD नामकरण में पैरामीटर नाम शामिल करें
  • pbo (0): जब बिटवाइज़/शिफ्ट ऑपरेटरों को अंकगणित के साथ मिलाया जाता है, तो स्पष्ट करने वाले कोष्ठक जोड़ें