这么多年写过很多 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 文件来进行调用
基本上遇到过的都是在这个范畴内,难度有高低,但是都能破解。大家还有更好的想法吗?
1
weiceshi OP 没有人讨论吗?@@@@@@@@
|
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 也能解决不少问题。 |
3
qwer1234asdf 2016-12-26 12:54:06 +08:00 via iPhone
防重放:
url 后拼接时间戳后再 hash 防破解: 请求对称加密,用 rsa 交换对称加密密钥 ........ |
4
damean 2016-12-26 17:30:24 +08:00
既然是公钥为啥会担心被别人抓取?
抓去了有什么危害? |
5
zke1e 2016-12-26 17:59:40 +08:00
很简单,加个壳就可以防止 99.9%的人破解了,当然是商业版的加壳,免费版大概能防 60%吧。
|
6
AlisaDestiny 2016-12-26 19:47:55 +08:00
如果你有技术的话可以把网络请求封装到 jni 里。调用的时候传入参数就可以了。总不能把 C 语言写的东西也给反编译了吧。
|