最近的工作中需要反编译第三方的apk,以也了解对方的签名逻辑,这里将用到的反编译技巧记录一下。

apk文件转成jar文件

首先需要使用工具将apk文件转成jar文件,这里使用dex2jar,具体使用下面的命令:

sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk

这样会在当前目录下生成文件apk_to_decompile-dex2jar.jar

反编译jar文件

试用过jadjd-guifernflower,结果发现还是IDEA自带的fernflower效果最好了,命令下执行也非常方便:

java -cp "/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\

java -cp "/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=1 c:\Temp\binary\library.jar  c:\Temp\source\

fernflower支持很多的命令行参数,详见其文档