直接对未签名的apk文件进行签名以及简单的项目混淆
2014-08-05 14:13
197 查看
以下是自己一天找资料的成果,留作以后方便使用;
直接对apk文件签名需用到jdk\jre\bin中的keytool和jarsigner工具;
密钥文件:daguu-release-key.keystore
未签名的apk文件:tap_unsign.apk
签名命令:
jarsigner –verbose –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-release-key.keystore
签名命令(带别名):
jarsigner –verbose –keystore daguu.keystore –signedjar tap_signed.apk tap_unsign.apk 'daguu'(此处为别名)
签名算法1:
-sigalg SHA1withDSA -digestalg SHA1
jarsigner –verbose -sigalg SHA1withDSA -digestalg SHA1 –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-
release-key.keystore
签名算法2(使用中):
-digestalg SHA1 -sigalg MD5withRSA
(使用中)
jarsigner –verbose -digestalg SHA1 -sigalg MD5withRSA –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-
release-key.keystore
修改密钥文件别名命令:
keytool -changealias -keystore daguu-release-key.keystore -alias daguu -destalias daguu-release-key.keystore
应该注意jdk1.6与jdk1.7的apk签名方法有所不同,需要在jarsigner中加入签名算法。默认的key pair生成器算法是DSA,签名算法是从底层的private key的算法继
承来的:如果底层private key的类型是DSA,那么默认的签名算法就是SHA1withDSA,如果底层private key的类型是RSA,那么默认的签名算法就是MD5withRSA。
遇到的问题:
1,jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目
解决办法:在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同;否则就会出现此错误;出现
此错误后可以通过修改密钥文件的别名解决,或者使用带别名的签名命令(未成功,原因未知);
2,apk签名 此jar中包含证书链未验证部分 (签名成功,但是安装不了-认证失败)
解决办法:极大部分是jdk版本的原因,此次使用的是jdk1.7版本,但错误的使用了jdk1.6版本的签名方法,在jarsigner中加入签名算法即可;
3,jarsigner错误:java.security.signtureException:private key algorithm is not compatible with signature algorithm
解决办法:此处可能是aligner加入的算法错误,此次使用的是“签名算法二”,错误的使用了“算法一”导致此错误;
4,未提供 -tsa或-tsacert,此jar没有时间戳
解决办法:暂时没有找到解决办法,但是不影响签名操作,且签名有效期可能只有24年;
5,jarsigner不是内部命令错误
解决办法:可能是环境变量配置问题,或者bin文件夹缺少jarsigner
附带资源网址:http://linfengdu.blog.163.com/blog/static/1177107320121023112855787/
http://214zhu.blog.163.com/blog/static/148692220125651656616/
另:关于app安全问题
如果android项目未引入外来jar包,可直接找到project.properties文件中的proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-
project.txt,然后去掉这一行的注释即可;
如果引入了外来包,可能需要制定混淆规则;
直接对apk文件签名需用到jdk\jre\bin中的keytool和jarsigner工具;
密钥文件:daguu-release-key.keystore
未签名的apk文件:tap_unsign.apk
签名命令:
jarsigner –verbose –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-release-key.keystore
签名命令(带别名):
jarsigner –verbose –keystore daguu.keystore –signedjar tap_signed.apk tap_unsign.apk 'daguu'(此处为别名)
签名算法1:
-sigalg SHA1withDSA -digestalg SHA1
jarsigner –verbose -sigalg SHA1withDSA -digestalg SHA1 –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-
release-key.keystore
签名算法2(使用中):
-digestalg SHA1 -sigalg MD5withRSA
(使用中)
jarsigner –verbose -digestalg SHA1 -sigalg MD5withRSA –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-
release-key.keystore
修改密钥文件别名命令:
keytool -changealias -keystore daguu-release-key.keystore -alias daguu -destalias daguu-release-key.keystore
应该注意jdk1.6与jdk1.7的apk签名方法有所不同,需要在jarsigner中加入签名算法。默认的key pair生成器算法是DSA,签名算法是从底层的private key的算法继
承来的:如果底层private key的类型是DSA,那么默认的签名算法就是SHA1withDSA,如果底层private key的类型是RSA,那么默认的签名算法就是MD5withRSA。
遇到的问题:
1,jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目
解决办法:在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同;否则就会出现此错误;出现
此错误后可以通过修改密钥文件的别名解决,或者使用带别名的签名命令(未成功,原因未知);
2,apk签名 此jar中包含证书链未验证部分 (签名成功,但是安装不了-认证失败)
解决办法:极大部分是jdk版本的原因,此次使用的是jdk1.7版本,但错误的使用了jdk1.6版本的签名方法,在jarsigner中加入签名算法即可;
3,jarsigner错误:java.security.signtureException:private key algorithm is not compatible with signature algorithm
解决办法:此处可能是aligner加入的算法错误,此次使用的是“签名算法二”,错误的使用了“算法一”导致此错误;
4,未提供 -tsa或-tsacert,此jar没有时间戳
解决办法:暂时没有找到解决办法,但是不影响签名操作,且签名有效期可能只有24年;
5,jarsigner不是内部命令错误
解决办法:可能是环境变量配置问题,或者bin文件夹缺少jarsigner
附带资源网址:http://linfengdu.blog.163.com/blog/static/1177107320121023112855787/
http://214zhu.blog.163.com/blog/static/148692220125651656616/
另:关于app安全问题
如果android项目未引入外来jar包,可直接找到project.properties文件中的proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-
project.txt,然后去掉这一行的注释即可;
如果引入了外来包,可能需要制定混淆规则;
相关文章推荐
- 【Android】AndroidStudio调试apk时直接使用签名好的签名文件,用正式签名进行调试
- Android 如何对apk文件进行反编译以及重新打包签名
- android 项目进行混淆时,签名打包生产proguard文件是报错处理方法。
- [置顶] 【Android】AndroidStudio调试apk时直接使用签名好的签名文件,用正式签名进行调试
- -------------【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用
- Android 如何对apk文件进行反编译以及重新打包签名 标签: apktoolandroid反编译jebSmali2Java 2016-05-10 16:00 3897人阅读 评论(0) 收藏
- 【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用
- android 导出签名APK--混淆文件proguard.cfg详解
- 创建ClickOnce项目签名证书详细步骤以及批处理文件
- apk文件反编译以及签名打包(dex2jar & apktool,apk-sign)
- 解决对android APK 项目进行签名过程中遇到的问题
- Android程序进行混淆,在导出签名apk包时出错!
- Android生成签名文件并用其对apk文件进行签名(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误完美解决)
- eclipse 将android项目打包成签名的apk文件
- 【Android】如何创建自己的证书文件,如何为apk以及zip文件签名 openssl
- 如何对apk文件进行签名
- Android程序进行混淆,在导出签名apk包时出错!
- 使用命令行生成签名文件并用其对apk文件进行签名
- Android程序进行混淆,在导出签名apk包时出错!
- 使用命令行生成签名文件并用其对apk文件进行签名