Я хотел бы простой способ декомпилировать Java. Я хочу изучить преобразования и модификации, которые компилятор javac делает в моем коде. Что было бы хорошими продуктами, и что было бы хорошим/плохим из них.Как декомпилировать Java
3
A
ответ
5
Быстро и грязно, используйте javap
, который поставляется с JDK.
javap -c test
Compiled from "test.java"
public class test extends java.lang.Object{
public test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]) throws java.lang.Exception;
Code:
0: ldC#2; //String CR_ABC_DEF_GHI
2: astore_1
3: ldC#3; //String TYPE=Eligibility Only|CLIENT_ID=62|EMPLOYER_ID=0|LOCATION_ID=0|PLAN_ID=all|FREQUENCY=52|FILE=null|FILETYPE=C|PROCESSTOLAUNCH=10|PROCESSTOLAUNCHSTATUS=100|SCHEDULE_ID=29837d692f4c43e786f1097fab7c360c
5: astore_2
6: ldC#4; //String \|
8: astore_3
9: ldC#5; //String FILE_NAME_TEMPLATE
11: astore 4
13: ldC#6; //String FILE
15: astore 5
17: new #7; //class java/lang/StringBuilder
20: dup
21: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
24: aload_3
25: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
28: aload 4
30: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
33: ldC#10; //String =
35: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
38: ldC#11; //String [^
40: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
43: aload_3
44: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
47: ldC#12; //String ]*
49: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
52: aload_3
53: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
56: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
59: astore 6
61: new #7; //class java/lang/StringBuilder
64: dup
65: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
68: aload_3
69: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
72: aload 5
74: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
77: ldC#10; //String =
79: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
82: ldC#11; //String [^
84: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
87: aload_3
88: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
91: ldC#12; //String ]*
93: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
96: aload_3
97: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
100: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
103: astore 7
105: new #7; //class java/lang/StringBuilder
108: dup
109: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
112: aload_3
113: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
116: aload 4
118: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
121: ldC#10; //String =
123: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
126: aload_1
127: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
130: aload_3
131: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
134: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
137: astore 8
139: aload_2
140: aload 6
142: aload 8
144: invokevirtual #14; //Method java/lang/String.replaceAll:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
147: aload 7
149: aload 8
151: invokevirtual #14; //Method java/lang/String.replaceAll:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
154: astore 9
156: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
159: new #7; //class java/lang/StringBuilder
162: dup
163: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
166: ldC#16; //String before =
168: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
171: aload_2
172: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
175: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
178: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
181: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
184: new #7; //class java/lang/StringBuilder
187: dup
188: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
191: ldC#18; //String pattern1 =
193: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
196: aload 6
198: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
201: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
204: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
207: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
210: new #7; //class java/lang/StringBuilder
213: dup
214: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
217: ldC#19; //String pattern2 =
219: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
222: aload 7
224: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
227: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
230: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
233: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
236: new #7; //class java/lang/StringBuilder
239: dup
240: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
243: ldC#20; //String replace =
245: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
248: aload 8
250: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
253: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
256: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
259: getstatic #15; //Field java/lang/System.out:Ljava/io/PrintStream;
262: new #7; //class java/lang/StringBuilder
265: dup
266: invokespecial #8; //Method java/lang/StringBuilder."<init>":()V
269: ldC#21; //String after =
271: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
274: aload 9
276: invokevirtual #9; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
279: invokevirtual #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
282: invokevirtual #17; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
285: return
}
2
Лучшие один, вероятно, Джад:
Если вы используете Eclipse, вы можете использовать JadClipse плагин для более эргономичного интерфейса:
1
Я нашел this tool довольно хорошо.
0
Я использовал JAD и могу использовать для его полезности.
Так же, как и голова, хотя любой скомпилированный код, скорее всего, будет свободен от каких-либо комментариев, а если код запутан, то декомпиляция на самом деле не приведет вас ни к чему. Это все равно будет выглядеть как бред.
1
Другой Java Decompiler - AndroChef Java Decompiler доступен: http://www.neshkov.com/ac_decompiler.html
Смежные вопросы
- 1. Как декомпилировать пакет java?
- 2. Как декомпилировать файл класса java?
- 3. Как «декомпилировать» файлы классов Java?
- 4. Декомпилировать JAVA DLL
- 5. Скомпилировать (декомпилировать) файл .java
- 6. Как декомпилировать файл .class?
- 7. Декомпилировать Java-приложение, заполненное launch4j
- 8. Как декомпилировать файл Java .class из rt.jar
- 9. Как декомпилировать изменчивую переменную в Java?
- 10. Как декомпилировать файлы .class с помощью java?
- 11. Как декомпилировать код vm-байта в java
- 12. Как декомпилировать java-файлы intellij idea
- 13. как обезопасить APK от Java декомпилировать
- 14. Как «декомпилировать» закладку?
- 15. Как декомпилировать файл .jar?
- 16. Как декомпилировать регулярное выражение?
- 17. Как декомпилировать dll C++?
- 18. Как декомпилировать это?
- 19. Как декомпилировать файл FMX
- 20. Как декомпилировать файл .sis?
- 21. Как декомпилировать сайт asp.net
- 22. Декомпилировать скомпилированный файл Java с проприетарными заголовками
- 23. Декомпилировать классы Java, а затем перекомпилировать?
- 24. Java - декомпилировать и перекомпиляции - для Noobie
- 25. java card декомпилировать операцию из файла «.cap»
- 26. apktool декомпилировать при добавлении внешнего пакета Java
- 27. Можно ли декомпилировать и отлаживать приложение Java?
- 28. Как декомпилировать файл .exe в jar?
- 29. Как декомпилировать весь файл Jar?
- 30. как декомпилировать несколько файлов JAR
Много отправных точек? http://stackoverflow.com/search?q=decompiler+java – birryree 2010-12-07 16:00:27
Компилятор ** никогда ** не модифицирует ваш код, он переводит ваш код в java-байтовый код (который хранится в файле `.class`). – 2010-12-07 16:00:37