国外加固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,然而真正退出并不是在这里,所以在这里倒推分析流程走了不少弯路。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实战教学:零食百货商城小程序开发全程指导

随着移动设备的普及和互联网技术的发展,小程序成为越来越多人的选择,特别是在购物方面。开发一个零食百货商城小程序,可以让你在手机上随时随地购买各种零食,方便快捷。本文将为你提供全程指导,让你轻松开发一个成功的…

低代码实施复杂应用的实践方法

内容来自演讲:韦有炬 | 柳州知行远企业管理咨询有限公司 | 总经理 摘要 本文探讨了在全民开发时代如何使用低代码实施复杂应用并降低上线风险。文章分析了复杂系统实施失败的风险,包括项目规划不周、人员变动、企业基础管理不足等,并对比了低…

漏刻有时数据可视化Echarts组件开发(46)散点图颜色判断

series组件 series: [{name: Top 5,type: scatter,coordinateSystem: bmap,data: convertData(data.sort(function (a, b) {return b.value - a.value;}).slice(0, 6)),symbolSize: 20,encode: {value: 2},showEffectOn: render,rippleEffect: {brushType: stroke},label: {fo…

数据仓库【2】:架构

数据仓库【2】:架构 1、架构图2、ETL流程2.1、ETL -- Extract-Transform-Load2.1.1、数据抽取(Extraction)2.1.2、数据转换(Transformation)2.1.3、数据加载( Loading ) 2.2、ETL工具2.2.1、结构…

麦肯锡产品经理问题解决流程终极指南

您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案?秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程,该流程专为希望提升水平的产品经理量身定制。 01. 麦…

基于Java开发的微信约拍小程序

一、系统架构 前端:vue | element-ui 后端:springboot | mybatis 环境:jdk8 | mysql8 | maven | mysql 二、代码及数据库 三、功能说明 01. 首页 02. 授权登录 03. 我的 04. 我的-编辑个人资料 05. 我的-我的联系方式 06. …

程序员必须掌握的排序算法:插入排序的原理与实现

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 📋 前言 插入排序八大排序之一是一种非常简单直观的排序算法,尽管插入排序在时间复杂度上并不…

vitis HLS中实现canny算法的IP核

一、前言 canny边缘检测主要用于提取图像的边缘,是最常用且有效的边缘检测算法。在AMD赛灵思提供的库函数中,使用xf::cv::Canny和xf::cv::EdgeTracing两个函数实现canny边缘提取。本文举例说明如何在vitis HLS 2023.1中实现canny算法。 二、xf::cv::Cann…

linux:下载、网络请求、端口

一:ping命令 可以通过ping命令,检查指定的网络服务器是否是可联通状态 语法: ping [-c num] ip或主机名 1、选项:-c,检查的次数,不使用-c选项,将无限次数持续检查 2、参数:ip或主机名,被检查的服务器的…

【知识点随笔分享 | 第九篇】常见的限流算法

目录 前言: 1.固定窗口限流: 缺点: 2.滑动窗口限流: 优点: 滴桶限流: 缺点: 令牌桶限流: 优点: 总结: 前言: 当今互联网时代,随着网络…

【Linux系统编程】【Google面试题改编】线程之间的同步与协调 Linux文件操作

编写程序,有四个线程1、2、3、4 线程1的功能就是输1,线程2的功能就是输出2,以此类推……现在有四个文件ABCD初始都为空 现要让四个文件呈如下格式: A: 1 22 333 4444 1 22 333 4444… B: 22 333 4444 1 22 333 4444 1… C: 333 4444 1 22 333 4444 1 2…

VMware安装linux系统一

1、创建虚拟机 1.1、创建新的虚拟机 1.2、进入安装向导 1.3、安装操作系统,选择稍后安装操作系统 1.4、选择Linux,版本选择CentOS64位 1.5、设置虚拟机名称和安装位置 1.6、设置磁盘大小 1.7、创建虚拟机 1.8、完成安装 2、配置虚拟机 2.1、选择编辑虚拟机 2.2、修…

【笔记】入门PCB设计(全30集带目录) 杜洋工作室 AD09 Altium Designer

入门PCB设计(全30集带目录) 杜洋工作室 AD09 p1 创建p2 原理图上增加元件1)加元件2)放导线3)自定义元件1. 自定义排针2.有引脚的元件 p3 完整原理图 p1 创建 step1.创建(PCB)工程,后缀.PrjPCB。…

算法导论复习(三)

这一次我们主要复习的是递归式求解 递归式求解主要有的是三种方法: 代换法递归树法主方法 我们进行处理的时候要 代换法 方法讲解 主要就是猜测答案的形式 我们只在乎 n 在无穷大的时候成立就行 关于答案的形式,我发现最后能够是 n log n 的形式的…

计算机网络简述

前言 计算机网路是一个很庞大的话题。在此我仅对其基础概述以及简单应用进行陈述。后续或有补充以形成完善的计算机网络知识体系。 一.计算机网络的定义 根据百度词条的描述,计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过…

微信小程序开发系列-03全局配置中的“window”和“tabBar”

本文继续学习下全局配置中的“window”和“tabBar”。 window 用于设置小程序的导航栏、标题、窗口颜色等。(吐槽一句,官网这里的属性描述真的让人看不懂,只有靠自己实际运行调试才能知道是什么意思。) 导航栏 设置导航栏背景色…

TCP协议工作原理及实战(一)

实战项目目标: ui搭建:clientconnect 客户端连接 clientdisconnect 客户端断开 socketreaddate 使用套接字传输数据 newconnection新的连接 获取本机的IP地址: 获取本机的ip地址可以参考前面的QT网络编程协议 将得到的ip地址放入combox中…

Flutter详解及案例代码

概念 Flutter是由Google开发的开源UI框架,旨在快速构建高质量的移动应用程序。与传统的移动应用开发方式不同,Flutter使用单一代码库构建应用程序,可以同时在iOS和Android上运行。 Flutter的核心是使用Dart语言编写的,并且具有自…

在killercoda中的一次apiserver异常追查思路

笔者: 最近在准备cks考试, 然后又发现了killercoda这个能够提供模拟考试环境的平台。它提供了很棒的引导,教你一步步追查问题,形成一整套追查思路,我觉得很不错,特此分享。 准备工作 首先还是需要养成配置…

亲测解决,nacos下线失败!

场景重现 当多个开发者共同投入一个项目的时候,通常会出现一个项目同时启动,调用接口调试工具共同测试的接口开发情况的情形;为了保证测试环境的稳定性,我们一般不通过页面进行调试,这时我们会采用在nacos服务中&…