工具:keytool、jarsigner(都在java\jre\bin目录下)
先用了keytool生成自己的密钥,命令如下:
keytool -genkey -alias demo.keystore -keyalg RSA -validity 2000 -keystore d:\demo.keystore
再用jarsigner 和 生成的密钥 签名,命令如下:
jarsigner -keystore D:\demo.keystore -signedjar D:\signed_test.apk D:\test.apk demo.keystore
通过以上方式首先对一个删除了META-INF文件的apk进行签名,但是报错:无法打开jar文件
于是,又对正常的、没有删除META-INF的apk进行重新签名,签名成功了!
在网上看了其他人的文章,注意到有一个命令和我使用的不太一样,如下:
jarsigner -verbose -keystore D:\demo.keystore -signedjar D:\test_signed.apk D:\test.apk demo.keystore
输出结果注意到 MANIFEST.MF的状态是更新,而其他两个的状态是添加,是否说明必须有MANIFEST.MF才能使用jarsigner.jar签名成功?
然而......删去其他两个后,再次签名发现还是签不了....
二更:
想测试一下fragment注入漏洞的一对app(地址),下载后安装失败,于是拆开包一看,在MATE-INF目录下只有.MF一个文件,于是使用前文的命令进行签名。签名后的apk能正常运行!