Android 独有的安全机制:一:权限机制,二:签名机制。签名机制的使用场合:升级App和权限检查;
一、优点:
1. 有利于程序的升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本,如果新版程序和旧版程序的数字签名不同,则Android系统认为是不同程序,并产生冲突。
2. 有利于程序的模块化设计和开发。Android允许同一个数字签名的程序运行在同一个进程中,Android会视为一个程序。
3. 可以通过权限permision的方式在多个程序之间共享数据和代码。Android提供基于证书的权限机制。
如果一个 permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应 用程序才能取得该权限。
二、 Android数字证书的要点:
1. 所有的应用程序必须有证书;
2. Android的程序包可以是自签名的,不需要权威数字证书机构签名认证;
3. 如果要正式发布,必须使用一个合适死要生成的数字证书来给程序签名,而不能使用adt插件或ant工具生成的调试证书来发布。
4.
有效期:强烈要求2033年之后,范围是1~1000
三、 调试证书
没有签名的程序也可以在手机和模拟器上运行?为方便开发和调试程序,ADT会自动使用debug密钥为应用程序签名。位置:系统盘符:/Documents and Settings/用户名/.android/debug.keystore
四、签名步骤
有两种签名方式,一种通过dos,另一种通过图形化界面,这里采用第二种。
五、 覆盖安装
为程序覆盖安装主要检查两点:
1)两个程序的入口Activity是否相同。两个程序如果包名不一样,即使其它所有代码完全一样,也不会被视为同一个程序的不同版本;
2)两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。
另外,可能有人可能会认为反正debug签名的应用程序也能安装使用,那也没有必要自己签名了嘛。千万不要这样想,debug签名的应用程序有这样两个限制,或者说风险:
1)debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;
2)debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。不要小视这个问题,如果你开发的程序只有你自己使用,当然无所谓,卸载再安装就可以了。但要是你的软件有很多使用客户,这就是大问题了,就相当于软件不具备升级功能!
六、 反编译:
1. 反编译工具:
需要下载四个工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot
dex2jar:将apk中的classes.dex转化成Jar文件。
JD-GUI:反编译工具,可以直接查看Jar包的源代码。
apktool:反编译工具,通过反编译APK中XML文件,直接可以查看。
apktool-install-windows-r05-ibot:辅助windows批处理工具。
2. 具体步骤:
1) 解压apk包,
apk也是常见的zip,用压缩文件可以得到图片资源文件;这里只取出classes.dex文件,是java文件编译后经过dx工具打包而成。
2)反编译dex文件
使用dex2jar 工具:dex2jar classes.dex
3) 反编译jar包
得到jar包后,下载自己的反编译工具,这里使用JD-GUI,打开上一步生成的jar包,即可看到源代码;
4) 反编译xml文件
利用后两个工具解压后得到的三个文件放到同一个目录,具体命令:apktool d ./app.apk app
七、 代码混淆
1.
在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt。
如果需要对项目进行全局混码,只需要进行一步操作:
将project.properties的中
“# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”的“#”去掉就可以了。
2. 在老版本中,创建项目的时候,会给出proguard.cfg,但是在的新版中创建项目则不会有任何提示。这个时候需要只要将proguard.cfg的内容加入到proguard-project.txt中,再根据自己的需要进行编辑即可。