Android环境检测与绕过对抗
近几年,各个厂商安全意识提高了~这本来是件好事....
可是吧...总感觉方向错了....
一直孜孜不倦的加强客户端的代码保护、环境检测....
PC 端各种客户端加壳、虚拟机检测等保护早就证明了一个道理:客户端安全永远比不上服务端安全。
提示
此处的环境以 Lsposed(Zygisk 版)+Magisk(Zygisk 模式)为例。
常见的环境检测方案#
- 检测 Root 权限,例如直接请求 root 权限,或者查找 su 文件;
- 检测是否存在 Magisk、Xposed 管理器以及 Xposed 模块;
- 进行进程 Trace,检测是否存在 Xposed 进程、Frida 进程;
- 进行代理检测,检测是否通过代理连接网络;
- 进行 VPN 检测,检测是否通过 VPN 连接网络;
- 采用单向认证、双向认证方案;
- 检测 SELinux 状态,检测是否为开启状态;
- 加各种乱七八糟的壳;
- 检测 Bootloader 锁定情况,默认为锁定;
- 检测是否开启调试模式;
对抗检测#
Root 对抗#
Magisk 需要安装最新版本:
直达链接
1. 按照下图配置开启 Zygisk#
2. 安装 Shamiko 模块#
下载下来的是 magisk 模块,通过内置选择器安装。
3. 安装 Shamiko 白名单管理工具#
4. 开启 Shamiko 白名单#
注意
shamiko 开启白名单后会屏蔽所有 root 请求,只有关闭白名单才能收到 root 请求
至此完成 Root 检测屏蔽
应用检测对抗#
1. 安装 HideMyAppList#
2. 安装 HideMyAppList 的 Magisk 插件#
需要关闭 shamiko 的白名单模式,安装完成后重新启动
3. 创建应用隐藏模板#
4.对目标 App 进行隐藏#
隐藏完成后需要重新启动 app
进程 Trace 对抗、VPN 检测对抗#
使用对话框取消这个模块来搞定,
直达链接
frida 检测问题可以采用去特征的 Frida:
链接直达
代理检测对抗#
该方案适用于检测代理或者 App 干脆不走代理的情况。
注意
安卓 7 以上版本,系统不再信任用户安装的证书,可以手动操作移动到系统目录;
安卓 11 以上版本不支持直接将证书移动到系统目录,可以使用 Magisk 模块 MagiskTrustUserCerts 解决:https://github.com/NVISOsecurity/MagiskTrustUserCerts/releases,安装完证书后需要重新启动;
adb shell
su root
cd /data/misc/user/0/cacerts-added
mount -o remount,rw /system
cp * /etc/security/cacerts/
mount -o remount,ro /system
- 方案一:使用安卓端 VPN 抓包工具 HttpCanary,
直达链接,建议下载 3.3.6 版本
- 方案二:使用 drony,开启虚拟 VPN,让 VPN 走代理即可,
直达链接
单向认证、双向认证对抗#
单向认证#
使用 JustTrustMe++ 模块,
直达链接,使用方式比较傻瓜,推荐使用。
或者使用 Frida 脚本 ssl-pining-bypass:
直达链接。
双向认证#
-
先用单向认证的办法搞定一半
-
解包,找证书(一般为 P12 后缀)
tree -NCfhl |grep -i p12
-
抓密码,这是最麻烦的一点
- 采用 frida 脚本 hook 快速定位:
直达链接 - 自己手动去跟踪~
- 采用 frida 脚本 hook 快速定位:
-
将证书和密码导入代理工具,例如 burp~
SELinux 检测对抗#
一般的 rom 是默认开启 selinux 的,有的定制的 rom 可能会关闭 selinux。
检测 selinux,目前就遇到一个天翼支付会检测这个东西。
加壳对抗#
永远不要把你解决加壳问题的办法告诉客户,不然你会陷入无休止的 加壳-> 脱壳-> 加壳 中来~
常见问题定位技巧#
以下只是方便快速定位 app 可能做了哪些防护措施
打开 app 直接闪退#
- 检测 root、检测 Magisk 环境等...
- 检测进程、检测 xposed、检测 frida 等....
- 检测虚拟机...
- app 所使用的 api 不支持(比如安卓 10 使用安卓 12 的 api)
- app 中使用 C++/C 编写的拓展没有编译对应平台(比如你在模拟器运行 apk 闪退,真机运行正常,这个情况就是 apk 没有编译 x86 的 so 文件导致的)
弹出环境异常并存在退出按钮#
一个不一定可以用,但是测试过的方法可以绕过:
使用**进程 Trace 对抗、VPN 检测对抗**中的对话框取消功能,开启作用之后,点弹窗的其他位置,理想情况下是直接关闭弹窗并进入 app,不理想的情况下就是直接退出 app。
- 检测 root、检测 Magisk 环境等...
- 检测进程、检测 xposed、检测 frida 等....
- 检测虚拟机...
弹出网络异常#
- 检测代理或者 VPN 了
- 证书存在问题
- 网络真的挂了
定位网络问题我比较推荐使用 HttpCanary,他会告诉你是什么原因导致的抓包失败,并告诉你解决方案。