Skip to content
This repository has been archived by the owner on Apr 2, 2022. It is now read-only.

linghaolu/apkcomment

Repository files navigation

用途

往apk(zip)的 file comment 区域添加自定义数据,可以用于apk内置不同的数据,启动的时候做相应的事情。

比如

  • 对于小说app,用户从web站下载app,需要启动后打开不同的小说。
  • 或者对于应用市场类的app,启动后开始高速下载用户想要下的app。
  • 或者就是简单的渠道号。

这几种都是一个技术手段,往apk中嵌入一块数据。

这里主要演示用于打渠道包的用法。

集中内置数据的方法对比

  • 往res中添加配置文件。这种办法需要apk解压后重新签名。速度最慢。好处就是别人无法删除,无法篡改。
  • 往 apk 的 meta-info目录下添加配置文件,这种只需要使用 zip 命令,add一个文件即可,这种速度也很快,也值得推荐。但是apk读取速度比较慢。这种方法因为 meta-info目录下的文件不参与签名校验,所以可以被人删除或篡改。
  • 该项目使用的办法,往 apk 的 comment 区域添加自定义数据。这种方法生成apk速度最快,读取速度也最快。这种办法跟2一样,不参与签名,可以被别人删除和篡改。

后边两种办法,无法防止别人删除。但是对于篡改,只需要配合 rsa 非对称加密即可。

使用方法

支持不加密和加密两种办法。 不加密,对于非机密数据可以使用,读取速度在10ms级别。 加密采用rsa + aes 组合方式,读取速度略慢,主要是第一次load解密clas较慢,100ms级别。非第一次也在 10-20 ms级别。 以上性能在 nexus s,moto g,低端手机上测试结果。

不加密

java -jar apkcomment.jar source.apk channel_id

以上命令用于生成单个渠道包。

java -jar apkcomment.jar source.apk channel_list.txt

以上命令支持从文件中读取渠道号,批量打包。channel_list.txt 每行一个渠道号。

加密方式

加密方式用到了RSA非对称算法,可以放置别人伪造数据。所以需要自己生成RSA公私密钥对。

生成办法参考 http://linghaolu.github.io/openssl/2016/04/02/openssl-rsa-pem.html

加密方式也支持单渠道和多渠道两种方式,在非加密方式的基础上加上rsa私钥的pem格式的文件即可。

java -jar apkcomment.jar source.apk channel_id rsa_private_key.pem

java -jar apkcomment.jar source.apk channel_list.txt rsa_private_key.pem

存在的问题

Android N 中提到了 APK Signature Scheme v2,这种新引入的签名机制,会对整个文件的每个字节都会做校验,包括 comment 区域。所以到时候如果app使用新版本的签名工具的时候,如果启用 scheme v2,那么这个机制则不能工作。目前看代码,是可以disable v2 的。不过具体的运行机制,还需要正式版本出来。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages