2017-08-04 15 views
6

Minecraft için bir sunucu-addon ile çalışıyorum, bu gizlenmeyecek. Her zaman şaşırtmacadan sonra, orijinal sınıf isimlerini geri getirmenin imkansız olduğunu düşündüm, çünkü bunlar tamamen kaldırıldı ve ben her yerde okudum. Bir süreliğine tamir ettikten sonra, konsunda yakalanmamış bir istisna göründüğünde, sınıfların gizlenmiş isimlerini (ör., Cratereloaded.aT.d) ve daha sonra parantez içinde, genellikle sınıfın adı ve rahatsız edici çizgi, orijinal sınıf adını gösterir, bu da aslında deobfuscated olabileceğine inanmamı sağlar. Ancak, denediğim tüm araçların hiçbiri, orijinal sınıf adını geri yükleyebilecek gibi gözükmüyor, ancak bazı onaltılık sınavlardan sonra, orijinal sınıf isminin aslında derlenmiş '.class' dosyalarına gömülü olduğunu doğruladım.Gizlenmiş kodun Stacktrace, göze çarpmayan sınıf adını gösterir?

Sınıf isimlerini otomatik olarak geri yüklemek için bunu kullanabilen herhangi bir araç var mı?

Örnek StackTrace:

[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] 

cevap

6

Ben CrateReloaded bir göz attım. Kodun gizlenmiş olmasına rağmen, yazarın hata ayıklama bilgilerini kaldırmayı unuttuğunu görüyoruz. Bu nedenle, yığın yığınında bir şekilde sihirli olarak deobfuscation görüyorsunuz.

birkaç bağımsız decompilerlar vardır - yakın kaynak kodu kalite için JARs koda için kullanılabilir CFR, Fernflower JD Çekirdekli, JAD Procryon vb. Kaynak oluşturmak için Decompilers online gibi çevrimiçi kaynakları da kullanabilirsiniz.

Eclipse kullanıyorsanız, Eclipse Marketplace üzerinden Eclipse Class Decompiler eklentisini eklemenizi öneririz. Bu eklenti yukarıda belirtilen dekomponentlerini destekler ve sınıf dosyalarını anında çözer. Örneğin, CrateReloaded düzenli bağımlılık veya Maven bağımlılığı olarak eklendiyse, proje gezgini aracılığıyla JAR'a ayrıntılı inceleme yapabilirsiniz. Bir sınıfını açmak, onu decompiled formunda oluşturur. Daha da önemlisi, bu kod çözme, gizlenmiş koddaki adımları ayıklarken otomatik olarak çalışır.

Ancak şiddetle Karartılmış Ağızlık/Bukkit eklentilere dayalı etmemenizi öneririz.

  • GPL'ye karşı gider. Bukkit GPL, Bukkit kullanan kod ve dağıtılan da GPL'dir. Bu nedenle yazar, kodunun tüm haklarını koruyarak, ... nesne kodunu oluşturmak, yüklemek ve çalıştırmak için bir araç sağlamalı ve bu etkinliklerini denetlemek için komut dosyaları da dahil olmak üzere işi değiştirmelidir. kodlu bir yardımcı program kullanmak yerine, bir program kullanarak kodlanmış bir formda kod oluşturma veya çalışmalarını sistem kitaplığı olarak kabul etme gibi bazı istisnalar vardır. Kasıtlı olarak kandırıcı kod yanlış mesaj gönderir, özellikle Bukkit, Apache, Google vs.

  • Eklenti yazarları bir nedenden ötürü gelirler.Birçok büyük eklentisini gördüm çünkü yazarları ilgisini yitirmiş, gerçek bir iş bulmuştu, vb. Kaynak kodun mevcut olması, sunucu operatörlerinin kendi sunucuları ve diğerleri için kendi içlerinde versiyonunu muhafaza etmelerini sağlar. geliştirmeye devam edin.

  • En iyi niyetlere rağmen, bir eklenti kodu düşük kalitede olabilir. Bir ihtiyatlı sunucu operatörü, yazarın deneyiminin ve kodun kalitesini ölçmek için eklenti kaynak kodunu her zaman gözden geçirecektir. Bazı eklentiler, 'un bir sunucuya zarar verebileceği kasıtlı veya kasıtsız güvenlik açıkları içerebilir. Kaynak kodun mevcut olması, operatörün ve topluluğun kodu incelemesini sağlar. Bazı eklentiler, özelliğine sahip sünme sorunlarından muzdarip olabilir ve çok fazla uğraşmaya çalışmaya başlayabilirler. Bir eklentinin çekirdek özellikleri istenebilse de, zamanla eklenen diğer wizbang, düzgün, soğuk özellikleri, daha fazla yapılandırma gerektirecek şekilde, mümkün ise, özelliklerin devre dışı bırakılması için . Buna İsviçre Çakısı Sendromu diyoruz. Bu gibi durumlarda, sunucu operatörleri yeni sunucu sürümleri yayınlandığında kendi sürümlerini ve kodunu güncellemelerini yapabilirler. Eklenti kamu tarafından erişilebilir değil özel sunucu için amaçlanıyorsa

Açıkçası, bu endişelerin bazıları uygulanamaz. Ama öyleyse, lütfen bunları dikkate alın.

+0

Eklentinin amacı kesinlikle özel bir sunucunun bir parçasıydı ve bu soruyu sorduğum sırada zaten işe yarayan bir hacky çözümü vardı. CrateReloaded'in yazarı, API'sı ile ilgili bir sorunu işaret ettikten sonra sizinle bağlantı kurdu ve gelecekteki güncellemelerde eklentinin daha fazlasını gösterme görevini memnuniyetle kabul etti. – XXLuigiMario

+0

Mükemmel. Yazarın GPL ile uyumlu olan kodu sağlamaya istekli olduğunu duyduğuma sevindim. – Frelling

İlgili konular