阿里系产品Xposed Hook检测机制原理分析
阿里系产品Xposed Hook检测机制原理分析
导语:
在逆向分析android App过程中,我们时常用的用的Java层hook框架就是Xposed Hook框架了。一些应用程序厂商为了保护自家android App不被Xposed Hook框架给hook。于是想尽各种方法检测自己产品是否被Xposed Hook给Hook。笔者最近逆向分析阿里系的产品,发现阿里系的产品能够检测自否给Xposed Hook了。本文就带领给位一起看看官阿里系产品是如何做的这一点的,本文就选择阿里的支付宝作为我们分析对象。
检测现象:
1. 编写一个简单的支付宝的Xposed hook 模块, 模块代码如下:
2.安装XPosed hook mo模块,重启设备,打开支付宝,就会看到如下一个对话框:非法操作的,你的手机不安全。这说明支付宝检测自己被Hook了。
分析过程:
0.分析工具和分析对象
样本:Alipay_wap_main_10.0.18
工具:AndroidKiller, JEB2.2.7
源码:XPosed 框架源码
1. 为了快速找到代码Xposed的检测代码位置,我们就不从对话框作为分析入口啦,我们直接使用androidKiller打开文件Alipay_wap_main_10.0.18.apk, 然后在工程中搜索xposed相关的关键字,例如:xposed
根据搜索结果,我们找到看了两个security相关的类。我们使用JEB工具对这两个类进行分析,我们暂且分析CheckInject类。
我们看到这里获得通过反射获得一个类de.robv.android.xposed.XposedHelpers 的一个对象,于是我们可以确认发现代码就这里。
3. 由于Smali代码是经过混淆的代码,不便于读者阅读,于是笔者将代码整理如下:
通过反射获取de.robv.android.xposed.XposedHelpers类的一个对象obXposedHelper,然后调用CheckKeywordInFiled 检测obXposedHelper成员fieldCache,methodCache,constructorCache是否有支付宝包的关键字,CheckInject.CheckKeywordInFiled, 这个函数代码 。笔者也这个函数整理如下:
fieldCache, methodCache,constructorCache然是XposedHelpers的静态成员,类型是HashMap<String, Field>
通过反射遍历这些HashMap 缓存字段, 如字段项的key中包含支付宝的关键字"alipy" "taobao",等信息, 者认为是检测有Xposed 注入
4.我们来继续分析Xposed hook框架是如何将hook信息存储到fieldCache,methodCache,constructorCache这些缓存字段当中的(我们需要下载XPosed 源码分析,github有下载)。我们最通常调用findAndHookMethod 函数hook一个函数, 所以我们分析这个函数,函数代码如下:
这个函数我们暂时还无法看到存储相关的代码,这个主要实现依赖函数findMethodExact, 于是我们继续分析
我们发现 methodCache.put(fullMethodName, e); 将方法名和方法Method 存储在方法缓存中吗。
5.CheckInject类类中除了有XPosed 检测, 还有SO注入检测机制的代码和手机检测是否Root的代码。笔者也将这些代码整理分享给各位看官:
● Root检测代码如下
检测依据是:获取default.prop 中文件ro.secure的值1 且 /system/bin/ 或者/system/xbin 有su程序可认定程序被root了
● So注入检测
由于实现比较简单,就不贴代码,直接阐述原理吧。SO注入检测原理:读取当前进程的maps文件, 遍历每一行, 是否进程中使用so名中包含关键"hack|inject|hook|call" 的信息, “hack|inject|hook|call” 字符信息使用Base64加密, 如下:
分析结论和安全建议:
结论:
1.支付宝的Xposed hook 检测原理: Xposed Hook 框架将Hook信息存储在fieldCache, methodCache,constructorCache 中, 利用java 反射机制获取这些信息,检测Hook信息中是否含有支付宝App中敏感的方法,字段,构造方法。
2.支付宝的SO检测原理: 检测进程中使用so名中包含关键"hack|inject|hook|call" 的信息。
安全建议:
像这些 "de.robv.android.xposed.XposedHelpers","fieldCache","methodCache","constructorCache" 想这些敏感字符串信息可以进行一些简单加密。防止用户直接根据关键字搜索找到关键函数。
同时对dex相关内容进行加密,DEX加密之后反编译的难度大大增加,这里支持下朋友公司几维安全的APK加密产品,欢迎大家体验他们的移动加密产品 http://www.kiwisec.com/product/compiler.shtml
关于笔者:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
阿里系产品Xposed Hook检测机制原理分析的更多相关文章
- Redis 发布/订阅机制原理分析
Redis 通过 PUBLISH. SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能. 这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播.实时 ...
- ScrollView嵌套ListView,ListView完全展开及makeMeasureSpec测量机制原理分析
在实际应用中,经常会碰到非常规的布局要求,比如说在ScrollView里嵌套ListView,ScrollView和ListView都是可以滚动的控件,这样布局看似很奇怪,但是有些效果又不得不这样做. ...
- 【C#多态】as 类型检测(原理分析) ---用于多态检
as(OpCodes.Castclass)功能:测试对象引用(O 类型)是否为特定类的实例.相当于:expression is type ? (type)expression : (type)null ...
- [数据库锁机制] 深入理解乐观锁、悲观锁以及CAS乐观锁的实现机制原理分析
前言: 在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念.数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务 ...
- 【原创】Linux select/poll机制原理分析
前言 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 1. 概述 Linux系统 ...
- 小记--------spark的Master的Application注册机制源码分析及Master的注册机制原理分析
原理图解: Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类 //截取了部分代码 //处理 ...
- 小记--------spark的Master主备切换机制原理分析及源码分析
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABfEAAAJwCAYAAAAp7ysfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw
- Spring 事件监听机制及原理分析
简介 在JAVA体系中,有支持实现事件监听机制,在Spring 中也专门提供了一套事件机制的接口,方便我们实现.比如我们可以实现当用户注册后,给他发送一封邮件告诉他注册成功的一些信息,比如用户订阅的主 ...
- 【转载】Select函数实现原理分析
Select函数实现原理分析 <原文> select需要驱动程序的支持,驱动程序实现fops内的poll函数.select通过每个设备文件对应的poll函数提供的信息判断当前是否有资源可用 ...
随机推荐
- python_25_string
name="my name is 齐志光qizhiguang" print(name.capitalize())#首字母变大写 print(name.count('i'))#统计字 ...
- tk.mybatis Example 多个or条件拼接
//需要的查询条件为 a and (b or c or d) 可以转换为 (a and b) or (a and c) or (a and d) private Example madeExample ...
- 修改android studio中的avd sdk路径、avd sdk找不到的解决方案
要进行Android应用程序的开发,首先就要搭建好Android的开发环境,所需要的工具有如下4个:1.java JDK:2.Android SDK:3.Eclipse:4.ADT 1.java JD ...
- Oracle 事务 锁
一. 事务 是一系列的数据库操作,是数据库应用的基本逻辑单位以及并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 要将有组语句作为事务考 ...
- 自动布局之-NSLayoutConstraint
AutoLayout概念是苹果自iOS6开始引入的概念. 目前为止,实现自动布局技术选型方面也可以使用xib和storyboard.在开发过程中通常登录.注册等变动可能性较小的视图,我会采用xib开发 ...
- Mysql--数据定义语言(DDL)
DDL(Data Definition languages)数据定义语言,这些语句主要定义了不同的数据段,数据表.列.索引等操作,主要关键字有create.drop.alter. 一. 数据库的操作 ...
- 模块之 logging模块 time 模块 random模块 sys模块 pickle模块
1.如果执行文件不在项目根目录下,需要添加项目根目录到sys.path中2.调用业务逻辑 2.logging模块 程序日志是 什么时间发生了什么事情,以及当时的情况 不是logging的话 记录日志的 ...
- 数据分析处理库Pandas——概述
导入Pandas库 创建DataFrame结构 读取.csv文件 titanic_train.csv文件:https://files.cnblogs.com/files/gloria-zhang/ti ...
- python3:判断手机的亮屏状态
在用python对手机做一些自动化操作时,常常会判断手机的亮屏状态,知晓手机的亮屏状态后才好做进一步的动作,如给屏幕解锁等. 用于了解手机的亮屏情况,有一个adb命令可用: adb shell du ...
- CSS-标准盒模型 & 怪异盒模型
CSS中Box model分类 CSS中Box model是分为两种:: W3C标准 和 IE标准盒子模型. 大多数浏览器采用W3C标准模型,而IE中则采用Microsoft自己的标准. 怪异模式是“ ...