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

相关推荐
非优秀程序员1 小时前
第05章 播放器大战,暴风、快播与那一夜|《互联网产品恩仇录》
算法
武子康8 小时前
驾驶轨迹换个坐标,就能给移动机器人用吗?
人工智能·算法·机器学习
曾令胜12 小时前
云服务器被攻击后分析恶意脚本修复漏洞
网络安全·安全威胁分析
lisw0514 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
一起学安全技术14 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer
Delightrs16 小时前
Rust LeetCode238 算法题解
开发语言·算法·rust
自信1504130575916 小时前
重生之从0开始学习c++之——vector-中篇
c++·学习·算法
GoAI1 天前
DeepSeek Harness Memory (一)主流记忆插件总结
后端·算法·面试