一些Android开发死局

有些东西就是做不到,除非,加很多很多钱和时间。

一些V2EX帖子整理。

抓包

TL;DR: 功夫不负有心人。没有彻底的办法。最好的办法永远是在服务端控制数据。

如果能用Firebase的话,可以第三方接入AppCheck来防止中间人。

一些精彩发言:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
kings0527

永远无法防止
只能提高门槛
https 仅仅防止中间人
证书信任 仅仅防止不会过 ssl pinning 的人
证书校验 仅仅防止没有逆向能力的人
参数加密 仅仅防止逆向能力很低的人
自写协议 仅仅防止逆向能力不高的人

所以 看情况 看成本 加策略
不要为了防止抓包而防止抓包
应该是 你为什么要防止抓包???

防爬虫???那可以加请求频率限制 可以加风险等级评估
比如是不是正常用户????是不是正常手机???是不是正常操作流程???

防攻击???
那可以加 web 防火墙 可以提高自己 router 容错率

防刷推广安装量???
加溯源 加留存 加异常打点 建数据模型观察
1
2
3
4
5
6
7
icyalala

ssl pinning (也就是客户端内置证书) 来防止初级的抓包
参数签名+客户端防逆向
服务端风控,这是最主要的
根据我待过的几个公司的经验,就算大厂也基本就是这些了
整体来说就是增加成本降低风险,完全避免是不可能

客户端的挣扎

有证书就可以抓包。

Root后在任何API版本都可以装任何证书。

Android N(API 24)及之后,应用才可以强制只信任系统证书。之前可以不Root装用户证书。

据说iPhone装证书很容易。

搬起石头砸自己的脚的办法:

  • 禁止代理 connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY)

    • 容易绕过(路由器抓包、开热点抓包)
    • 谁还用HttpURLConnection呀,不适合现代应用
  • 检测Root

    • 容易绕过
    • 可能检测错误
    • 牺牲无辜的Root用户的体验
  • 自定义证书、SSL Pinning

    • Android N及之后才可以强制证书
    • 复杂

保活

终极方案:

  • 成为系统应用
  • 成为国民应用,厂商会主动增加白名单
  • 使用FCM(不适用于中国大陆)

现在已经没有更多奇技淫巧了。虽然一直有人声称有黑科技,但从未亲眼见过。

Foreground Service + Wake Lock是普通应用唯二能做的。此外可以多接入一些推送。

最后,也是最重要的一步,引导用户设置应用白名单,这样基本可以确保正常使用。

个人开发者 海外收款

TL;DR: 需要八仙过海各自踩坑

有公司专人来解决这个问题最好了: