使用APKTool+dex2jar+jd_gui反编译apk文件

来源:互联网 发布:小米盒子软件 编辑:程序博客网 时间:2024/04/25 14:53

在学习代码混淆之前,这里我先反编译一下从网上下载下来的apk。这里我以豆瓣电影作为例子,来进行反编译。在反编译过程中,我们主要用到了下面的三个工具:
1.apktool
这个工具主要是将android中的apk文件转换成dex文件。
2.dex2jar
顾名思义就是讲第一步的dex文件转换成jar文件
3.jd_gui
这个工具可以查看第二步中生成的jar文件的内容。

反编译查看apk代码

1.首先我们将下载下来的豆瓣的apk文件,更改后缀名称为.rar,然后解压,可以看到classes.dex文件。
这里写图片描述
2.将classes.dex拷贝到dex2jar.bat所在的目录下:
这里写图片描述
可以看到,这里我已经将classes.dex文件拷贝到dex2jar.bat所在的目录当中了。
在命令行下进入dex2jar.bat所在的目录,执行如下命令:
dex2jar.bat classes.dex
此时会在该目录下生成classes_dex2jar.jar这个文件
这里写图片描述
3.使用jd_gui查看jar文件中的代码:
jd_gui是一个可执行的exe文件,可以直接通过这个工具查看jar文件中的代码。直接双击运行该文件,将classes_dex2jar.jar文件拖动到jd_gui的界面即可。
这里写图片描述

现在已经可以看到源代码了。

反编译得到布局文件和资源文件

这里我以网上的一个订餐apk来做测试,先来看看,如果我们只是单纯的解压apk,是没有办法看到布局图片等资源的,比如:看到的布局回像下面这种样子:
这里写图片描述
此时使用apktool工具来反编译布局和资源文件:
这里写图片描述
此时会在apktool工具所在的目录下生成一个文件夹,这个文件夹里边的布局manifest文件以及资源文件就都可以访问了。
登陆界面的布局:
这里写图片描述
manifest文件
这里写图片描述

将反编译的apk植入广告,二次打包

首先这里我就拿登陆界面来作一个简单的案例:
这里写图片描述
可以看到我将该界面的所有文字相关的都改为”广告”了,并且将背景图片更换了。更换的背景图片如下:
这里写图片描述
接下来进行二次打包。我们在第一步当中通过apktool.bat d feifan.apk来反编译,成功之后,会看到一个名字叫做fenfan的文件夹,里面就是放的该apk的资源文件和布局以及清单文件。接下来需要执行:”apktool.bat b feifan advertisement.apk”,即可。需要注意的是,在这一步的操作当中可能会碰到这样的错误:

Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could notexec command: [aapt, p, --min-sdk-version, 8, --target-sdk-version, 15, -F, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL5334589254772572111.tmp, -0, arsc, -I,C:\Users\Administrator\apktool\framework\1.apk, -S, E:\快盘\pc_demo_code\软件\android反汇编\apktool-install-windows-r05-ibot\apktool-install-windows-r05-ibot\.\test_apk_name\res, -M, E:\apktool-install-windows-r05-ibot\apktool-install-windows-r05-ibot\.\test_apk_name\AndroidManifest.xml]at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:357)at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336)... 5 more

这时因为apktool在打包的时候,需要用到aapt工具,需要将aapt的路径配置到环境变量当中即可。
这里我生成的apk名称叫做advertisement,但是注意,此时我们生成的这个apk是不能安装的,需要对其进行签名才可以。

对apk进行签名

在对apk签名之前,我们首先需要创建一个keystore文件,需要用到jdk中为我们提供的keytool.exe工具,如下:
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
说明一下:
-genkey 表示产生密钥
-keyalg RSA 表示使用RSA算法对签名加密
-validity 40000 表示有效期限4000天
这里写图片描述
完成之后,会在当前目录下生成一个demo.keystore文件。

使用jdk中的jarsigner 工具来和demo.keystore生成签名后的apk.
jarsigner -verbose -keystore demo.keystore -signedjar advertisement_signed.apk advertisement.apk demo.keystore
说明一下:
-verbose 表示输出签名的详细信息
-keystore demo.keystore 密钥库位置
-signedjar advertisement_signed.apk advertisement.apk demo.keystore正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库
这里写图片描述
此时会在该目录下生成一个签名后的apk文件advertisement_signed.apk,安装运行该文件,进入登陆界面如下:
这里写图片描述
bingo,可以看到经过二次打包以后,该apk已经是我们想要的效果了,这样可以植入一些广告。

说明一点:该博客只是为大家提供了一种思路和方法,仅供学习参考,严禁做非法的事情。

ok,今天就到这里了,希望大家能够喜欢,也算是为自己做一个笔记吧。

工具下载

1 0
原创粉丝点击