APKTool签名的一个问题

0x01 昨天写了反编译,今天就写下签名的问题

0x02 apktool的重打包功能大家都知道,堪称神器,各类破解人事必备之良器,

         用法不多说,只说签名容易遇到的问题

0x03 创建私钥仓库这个事情就不多说,方法很多,eclipse和keytool       都有类似功能

        需要注意的是,这个私钥仓库一共有两个密码,一个是私钥仓库的密码(storepass),另一个则是仓库里面每一个私钥对应一个密码(keypass),都是需要记住的。一个私钥仓库可以有多个私钥。

        换句话说每个私钥仓库创建的时候,这几个参数是要记录的

-storepass 123456789 私钥仓库的密码

-keypass    1987XXXX   私钥的密码

-keystore  F:\\webattack\android\AndroidMasterKey_icefish.key  私钥仓库文件在哪

icefish              私钥的名称

0x04   下来就是签名的东西了,jarsigner

用法 jarsigner -help可以看到。

这里面比较关键的几个参数

-storepass   -keypass  -keystore  上面的都说了,

-verbose  输出详细信息

特别注意的是  -signedjar 这个参数,他一共有三个选项,第一个是签名后的apk文件名,第二个选项是需要签名的apk路径,第三个很关键,就是前面提到的私钥的名称了。

一个常见的如下所示

jarsigner -verbose -keystore F:\\webattack\android\AndroidMaster
Key_icefish.key -storepass 123456789 -keypass 1987XXXX -signedjar Modify_signed.
apk F:\\webattack\android\result\ModifyCompile\Modify.apk icefish

0x05 在实际使用中,我们成功打包,成功签名,然后Android机子上一装,报错:

 10-14 07:06:50.223: W/PackageParser(61): java.lang.SecurityException: META-INF/ICEFISH_.SF has invalid digest for res/menu/main.xml in /data/app/vmdl-2089432299.tmp

   

甚至没有改动任何代码的直接签名都报这个错。

原因如下:

http://hardpass.iteye.com/blog/1534636

   

   实质就是jdk7改变了jarsigner的默认选项,不再是SHA 128了,而是变成了SHA256,

   这样Android 模拟器就验证不对了

   解决办法就是再jarsigner的调用中在强制设置摘要算法

   -digestalg SHA1 -sigalg MD5withRSA

这样就可以了。

猜你喜欢

转载自wcf1987.iteye.com/blog/1957154
今日推荐