课题需要,系统学习了一下 apktool 反编译、回编译以及签名流程期间遇到的问题简单跟大家分享一下。
apktool工具下载
apktool 下载地址: https://ibotpeaches.github.io/Apktool/
在上面网站上下载 apktool.jar 和 apktool.bat 放在同一文件夹下:
下载之后我们可以配置环境变量,以便我们在任何位置都可以使用apktool命令,配置方法笔者不在这里赘述,不懂得可以去查相关博客。当然我们也可以不配置,到指定目录执行命令。
反编译命令
直接上命令
apktool d (your apkName).apk
apktool目录下出现反编译出来的test文件夹
到这里反编译大功告成 。
回编译
直接上命令
apktool b test
在test文件下会出现dist文件夹里面会有回编译完成的test.apk.
将此apk安装到手机上运行会怎么样呢?我哦们来试一试。
说我们的应用没有签名,说明apktool回编译回来的apk并没有为我们添加签名,我们需要自己为test.apk添加签名。
签名
第一步生成签名文件
keytool -genkey -keystore C:\Users\Administrator\Desktop\apktool\test.keystore -alias test -keyalg RSA -validity 10000
命令解释:
Keytool 选项 描述
-genkey 产生一个键值对(公钥和私钥)
-v 允许动作输出
-alias 键的别名。只有前八位字符有效。
-keyalg 产生键的加密算法。支持DSA和RSA。
-keysize 产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。
-dname 专有名称,描述谁创建的密钥。该值被用作自签名证书的颁发者和主题字段。注意你可以不在命令行指定。如果没有指定keytool会提示你(CN,
OU, and so on)。
-keypass 键的密码。 主要为了安全起见,如果没提供,keytool会提示你输入。
-validity 键的有效期,单位:天
-keystore.keystore 用于存储私钥的文件。
上面的问题随便填一下就可以。
这里有两个问题需要注意:
1.如果中文乱码 : chcp 936 命令转化为 gbk编码
2.密钥口令最好用纯数字。
在你输入的文件目录(C:\Users\Administrator\Desktop\apktool\test.keystore)中成功生成 test.keystore.
第二步为你的apk签名
jarsigner -verbose -keystore C:\Users\Administrator\Desktop\apktool\test.keystore -signedjar C:\Users\Administrator\Desktop\apktool\signatureTest.apk C:\Users\Administrator\Desktop\apktool\test.apk test
命令分为 3部分:
第一部分:C:\Users\Administrator\Desktop\apktool\bm.keystore 你的签名文件地址。
第二部分:C:\Users\Administrator\Desktop\apktool\haha.apk 目标apk输出地址
第三部分:C:\Users\Administrator\Desktop\apktool\haha.apk bm 源apk地址
在C:\Users\Administrator\Desktop\apktool\ 出现签名过的apk文件
OK,基本已经完工,将signatureTest.apk放在android手机上可以正常运行。