移动安全面试题—APP 安全开发

如何从海量的APP找出一个二次打包的应用呢,有几种思路(流量特征,代码相似度检测,UI节点遍历等,开放题)

  1. 流量特征分析:对比原始应用和疑似二次打包应用的网络流量特征。如果存在明显差异,如额外的广告请求、数据泄露等,可能是二次打包的应用。
  2. 代码相似度检测:使用代码相似度检测算法(如 Jaccard 系数、余弦相似度、Moss 等)对比原始应用和疑似二次打包应用的源代码。如果代码相似度较高,但存在一些额外的模块或修改,可能是二次打包的应用。
  3. UI 节点遍历:对比原始应用和疑似二次打包应用的 UI 结构。通过遍历 UI 节点,检查布局、控件和交互方式的差异。如果存在明显差异,可能是二次打包的应用。
  4. 资源文件对比:对比原始应用和疑似二次打包应用的资源文件,如图片、音频、视频等。二次打包的应用可能会添加或修改资源文件,以实现某些功能或欺诈目的。
  5. 动态行为分析:在模拟器或真机上运行原始应用和疑似二次打包应用,观察它们的运行时行为。通过分析系统调用、内存使用、文件操作等动态特征,可以发现被二次打包的应用。
  6. AndroidManifest.xml 对比:对比原始应用和疑似二次打包应用的 AndroidManifest.xml 文件。二次打包的应用可能会添加新的权限、组件或修改已有配置。
  7. 数字签名验证:对比原始应用和疑似二次打包应用的数字签名。二次打包的应用可能使用不同的签名证书进行签名。
  8. 应用证书信息对比:检查原始应用和疑似二次打包应用的证书颁发者、有效期等信息。不同的证书信息可能暗示应用经过了二次打包。
  9. 机器学习方法:基于上述特征,可以训练机器学习模型(如决策树、支持向量机、神经网络等)对原始应用和二次打包应用进行分类。这种方法可以自动化地识别出二次打包的应用,但可能需要大量的训练样本和特征工程。

如何防止 app 重打包?

防止 app 重打包完全是不可能的,但我们可以采取一些策略使得重打包变得更困难和不值得:

  • 代码混淆: 使用 ProGuard 或 R8 对 Java 代码进行混淆,使得反编译后的代码难以阅读和理解。
  • 资源加密: 对 app 中的重要资源(如图片、配置文件、数据库等)进行加密,使得攻击者难以直接篡改或窃取资源。
  • JNI 或 NDK: 将关键的安全逻辑或敏感数据处理移至 C/C++ 代码中并通过 JNI 调用,以提高破解难度。
  • 代码完整性检测: 在运行时检测应用的签名信息、哈希值等,确保应用未被篡改。
  • 环境检测: 检测运行环境,如是否处于模拟器、是否具有 root 权限等,以降低攻击者的调试能力。
  • 反调试技术: 实施反调试技术,如检测调试器连接、使用本地变量覆盖调试器断点等,以防止攻击者对 app 进行调试。

如何检测重打包?

检测重打包的方法包括但不限于:

  • 签名检测: 比较应用的签名信息与预期的签名信息是否一致。若不一致,说明应用可能已被重打包。
  • 哈希值校验: 计算应用安装包或关键资源的哈希值,并与预期的哈希值进行比较。若不一致,则可能是重打包应用。
  • 类名和方法名检测: 检查应用中是否存在预期之外的类名或方法名,这可能是攻击者添加的恶意代码。
  • 服务器端验证: 服务器端维护一个可信的应用版本列表,客户端在与服务器通信时,服务器会验证客户端使用的应用版本是否在可信列表中。

介绍一下你了解的 Android APP 防护策略?

以下是一些常见的 Android APP 防护策略:

  • 安全开发: 遵循安全编码规范,及时修复已知漏洞,避免使用不安全的接口或组件。
  • 加固应用: 采用代码混淆、资源加密、JNI/NDK 等技术,提高破解难度。
  • 完整性检测: 对应用签名、哈希值等进行验证,确保应用未被篡改。
  • 环境检测: 检测运行环境,如模拟器、root 状态等,以降低攻击者的调试能力。
  • 反调试技术: 通过各种手段阻止或干扰攻击者对应用进行调试。
  • 安全通信: 使用 HTTPS、TLS 等安全协议进行网络通信,保护数据传输的安全。
  • 数据加密: 对存储在设备上的敏感数据进行加密,防止数据泄露。
  • 权限控制: 严格限制应用所需的权限,避免过多权限导致安全隐患。
  • 安全审计: 对应用进行定期的安全审计,检查潜在的安全漏洞和风险。
  • 在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

移动安全星球

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值