• 使用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文件删掉,重新进行反编译即可解决问题。

  • 相关阅读:
    如何过滤php中危险的HTML代码
    一个老总的语录
    php如何优化压缩的图片
    php时间函数time(),date(),mktime()区别
    php中获取网站访客来源的关键词方法
    php获取QQ头像并显示的方法
    php一些常规动态设置与获取
    xss过滤函数
    php获取当月的第一天以及最后一天
    php eval函数一句话木马代码
  • 原文地址:https://www.cnblogs.com/mingjing/p/14336422.html
Copyright © 2020-2023  润新知