反编译apk

反编译apk

因为工作需要,需要对app进行反编译,用了2次,总是忘记,所幸就记下来,以后自己需要的时候可以随时查看,同时也帮助需要的人吧。

1,需要工具

  1. apktool ,用来看app的资源文件。
  2. dex2jar-2.0 ,用来反编译dex文件,得到jar包。
  3. jd-jui ,用来看jar包里面的java代码。

2,主要步骤

  1. apktool ,我用的版本是apktool_2.4.1.jar版本,下载下来之后,可以直接用。
java -jar apktool_2.4.1.jar d -f app-test.apk -o e:\app-test

-f 是你要查看的app的地址,-o是你要将反编译出来的资源文件要放的文件夹名称。

  1. dex2jar-2.0 ,用来反编译dex文件,得到jar包。
    这里将apk文件的后缀改成zip,然后解压该zip,得到dex文件,再将dex文件放到dex2jar-2.0的文件夹下,用dex2jar工具将dex文件反编译成jar文件。
d2j-dex2jar.bat classes.dex

从网上下载dex2jar-2.0之后,解压,即可使用。

  1. jd-jui ,用来看jar包里面的java代码;
    将上面反编译的jar文件,用jd-jui打开,即可看到class文件的代码。

3,我出现的问题

  1. 在实际以操作的时候,我在第二步使用dex2jar-2.0反编译dex文件的时候,遇到各种错,搜了一下,基本解决了。第一个错是反编译dex文件的是,报出直接error,什么提示都没有,就在目录下出现一个classes-error.zip,打开之后发现,爆出的错大部分都是java.lang.RuntimeException: can not merge I and Z,是这个错,后来通过百度,了解到这是为了防止apk文件被反编译,故意让java代码出错,让dex2jar文件反编译不了。那怎么解决呢?
    解决办法就是换一个dex2jar,使用dex-tools-2.1-SNAPSHOT.zip工具。用法与dex2jar一样。我用了之后确实不报错了。
  2. 第2个错是not support version的错,出现这个错是因为dex文件的版本与dex2jar版本不一致,导致dex反编译失败。用ultraedit打开dex文件,将第一行dex.03x改成低版本即可。我的是将039改成038,就不出错了。你可能是038改成035,总之改成低版本,在用dex2jar反编译即可。
    有什么记录的不准确的地方,欢迎与我交流,或者有反编译的问题,欢迎交流。wechat:kathrianwly

你可能感兴趣的:(反编译,java,bug,android,android,studio)