Android Apk反编译、修改资源、重新签名以及重新打包的详细讲解

在反编译之前先明确下,反编译别人的Apk不是件很道德的事情,毕竟这是别的程序员辛辛苦苦写出来的代码,所以说代码混淆这东西很重要,就是为了防止别人反编译。本文抱着学习的态度,在一些特殊情况下研究下怎么反编译一个没有加混淆的Apk。

流程:APK反编译 -> 修改 -> 重新打包 -> 重新签名

Apk反编译
反编译所使用的到的工具
apktool,反编译apk,从apk中提取图片和布局资源
dex2jar,将可运行文件classes.dex反编译为jar源码文件
java-decompiler(jd-gui),主要用来查看jar源码文件

在反编译之前要确保电脑上有Java
检查有无Java的方法,打开命令行,输入java -version
如果出现如下图所示就是安装了Java,没有的话需要自行配置环境
在这里插入图片描述
下载apktool.bat脚本(右键,链接另存为…)
Android Apk反编译、修改资源、重新签名以及重新打包的详细讲解_第1张图片
下载最新版本的apktool.jar,并且重命名为apktool.jar
将apktool.bat和apktool.jar还有需要反编译的Apk文件放在同一目录下就可以正常使用了

反编译命令行:
output_dir代表文件的输出路径
test.apk代表Apk的文件名

apktool.bat d -o  test.apk

-o 指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)
然后继续执行命令行
apk-file是上一步输出的文件夹的名字

apktool.bat b apk-file

会发现执行该命令行后会多出下面两个文件夹,dist文件夹下面放的就是apk文件
Android Apk反编译、修改资源、重新签名以及重新打包的详细讲解_第2张图片

此时,可以查看AndroidManifest.xml,res及smali文件了。甚至可以修改这个目录下的资源文件或者smali文件,然后重新编译。如果需要修改图片的话,只需要找到对应位置替换掉就好了;
apktool反编译出来只能得到apk的smali文件,即汇编语言版本,并不能得到源代码。

查看源码
先将需要反编译的apk的后缀名改为.zip或者.rar,然后解压得到其中的classes.dex文件
Android Apk反编译、修改资源、重新签名以及重新打包的详细讲解_第3张图片
将classes.dex复制到解压后的dex2jar-2.0文件夹下
进入到该文件夹后执行命令行(将其转换为classes-dex2jar.jar包。):

d2j-dex2jar classes.dex

然后使用jd-gui打开该文件就可以看到源码了;

重新签名
签名之前需生成一个Keystore文件
进入到apk的文件夹下面,然后执行命令行
xxx代表你需要填写的参数

keytool -genkey -v -keystore xxx -alias xxx -keyalg xxx -validity xxx

-genkey 产生证书文件
-alias 产生别名
-keystore 指定密钥库的.keystore文件中
-keyalg 指定密钥的算法,这里指定为RSA(非对称密钥算法)
-validity 为证书有效天数,这里我们写的是40000天

之后会让你填写相关信息,最后确认之后就可以生成一个keystore文件

然后用这个生成的keystore文件进行签名

jarsigner -keystore 1 -storepass 3 -signedjar 4 5 2 

1:keystore文件的绝对路径
2:keystore的别名
3:keystore文件的密码
4:新的apk包名
5:要签名的apk包路径

填入相对应的参数就可以生成新的带有签名的Apk包了

你可能感兴趣的:(Android)