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