通过反编译apk,获取一些好看的素材,并有可能学习到大佬们优秀的代码🐶

准备工作

  1. Java环境
  2. 反编译工具
  • Apktool:获取资源文件,提取图片文件,布局文件,还有一些XML的资源文件
  • dex2jar:将APK反编译成Java源码(将classes.dex转化为jar文件)
  • jd-gui:查看转换后的jar文件

1. 反编译

将需要反编译的apk与需要的反编译工具放到同一个文件目录下,cmd中输入:

apktool.bat d -f [apk文件] [输出文件夹]
  • -f,如果目标文件夹已存在,则强制删除现有文件夹
  • -o,指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)
  • -s,不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。
  • -r,不反编译资源文件,也就是说resources.arsc文件会被保留

之后打开相应文件夹,即可看到apk的资源文件。

apk解压后中的classes.dex复制到dex2jar.bat所在的目录下,cmd中输入:

d2j-dex2jar.bat classes.dex

会生成一个jar包,之后用jd-gui.exe打开即可看见里面的代码,一般没有混淆代码的都可以看到所有参数命名,如果要修改代码的话比较麻烦,这里不再讨论。

2. 重新打包

在apktool所在目录下,cmd中输入:

apktool.bat b [文件夹名]

之后文件目中会新增build和dist文件夹,新打包的apk会保存在dist中

3. 签名

管理员模式运行cmd进入java目录下的bin文件夹(C:Program FilesJavajdk1.8.0_251),输入以下命令生成keystore文件

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

按提示随便输入相关信息后按Y确定。
将生成的keystore文件放到apk文件同一目录下输入:

jarsigner -verbose -keystore bdk.keystore [apk文件] bdk.keystore

这样apk就重新打包好了。

Tags: Android, Java

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.