V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
weiceshi
V2EX  ›  编程

你们的 Android APP 是如何防止别人通过抓包和反编译来获取 REST API 调用机制的啊

  •  
  •   weiceshi · 2016-12-26 10:58:03 +08:00 · 14297 次点击
    这是一个创建于 2918 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这么多年写过很多 APP ,也研究过很多别的 APP
    安卓 APP 通过抓包和反编译很容易获取 REST API 调用机制,有什么方法可以尽量避免吗(包括服务端)?

    1,通常都是把 method 和请求参数 hash 或者 rsa 后发送到服务器比较,比如 :
    method+p1+v1+p2+v2+p3+v3
    Hash 或者 RSA 后发送到服务器进行验证

    2,Hash 的话,可以稍微增加一点难度,本地自定义一个乱序字典,来进行请求参数排序,比如 : 字典是[3,1,2],那么 method+p3+v3+p1+v1+p2+v2

    3 ,但通常还是 RSA ,这里就涉及到公钥保存的问题
    最简单的储存字符串或者文件,只要反编译后很容易就找到了;
    见过比较复杂一点的(某国外著名社交软件),存在一张图片里,程序读几个固定点的 rgb 值来拼成 key ;
    也有复杂一点的,把 key 或者 rsa 加密过程写在 so 里面(这个就多了,比如 163 系),但是这样一样可以通过 load so 文件来进行调用

    基本上遇到过的都是在这个范畴内,难度有高低,但是都能破解。大家还有更好的想法吗?

    6 条回复    2016-12-26 19:47:55 +08:00
    weiceshi
        1
    weiceshi  
    OP
       2016-12-26 11:35:40 +08:00
    没有人讨论吗?@@@@@@@@
    tomczhen
        2
    tomczhen  
       2016-12-26 11:46:58 +08:00
    因为都是老问题了,有这功夫还不如去多了解下 TCP/IP 协议安全相关的部分。

    没有完美的防御方法,任何安全措施都是要付出代价的——就看是在哪一方面了。

    1.篡改请求
    这个好解决,用非对称加密 hash 签名就行了。

    2.重放攻击
    request id 或者 TOTP

    3.中间人攻击
    可以按 ssl 那套逻辑自己实现对数据内容加密一次,这样就算 https 被搞了,也不会泄露用户信息。不过,如果接口会被 web 页面 ajax 复用我就不知道怎么弄了。

    4.伪造请求
    说实话,客户端可以反编译的话,伪造请求只是难度问题罢了,不能避免

    总的来说,只要后台逻辑没什么业务漏洞,攻击产生的利益小于攻击成本,基本上没人会搞的,懒得弄的话,上个 WAF 也能解决不少问题。
    qwer1234asdf
        3
    qwer1234asdf  
       2016-12-26 12:54:06 +08:00 via iPhone
    防重放:
    url 后拼接时间戳后再 hash
    防破解:
    请求对称加密,用 rsa 交换对称加密密钥
    ........
    damean
        4
    damean  
       2016-12-26 17:30:24 +08:00
    既然是公钥为啥会担心被别人抓取?

    抓去了有什么危害?
    zke1e
        5
    zke1e  
       2016-12-26 17:59:40 +08:00
    很简单,加个壳就可以防止 99.9%的人破解了,当然是商业版的加壳,免费版大概能防 60%吧。
    AlisaDestiny
        6
    AlisaDestiny  
       2016-12-26 19:47:55 +08:00
    如果你有技术的话可以把网络请求封装到 jni 里。调用的时候传入参数就可以了。总不能把 C 语言写的东西也给反编译了吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5481 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 01:34 · PVG 09:34 · LAX 17:34 · JFK 20:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.