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

相关推荐
NAGNIP1 分钟前
机器学习入门概述一览
算法
iuu_star38 分钟前
C语言数据结构-顺序查找、折半查找
c语言·数据结构·算法
Yzzz-F1 小时前
P1558 色板游戏 [线段树 + 二进制状态压缩 + 懒标记区间重置]
算法
漫随流水1 小时前
leetcode算法(515.在每个树行中找最大值)
数据结构·算法·leetcode·二叉树
mit6.8242 小时前
dfs|前后缀分解
算法
扫地的小何尚2 小时前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
千金裘换酒3 小时前
LeetCode反转链表
算法·leetcode·链表
byzh_rc4 小时前
[认知计算] 专栏总结
线性代数·算法·matlab·信号处理
qq_433554544 小时前
C++ manacher(求解回文串问题)
开发语言·c++·算法
歌_顿4 小时前
知识蒸馏学习总结
人工智能·算法