apktool反编译APK全过程/V2签名/反编译apk

第一步,安装java环境,下载地址
https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
 
安装过程自行百度。
 
第二步,apktool工具文件: apktool_2.7.0.jar最新版本,下载地址
 
开始反编译:使用下面的命令反编译apk
java -jar apktool_2.7.0.jar d telegram.apk -o test
 
java -jar apktool_2.7.0.jar d 文件名 -o 生成目录
 
如果不涉及资源文件的修改,所以加上-r参数不会反编译资源文件
java -jar apktool_2.7.0.jar -r d telegram.apk -o test
 
 
 
然后修改完成后使用下面的命令回编译:
java -jar apktool_2.7.0.jar b  test
java -jar apktool_2.7.0.jar b 目录
 
回编译完成在dist 目录会生成未签名apk文件。
 
 

生成签名证书

使用keytool -genkey命令生成证书:

keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore
  • testalias是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字
  • test.keystore是证书文件名称,可修改为自己想设置的文件名称,也可以指定完整文件路径
  • 36500是证书的有效期,表示100年有效期,单位天,建议时间设置长一点,避免证书过期
 
 

一:jarsigner 和 apksigner 两种签名工具的介绍

jarsigner

jarsigner 是 JDK 提供的针对 jar 包签名的工具,如果你本地已经安装了 Java 环境,会自带 jarsigner ,

比如我的 jarsigner 工具的位置在

/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/bin/jarsigner

效果图如下

 
 

apksigner

apksigner 是 Google 官方提供的针对 Android Apk 签名和验证的专用工具,位于 Android SDK / build-tools / SDK 版本 / apksigner 。

以我本地的 Android SDK 30.0.2 版本为例, apksigner 工具的位置在

/Users/suxing/Library/Android/sdk/build-tools/30.0.2/apksigner 。

效果图如下

 

如果你用的是 Android Studio 或者 IDEA ,安装这两个编辑器时会自动下载 Android SDK ,所以 apksigner 工具也不需要另外安装。

不过,无论是 apk 包 还是 jar 包,其本质都是 zip 格式的压缩包,如果只针对 v1 签名的话,两者的签名过程其实差不多。

apksigner 工具默认同时使用 v1 和 v2 签名,以兼容 Android 7 以下的系统版本。

 

如果报以上错误则需要进行 apksigner 命令签名

 

方式一:jarsigner

jarsigner 只支持 v1 签名,先来看下使用命令,下面命令中涉及到路径的都是文件的绝对路径。

jarsigner -verbose -keystore 证书签名文件路径 -signedjar 签名后新Apk路径.apk 要签名的Apk路径.apk 证书签名别名

 

方式二:apksigner

apksigner 默认同时支持 v1 和 v2 签名,先来看下使用命令,下面命令中涉及到路径的都是文件的绝对路径。

apksigner sign --ks 证书签名文件路径 --ks-key-alias 证书签名别名 要签名的apk路径.apk

./apksigner sign --ks /Users/abc/Downloads/test1/dist/test2.keystore  --ks-key-alias org.telegram.messenger /Users/binghexijian/Downloads/test1/dist/abc.apk