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

摘要:
总结使用ApkTool对apk文件进行反编译,并将dex文件转换为smali文件,这更适合于提取apk中的资源文件,如布局文件和图像。使用Dex2Jar对apk进行反编译,最后将dex文件转换为jar文件,该文件通过JD-GUI打开。对于未混合的apk,更适合通过反编译查看相应的Java源代码。第二种是使用apktool的新版本进行反编译,但切换到apktool版本可能会遇到下一个问题。具体解决方案见下文。
使用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文件删掉,重新进行反编译即可解决问题。

免责声明:文章转载自《使用ApkTool以及dex2jar对apk进行反编译-更新异常以及解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux内核定时器struct timer_listwebstorm2019.2永久破解教程(亲测有效)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

excel 导入 sqlserver 字符串被截取为255长度解决方案

excel表格导入sqlserver数据表中 内容被截取为255长度的字符串。 注意:excel是通过前8行(表头的首行除外)的数据类型来判断导入数据的数据格式的,例如前8行出现整数型,那么默认就用整数型的数据读取方式导入数据,又例如前8行出现的是长度小于255的字符串类型,那么就会默认整列都是小于255的字符串,这样导入的时候长度大于255的字符串就会被...

.net core开发 (一)

1..net core: 是微软开发的另外一个可以跨平台的.net 2..net framework,.net core, mono的关系三者都是.net在不同操作系统的实现 3. .net core版本.net core 1.1 -> .net core 2.0 preview -> .net core 2.0 4. linux安装.net...

记某app内购破解 – 安卓逆向菜鸟的初体验

前言 因为某个机缘,我拿到一个赛车app,玩了一会想买个装备,居然要我掏钱包,作为一名cracker,我觉得我的尊严受到了严重的蔑视(无奈钱包空空),我觉得要捍卫我那脆弱的玻璃心(钱包),所以,开干吧。我搜索了网上相关的帖子,发现这个apk的破解都是讲了关键点都在哪里,没有具体的关键点查找思路,所以我重新自己破解了一次,中间多次误入歧途,我把自己的详细思路...

win10 .net3.5的问题及解决方案

近日有网友反映在windows10_64位系统电脑上安装Net framework3.5,操作时总失败,怎么办呢?小编下面就介绍win10 64位系统无法安装Net framework3.5的两种解决方案吧 在Windows10中,当我们安装某些软件的时候会提示“你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括....

Android开发——Android系统启动以及APK安装、启动过程

0. 前言   从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的?   1.  系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被置为初始状态,CPU复位之后,程序指针会指向启动地址,从该地址读取并直接运行启动程序的可执行代码,或者将可执行代码与数据载入CPU内置的RAM中再运行。这...

破解APK注入代码大揭秘

点此了解详细的APK破解及二次打包过程揭秘: http://t.cn/RzEn7UK   【HACK】破解APK并注入自己的代码 会破解是你的本事,但是请不要去干坏事! 使用工具: APKTool 提醒:能够正常安装到手机上的APK都是带有签名的(不了解签名的可以百度),APK在破解重新打包后是已经不再拥有签名的,如果想要你破解后的APK能够正常运行请...