2017-08-04 14 views
6

मैं Minecraft के लिए एक सर्वर-एडन के साथ काम कर रहा हूं, जो obfuscated होता है। मैंने हमेशा सोचा है कि, obfuscation के बाद, मूल वर्ग के नामों को पुनर्स्थापित करना असंभव है क्योंकि वे पूरी तरह से हटा दिए जाते हैं, और यही वह है जो मैंने हर जगह पढ़ा है। थोड़ी देर के लिए इसके साथ झुकाव के बाद, मैंने देखा कि जब कंसोल में एक अपरिचित अपवाद दिखाई देता है, तो यह कक्षाओं के obfuscated नाम दिखाता है (उदाहरण के लिए cratereloaded.aT.d पर), और फिर कंस्ट्रैसिस के अंदर, जहां यह आमतौर पर दिखाता है कक्षा और अपमानजनक रेखा का नाम, यह मूल वर्ग का नाम दिखाता है, जो मुझे विश्वास दिलाता है कि यह वास्तव में deobfuscated किया जा सकता है। लेकिन मैंने कोशिश की सभी औजारों में से कोई भी मूल वर्ग नाम को पुनर्स्थापित करने में सक्षम नहीं है, भले ही कुछ हेक्स परीक्षा के बाद मैंने मूल वर्ग नाम की पुष्टि की है वास्तव में संकलित '.class' फ़ाइलों में एम्बेडेड है।obfuscated कोड का Stacktrace unobfuscated कक्षा का नाम प्रदर्शित करता है?

क्या कोई ऐसा उपकरण है जो कक्षा नामों को स्वचालित रूप से पुनर्स्थापित करने के लिए उपयोग करने में सक्षम है?

उदाहरण स्टैकट्रेस: ​​

[03:49:57] [Server thread/ERROR]: Error occurred while disabling CrateReloaded v1.3.97.1 (Is it up to date?) 
java.lang.NullPointerException: null 
    at cratereloaded.aT.d(CrateManager.java:303) ~[?:?] 
    at cratereloaded.aT.bm(CrateManager.java:298) ~[?:?] 
    at cratereloaded.aT.cleanup(CrateManager.java:83) ~[?:?] 
    at cratereloaded.aX.disable(Manager.java:27) ~[?:?] 
    at cratereloaded.b.cleanup(CrateReloaded.java:122) ~[?:?] 
    at cratereloaded.b.onDisable(CrateReloaded.java:109) ~[?:?] 
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:266) ~[spigot.jar:git-Spigot-596221b-2c5c611] 
    at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:361) [spigot.jar:git-Spigot-596221b-2c5c611] 
    at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:421) [spigot.jar:git-Spigot-596221b-2c5c611] 
    at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:414) [spigot.jar:git-Spigot-596221b-2c5c611] 
    at org.bukkit.craftbukkit.v1_12_R1.CraftServer.disablePlugins(CraftServer.java:342) [spigot.jar:git-Spigot-596221b-2c5c611] 
    at net.minecraft.server.v1_12_R1.MinecraftServer.stop(MinecraftServer.java:464) [spigot.jar:git-Spigot-596221b-2c5c611] 
    at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:612) [spigot.jar:git-Spigot-596221b-2c5c611] 
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131] 

उत्तर

6

मैं CrateReloaded पर एक नज़र ले लिया। ऐसा लगता है कि हालांकि कोड obfuscated किया गया है, लेखक डीबगिंग जानकारी को हटाने के लिए भूल गए। इसलिए, आप स्टैक ट्रेस में कुछ हद तक जादुई रूप से deobfuscation देख रहे हैं।

कई स्टैंडअलोन डीकम्पाइलर हैं - सीएफआर, Fernflower, जद-कोर, JAD, Procryon, आदि है कि निकट स्रोत कोड गुणवत्ता में जार डिकंपाइल के लिए इस्तेमाल किया जा सकता है। स्रोत बनाने के लिए आप Decompilers online जैसे ऑनलाइन संसाधनों का भी उपयोग कर सकते हैं।

यदि आप एक्लिप्स का उपयोग करते हैं, तो मैं ग्रहण बाज़ार के माध्यम से Eclipse Class Decompiler प्लगइन जोड़ने की अनुशंसा करता हूं। यह प्लगइन उपर्युक्त डीकंपलर का समर्थन करता है और फ्लाई पर कक्षा फ़ाइलों को डीकोड करेगा। उदाहरण के लिए, यदि क्रेटरलोडेड को नियमित निर्भरता या मेवेन निर्भरता के रूप में शामिल किया गया है, तो आप प्रोजेक्ट एक्सप्लोरर के माध्यम से JAR में ड्रिल कर सकते हैं। कक्षा खोलने से इसे अपने अपूर्ण रूप में प्रस्तुत किया जाता है। सबसे महत्वपूर्ण बात यह है कि यह अपघटन स्वचालित रूप से काम करता है जब obfuscated कोड में चरणों को डीबग करना।

हालांकि, मैं दृढ़ता से आप समझ से परे पानी की कल/Bukkit प्लगइन्स पर निर्भर नहीं प्रोत्साहित करते हैं।

  • यह जीपीएल के खिलाफ चला जाता है। बुक्किट जीपीएल है, कोड जो बुक्किट का उपयोग करता है और वितरित भी जीपीएल है। इसलिए लेखक, कोड के सभी अधिकारों को बनाए रखने के दौरान, पर अन्य लोगों के लिए साधन प्रदान करना चाहिए ... ऑब्जेक्ट कोड जेनरेट, इंस्टॉल और चलाएं और गतिविधियों को नियंत्रित करने के लिए स्क्रिप्ट सहित कार्य को संशोधित करने के लिए। कुछ अपवाद हैं, जैसे लेखक को यूटिलिटी का उपयोग करने के बजाय एक obfuscated रूप में विकसित करते हैं, या उनके काम को सिस्टम लाइब्रेरी के रूप में माना जाता है। जानबूझकर obfuscating कोड गलत संदेश भेजता है, विशेष रूप से क्योंकि यह बुक्किट, अपाचे, Google, आदि जैसे कई अन्य लोगों द्वारा लिखे गए कोड के कारण केवल कार्यात्मक है, जिनमें से सभी खुले स्रोत हैं।

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

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

  • कुछ प्लगइन में जानबूझकर या अनजान भेद्यताएं हो सकती हैं जो किसी सर्वर से समझौता कर सकती है। स्रोत कोड उपलब्ध होने से ऑपरेटर और समुदाय को कोड की जांच करने की अनुमति मिलती है।

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

जाहिर है, अगर आपके प्लगइन एक निजी सर्वर जनता की पहुँच में नहीं करने के लिए है, इन चिंताओं में से कुछ नहीं लागू होते हैं। लेकिन अगर ऐसा है, तो कृपया उन पर विचार करें।

+0

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

+0

उत्कृष्ट। मुझे यह सुनकर खुशी हो रही है कि लेखक कोड प्रदान करने के लिए तैयार है, जो जीपीएल के अनुरूप है। – Frelling

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