阿里系产品Xposed Hook检测机制原理分析

导语:

在逆向分析android App过程中,我们时常用的用的Java层hook框架就是Xposed Hook框架了。一些应用程序厂商为了保护自家android App不被Xposed Hook框架给hook。于是想尽各种方法检测自己产品是否被Xposed Hook给Hook。笔者最近逆向分析阿里系的产品,发现阿里系的产品能够检测自否给Xposed Hook了。本文就带领给位一起看看官阿里系产品是如何做的这一点的,本文就选择阿里的支付宝作为我们分析对象。

检测现象:

  1. 编写一个简单的支付宝的Xposed hook 模块, 模块代码如下:

阿里系产品Xposed Hook检测机制原理分析

2.安装XPosed hook mo模块,重启设备,打开支付宝,就会看到如下一个对话框:非法操作的,你的手机不安全。这说明支付宝检测自己被Hook了。

阿里系产品Xposed 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

阿里系产品Xposed Hook检测机制原理分析

根据搜索结果,我们找到看了两个security相关的类。我们使用JEB工具对这两个类进行分析,我们暂且分析CheckInject类。

阿里系产品Xposed Hook检测机制原理分析

我们看到这里获得通过反射获得一个类de.robv.android.xposed.XposedHelpers 的一个对象,于是我们可以确认发现代码就这里。

  1. 由于Smali代码是经过混淆的代码,不便于读者阅读,于是笔者将代码整理如下:

阿里系产品Xposed Hook检测机制原理分析

通过反射获取de.robv.android.xposed.XposedHelpers类的一个对象obXposedHelper,然后调用CheckKeywordInFiled 检测obXposedHelper成员fieldCache,methodCache,constructorCache是否有支付宝包的关键字,CheckInject.CheckKeywordInFiled, 这个函数代码 。笔者也这个函数整理如下:

阿里系产品Xposed Hook检测机制原理分析

fieldCache, methodCache,constructorCache然是XposedHelpers的静态成员,类型是HashMap

分析结论和安全建议:

结论:

1.支付宝的Xposed hook 检测原理: Xposed Hook 框架将Hook信息存储在fieldCache, methodCache,constructorCache 中, 利用java 反射机制获取这些信息,检测Hook信息中是否含有支付宝App中敏感的方法,字段,构造方法。

2.支付宝的SO检测原理: 检测进程中使用so名中包含关键”hack|inject|hook|call” 的信息。

3.支付宝的Root检测: 是否含有su程序和ro.secure是否为1

安全建议:

像这些 “de.robv.android.xposed.XposedHelpers”,”fieldCache”,”methodCache”,”constructorCache” 想这些敏感字符串信息可以进行一些简单加密。防止用户直接根据关键字搜索找到关键函数。

转载来源:https://bbs.pediy.com/thread-218848.htm


YunSoul技术分享,扫码关注微信公众号

    ——只要你学会了之前所不会的东西,只要今天的你强过了昨天的你,那你就一直是在进阶的路上了。 阿里系产品Xposed Hook检测机制原理分析