apk反编译,包括odex

apk反编译:


第一类:
首先将apk文件后缀改为zip并解压,得到其中的classes.dex


第二类:
按照第一类没有得到classes.dex文件;获取apk文件和odex文件;


1.首先配java环境,下载所需工具smali-1.3.3.jar 和 baksmali-1.3.3.jar;
2.将手机/system/framework 里面也一并复制出来放在与两个工具同一目录(即与smali-1.3.3.jar、baksmali-1.3.3.jar);
  注意:framework下的只要.odex文件,不需要jar和apk文件;
3.将要反编译应用的apk文件和.odex文件放在与smali-1.3.3.jar、baksmali-1.3.3.jar同一目录;
4.开始运行分解 odex 文件为 classes.dex 文件的命令:
   A.java -jar baksmali-1.3.3.jar -x **.odex  注:**即要反编译的应用文件名;
此命令完成之后,会生成一个 out 文件夹在smali-1.3.3.jar、baksmali-1.3.3.jar同一目录下,里面就是所有的 class文件,后缀名为.smali;
   B.运行 class 生成为 classes.dex 文件的命令:
     java -Xmx512M -jar smali-1.3.3.jar out -o classes.dex
此命令完成之后,会生成classes.dex文件在smali-1.3.3.jar、baksmali-1.3.3.jar同一目录下;

执行A命令后可能出现的错误日志:
Error occured while loading boot class path files. Aborting.
org.jf.dexlib.Util.ExceptionWithContext: Cannot locate boot class path file core.odex
    at org.jf.dexlib.Code.Analysis.ClassPath.loadBootClassPath(ClassPath.java:237)
    at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:145)
    at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110)
    at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:104)
    at org.jf.baksmali.main.main(main.java:297)

此错误为/system/framework没有复制出来放在工具目录;

Error occured while loading boot class path files. Aborting.
org.jf.dexlib.Util.ExceptionWithContext: error in opening zip file
    at org.jf.dexlib.Util.ExceptionWithContext.withContext(ExceptionWithContext.java:54)
    at org.jf.dexlib.Code.Analysis.ClassPath.loadBootClassPath(ClassPath.java:220)
    at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:145)
    at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110)
    at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:104)
    at org.jf.baksmali.main.main(main.java:297)
Caused by: java.util.zip.ZipException: error in opening zip file
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.(ZipFile.java:127)
    at java.util.zip.ZipFile.(ZipFile.java:144)
    at org.jf.dexlib.DexFile.(DexFile.java:295)
    at org.jf.dexlib.Code.Analysis.ClassPath.loadBootClassPath(ClassPath.java:216)
    ... 4 more
Error while reading boot class path entry "services.odex".

此错误为/system/framework复制出来放在工具目录下了,但是将其中的jar文件也放进去了,要删除jar文件;

*************************此时已拿到classes.dex文件*********************************

反编译过程(linux):
把classes.dex复制到dex2jar.sh所在目录,在命令行下进入这个目录,执行:./dex2jar.sh classes.dex,生成一个jar文件

反编译过程(windows):
将classes.dex复制到dex2jar.bat所在目录dex2jar-x.x.x.x文件夹。
在命令行下进入dex2jar.bat所在目录,

运行
dex2jar.bat classes.dex

即可生成
classes_dex2jar.jar


************************此时已拿到classes_dex2jar.jar文件*****************************


进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包classes_dex2jar.jar,即可看到源代码了,另存为之后可以生成一个zip文件,解压此zip文件,即可得到源代码,然后就可以使用eclipse或者source insight进行查看。

************************此时源码获取成功************************************************


你可能感兴趣的:(apk反编译,包括odex)