首页 > 编程语言 > 详细

使用ApkTool以及dex2jar对apk进行反编译-更新异常以及解决方案

时间:2021-01-27 22:42:17      阅读:83      评论:0      收藏:0      [点我收藏+]

 

使用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

工具的下载地址见文章上方
技术分享图片

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

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

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

使用JD-GUI软件打开classes-dex2jar.jar文件,就可以查看反编译的代码了。
技术分享图片
注意的是,如果进行反编译的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\用户名\apktool\framework\1.apk

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版本可能会遇到下一个问题,具体解决方案见下文。
    技术分享图片

Exception in thread “main” java.lang.NullPointerException

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

使用ApkTool以及dex2jar对apk进行反编译-更新异常以及解决方案

原文:https://www.cnblogs.com/mingjing/p/14336422.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!