要改接口的话,加密每一个接口改动比较多,隐私整改需要快速上线
1
SenLief 2021-09-16 18:16:39 +08:00
解锁了 root 的手机不能运行。
|
2
MoeMoesakura 2021-09-16 18:18:02 +08:00
@SenLief 不现实:MagiskHide
|
3
rbq123456 2021-09-16 18:21:27 +08:00
可以在 app 内加入一个 https 证书,不信任系统证书。
|
4
ch2 2021-09-16 18:23:41 +08:00
安卓处处都有内鬼,IOS 越狱了也一样,frida 了解一下
除非你自己搞 tcp 协议+非常恶心人的加密方法 |
5
1018ji 2021-09-16 18:24:30 +08:00
双向认证先整下
后端限制下 IP,弹验证中心 |
6
SenLief 2021-09-16 18:24:50 +08:00
@MoeMoesakura 那就没啥办法了,抓包模拟的也算是正常的操作,这怎么识别。除非不认可系统的证书。
|
7
PMR 2021-09-16 18:26:03 +08:00 via Android
写死证书 hash 不对应不连接
不方便证书迭代 |
8
AoEiuV020 2021-09-16 18:26:45 +08:00
不可能的,无论如何实在不行人家也可以在路由器抓包,
|
9
locoz 2021-09-16 18:27:53 +08:00
你要说防非 root 环境下的抓包还可以,root 环境下的抓包你就别做梦了,随便就干翻...即使是腾讯维纳斯那种外面套层私有协议的做法,也只能是缓解一下,真要搞的话花点时间一样能搞。
|
10
zoharSoul 2021-09-16 18:30:31 +08:00
不可能, 人家大不了在路由器抓
|
11
XiLingHost 2021-09-16 18:31:17 +08:00
每次会话从服务端生成一个代理解密的一次性二进制文件,写死证书哈希
|
12
deplivesb 2021-09-16 18:36:06 +08:00
除非你只信任特定的证书,连系统证书都不信任,否则无解吧
|
13
efaun 2021-09-16 18:36:51 +08:00
自建协议
|
14
ctro15547 2021-09-16 19:04:23 +08:00
没加密想抓总有办法的 建议加班加密
|
15
est 2021-09-16 19:06:40 +08:00
> app 接口请求并没有做加密措施
就这一条就已经死刑了。别想办法了。建议放弃。不用 root 都能直接抓 |
16
ikas 2021-09-16 19:29:16 +08:00
这种需求就不现实
|
17
starsky007 2021-09-16 19:35:58 +08:00 via Android 1
没人关注楼主用途吗?什么“隐私整改”?
|
18
deavorwei 2021-09-16 19:45:45 +08:00 2
电脑开热点给手机不就能抓了 ~
|
19
jim9606 2021-09-16 19:47:23 +08:00 1
哪家隐私整改会要求这个,上 https 不就完了?
|
20
yolee599 2021-09-16 19:49:50 +08:00 via Android
手机抓不了还能直接在路由器抓
|
21
2i2Re2PLMaDnghL 2021-09-16 19:53:33 +08:00
ssl pinning
到底是谁让你隐私整改,你就算自己设计协议,都 root 了直接 hook 函数不好吗? |
22
sadfQED2 2021-09-16 20:16:18 +08:00 via Android
应该不是隐私整改吧,我们最近也在隐私整改,但是整改的是所有日志,数据库内容,传输层只要上了 https 就没问题
|
23
cweijan 2021-09-16 20:42:52 +08:00
想要完全屏蔽是不可能的, 只能增加抓包难度, 最好的方式就是强制验证 HTTPS 证书.
|
24
shiguiyou OP @starsky007 append 了,领导说抓包发现是明文,我也不知道是领导的意思还是工信部的意思,不管谁的意思,都要改...
|
26
lait 2021-09-16 20:56:57 +08:00 via Android
你把请求参数简单加密一下,不就非明文了嘛。隐私整改检测的时候它也不会去破解你的加密算法。
|
27
ysc3839 2021-09-16 20:57:37 +08:00 via Android
所以真实情况是程序和服务器通信没有加密吗?那改用 https 不就好了?
|
28
ysc3839 2021-09-16 20:58:39 +08:00 via Android
@MoeMoesakura #2 MagiskHide 已有办法检测,还有 hardware attestation 。
|
31
WebKit 2021-09-16 21:02:56 +08:00 via Android
不 root 都能抓包啊
|
33
x86 2021-09-16 21:06:42 +08:00
|
34
wooyuntest 2021-09-16 21:12:00 +08:00
即使你改了接口,那以前的老版本全部连不上服务端了? 这个代价能接受吗?
|
35
shiguiyou OP @wooyuntest 对,不能改...
|
36
wooyuntest 2021-09-16 21:15:53 +08:00
@wooyuntest 如果能接受这个代价的话,可以新发一个版本。app 中将所有 http 请求的 header 、body 和后端约定好格式以及加密方式,将加密后的密文通过 https 发送到后端,后端再接口上部署一个 apigateway 负责解密发送过来的密文以及转发给真正的后端接口。
这个方案能在不改动服务端的情况下,完成这个需求,但还有许多细节需要考虑,比如加密密钥的生成,每个请求一次一密,每次请求加密密钥的传输等等问题。 |
37
jim9606 2021-09-16 21:21:48 +08:00 3
只要你是用正常的方式使用 HTTPS,使用系统证书库且 TargetAPI>=24,所谓的 root 下明文只是被 root 篡改系统证书存储区后 MITM 了,传到网上流量依然是加密的,服务器可以禁止明文 HTTP 访问。
骗领导的方法是将报文用 base64 编码后用一个硬编码密钥 xor 一下,服务器还是得加个 api proxy 。 别的方法我就不推荐了,通过 root 安装证书搞 MITM 这种事都不应该是常规 APP 该去预防的事。其他诸如 HPKP 还有硬编码信任根都有不小的运维风险。 |
38
HarryQu 2021-09-16 23:54:15 +08:00
工信部要求你们整改时,会给你们个文档,说明整改内容。
首先我们明确下需求:我们不是为了防止 Root 抓包,而是为了绕过工信部的审核。 那么问题在哪里呢?是在用户登录页面。工信部说的应该是是用户登录时,用户账号、密码是明文传输。 事实上你需要做的只是和服务器升级下接口即可,例如只需要将登录时账号、密码经过编码后,传递给服务器,服务器解码后,登录即可。 工信部也是委托第三方做的检测。第三方检测很恶心,它还会检测用户登录页面,然后弹出一个透明 Activity,骗用户输入账号、密码,还会要求你做防劫持。 |
39
HarryQu 2021-09-16 23:55:21 +08:00
我们 App 当时是被粤通网检测到违规。
|
40
coolcoffee 2021-09-17 00:32:18 +08:00
我觉得后端加一个网关或者中间件,然后前后端都用 RSA 单向公私钥加解密。没有什么是绝对安全的,但这个已经拦住绝大部分只会使用 Charles 、Fiddler 的工具小子了。
然后实施起来的话,接口做好新老版本共存机制。先尝试走加密协议,要是出错了就降级到明文协议。 这样至少过整改够了,万一整出问题还能有个补救。 |
41
illl 2021-09-17 01:17:58 +08:00 via iPhone
post 的内容用 aes 加个密,后端再解密。不过需要考虑后端的开销
|
42
eason1874 2021-09-17 05:02:35 +08:00
非侵入式的改造:套一个 API 网关去实现加密和鉴权
APP <SSL 双向认证、应用级加密> API 网关 <解密、内部通信> 原本真实 API 地址 |
43
MoeMoesakura 2021-09-17 08:50:34 +08:00
@ysc3839 那确实,但是要是还有绕过 magiskhide 的法子呢(?)
硬件确实好,但是成本略高(?) |
44
MoeMoesakura 2021-09-17 08:51:54 +08:00
@MoeMoesakura 呸,比 magiskhide 再高明一点的绕过
|
45
ysc3839 2021-09-17 08:53:32 +08:00 via Android
@MoeMoesakura 建议先了解清楚什么是 hardware attestation
https://www.xda-developers.com/safetynet-hardware-attestation-hide-root-magisk/amp/ |
46
tanranran 2021-09-17 08:55:16 +08:00
只要数据不加密,安卓不管任何版本都有办法抓包。判断 root 什么之类的,都可以绕过的
最好的办法就是数据流二次加密 |
47
weixiangzhe 2021-09-17 08:56:05 +08:00 via iPhone
银行和支付宝我都试过,银行类 root 后抓的了,支付宝官方页面貌似有校验 https 证书搞不定,可以可以试试
|
48
meshell 2021-09-17 09:05:00 +08:00
我上次直接 root 用 frida 都不用抓包
|
50
timethinker 2021-09-17 09:59:50 +08:00
这个应付一下领导就行了,技术上实现绝对的安全是不可能的,只要你的 APP 在我的设备上能跑,加不加密都没啥区别,只是时间问题。终端的安全问题不需要考虑在内,https 也只是为了防止中间人。
|
51
MoeMoesakura 2021-09-17 10:06:33 +08:00
@ysc3839 thx,我 naive 了
|
52
kiotech 2021-09-17 10:18:23 +08:00
不防抓包,只保证请求内容不被串改便可
|
53
Visitor233 2021-09-17 10:28:05 +08:00
其他程序不知道,但我在非 root 下抓过微信小程序的包。开发时忘了写日志,接口出现异常直接抓包复原现场。
|
54
acbot 2021-09-17 10:31:44 +08:00
你只能是自己实现一套传输协议不使用 http 或者是内容加密后基于 http 传输,因为常规的 ssl 只能保证终端设备和服务器之前的传输安全,到你本机已经解密了并且设备本身又是 root 过的所以要抓 http 包很容易。
|
57
geshenjibigmail 2021-09-17 10:55:51 +08:00
需要安卓保活吗?最强黑科技
|
58
azhangbing 2021-09-17 12:43:55 +08:00
我们是双向证书 签名得逻辑写 SO 里 SO 用 LLVM 混淆 ,OKHTTP 可以配置 OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build (); 系统的可以 URL url = new URL(urlStr);
urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY); 用这个属性 Charles finder 这种中间人代理抓不了包 wireshark 还是可以抓的 |
59
azhangbing 2021-09-17 12:49:44 +08:00
如果是安全性再高就检测 frida,,这就是后话了 看你们 APP 的安全级别有多高了 银行应该都会检查的
|
60
clf 2021-09-17 13:03:12 +08:00
这个不可能做到无法检测的,不过简单点的做法就是 https 请求里的 body 内容二次非对称加密,从客户端到服务器间的通信全是传递的密文。
不过解密的过程在客户端,理论上 root 了也是可以拿到的。 |
61
siyehua 2021-09-17 14:31:07 +08:00
你权限类相关,跟你的请求一点关系都没有。工信部是查你调用某个权限相关的声明或者 api 调用,然后被抓住了。并不是分析你请求的数据有没有相关隐私
|
62
skye 2021-09-17 14:57:10 +08:00
服务端不配合的话。。。你咋改都没用啊,服务端只能识别明文。
|
63
palxie 2021-09-17 16:57:21 +08:00
感觉你们搞错了方向. 所谓的隐私数据, 应该是用户的联系人短信, 手机 iemi, mac 等这些数据, 好好看下这些有没有读取, 还有一个整改是获取用户的必要信息, 这个看你的 app 就清楚了
|
64
GOURIDE 2021-09-17 18:17:21 +08:00
不 root 都能抓包呢?更别说 root 后了
|
66
kings0527 2021-09-18 10:30:53 +08:00
永远无法防止
只能提高门槛 https 仅仅防止中间人 证书信任 仅仅防止不会过 ssl pinning 的人 证书校验 仅仅防止没有逆向能力的人 参数加密 仅仅防止逆向能力很低的人 自写协议 仅仅防止逆向能力不高的人 所以 看情况 看成本 加策略 不要为了防止抓包而防止抓包 应该是 你为什么要防止抓包??? 防爬虫???那可以加请求频率限制 可以加风险等级评估 比如是不是正常用户????是不是正常手机???是不是正常操作流程??? 防攻击??? 那可以加 web 防火墙 可以提高自己 router 容错率 防刷推广安装量??? 加溯源 加留存 加异常打点 建数据模型观察 还有防止什么呢?我暂时想不到 |
68
jetpy 2021-09-18 11:42:41 +08:00
应用内开一个本地端口,应用内所有请求转发至该端口,该端口所有请求加密转发至远程端口,远程端口解密后转送至标准地址, 中间加密转发解密可参考使用现有某某不能说系统
|
70
jetpy 2021-09-18 14:26:29 +08:00
@kings0527 这种请求都没有出应用, 应该是已经好一些了。 那如果再要进一步的话就是把相关协议加密代码集成到 app 里, 直接封装 socket, 使用封装的 socket 发送 http 请求,使用这个新的发送 http 请求的包替换系统已有的所有原包
|
71
liuidetmks 2021-09-18 22:38:57 +08:00 via iPhone
@starsky007 工信部大规模检查 app,要求很苛刻,都在整改,因此还产生一些咨询公司,一个 APP 一年十多万 给你咨询建议几次
|
72
liuidetmks 2021-09-18 22:42:24 +08:00 via iPhone
证书是一个方面,整个 http 参数加密传一次,简单的话就 aes,复杂就 ecc rsa
|
73
zhanlanhuizhang 2021-09-20 17:59:47 +08:00
接口加密,使用拦截器呀。怎么可能每个接口都写一遍。一般现在采用 RSA+DES 。
|
74
lushan 2021-09-20 20:43:25 +08:00
使用拦截器是工作量最小的解法。 毕竟是个对抗的过程,没有一劳永逸的方法
|
75
Jione 2021-09-26 11:43:45 +08:00
没办法.攻防无绝对,防不了的
|