常规APP在客户端层面潜在应用安全问题探讨

v2-80778b0ebc0cfa008afdfb9704b1519d_720w

站在安全的角度上对客户端应用安全提出几点小建议和思考,以防止产品后期调整造成不必要的麻烦.所以总结一些常见的检测方案,过滤一些风险用户

没有绝对的安全, 安全都是相对的.
道高一尺魔高一丈, 逆向永远胜利!

1. 如何避免同行来爬取我们应用的素材?

对服务器压力造成压力,影响用户体验.

解决方案:

  1. 简单的做一下抓包检测

    1. OKHTTP开启证书校验功能

      1. 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)
    2. 检测客户端是否使用VPN功能

      1. https://www.biaodianfu.com/android-ios-proxy-vpn.html
    3. 检测客户端是否设置了系统代理

      1. https://www.biaodianfu.com/android-ios-proxy-vpn.html
  2. 接口验签功能

    1. 对接口的参数进行验签功能(sign参数),
    2. 如果开发团队有NDK开发经验,建议写到native层上,可以过滤新手.

      1. https://developer.aliyun.com/article/1169355 NDK使用MD5算法
      2. https://blog.csdn.net/afei__/article/details/81031965 JNI动态注册

2. 盗版应用,内购功能,去广告

市场上出现大量的VIP破解版,VIP内购版,去广告绿色版. 应该尽可能的避免这类可能的出现

解决方案:

  1. APK签名校验,如果团队有能力,建议放在native层

    1. https://www.jianshu.com/p/50f2a8db2ab0
    2. https://stackoverflow.com/questions/15025304/check-apk-signature-in-c-native-code
  2. 对release版的应用做混淆

    1. https://github.com/CodingGay/BlackObfuscator
  3. 使用第三方的加固厂商保护服务(加壳)

    1. 360
    2. 腾讯
    3. 爱加密
    4. 梆梆
  4. 关键功能,核心功能应该由服务器下发接口,所有关键接口做VIP校验,本地APP只是个数据展示. 从根源上避免内购的可能

3. 如何避免用户恶意调用接口

竞品应用不具备相关能力, 会选择开通VIP或者注册大量帐号来调用我们的客户端接口以服务他们的产品使用

解决方案:

  1. 调用频率限制, 每分钟限制多少次请求.
  2. IP限制 – 当某个IP疯狂的请求接口的时候为风险用户.
  3. 帐号限制 – 一个帐号的IP频繁切换,也可视为风险用户.

4. 机刷(真实用户)问题

如果推广方案使用存在地推,或者有推广奖励的情况下,那避免不了存在机刷的可能, 如何尽可能的避免机刷(恶意用户)的存在

解决方案:
https://github.com/lamster2018/EasyProtector

  1. ROOT检测 一般的真实用户机器都是不具备ROOT权限的,把ROOT用户视为恶意用户即可

    1. https://8ksec.io/advanced-root-detection-bypass-techniques/
  2. Xposed检测, 遍历APP列表,检测是否存在xposed manager, 通过反射loadClass de.robv.android.xposed.XposedHelpers

    1. https://github.com/CrackerCat/RiskEnvDetection
    2. https://github.com/w568w/XposedChecker
  3. frida检测, 检测端口27042

    1. https://mp.weixin.qq.com/s/RzdyDWRZ4un2_mC4Om8XZg
  4. Android模拟器特征检测

    1. https://github.com/reveny/Android-Emulator-Detection

5. 总结

在客户端层面的对抗终究是有限, 你没法100%的避免破解者对客户端的破解侵入. 我们只能尽可能的给破解者提高自身产品破解难度.从而劝退一些逆向工作者,达到保护自身产品的目的.

同时,随着安全圈的资料日渐丰富,逆向工具日渐丰富完善,破解客户端的成本大幅降低,这也对Android/IOS应用开发工程师的能力提出了全新的要求,不再是简单的会开发,CURD工程师亦或者画画UI,写写简单的逻辑,还需要对安全相关的知识有一定的了解,才可以更好的为产品客户端保驾护航!

最后, 逆向工程师永远胜利!

© 版权声明
THE END
喜欢就支持一下吧
点赞166 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容