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

花儿干嘛 2017-6-29 10:17 3913

导语: 

在逆向分析android App过程中,我们时常用的用的Javahook框架就是Xposed Hook框架了。一些应用程序厂商为了保护自家android App不被Xposed Hook框架给hook。于是想尽各种方法检测自己产品是否被Xposed HookHook。笔者最近逆向分析阿里系的产品,发现阿里系的产品能够检测自否给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的值且 /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


最新回复 (40)
1
FIGHTING安 2017-6-29 10:27
2
楼主图看不了
几许嫣然 2017-6-29 10:29
3
FIGHTING安 楼主图看不了
能看哇~
花儿干嘛 2017-6-29 10:40
4
FIGHTING安 楼主图看不了
亲,能看呢,你刷新一次看看呢
无边 2017-6-29 15:13
5
据说微信、支付宝这些app不使用加固是因为容易崩溃、用户体验效果差。
花儿干嘛 2017-6-29 18:14
6
wogao 2017-6-29 18:56
7
厉害
wangzehua 2017-6-29 19:53
8
不错,关键信息用红色标出来了!
1
世界美景 2017-6-29 20:19
9
BAT主流产品没有一个使用加固  主要是市面上没有任何一款加固厂商敢保证不会崩溃  毕竟加固涉及的太底层了  像这种巨头级别应用  不会允许有任何崩溃概率发生
pedies 2017-6-29 20:33
10
楼主用心啦!!!!
yunshouhu 2017-6-30 00:52
11
巨头级别的应用主要先考虑兼容性。
弹棉花师傅 2017-6-30 09:56
12
花儿干嘛 2017-7-3 11:34
13
pedies 楼主用心啦!!!![em_13]
技术那些事 2017-7-3 18:11
14
此楼层已删除
bunnyrene 2017-7-4 09:29
15
在太弱了,xposed改下名字就检测不到了
技术那些事 2017-7-5 15:03
16
此楼层已删除
netsniffer 2017-7-6 14:16
17
从文章来看,ali其实完全可以做的更狠一点,估计是不想影响太大
技术那些事 2017-7-6 18:06
18
此楼层已删除
技术那些事 2017-7-7 15:39
19
此楼层已删除
PanzerT 2017-7-7 16:27
20

Mark

技术那些事 2017-7-14 13:36
21
此楼层已删除
技术那些事 2017-7-17 09:55
22
此楼层已删除
技术那些事 2017-7-18 10:00
23
此楼层已删除
gugubupt 2017-7-18 15:11
24

mark

技术那些事 2017-7-19 10:39
25
此楼层已删除
过往烟云 2017-7-19 14:56
26
有办法绕过嘛~
技术那些事 2017-7-19 18:23
27
此楼层已删除
muqingluan 2017-7-19 18:33
28
大公司的拳头产品不是那么容易就能上加密方案,出问题就麻烦了。
clumsybirda 2017-7-19 21:17
29
这波广告打的可以,真心不想喷你们,把技术做好行不行,拿出真本事来行不行,别贬低别的公司。就会吹牛皮
花儿干嘛 2017-7-24 15:53
30
clumsybirda 这波广告打的可以,真心不想喷你们,把技术做好行不行,拿出真本事来行不行,别贬低别的公司。就会吹牛皮
bunnyrene 2017-7-25 10:20
31
这波广告打的可以,真心不想喷你们,把技术做好行不行,拿出真本事来行不行,别贬低别的公司。就会吹牛皮
花儿干嘛 2017-7-26 10:12
32
muqingluan 大公司的拳头产品不是那么容易就能上加密方案,出问题就麻烦了。
千秋事佐闲茶 2017-7-27 10:30
33
新版本XPosed  把map的key值加密下怎么办
sonnzy 2017-8-4 10:07
34
阿里的好多程序都是模块化,可以部分热升级,怎么加固
花儿干嘛 2017-8-9 14:01
35
netsniffer 从文章来看,ali其实完全可以做的更狠一点,估计是不想影响太大
点个赞。
骂了隔壁 2017-8-10 18:25
36
无边 据说微信、支付宝这些app不使用加固是因为容易崩溃、用户体验效果差。
实际确实是这样的,加固的兼容性  对他们来说用户体验太差了
骂了隔壁 2017-8-10 18:28
37
clumsybirda 这波广告打的可以,真心不想喷你们,把技术做好行不行,拿出真本事来行不行,别贬低别的公司。就会吹牛皮
楼主只是分析,没有贬低。至于广告,不看就好了
clumsybirda 2017-8-11 11:04
38
骂了隔壁 楼主只是分析,没有贬低。至于广告,不看就好了
还没贬低,对于不懂加固的人来说,就以为他们的加固比阿里好,这样顺便就打了一波广告!用片面的一个产品来抨击阿里的产品加固不给力,你是不是就是他们的工作人员啊
骂了隔壁 2017-8-11 11:24
39
clumsybirda 还没贬低,对于不懂加固的人来说,就以为他们的加固比阿里好,这样顺便就打了一波广告!用片面的一个产品来抨击阿里的产品加固不给力,你是不是就是他们的工作人员啊
我不是
花儿干嘛 2017-8-14 15:50
40
好好说话哈。
wingsbupt 2017-8-14 18:49
41
像支付宝这种亿量级别的app,加固兼容性影响太大了。
几许嫣然 2017-8-18 17:33
42
clumsybirda 这波广告打的可以,真心不想喷你们,把技术做好行不行,拿出真本事来行不行,别贬低别的公司。就会吹牛皮
吹牛?哪儿有牛?这些都是技术干活~~别喷
几许嫣然 2017-8-18 17:34
43
骂了隔壁 我不是[em_7][em_7]
不知道是哪儿来黑的~~好可怖~~
几许嫣然 2017-8-18 17:35
44
花儿干嘛 好好说话哈。[em_1]
群众眼睛雪亮~~厉害
clumsybirda 2017-8-30 14:10
45

几许嫣然 群众眼睛雪亮~~厉害

11111111111111111111111111111

vipzrx 2017-9-4 17:24
46
感谢分享
易伤痕 2017-9-4 19:51
47
然而这个检测方式治标不治本
xDragonZ 2017-9-13 09:35
48
试了这个方法,也是被hook掉。
谁有解决方案让我知道  (我会付费)
wx_Winter 2017-9-14 18:10
49
我的测试机root了  但ro.secure  的值为0,有大神知道这个值是什么作用么?
花儿干嘛 2017-9-15 18:02
50
优。哈哈哈  开森。
返回