国外加固Appdome环境检测与绕过

文章目录

    • 前言
    • 第一部分:定位检测逻辑的通用思路
      • 1. 通过linux“一切皆文件”思路定位
      • 2. 分析现有检测软件猜测可能检测点
      • 3. 通过正向开发思路定位
      • 4. 通过activity及弹窗定位
    • 第二部分:检测结果展示整体流程
      • 1. Jni反射调用doDispath完成广播发送
      • 2. NativeBridge接口完成数据交互
      • 3. Appdome注册registerAppDomeBroadCastReceiver接受广播
      • 4. LoginActivity将接受事件进行活动展示
    • 第三部分:native流程分
      • 1. Native层如何分析?
    • 第四部分:绕过方案
      • 1. 不让app退出
      • 2. 使检查线程创建失败
      • 3. 粒度更小的绕过方式
      • 4. 通用绕过方案
    • 第五部分:后记
      • 1. 遇到的一些困难

前言

偶然发现使用shamiko模块无法绕过某国外加固厂商的环境检测,那么就需要具体分析一下它检测了哪里。

博主可以帮忙过AppDome的签名校验,各种签名校验,算法还原,滑块,风控的突破. 需要可以联系博主. v: cjh-18888
类 HH Poker, gcash 应用

第一部分:定位检测逻辑的通用思路

都深有感触的便是定位检测代码是个体力活;那么便先尝试用一些常用的定位思路来分析一波

1. 通过linux“一切皆文件”思路定位

通过对底层系统库函数诸如openat、readlinkat、fstatat等进行hook监控,结果如下:
在这里插入图片描述

看到打开的都是sbin目录的特征文件然而此方式shamiko便能绕过,那么便还有其余的检测点。

2. 分析现有检测软件猜测可能检测点

分析momo发现它是通过读取pts/2 下内容的方式发现su进程(此时su进程必须在运行状态下才能检测出来),然而此时su必须是运行方式才能检测出来很明显与分析app检测方式不符合。
在这里插入图片描述

3. 通过正向开发思路定位

通过普遍cv的思想在github查找开源的代码块进行定位,下面代码在检测ld_prlaods符号存在于ro.data段,那么便可以使用gdb的awatch来观察ld_prlaods所在内存是否被读写。
在这里插入图片描述

最后发现Shimako对这片进行了隐藏。因此便需要针对app的特定特征进行分析了

4. 通过activity及弹窗定位

此app有非常明显的窗口点击事件,通过hook点击事件来定位到是哪个activity进行的活动展示
在这里插入图片描述

通过对activity一步一步分析出一些整体流程

第二部分:检测结果展示整体流程

整体流程就粗略带过一下

1. Jni反射调用doDispath完成广播发送

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

2. NativeBridge接口完成数据交互

通过这些api接口完成java到native 层的数据交互,native层会根据这些信息拼接发送信息
在这里插入图片描述

3. Appdome注册registerAppDomeBroadCastReceiver接受广播

从以下代码便能看出接收器接受到检测到的各种事件
在这里插入图片描述

4. LoginActivity将接受事件进行活动展示

在这里插入图片描述

第三部分:native流程分

重点来到native的检测流程

1. Native层如何分析?

通过Jnitrace后发现以下关键字符串,因为已经知道了整体流程最终都是通过dosidpatch来发送消息,那么对最终dodispatch地址打调用栈就可以分析出完整的检测流程。
在这里插入图片描述

有了这些调用关系,接下来便是一路调试验证的体力活了,最终检测流程如下:
0x3c2920线程创建线程检测函数

在这里插入图片描述

0x97568开启安全线程检查
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

0x105704magisk detect: 路径比较,动态链接库符号比较
函数体混淆之后非常庞大,因此只关注关键地方进行分析即可
在这里插入图片描述

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

在这里插入图片描述

通过对这些函数查看参数,就可以看到一些对magiks的一些传统检测

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

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

然而这里还没有跟开头发出的json字符串有关系,所以需要接着向下分析

0x284638通过927c0和dbba0设置eventid
在这里插入图片描述

找到当前关键函数后向前打调用栈会发现有两个分支

在这里插入图片描述

0x24c164:927c0分支读取/data/data/com.mobile.co.th/cached_prefs的值判断是否设置eventid
在这里插入图片描述

这里发现cached_prefs没有任何的写入,删除便可绕过

0x253a38:dbba0分支以malloc为标志计算0x7f2190偏移处的dladdr是否为0
这里的检测思路可以参考:
https://github.com/5ec1cff/my-notes/blob/master/new-idea-detect-zygisk.md#%E6%95%B0%E5%AD%97%E4%B8%AD%E6%9A%97%E8%97%8F%E7%8E%84%E6%9C%BA
在这里插入图片描述

找到检测的关键点以后接下来的流程已经不重要了

0x20c4f4处通过看参数和结果确定是在构造json字符串
在这里插入图片描述

在0x203ac4的函数 通过eventid发送对应envent
在这里插入图片描述

0x17e8e4反射调用doDispath发送广播

在这里插入图片描述

第四部分:绕过方案

有了以上分析之后那么接下来随便绕

1. 不让app退出

分析退出流程是需要点击才能退出,于是可以通过lunch到想要的activity来进行绕过
在这里插入图片描述

2. 使检查线程创建失败

既然是创建线程来检测, 那么就可以将检测线程创建失败进行绕过
在这里插入图片描述

3. 粒度更小的绕过方式

使线程创建失败,粒度太大。也有许多对线程保护(如:将释放dex与检测放到一起,process_vm_write读取线程等)更多时候往往需要粒度更小的绕过方式,这时便可以对关键判断进行patch。

4. 通用绕过方案

rom定制root方案
kernelsu方案
漏洞root方案

第五部分:后记

1. 遇到的一些困难

分析时,检测到环境异常会退出严重干扰分析通过动态调试发现检测到环境异常后会执行非法指令进行退出。
在这里插入图片描述

使用gdb调试,追踪所有线程可以看到每个线程的行为
在这里插入图片描述

查看0x7b8段所属内存为匿名可执行段,将其dump下来可以查看syscall实现(以为在找到了7寸),分析这个可以对所有系统调用全部hook住。因为时机原因每次只hook到nano_sleep,然而真正退出并不是在这里,所以在这里倒推分析流程走了不少弯路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299734.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全 | 网络协议】结合Wireshark讲解IP协议

前言:IP协议传输过程与数据分片 当我们进行数据传输时,操作系统会创建一个 ICMP Echo Request 数据包,并在该数据包中包含要发送的目标 IP 地址。然后操作系统将数据包传递给网络协议栈,该数据包被封装成 IP 数据包。IP 数据包的…

地图服务器GeoServer的安装与配置

文章目录 1.安装配置Java2.安装配置Tomcat3 安装配置GeoServer GeoServer提供了多种安装配置方式,但是本质上GeoServer是一个基于Java Web的项目,因此我们理论上只需要安装Java,并且将其放置在一个Web服务器(例如Apache Tomcat&am…

11.1Linux串口应用程序开发

UART简介 UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。 串口在嵌入式中用途非常的广泛,主要的用途有: 打印调试信息;外接各种模块:GPS、蓝牙; 串口因为结构简单、稳…

HTTP 原理

HTTP 原理 HTTP 是一个无状态的协议。无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端…

案例分析:西门子智能工厂

西门子全球首家原生数字化工厂,以其独特的数字化技术,在虚拟世界中构建了工厂的数字孪生,从而实现了从需求分析、规划设计、施工实施到生产运营全过程的数字化。这一原生数字化工厂的创新之处在于,它开创性地运用了原生数字孪生理…

说个真事,裁员真的会降本增笑

最近互联网公司放烟花的次数有些高,基本都扎堆 Q3~Q4 出现各类事件/事故。吃瓜都快跟不上了。 作为互联网民工,为什么裁员后会导致降本增笑呢?今天我们一起来聊聊。 各种事故烟花 现阶段各大厂都领上号了,阿里先崩,…

Apache Commons BeanUtils: JavaBean操作的艺术

第1部分:Apache Commons BeanUtils 简介 咱们今天聊聊Apache Commons BeanUtils。这货简直就是处理JavaBean的利器,用起来又方便又快捷。不管是属性拷贝、类型转换,还是动态访问,BeanUtils都能轻松应对。 BeanUtils是啥&#xf…

2023大数据十大关键词

随着我国大数据产业政策日趋完善、产业基础日益巩固、数据要素市场建设不断深化,大数据产业再次迎来巨大发展空间。6月26日至28日,由中国信息通信研究院、中国通信标准化协会主办,中国通信标准化协会大数据技术标准推进委员会(CCS…

Web前端VScode/Vue3/git/nvm/node开发环境安装

目录 1 基本配置 2 安装vscode 3 安装vue 4 配置bash 5 安装nvm 6 安装node 7 安装yarn 8 新建项目 9 运行helloworld 1 基本配置 本篇是为了做前端开发的环境而写。使用的操作系统是windows 10 64位 2 安装vscode 现在做vue和node基本就是vscode和webstorm&#x…

canvas基础教学

Canvas <canvas>是一个可以使用脚本&#xff08;通常是JavaScript&#xff09;来绘制图形的HTML元素&#xff0c;例如&#xff0c;它可以用于绘制图表、制作图片构图或者制作简单的动画。 本篇博客从一些就基础开始&#xff0c;描述了如何使用<canvas>元素来绘制…

数据库管理-第127期 LSM Tree(202301225)

数据库管理-第127期 LSM Tree&#xff08;202301225&#xff09; 说起分布式数据库&#xff0c;绕不开的一个话题就是LSM Tree&#xff0c;全称为log-structured merge-tree&#xff0c;回到吕海波老师授权过的那句话“没搞过Oracle的&#xff0c;但又是数据库圈里的人&#x…

《C++避坑神器·二十五》简单搞懂json文件的读写之遍历json文件读写

json.hpp库放在文章末尾 1、遍历json文件读写 &#xff08;1&#xff09;插入新键值对到json之情形1 原来json文件如下所示&#xff1a; {"Connection": {"IpAddress": "192.168.20.1","Rock": 0,"Solt": 1}, "Data…