zoukankan      html  css  js  c++  java
  • 使用ApkTool以及dex2jar对apk进行反编译-更新异常以及解决方案

    使用ApkTool以及dex2jar对apk进行反编译


    相关工具下载地址:

    ApkTool: https://ibotpeaches.github.io/Apktool/

    Dex2Jar: https://sourceforge.net/projects/dex2jar/                        https://files.cnblogs.com/files/mingjing/dex2jar-2.0.zip

    JD-GUI: http://jd.benow.ca/jd-eclipse/update/#jd-gui-download    https://files.cnblogs.com/files/mingjing/jd-gui-windows-1.6.6.zip

    使用ApkTool对apk进行反编译以及打包

    1.下载并解压ApkTool

    在cmd命令行中进入ApkTool的文件夹(win7系统以上快捷键为shift+鼠标右键),输入apktool,出现如下图片中的提示信息,表示成功。
    测试成功
    注意的是,在apktool.bat中,可以修改使用的apktool.jar的版本。

    2.使用ApkTool对apk进行反编译

    在cmd命令行中进入ApkTool的文件夹,反编译命令:apktool.bat d [apk文件] [输出文件夹]
    测试如下图,成功后,会在指定的输出文件夹下生成反编译后的文件。
    反编译成功

    3.使用ApkTool对apk进行打包

    在cmd命令行中进入ApkTool的文件夹,打包命令:apktool.bat b [资源文件夹] [打包生成的apk文件]
    测试如下图,成功后,会在指定的输出文件夹下生成打包好的apk文件。
    打包成功
    注意,这里打包的apk文件是未经过签名的,可以看到在安装的时候会提示如下错误,如果需要安装,解决方法是需要进行重新签名。
    签名错误

    使用Dex2Jar以及JD-GUI反编译apk

    使用dex2jar可以将apk文件中的dex文件转换成jar文件,然后就可以通过JD-GUI打开得到的jar文件来查看相应的Java代码。

    1.下载Dex2Jar以及JD-GUI

    工具的下载地址见文章上方
    Dex2Jar

    2.使用dex2jar.bat得到jar文件

    将需要反编译apk的后缀格式改成zip,然后使用解压出来,其中的classes.dex就是我们需要进行反编译的部分。
    在cmd命令行中进入Dex2Ja文件夹,反编译命令:d2j-dex2jar.bat [classes.dex文件]
    成功后,会在Dex2Ja文件夹下生成classes-dex2jar.jar文件,这个jar文件就是反编译后的文件。
    Dex2Jar decode

    3.使用JD-GUI打开jar文件

    使用JD-GUI软件打开classes-dex2jar.jar文件,就可以查看反编译的代码了。
    JD-GUI
    注意的是,如果进行反编译的apk进行了混淆处理,那么我们反编译看到的基本就很难阅读了。

    总结

    使用ApkTool对apk文件进行反编译,将dex文件转成了smali文件,更适合提取apk中的资源文件,比如布局文件以及图片等资源。

    使用Dex2Jar对apk进行反编译,最终将dex文件转化成了jar文件,通过JD-GUI打开,对于未混淆的apk来说,更适合通过反编译来看相应得Java源码。

    更新异常以及解决方案

    在使用ApkTool进行反编译的时候,有时候我们会遇到如下的异常,下面我来贴出一下我的解决方法,希望可以给遇到问题的同学们帮助。
    错误类型:
    - Input file xxx was not found or was not readable.
    - Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
    - Exception in thread “main” java.lang.NullPointerException I: Loading resource table from file: C:Users用户名apktoolframework1.apk

    Input file xxx was not found or was not readable

     Input file xxx was not found or was not readable
    这种问题是在2.1.0中,反编译的指令与1.5.3不同了,如果需要指定反编译输出文件夹,需要在前面加 -o 表示输出文件夹。
    成功如下:
    解决成功

    Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000

    这种问题一般是apktool的版本不匹配导致的,解决方案:

    1. 第一种是修改当前项目的sdk的buildtools版本,在当前项目中的project.properties文件中修改。
    2. 第二种是使用新版的apktool进行反编译,但是切换apktool版本可能会遇到下一个问题,具体解决方案见下文。
      sdk.buildtools

    Exception in thread “main” java.lang.NullPointerException

    这个问题一般是切换apktool的jar包版本问题导致的,可以在命令行中看到错误提示:I: Loading resource table from file: C:Users用户名apktoolframework1.apk。
    错误内容信息
    解决方法,只要把命令行提示中的framework文件夹中的1.apk文件删掉,重新进行反编译即可解决问题。

  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/mingjing/p/14336422.html
Copyright © 2011-2022 走看看