反编译后的APK重新签名
来源:互联网 发布:dota2能在mac上玩吗 编辑:程序博客网 时间:2024/05/21 17:46
APK签名是什么
Android系统要求所有安装的应用程序都必须用数字证书进行过签名。签名的意义在于,确认应用程序的作者,尽力各个应用之间的信任关系。同一个应用程序升级时,系统也会对签名进行验证,只有签名相同的APP才会被允许update。
理解签名需要注意下面几点:
- 所有应用程序都必须被签名,没有签名的APK是不会被Android允许安装的
- Debug程序时,SDK会为debug release自动生成一个特殊的debug签名
- 带有debug签名的APP是不允许被发布的
- android系统只在安装时检查签名中的过期时间。如果安装后才过期,APP也能被正常使用
- 可以用JDK自带的工具Keytool 和 Jarsigner 生成签名并进行签名
- 对APK签名后,建议用zipalign对APK package进行优化
为什么需要重签名
修改一个APP的行为,一般先要用Apktool对APK进行反编译,修改smali代码后,在编译回APK(参考[2])。
但smali代码经Apktool编译出的APK,其中的签名就丢失了(没有了META-INF文件夹)。
没有签名的APK是不会被Android允许安装的,所以此时就需要对APK进行重签名。
除此之外,发布APP之前,也是需要对APK进行签名的。
怎么给APK重新签名
用JDK自带的工具Keytool
和Jarsigner
,就能生成签名,并对APK进行签名。
生成新证书
用keytool
就能生成新证书,下面生成一个叫ybdesire的证书(注意这里需要根据CMD提示,输入信息)。
E:\mine\tmp\baidu_yun_crack>keytool -genkey -alias ybdesire.keystore -keyalg RSA -validity 20000 -keystore ybdesire.keystoreEnter keystore password:Re-enter new password:What is your first and last name? [Unknown]: 123What is the name of your organizational unit? [Unknown]: 456What is the name of your organization? [Unknown]: 789What is the name of your City or Locality? [Unknown]: 123What is the name of your State or Province? [Unknown]: 456What is the two-letter country code for this unit? [Unknown]: cnIs CN=123, OU=456, O=789, L=123, ST=456, C=cn correct? [no]: yEnter key password for <ybdesire.keystore> (RETURN if same as keystore password):
这里keytool的参数含义为:
- -alias ybdesire.keystore, 别名为ybdesire.keystore
- -keyalg RSA, 使用RSA算法对签名加密
- -validity 20000, 有效期限20000天
- -keystore ybdesire.keystore,证书为ybdesire.keystore
重新签名
用jarsigner
对反编译并打包后的baiduyun_481_d.apk进行签名。
jarsigner -verbose -keystore ybdesire.keystore -signedjar baiduyun_481_d_s.apk baiduyun_481_d.apk ybdesire.keystore
用zip工具打开重签名后的baiduyun_481_d_s.apk可以看到,包里面含有META-INF文件夹,说明这个APK签名成功了。
结论
注意重新签名后的APK,只能保证能被正常安装,不能保证安装后能正常运行。因为APP的代码可能做了签名验证,。
参考
- [1] 为什么APK需要签名,http://stackoverflow.com/questions/23906799/why-should-i-sign-my-application-apk-before-release
- [2] https://github.com/ybdesire/AndroidAPPLearn/tree/master/decompile_apk/1_helloworld
0 0
- 反编译后的APK重新签名
- apk的反编译,重新打包,签名
- apk的反编译与重新打包并签名
- apk反编译后重新打包
- 反编译apk降低权限及重新签名
- apk 反编译和重新签名打包命令
- 反编译apk,修改sdk文件,重新签名
- 反编译apk文件重新打包并签名
- 安卓反编译后重新打包的签名过程
- 用apktool工具反编译apk后怎么得到源码,重新打包,签名
- apk 反编译以及反编译后重新生成apk --apktool工具的使用
- apk反编译后重签名问题
- android-反编译后重新打包apk文件
- apk反编译修改后重新打包
- Apk修改后重新打包、签名
- apk包加固后重新签名
- apk重新签名的步骤
- apk文件的重新签名
- android 最简单的侧滑实现DrawerLayout
- Windows核心编程 第六章 线程基础知识 (下)
- 2016 大连网络赛 & hdu5875 (优先队列+离线)★
- 中坠表达式转后缀表达式(ASP.NET)
- 视频直播技术详解(1)采集
- 反编译后的APK重新签名
- Android测试之设备化测试(Instrumented Tests)
- python 学习
- EhCache缓存在web下的使用实例
- 数据结构
- μC/OS调度器及任务创建、挂起、恢复、删除、初始化函数的使用
- 应该怎样学习新知识?
- LeetCode-Longest Common Prefix
- np.random.normal()正态分布