飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5880|回复: 7

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

[复制链接]
  • TA的每日心情
    开心
    2017-7-11 14:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-7-4 14:39:47 | 显示全部楼层 |阅读模式
    导语:

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

    检测现象:

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

    1.png

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

    2.png

    分析过程:

    0.分析工具和分析对象

    样本:Alipay_wap_main_10.0.18

    工具:AndroidKiller, JEB2.2.7

    源码:XPosed 框架源码


    1. 为了快速找到代码Xposed的检测代码位置,我们就不从对话框作为分析入口啦,我们直接使用androidKiller打开文件Alipay_wap_main_10.0.18.apk, 然后在工程中搜索xposed相关的关键字,例如:xposed

    3.png

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

    4.png

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

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

    5.png

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

    fieldCache, methodCache,constructorCache然是XposedHelpers的静态成员,类型是HashMap<String, Field>   

    7.png

    通过反射遍历这些HashMap 缓存字段, 如字段项的key中包含支付宝的关键字"alipy" "taobao",等信息, 者认为是检测有Xposed 注入

    4.我们来继续分析Xposed hook框架是如何将hook信息存储到fieldCache,methodCache,constructorCache这些缓存字段当中的(我们需要下载XPosed 源码分析,github有下载)。我们最通常调用findAndHookMethod 函数hook一个函数, 所以我们分析这个函数,函数代码如下:

    8.png

    这个函数我们暂时还无法看到存储相关的代码,这个主要实现依赖函数findMethodExact, 于是我们继续分析

    9.png

    我们发现 methodCache.put(fullMethodName, e); 将方法名和方法Method 存储在方法缓存中吗。

    5.CheckInject类类中除了有XPosed 检测, 还有SO注入检测机制的代码和手机检测是否Root的代码。笔者也将这些代码整理分享给各位看官:

    ● Root检测代码如下

    10.png

    检测依据是:获取default.prop 中文件ro.secure的值1 且 /system/bin/ 或者/system/xbin 有su程序可认定程序被root了

    ● So注入检测

    由于实现比较简单,就不贴代码,直接阐述原理吧。SO注入检测原理:读取当前进程的maps文件, 遍历每一行, 是否进程中使用so名中包含关键"hack|inject|hook|call" 的信息,“hack|inject|hook|call” 字符信息使用Base64加密, 如下:

    11.png

    分析结论和安全建议:

    结论:

    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




    评分

    参与人数 1威望 +4 飘云币 +4 收起 理由
    一米阳光 + 4 + 4 很给力!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-7-11 14:33
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-7-13 09:47:48 | 显示全部楼层
    几维安全专注于移动应用安全领域,致力为移动应用提供优质的安全解决方案。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-7-11 14:33
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-7-17 10:08:35 | 显示全部楼层
    多学习、多总结、多练习,
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2020-6-20 19:23
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    发表于 2017-7-22 23:56:29 | 显示全部楼层
    多学习, 多操作, 多练习练习!!!!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-22 23:57
  • 签到天数: 174 天

    [LV.7]常住居民III

    发表于 2019-2-28 17:18:22 | 显示全部楼层
    感谢分享,学习了~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2019-8-20 09:19
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2019-8-16 09:11:00 | 显示全部楼层
    很详细,最近在学习这方面,多学习学习,感谢楼主!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-27 08:42
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2021-1-27 08:53:37 | 显示全部楼层

    感谢分享,学习了~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表