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

2016-12-26 10:58:03 +08:00
 weiceshi

这么多年写过很多 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 文件来进行调用

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

14072 次点击
所在节点    编程
6 条回复
weiceshi
2016-12-26 11:35:40 +08:00
没有人讨论吗?@@@@@@@@
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
2016-12-26 12:54:06 +08:00
防重放:
url 后拼接时间戳后再 hash
防破解:
请求对称加密,用 rsa 交换对称加密密钥
........
damean
2016-12-26 17:30:24 +08:00
既然是公钥为啥会担心被别人抓取?

抓去了有什么危害?
zke1e
2016-12-26 17:59:40 +08:00
很简单,加个壳就可以防止 99.9%的人破解了,当然是商业版的加壳,免费版大概能防 60%吧。
AlisaDestiny
2016-12-26 19:47:55 +08:00
如果你有技术的话可以把网络请求封装到 jni 里。调用的时候传入参数就可以了。总不能把 C 语言写的东西也给反编译了吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/330176

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX