2013-04-01 8 views
7

मुझे लगता है कि कुछ जावा डीकंपलर पठनीय जावा स्रोतों के लिए बाइटकोड को विघटित कर सकते हैं, मुझे आश्चर्य है कि जावा से आने वाले सभी बाइटकोड (अन्य जेवीएम भाषा नहीं) को जावा स्रोतों में फिर से तैयार किया जा सकता है?यदि जावा स्रोतों से संकलित सभी बाइटकोड जावा स्रोतों के लिए decompiled किया जा सकता है?


अद्यतन

क्षमा करें, मुझे सवाल और अधिक स्पष्ट करते हैं।

बस जेवीएम पर सामान्य जावा कोड (कोई एंड्रॉइड, कोई बाइटकोड एन्हांस नहीं, कोई एओपी, कोई obfuscation) के बारे में बात करते हैं, और मुझे उम्मीद है कि बाइटकोड decompiled किया जा सकता है। लेकिन मुझे नहीं पता कि जावा कोड के रूप हैं जो बाइटकोड में संकलित हैं, कभी भी पठनीय जावा स्रोतों के लिए तैयार नहीं होंगे।

+0

अधिकांश जावा कोड मूल भाषा में लिखे गए हैं ... इसलिए आप विधि घोषणा कर सकते हैं लेकिन इसका शरीर नहीं ... इसके अलावा, उदाहरण के लिए एंड्रॉइड स्रोतों को खराब कर देगा .. यह आपके लिए कठिन बना रहा है अगर आप इसे संकुचित करते हैं तो भी पढ़ने के लिए। – chuthan20

+1

सिद्धांत रूप में, किसी भी nonobfuscated कक्षा उचित रूप से अच्छी तरह से decompiled किया जा सकता है। व्यावहारिक रूप से, सभी मौजूदा डिकंपलर विशेष रूप से विचित्र और जटिल कक्षाओं के लिए असफल हो जाएंगे। कई संकीर्ण प्राइमेटिव्स के प्रकार कास्टिंग अच्छी तरह से संभाल नहीं करते हैं। – Antimony

उत्तर

6

मुझे आश्चर्य है अगर सब बाईटकोड जो जावा (नहीं अन्य JVM भाषा) से आता है फिर से जावा सूत्रों के decompiled जा सकता है?

जवाब

सं

है

decompilers सभी जावा bytecodes के लिए काम करने की गारंटी नहीं है:

  • एक ठेठ अस्पष्टकर्ता जानबूझ कर इस तरह से bytecodes को पुनर्व्यवस्थित होगा कि आम डीकम्पाइलर पठनीय स्रोत कोड का उत्पादन नहीं करेगा ... और शायद मान्य स्रोत कोड नहीं देगा।

  • कई डीकंपलरों में नए जावा संरचनाओं से निपटने में समस्याएं हैं।

  • कई डिकंपेलरों को "जटिल" स्रोत कोड से संकलित बाइटकोड के साथ समस्याएं होती हैं।

  • भले ही वे compilable कोड उत्पन्न करते हैं, कोई गारंटी है कि कोड सही होगा।

लब्बोलुआब यह है कि एक decompiler के रूप में ही खुफिया और उसके लेखक यह कर सकते हैं के परिश्रम के रूप में अच्छा है। मैंने कभी एक परिपूर्ण के बारे में नहीं सुना है।

+0

मेरा मतलब सामान्य जावा कोड से संकलित बाइटकोड है। आप कुछ जावा कोड लिखते हैं, इसे संकलित करते हैं, फिर इसे संकुचित करते हैं। क्या हम हमेशा पठनीय जावा स्रोत प्राप्त कर सकते हैं? – Freewind

+0

एक तरफ के रूप में, मैं वर्तमान में जावा डिकंपेलर पर काम कर रहा हूं और कोड के स्निपेट एकत्र करने में दिलचस्पी रखता हूं जो मौजूदा डिकंपेलरों के लिए परेशान साबित हुआ है। मैं किसी भी विशिष्ट उदाहरण के लिए आभारी रहूंगा जो कोई भी प्रदान कर सकता है। ध्यान दें कि मैं अच्छी तरह से इरादे गए कंपाइलर्स द्वारा उत्सर्जित कोड की तलाश में हूं (यानी, obfuscated नहीं)। यह एक ओपन सोर्स डिकंपेलर होगा, अगर इससे कोई फर्क पड़ता है। –

+0

@ फ्रीविंड - यह एक "सही" डिकंपेलर लिखने के लिए अनुमानित रूप से संभव है, लेकिन व्यवहार में ऐसा कोई भी "परिपूर्ण" डिकंपेलर मौजूद नहीं है, AFAIK। –

4

जावा बाइटकोड को जावा स्रोत कोड पर वापस ले जाया जा सकता है। विघटित स्रोत आम तौर पर सटीक नहीं दिखता है, लेकिन समान कार्यक्षमता होगी। यदि आप चिंतित हैं कि कोई आपके स्रोत को विघटित कर सकता है, तो आप मदद के लिए obfuscators (ProGuard) का उपयोग कर सकते हैं।

+0

ProGuard एक obfuscator का अधिक नहीं है, हालांकि यह कुछ भी नहीं, और सबसे महत्वपूर्ण रूप से मुफ़्त है। लेकिन AFAIK, ProGuard कोई प्रवाह obfuscation नहीं करता है। यह केवल सबकुछ का नाम देता है और विशेषताओं को स्ट्रिप्स करता है, जो डिकंपील्ड स्रोत को समझने में कठोर बनाता है, लेकिन वास्तव में डिकंपेलर को रोकता नहीं है। – Antimony

0

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

मैंने इस उपकरण का उपयोग किया।

java.decompiler.free.fr

संबंधित मुद्दे