Android样本Repack重打包检测思路

1. 什么是Android样本重打包,为什么要检测重打包

(1)apk是zip,很容易做repack

(2)repack后,被抄袭,redirect ad,或者插入malicious payloads

(3)repack带来的影响、问题:

  • 游戏,被repack后,能做很多事情
  • repack银行app后,可能直接转移用户的资金
    (4)repack的定义:两个APP,如果代码相似度超过80%,并且是由不同的开发者签名,则可以被认为是repack(参考1)
    (5)app中有大量SDK代码。有的SDK代码比app核心代码多,所以app相似度就高。所以检测时最好能做SDK移除
    (6)作者发现,数据集中,被多次repack的样本,还都release到google play了
    参考1是一篇介绍该领域研究的综述,介绍非常详细全面,值得细读。

用JEB打开Repack的样本,如果样本没有严重的混淆或者加壳,也能看到Repack后的样本,被插入了一些(恶意)的代码,如下图所示:

这是笔者曾经发现并且报给 Google Security 团队的恶意样本。

2. 检测思路1:manifest tag

manifest中如果有类似 "platformBuildVersionName___6.0-2704002" 的tag,就说明是被重打包过。 应为这样的tag是一个重打包工具apktool会默认加上的,可以通过大批量manifest文件的统计能找出一大批类似的标记。apktool做样本重打包时,会调用aapt,aapt就会加上这样的tag。所以这种检测思路,是不会有FP的,但是肯定有FN。因为这个tag是可以被抹掉的。

3. 检测思路2:string_ids中的字符串的偏移位置

参考2提到了一种方法,和检测思路1类似,也是找到了样本重打包的标记。这种方法是解析DEX文件结构,string_ids中的字符串的偏移位置(地址),在没有repack过的app中是有序的,在repack后的app中是无序的。

4. 检测思路3:相似性icon,code

这种思路,是使用LSH之类的来计算代码相似性,再根据开发者证书不同,来进行判断。如果代码相似,并且又插入了敏感权限,就可能是潜在的恶意代码injection。

5. 总结

Android样本重打包检测,可以发现恶意代码注入的情况。检测思路是根据manifest找到tag,或者DEX文件字符串地址偏移顺序。大多检测思路都是根据相似性来实现的。当然还能使用机器学习之类的做检测,或者直接根据特征向量做比对/相似性检索。也可以研究不同的重打包工具,做重打包后的统计分析来寻找tag。根据tag来检测,FP为0但FN应该会比较高。相似性的思路,一定会有FP(比如开发者换证书)。

参考

  1. Li Li etc. Rebooting Research on Detecting Repackaged Android Apps: Literature Review and Benchmark. 2019

  2. Hugo Gonzalez etc. Exploring Reverse Engineering Symptoms in Android apps

相关推荐
想跑步的小弱鸡2 小时前
Leetcode hot 100(day 3)
算法·leetcode·职场和发展
xyliiiiiL3 小时前
ZGC初步了解
java·jvm·算法
爱的叹息4 小时前
RedisTemplate 的 6 个可配置序列化器属性对比
算法·哈希算法
独好紫罗兰4 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
每次的天空5 小时前
Android学习总结之算法篇四(字符串)
android·学习·算法
请来次降维打击!!!5 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
qystca6 小时前
蓝桥云客 刷题统计
算法·模拟
别NULL6 小时前
机试题——统计最少媒体包发送源个数
c++·算法·媒体
weisian1516 小时前
Java常用工具算法-3--加密算法2--非对称加密算法(RSA常用,ECC,DSA)
java·开发语言·算法
程序员黄同学7 小时前
贪心算法,其优缺点是什么?
算法·贪心算法