2017-08-04 16 views
6

Tôi đang làm việc với máy chủ bổ sung cho Minecraft, điều này sẽ bị làm xáo trộn. Tôi đã luôn luôn nghĩ rằng, sau khi làm xáo trộn, không thể khôi phục lại tên lớp ban đầu bởi vì chúng bị loại bỏ hoàn toàn, và đó là những gì tôi đã đọc ở khắp mọi nơi. Sau khi tinkering với nó một lúc, tôi nhận thấy rằng khi một ngoại lệ chưa bắt đầu xuất hiện trong giao diện điều khiển, nó cho thấy tên của các lớp (ví dụ: tại cratereloaded.aT.d), và sau đó trong dấu ngoặc đơn, nơi nó thường hiển thị tên của lớp và dòng vi phạm, nó cho thấy tên lớp ban đầu, dẫn tôi tin rằng nó thực sự có thể được deobfuscated. Nhưng của tất cả các công cụ tôi đã thử, không ai có thể khôi phục tên lớp ban đầu, mặc dù sau khi kiểm tra một số hex tôi đã xác nhận tên lớp gốc IS thực sự được nhúng trong các tệp '.class' đã biên dịch.Stacktrace của mã obfuscated hiển thị tên lớp unobfuscated?

Có công cụ nào có khả năng sử dụng công cụ đó để tự động khôi phục tên lớp không?

Ví dụ 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] 

Trả lời

6

tôi đã xem xét CrateReloaded. Có vẻ như mặc dù mã đã bị làm xáo trộn, tác giả quên xóa thông tin gỡ lỗi. Do đó, bạn đang nhìn thấy sự mất ổn định một cách kỳ diệu trong dấu vết ngăn xếp.

Có một số trình giải mã độc lập - CFR, Fernflower, JD-Core, JAD, Procryon, v.v ... có thể được sử dụng để dịch ngược JAR sang mã nguồn gần như chất lượng. Bạn cũng có thể sử dụng các tài nguyên trực tuyến như Decompilers online để tạo nguồn.

Nếu bạn sử dụng Eclipse, tôi khuyên bạn nên thêm plugin Eclipse Class Decompiler qua Thị trường Eclipse. Plugin này hỗ trợ các phần mềm giải mã được đề cập ở trên và sẽ giải mã các tệp lớp khi đang di chuyển. Ví dụ: nếu CrateReloaded được bao gồm dưới dạng phụ thuộc thường xuyên hoặc phụ thuộc Maven, bạn có thể đi sâu vào JAR thông qua trình khám phá dự án. Mở một lớp sẽ hiển thị nó ở dạng được biên dịch. Quan trọng hơn, việc giải mã này hoạt động tự động khi gỡ lỗi các bước thành mã bị xáo trộn.

Tuy nhiên, Tôi đặc biệt khuyên bạn không nên dựa vào các plugin Spigot/Bukkit bị làm phiền.

  • Nó đi ngược lại GPL. Bukkit là GPL, mã sử dụng Bukkit và được phân phối là cũng là GPL. Do đó tác giả, trong khi giữ lại tất cả các quyền đối với mã , phải cung cấp phương tiện cho người khác để ... tạo, cài đặt và chạy mã đối tượng và sửa đổi công việc, bao gồm tập lệnh để kiểm soát các hoạt động đó. Có một số trường hợp ngoại lệ, chẳng hạn như tác giả đang phát triển mã số dưới dạng bị xáo trộn thay vì sử dụng tiện ích hoặc có công việc được coi là làm thư viện hệ thống. Mã cố tình làm xáo trộn gửi thông điệp sai, đặc biệt vì nó chỉ hoạt động vì mã được viết bởi nhiều người khác như Bukkit, Apache, Google, v.v. tất cả đều là mã nguồn mở.

  • Tác giả plugin đến và đi vì một lý do nào đó.Tôi đã thấy nhiều plugin tuyệt vời vì tác giả của họ bị mất hứng thú, có công việc thực sự, v.v. Có sẵn mã nguồn, cho phép các nhà khai thác máy chủ duy trì phiên bản nội bộ cho máy chủ của họ và những người khác. tiếp tục phát triển .

  • Mặc dù có ý định tốt nhất, mã plugin có thể có chất lượng thấp. Nhà điều hành máy chủ thận trọng sẽ luôn xem xét mã nguồn của plugin để đánh giá trải nghiệm của tác giả và chất lượng của mã.

  • Một số plugin có thể chứa các lỗ hổng cố ý hoặc không chủ ý mà có thể làm hỏng máy chủ. Có sẵn mã nguồn cho phép nhà điều hành và cộng đồng xem xét mã.

  • Một số plugin có thể bị tính năng creep và bắt đầu cố gắng thực hiện quá nhiều. Trong khi các khả năng cốt lõi của plugin có thể được mong muốn, các tính năng khác, có thể bị cản trở theo thời gian, yêu cầu thêm cấu hình, nếu có thể, để tắt các tính năng không cần thiết. Chúng tôi gọi đây là Hội chứng dao quân đội Thụy Sĩ. Trong những trường hợp như vậy, các nhà khai thác máy chủ có thể chia rẽ phiên bản của riêng họ và cập nhật mã thành cần thiết khi các phiên bản máy chủ mới được phát hành.

Rõ ràng, nếu plugin của bạn dành cho máy chủ riêng không thể truy cập bởi , một số lo ngại này không áp dụng được. Nhưng nếu có, vui lòng xem xét chúng.

+0

Mục đích của plugin chắc chắn là một phần của một máy chủ riêng tư và trong khi tại thời điểm hỏi câu hỏi này, tôi đã có một giải pháp mặc dù đang hoạt động. Tôi đã được liên lạc bởi tác giả của CrateReloaded sau khi chỉ ra một vấn đề với API của nó, và ông sẵn sàng đồng ý với nhiệm vụ phơi bày nhiều plugin hơn trong các bản cập nhật trong tương lai. – XXLuigiMario

+0

Tuyệt vời. Tôi vui mừng khi biết rằng tác giả sẵn sàng cung cấp mã, phù hợp với GPL. – Frelling

Các vấn đề liên quan