常规APP在客户端层面潜在应用安全问题探讨
站在安全的角度上对应用安全提出几点小疑问,以防止产品后期调整造成不必要的麻烦.所以总结一些常见的检测方案,过滤一些风险用户
没有绝对的安全, 安全都是相对的.
道高一尺魔高一丈, 逆向永远胜利!
1. 如何避免同行来爬取我们应用的素材?
对服务器压力造成压力,影响用户体验.
解决方案:
- 简单的做一下抓包检测
- OKHTTP开启证书校验功能
- https://ch3nye.top/Android-HTTPS%E8%AE%A4%E8%AF%81%E7%9A%84N%E7%A7%8D%E6%96%B9%E5%BC%8F%E5%92%8C%E5%AF%B9%E6%8A%97%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/(SSLPING)
- 检测客户端是否使用VPN功能
- https://www.biaodianfu.com/android-ios-proxy-vpn.html
- 检测客户端是否设置了系统代理
- https://www.biaodianfu.com/android-ios-proxy-vpn.html
- OKHTTP开启证书校验功能
- 接口验签功能
- 对接口的参数进行验签功能(sign参数)
- 如果开发团队有NDK开发经验,建议写到native层上,可以过滤新手.
- https://developer.aliyun.com/article/1169355 NDK使用MD5算法
- https://blog.csdn.net/afei__/article/details/81031965 JNI动态注册
2. 盗版应用,内购功能,去广告
市场上出现大量的VIP破解版,VIP内购版,去广告绿色版. 应该尽可能的避免这类可能的出现
解决方案:
- APK签名校验,如果团队有能力,建议放在native层
- https://www.jianshu.com/p/50f2a8db2ab0
- https://stackoverflow.com/questions/15025304/check-apk-signature-in-c-native-code
- 对release版的应用做混淆
- https://github.com/CodingGay/BlackObfuscator
- 使用第三方的加固厂商保护服务(加壳)
- 360
- 腾讯
- 爱加密
- 梆梆
- 关键功能,核心功能应该由服务器下发接口,所有关键接口做VIP校验,本地APP只是个数据展示. 从根源上避免内购的可能
3. 如何避免用户恶意调用接口
竞品应用不具备相关能力, 会选择开通VIP或者注册大量帐号来调用我们的客户端接口以服务他们的产品使用
解决方案:
- 调用频率限制, 每分钟限制多少次请求.
- IP限制 - 当某个IP疯狂的请求接口的时候为风险用户.
- 帐号限制 - 一个帐号的IP频繁切换,也可视为风险用户.
4. 机刷(真实用户)问题
如果推广方案使用存在地推,或者有推广奖励的情况下,那避免不了存在机刷的可能, 如何尽可能的避免机刷(恶意用户)的存在
解决方案:
https://github.com/lamster2018/EasyProtector
- ROOT检测 一般的真实用户机器都是不具备ROOT权限的,把ROOT用户视为恶意用户即可
- https://8ksec.io/advanced-root-detection-bypass-techniques/
- Xposed检测, 遍历APP列表,检测是否存在xposed manager, 通过反射loadClass de.robv.android.xposed.XposedHelpers
- https://github.com/CrackerCat/RiskEnvDetection
- https://github.com/w568w/XposedChecker
- frida检测, 检测端口27042
- https://mp.weixin.qq.com/s/RzdyDWRZ4un2_mC4Om8XZg
- Android模拟器特征检测
- https://github.com/reveny/Android-Emulator-Detection
5. 总结
在客户端层面的对抗终究是有限, 你没法100%的避免破解者对客户端的破解侵入. 我们只能尽可能的给破解者提高自身产品破解难度.从而劝退一些逆向工作者,达到保护自身产品的目的.
同时,随着安全圈的资料日渐丰富,逆向工具日渐丰富完善,破解客户端的成本大幅降低,这也对Android/IOS应用开发工程师的能力提出了全新的要求,不再是简单的会开发,CURD工程师亦或者画画UI,写写简单的逻辑,还需要对安全相关的知识有一定的了解,才可以更好的为产品客户端保驾护航!
最后, 逆向工程师永远胜利!