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

导语: 

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

检测现象:

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

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

分析过程:

0.分析工具和分析对象git

样本:Alipay_wap_main_10.0.18 github

工具: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" 的信息。

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

安全建议:

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

同时对dex相关内容进行加密,DEX加密以后反编译的难度大大增长,这里支持下朋友公司几维安全的APK加密产品,欢迎你们体验他们的移动加密产品 http://www.kiwisec.com/product/compiler.shtml

相关文章
相关标签/搜索