Friday, May 1, 2015

Android - Decompiling DEX into Java sourcecode

decompiling DEX into Java sourcecode

1How can one decompile Android DEX (VM bytecode) files into corresponding Java sourcecode?
[Related]: android - decompiling DEX into Java sourcecode How can one decompile Android DEX (VM bytecode) files into corresponding Java sourcecode?
2

It's easy

Get these tools:
1) dex2jar, which is made by a Chinese student. It will translate dex files to jar files
2) jd-gui to view the java files in the jar
The source code is quite readable as dex2jar makes some optimizations.

Procedure:

And here's the procedure on how to decompile:

Step 1:

Convert classes.dex in test_apk-debug.apk to test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Note: In the Windows machines all the .sh scripts are replaced by .bat scripts
dex2jar documentation

Step 2:

Open the jar in JD-GUI
The decompiled source
[Related]: decompiling DEX into Java sourcecode - SimpleCodeStuffs Leave a Reply Note To post source code in comment, use [code] [/code] tag Cancel reply
3To clarify somewhat, there are two major paths you might take here depending on what you want to accomplish:
Decompile the Dalvik bytecode (dex) into readable Java source. You can do this easily with dex2jar and jd-gui, as fred mentions. The resulting source is useful to read and understand the functionality of an app, but will likely not produce 100% usable code. In other words, you can read the source, but you can't really modify and repackage it. Note that if the source has been obfuscated with proguard, the resulting source code will be substantially more difficult to untangle.
The other major alternative is to disassemble the bytecode to smali, an assembly language designed for precisely this purpose. I've found that the easiest way to do this is with apktool. Once you've got apktool installed, you can just point it at an apk file, and you'll get back a smali file for each class contained in the application. You can read and modify the smali or even replace classes entirely by generating smali from new Java source (to do this, you could compile your .java source to .class files with javac, then convert your .class files to .dex files with Android's dx compiler, and then use baksmali (smali disassembler) to convert the .dex to .smali files, as described in this question. There might be a shortcut here). Once you're done, you can easily package the apk back up with apktool again. Note that apktool does not sign the resulting apk, so you'll need to take care of that just like any other Android application.
In short, your choices are pretty much either to decompile into Java, which is more readable but likely irreversible, or to disassemble to smali, which is harder to read but much more flexible to make changes and repackage a modified app. Which approach you choose would depend on what you're looking to achieve.
Lastly, phaeton's suggestion of ded is also of note. I didn't have much luck with a quick attempt compared to the tools above, but it may become more useful in this regard as it continues to evolve.
[Related]: Android decompiling dex into java sourcecode stack apk mod ... Aug 22, 2014 · There are Android decompiling dex into java sourcecode stack categories, in these articles contain the mod, apk, app, and games review from trusted ...
4I'd actually recommend going here: http://code.google.com/p/smali/
It provides BAKSMALI, which is a most excellent reverse-engineering tool for DEX files. It's made by JesusFreke, the guy who created the fameous ROMs for Android.
[Related]: Best sokoban game source code java downloads. Sokoban game source code java software: Reconstructs java source from CLASS files, Decompiles JAVA class into source code, The clone of legendary logic game Sokoban ...
5Refer this blog it clearly show decompile process step by step androidorigin.blogspot.com
[Related]: decompiling DEX into Java sourcecode To clarify somewhat, there are two major paths you might take here depending on what you want to accomplish: Decompile the Dalvik bytecode (dex) into readable Java ...
6A more complete version of fred's answer:

Manual way

First you need a tool to extract all the (compiled) classes on the DEX to a JAR.
There's one called dex2jar, which is made by a chinese student.
Then, you can use jd-gui to decompile the classes on the JAR to source code.
The resulting source should be quite readable, as dex2jar applies some optimizations.

Automatic way

You can use APKTool. It will automatically extract all the classes (.dex), resources (.asrc), then it will convert binary XML to human-readable XML, and it will also dissassemble the classes for you.
Disassembly will always be more robust than decompiling, especially with
JARs obfuscated with Pro Guard!

Just tell APKTool to decode the APK into a directory, then modify what you want,
and finally encode it back to an APK. That's all.
Important: APKTool dissassembles. It doesn't decompile.
The generated code won't be Java source.
But you should be able to read it, and even edit it if you're familiar with jasmin.
If you want Java source, please go over the Manual way.

Source: http://ask.webatall.com/java/1909_decompiling-dex-into-java-sourcecode.html

0 comments:

Post a Comment