Co siedzi w plikach .class?

0

Witam. Zauważyłem, że w pliku class Javy można odczytać informacje o pakietach, klasach i metodach. Czy ta Java jest bezpieczna jak mi się wydaje? Na przykład z pliku minecraft.jar odczytałem następujące informacje:

 LineNumberTable LocalVariableTable this (Lcom/google/gson/DefaultDateTypeAdapter; (Ljava/lang/String;)V datePattern Ljava/lang/String; (I)V style I (II)V 	dateStyle 	timeStyle /(Ljava/text/DateFormat;Ljava/text/DateFormat;)V 	serialize q(Ljava/util/Date;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; dateFormatAsString src Ljava/util/Date; 	typeOfSrc Ljava/lang/reflect/Type; context *Lcom/google/gson/JsonSerializationContext; deserialize s(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/util/Date; json Lcom/google/gson/JsonElement; typeOfT ,Lcom/google/gson/JsonDeserializationContext; date 
Exceptions deserializeToDate /(Lcom/google/gson/JsonElement;)Ljava/util/Date; ignored Ljava/text/ParseException; e toString ()Ljava/lang/String; sb Ljava/lang/StringBuilder; s(Ljava/lang/Object;Ljava/lang/reflect/Type;Lcom/google/gson/JsonSerializationContext;)Lcom/google/gson/JsonElement; x0 Ljava/lang/Object; x1 x2 u(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Ljava/lang/Object; 	Signature xLjava/lang/Object;Lcom/google/gson/JsonSerializer<Ljava/util/Date;>;Lcom/google/gson/JsonDeserializer<Ljava/util/Date;>; 
SourceFile DefaultDateTypeAdapter.java ˘ Ł ¤ Ą ¦ § ¦ ¨ 9 I java/text/SimpleDateFormat 9 © 9 @ Ş « Ş ¬ 9 : 5 6 7 6 yyyy-MM-dd'T'HH:mm:ss'Z' 8 6 UTC ­ ® Ż ° ± ˛ ł com/google/gson/JsonPrimitive "com/google/gson/JsonParseException !The date should be a string value [ \ java/util/Date java/sql/Timestamp ´ µ 9 ¶ 
java/sql/Date "java/lang/IllegalArgumentException java/lang/StringBuilder

. To mi pozwoliło zagłębić się bardziej w strukturę gry Minecraft. Czy istnieje możliwość dekompilacji plików .class do .java? Co to są te dziwne znaczki te NUL, SOH, ACK itp.? Czy jest możliwość deasemblacji bibliotek czy plików .exe? Jakie znacie do tego narzędzia? Z góry dziękuję.

0

Do deasemblacji jest standardowe narzędzie w JDK o nazwie javap. Używasz go np tak: javap -c plik.class.

Do C# odpowiednikiem jest np https://www.red-gate.com/products/dotnet-development/reflector/

By trochę utrudnić czytanie zdekompilowanego kodu można użyć narzędzi typu ProGuard: http://proguard.sourceforge.net/
.NET też ma jakiś odpowiednik ProGuarda, ale nie chce mi się szukać.

0

@CSharp

  1. Jest trochę narzędzi do dekompilacji plików .class to .java np. https://github.com/fesh0r/fernflower
  2. z plikami exe jest ciężej ale np. IDA albo Hopper potrafią wygenerować na podstawie plików wykonywalnych/bibliotek kod w pseudo-C
0

Jeżeli chcesz konkretnie dekompilować Minecrafta, to sprawdź narzędzia w rodzaju http://minecraft.gamepedia.com/Programs_and_editors/Mod_Coder_Pack, które od razu poprawiają kod na taki, który jest czytelny przez człowieka.

0

Link do zdekompilowanego Minecrafta: https://4programmers.net/Pastebin/4446.

0
CSharp napisał(a):

Link do zdekompilowanego Minecrafta: https://4programmers.net/Pastebin/4446.

Raczej do klasy która ściąga Minecrafta z serwera, rozpakowuje archiwum LZMA i dopiero wtedy odpala właściwy kod gry.

0

Ale zabezpieczenia Minecrafta da się obejść jakby tak przeanalizować dokładnie kod we wszystkich plikach .class (w jaki sposób nie powiem).

0

A których zabezpieczeń nie da się złamać? Crackerzy łamią wszystko jak leci, nawet zabezpieczenia sprzętowe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1