问下安卓如何防止 root 下抓包, app 接口请求并没有做加密措施
要改接口的话,加密每一个接口改动比较多,隐私整改需要快速上线
工信部最近查 app 的“隐私整改”(权限之类的),我们是免费阅读 app,然后领导的意思是查我们的 app 的时候发现 root 下数据传输是明文数据,对用户不好。应用已经存七八年了,改接口的话时间上来不及,领导要早点上线
目前就是用的 https,但是由于项目时间久,架构老,不统一,也是才接手的项目,改动所有接口有点危险,还要全量测,跟后端配合,已经被暂时否定这个方案了
找到一个快捷方法:禁止代理
connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
如果只是防止抓包应该有效果,明天有空再看下信任证书,证书固定啥的方法
解锁了 root 的手机不能运行。
不现实:MagiskHide
可以在 app 内加入一个 https 证书,不信任系统证书。
安卓处处都有内鬼,IOS 越狱了也一样,frida 了解一下
除非你自己搞 tcp 协议+非常恶心人的加密方法
双向认证先整下
后端限制下 IP,弹验证中心
那就没啥办法了,抓包模拟的也算是正常的操作,这怎么识别。除非不认可系统的证书。
写死证书 hash 不对应不连接
不方便证书迭代
不可能的,无论如何实在不行人家也可以在路由器抓包,
你要说防非 root 环境下的抓包还可以,root 环境下的抓包你就别做梦了,随便就干翻...即使是腾讯维纳斯那种外面套层私有协议的做法,也只能是缓解一下,真要搞的话花点时间一样能搞。
不可能, 人家大不了在路由器抓
每次会话从服务端生成一个代理解密的一次性二进制文件,写死证书哈希
除非你只信任特定的证书,连系统证书都不信任,否则无解吧
自建协议
没加密想抓总有办法的 建议加班加密
app 接口请求并没有做加密措施
就这一条就已经死刑了。别想办法了。建议放弃。不用 root 都能直接抓
这种需求就不现实
没人关注楼主用途吗?什么“隐私整改”?
电脑开热点给手机不就能抓了 ~
哪家隐私整改会要求这个,上 https 不就完了?
手机抓不了还能直接在路由器抓
ssl pinning
到底是谁让你隐私整改,你就算自己设计协议,都 root 了直接 hook 函数不好吗?
应该不是隐私整改吧,我们最近也在隐私整改,但是整改的是所有日志,数据库内容,传输层只要上了 https 就没问题
想要完全屏蔽是不可能的, 只能增加抓包难度, 最好的方式就是强制验证 HTTPS 证书.
append 了,领导说抓包发现是明文,我也不知道是领导的意思还是工信部的意思,不管谁的意思,都要改...
分配到我的任务就是数据传输加密,其他小伙伴是其他的隐私问题修改
你把请求参数简单加密一下,不就非明文了嘛。隐私整改检测的时候它也不会去破解你的加密算法。
所以真实情况是程序和服务器通信没有加密吗?那改用 https 不就好了?
#2 MagiskHide 已有办法检测,还有 hardware attestation 。
就是 https,但是抓包工具可以在 root 的情况下抓到明文数据,接口没加密导致
改接口来不及,因为 app 存在时间长,换了十几波人了,架构老,还不统一,还需要重新全量测试
不 root 都能抓包啊
hack 下改一下就可以了
嗯?
imgur.com/5wxbDy6
即使你改了接口,那以前的老版本全部连不上服务端了? 这个代价能接受吗?
对,不能改...
如果能接受这个代价的话,可以新发一个版本。app 中将所有 http 请求的 header 、body 和后端约定好格式以及加密方式,将加密后的密文通过 https 发送到后端,后端再接口上部署一个 apigateway 负责解密发送过来的密文以及转发给真正的后端接口。
这个方案能在不改动服务端的情况下,完成这个需求,但还有许多细节需要考虑,比如加密密钥的生成,每个请求一次一密,每次请求加密密钥的传输等等问题。
只要你是用正常的方式使用 HTTPS,使用系统证书库且 TargetAPI>=24,所谓的 root 下明文只是被 root 篡改系统证书存储区后 MITM 了,传到网上流量依然是加密的,服务器可以禁止明文 HTTP 访问。
骗领导的方法是将报文用 base64 编码后用一个硬编码密钥 xor 一下,服务器还是得加个 api proxy 。
别的方法我就不推荐了,通过 root 安装证书搞 MITM 这种事都不应该是常规 APP 该去预防的事。其他诸如 HPKP 还有硬编码信任根都有不小的运维风险。
工信部要求你们整改时,会给你们个文档,说明整改内容。
首先我们明确下需求:我们不是为了防止 Root 抓包,而是为了绕过工信部的审核。
那么问题在哪里呢?是在用户登录页面。工信部说的应该是是用户登录时,用户账号、密码是明文传输。
事实上你需要做的只是和服务器升级下接口即可,例如只需要将登录时账号、密码经过编码后,传递给服务器,服务器解码后,登录即可。
工信部也是委托第三方做的检测。第三方检测很恶心,它还会检测用户登录页面,然后弹出一个透明 Activity,骗用户输入账号、密码,还会要求你做防劫持。
我们 App 当时是被粤通网检测到违规。
我觉得后端加一个网关或者中间件,然后前后端都用 RSA 单向公私钥加解密。没有什么是绝对安全的,但这个已经拦住绝大部分只会使用 Charles 、Fiddler 的工具小子了。
然后实施起来的话,接口做好新老版本共存机制。先尝试走加密协议,要是出错了就降级到明文协议。 这样至少过整改够了,万一整出问题还能有个补救。
post 的内容用 aes 加个密,后端再解密。不过需要考虑后端的开销
非侵入式的改造:套一个 API 网关去实现加密和鉴权
APP
那确实,但是要是还有绕过 magiskhide 的法子呢(?)
硬件确实好,但是成本略高(?)
呸,比 magiskhide 再高明一点的绕过
建议先了解清楚什么是 hardware attestation
www.xda-developers.com/safetynet-hardware-attestation-hide-root-magisk/amp/
只要数据不加密,安卓不管任何版本都有办法抓包。判断 root 什么之类的,都可以绕过的
最好的办法就是数据流二次加密
银行和支付宝我都试过,银行类 root 后抓的了,支付宝官方页面貌似有校验 https 证书搞不定,可以可以试试
我上次直接 root 用 frida 都不用抓包
我们目前的整改方案
1.数据库储存内容加密
2.传输层 ssl pin
这个应付一下领导就行了,技术上实现绝对的安全是不可能的,只要你的 APP 在我的设备上能跑,加不加密都没啥区别,只是时间问题。终端的安全问题不需要考虑在内,https 也只是为了防止中间人。
thx,我 naive 了
不防抓包,只保证请求内容不被串改便可
其他程序不知道,但我在非 root 下抓过微信小程序的包。开发时忘了写日志,接口出现异常直接抓包复原现场。
你只能是自己实现一套传输协议不使用 http 或者是内容加密后基于 http 传输,因为常规的 ssl 只能保证终端设备和服务器之前的传输安全,到你本机已经解密了并且设备本身又是 root 过的所以要抓 http 包很容易。
可以在 app 内加入一个 https 证书,不信任系统证书。
最简单可靠的方案。
#33 大佬!
需要安卓保活吗?最强黑科技
我们是双向证书 签名得逻辑写 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 还是可以抓的
如果是安全性再高就检测 frida,,这就是后话了 看你们 APP 的安全级别有多高了 银行应该都会检查的
这个不可能做到无法检测的,不过简单点的做法就是 https 请求里的 body 内容二次非对称加密,从客户端到服务器间的通信全是传递的密文。
不过解密的过程在客户端,理论上 root 了也是可以拿到的。
你权限类相关,跟你的请求一点关系都没有。工信部是查你调用某个权限相关的声明或者 api 调用,然后被抓住了。并不是分析你请求的数据有没有相关隐私
服务端不配合的话。。。你咋改都没用啊,服务端只能识别明文。
感觉你们搞错了方向. 所谓的隐私数据, 应该是用户的联系人短信, 手机 iemi, mac 等这些数据, 好好看下这些有没有读取, 还有一个整改是获取用户的必要信息, 这个看你的 app 就清楚了
不 root 都能抓包呢?更别说 root 后了
都有,只不过我分配到我的任务就是传输数据安全,其他人做的是你说的那些
永远无法防止
只能提高门槛
https 仅仅防止中间人
证书信任 仅仅防止不会过 ssl pinning 的人
证书校验 仅仅防止没有逆向能力的人
参数加密 仅仅防止逆向能力很低的人
自写协议 仅仅防止逆向能力不高的人
所以 看情况 看成本 加策略
不要为了防止抓包而防止抓包
应该是 你为什么要防止抓包???
防爬虫???那可以加请求频率限制 可以加风险等级评估
比如是不是正常用户????是不是正常手机???是不是正常操作流程???
防攻击???
那可以加 web 防火墙 可以提高自己 router 容错率
防刷推广安装量???
加溯源 加留存 加异常打点 建数据模型观察
还有防止什么呢?我暂时想不到
我知道防不住,任务哎,不做咋办... 先混过检查吧
应用内开一个本地端口,应用内所有请求转发至该端口,该端口所有请求加密转发至远程端口,远程端口解密后转送至标准地址, 中间加密转发解密可参考使用现有某某不能说系统
第一句话就木桶定律了 等于做了一个高级防盗门但是窗户没关
这种请求都没有出应用, 应该是已经好一些了。 那如果再要进一步的话就是把相关协议加密代码集成到 app 里, 直接封装 socket, 使用封装的 socket 发送 http 请求,使用这个新的发送 http 请求的包替换系统已有的所有原包
工信部大规模检查 app,要求很苛刻,都在整改,因此还产生一些咨询公司,一个 APP 一年十多万 给你咨询建议几次
证书是一个方面,整个 http 参数加密传一次,简单的话就 aes,复杂就 ecc rsa
edge 或者 idea 出现内存不足时,任务管理器看内存只有 50%的占用。怀疑是 5 核显共享 gpu 内存的问题,但网上查了一圈也没弄明白,求指教,感谢! 网上查了下,…
大概是背包问题的衍生,背包问题是有 N 件物品和一个容量为 V 的背包。第 i 件物品的重量是 c[i],价值是 w[i]。求解将哪些物品装入背包可使价值总和最大。 我这边需求…
具体可见: github.com/PGYER/codefever 技术栈使用了: PHP 、Go 、Nodejs 、React 安装方式: 支付手动安装,也支持 docke…