当前位置: 首页 > news >正文

app逆向抓包技巧:ROOT检测绕过

本篇博客旨在记录学习过程,不可用于商用等其它途径

场景

某监管app查壳发现使用了 《梆梆企业版》 加固,想尝试使用frida-dexdump脱壳,打开app发现提示下图样式,由于进不去界面,我们直接脱壳无法保证能获取到完整的 Dex 文件,这时需要处理掉它的检测机制。
在这里插入图片描述

检测原理

ROOT检测的方式多种多样,主要是分为Java层和Native层两层进行ROOT检测,ROOT检测方式总结一下主要分为几类:

  1. 已安装App检测,如是否有magisk
  2. 文件检测,如/sbin/su
  3. prop检测,如ro.debuggable
  4. system分区是否可写

检测使用的API也是多种多样,比如Java层的File.existsFile.canRead都能用来检测文件是否存在,Native层的fopenaccess也一样。

一些路径下的su文件,一些root的app相关文件
“/data/local/bin/su”,
“/data/local/su”,
“/data/local/xbin/su”,
“/dev/com.koushikdutta.superuser.daemon/”,
“/sbin/su”,

检测一些root的app如magisk等
“com.noshufou.android.su”,
“com.noshufou.android.su.elite”,
“eu.chainfire.supersu”,
“com.koushikdutta.superuser”,
“com.yellowes.su”,
“com.topjohnwu.magisk”,

绕过方式

在非ROOT环境使用BlackDex脱壳

BlackDex能够在非root环境下进行脱壳,下载地址
安装后进入BlackDex,直接双击需要脱壳的app,然后将脱壳得到的DEX文件放到apk里再用jadx反编译即可
在这里插入图片描述

使用高版本Magisk(v24+)绕过

在这里插入图片描述
在这里插入图片描述

自测发现确实可以绕过ROOT检测,但是这样排除列表中的应用则无法使用MagiskLsposed模块,如果app还有SSL检测就没法绕过
在这里插入图片描述

使用Shamiko插件绕过

Shamiko下载路径
最新版本会依赖于Magisk对应版本,如果对不上会安装失败,提示语大概是please install magisk canary

安装成功后,操作流程看下图:
在这里插入图片描述
在这里插入图片描述

相比较Magisk原生hide,就是在安装模块后把遵守排除列表关了,此时就可以同时支持Lsposed其它模块了

删除检测源码

这种操作不适合本场景,它适合那些没有加固、反编译能拿全源码的app,通过删除或者修改检测源码并重新编译的方式可以绕过检测。

Frida hook绕过

这种操作不适合本场景,它需要反编译看源码
在针对基于 su 的检测方式里,可以使用jadx反编译apk,全局搜索"su"定位到检测代码,然后直接hook代码修改方法返回值,如:
在这里插入图片描述

Frida Objection绕过

Objection 是基于 Frida 框架开发的一个工具,它提供了一组便捷的功能和脚本,以简化在移动应用程序中使用 Frida 进行动态分析和漏洞利用的过程。
安装:pip install objection

由于Objection依赖Frida,在运行Objection前需要先运行Frida
启动命令:objection -g 包名 explore
执行命令时会自动打开app,这时候是被检测ROOT的,点击退出让app在后台运行
在这里插入图片描述

然后在Objection命令行输入android root disable,再回到app界面,这时app会再次刷新,而Objection会hook处理它调用到的检测,从而实现绕过
在这里插入图片描述

objection绕过双进程保护

如果app存在双进程保护,那么我们启动objection就可能出现卡死、闪退等问题。
比如:
在这里插入图片描述

一般双进程保护,先把app关掉直接用spawn模式就能附加上,但是这里我尝试了很多都没法绕过,所以只能尝试修改objection源码来绕过双进程保护。
windows中找到objection的源码文件,然后进入utils\agent.py,找到inject 函数,进行以下代码修改

源代码:
在这里插入图片描述

修改后代码:
在这里插入图片描述

修改后重新执行命令就能附上了
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络6 -- udp_socket 实现 echo服务器
  • Windows Subsystem for Linux——使用宿主机器上的摄像头
  • 浅学爬虫-处理复杂网页
  • 等保测评练习卷22
  • 1.面试准备篇
  • 微信小程序教程009:条件渲染
  • 项目实战——外挂开发(30小时精通C++和外挂实战)
  • IDEA切换分支,会影响当前在跑的项目吗?
  • 【计算机网络】网络基础概念
  • 敏感信息泄露wp
  • 基于距离的多指标决策——TOPSIS
  • 配置frp实现内网穿透(.toml配置文件)
  • 基于python的百度迁徙迁入、迁出数据分析(六)
  • springboot学习笔记第一天
  • CF962 E. Decode
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Angularjs之国际化
  • co.js - 让异步代码同步化
  • docker-consul
  • ES6之路之模块详解
  • Hibernate最全面试题
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Just for fun——迅速写完快速排序
  • Linux快速复制或删除大量小文件
  • MaxCompute访问TableStore(OTS) 数据
  • node和express搭建代理服务器(源码)
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Twitter赢在开放,三年创造奇迹
  • 安装python包到指定虚拟环境
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从重复到重用
  • 大数据与云计算学习:数据分析(二)
  • 嵌入式文件系统
  • 时间复杂度与空间复杂度分析
  • 用quicker-worker.js轻松跑一个大数据遍历
  • FaaS 的简单实践
  • linux 淘宝开源监控工具tsar
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 移动端高清、多屏适配方案
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • #宝哥教你#查看jquery绑定的事件函数
  • (2)STM32单片机上位机
  • (26)4.7 字符函数和字符串函数
  • (k8s)Kubernetes本地存储接入
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (ZT)一个美国文科博士的YardLife
  • (备份) esp32 GPIO
  • (笔试题)合法字符串
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (篇九)MySQL常用内置函数
  • (算法设计与分析)第一章算法概述-习题
  • .describe() python_Python-Win32com-Excel
  • .NET Core 2.1路线图