标签:
在Android系统中,所有安装到系统的应用程序都必须有一个数字证书, Android的系统不会安装一个没有数字证书的应用程序.这个数字证书用于标识应用程序的作者和其开发的应用程序之间的关系. 当一个开发者开发出一个APP并要将其发布的时候,我们要对开发出来的APK加盖数字证书,数字证书的密钥保存在开发者的手中.就是通过这种签名机制,开发者和他开发出来的应用程序建立起了一种信任关系.每一个开发者的密钥是不同的,它们开发出来的APP就被加盖了不同的数字证书.我们就是通过这种机制来判断这个APP是谁开发的.
一般情况下,同一个开发这的不同应用程序都会使用同一个数字证书.这样有利于程序的升级,当新版本的程序和旧版本的程序数字相同时,Android系统才会认为这两个程序是同一个程序的不同版本.如果新版本的程序和旧版本的程序数字证书不想同,则Android系统会认为它们是不同的程序.
当我们在判断一个APP是不是重打包的时候我们需要排除一种情况,那就是如果这个APP是原始的作者开发的,那么这样的APP我们是应该排除掉的.比如说一个APP的功能的升级,新的版本的发布.这种情况并不能算作是重打包.怎么排除这种情况,我们就需要对已经判断出存在可疑的重打包的APP做一个签名的验证.如果他们的数字证书签名相同我们人为这个APP对不是重打包的. 因为一般我们认为一个恶意软件的制作者在对某个APP进行重打包的时候,他首先会反编译这个APP,在其中加入相关的代码,这个时候在对这个反编译的APP重新编译,加盖自己的数字证书.这样原始的APP和重打包的APP便有不同的数字证书.
因此我们在分析重打包的时候判断签名是不是相同是一个必不可少的步骤.
标签:
原文地址:http://blog.csdn.net/chichoxian/article/details/44875767