新博客地址
blog.marssecure.com
重打包检测
对于apk重打包检测中,验证签名是一种很简单、很快捷的方法,为了更好理解签名,这一章主要讲解apk中签名文件内容
签名:
每一个apk发布之前都需要进行签名,不然不能进行安装,我们使用winrar来查看一个apk包
我们可以看到其目录结构,关注一下META-INF这个文件,里面包含三个文件
下面我们来解压缩,打开看看里面内容
源码位置 :
/build/tools/signapk/SignApk.java
MANIFEST.MF:
我们可以看到,该文件包含了多个Name和SHA1-Digest,其中name是文件名称,而SHA1-Digest则是其Base64格式的SHA1的哈希值
来看看源码中的实现
// Main函数中调用
Manifest manifest = addDigestsToManifest(inputJar, hashes); // 计算文件的hash值并放入Manifest中
// addDigestsToManifest函数
private static Manifest addDigestsToManifest(JarFile jar, int hashes)
...
...
...
TreeMap<String, JarEntry> byName = new TreeMap<String, JarEntry>();
for (Enumeration<JarEntry> e = jar.entries(); e.hasMoreElements(); ) {
JarEntry entry = e.nextElement();
byName.put(entry.getName(), entry);
}
// 依次进行哈希值计算
for (JarEntry entry: byName.values()) {
String name = entry.getName();
if (!entry.isDirectory() &&
(stripPattern == null || !stripPattern.matcher(name).matches())) {
InputStream data = jar.getInputStream(entry);
// 哈希操作
while ((num = data.read(buffer))