首页
社区
课程
招聘
XPOSED魔改一:获取特征
发表于: 2020-4-5 16:30 21437

XPOSED魔改一:获取特征

2020-4-5 16:30
21437

受这篇文章——《定制Xposed框架》启发,决定自己也尝试一下。

尝试的过程中发现,文章写得太“简约”了,基本上毫无细节,后人想下手或复现非常困难,对Xposed各模块之间的关系也没有介绍,有点“干”,不易于理解,于是有了此文。

本文细节非常多,相当于手把手,篇幅过长所以分拆成三篇:

部分附件(镜像、刷机文件等)位于我的github:https://github.com/r0ysue/AndroidSecurityStudyFART/picC文件夹中。

话不多说,进入正题,既然想要抹掉XPOSED框架的特征,那么首先得知道XPOSED框架有哪些特征,才能有的放矢、对症下药。

Xposed官方发布频道得知,sdk27版本(也就是安卓8.1)的Xposed还是beta的状态:

最新的正式版是sdk25(也就是安卓7.1),已经是2017年的了:

当然最重要的还是Github主页上开源的版本只到v89,也就是安卓7.1;而不是安卓8v90系列。

Xposed今后应该也不会更新了,我们以android-7.1.2_r8版本来进行编译。

首先只需要收集特征,我们先下载其线程的谷歌镜像进行刷机即可:

Link上右键复制链接地址,可以直接黏贴到国内环境的浏览器里下载的,也可以直接wget

下载完成后进行解压:

如果电脑里没有安装fastboot,可以先下载一下:

解压并将fastboot命令加入当前终端的路径中去:

测试一下当前终端中有fastboot命令了么?如果有,会打印出一堆帮助信息。

将手机进入bootloader模式,这里以pixel一代sailfish为例,刚刚下载的镜像也是专为sailfish这个型号准备的。首先完全关闭手机(可以等关机息屏后再等待一分钟),然后按住音量向下键,再按开机键开机,手机会进入如图状态,就是bootloader模式:

usb线连接到电脑后,可以使用fastboot命令检测到:

如果系统是在VMware里,那么要确保usb口连接到VMware里的Linux系统。

最终就是进入刚刚解压出来的sailfish镜像文件夹,运行其中的flash-all.sh命令即可。

安装成功就会出现finished字样,并且手机重启,进入系统。

貌似Magisk环境与XPOSED是有冲突的,不然不会有[Magisk] Systemless Xposed v89.3/v90.2-beta3 (SDK 21-27)这种产物了,所以幸亏我们选择的是7.1.2,用老牌的SuperSU还是支持的。

SuperSU官网提供的下载已经无法下载了,所以在其他网盘里找到个能用的SR3-SuperSU-v2.82-SR3-20170813133244.zip,用TWRP刷进这个SuperSU就行了。

TWRP则使用这个版本:twrp-3.2.1-0-sailfish.img,先都下载了。

选择Reboot SystemDo Not Install即可。

下载安装最新版xposed.installer_3.1.5_apkmirror.com.apk),下载完安装和打开,然后安装Xposed的底包,具体流程见下图。

安装、重启完成后,须出现“Xposed框架89版已激活”字样,绿色勾勾(而不是红色或黄色)。在Xposed Installer的“下载”模块里找到GraviryBox[N]安装和激活,然后让状态栏文字变成如图绿色康康(原来为白色)。

到这里框架和插件都安装成功并正常使用了。

从手机里把底包抽出来,也就是xposed-v89-sdk25-arm64.zip,应该就是服务器上的https://dl-xda.xposed.info/framework/sdk25/arm64/xposed-v89-sdk25-arm64.zip,解压康康发现里面东西很多。

这个里面最关键的就是安装包文件做了什么,这里只取最关键的康康,其余拷贝证书之类的,心里有数就好:

也就是说该脚本的实质,把确保安装包没有下错,跟系统环境是匹配的,以及把不同的文件放到相应的位置上去。这里我们有了基本的概念,至少我们最终编译出来的可以刷机的包,得包含下列文件,他们最终会被放在系统的system/bin/system/framework/system/lib64/位置上。

简单地搜下字符串,可以看到几乎所有的二进制文件中都含有xposed的字符串,我们最终的目标最起码要拿掉xposed的字符串特征。

这些文件的用途及与源码的比对我们下一章再详细介绍。

Xposed插件在运行的时候会输出日志,如下图:

可以提取出来看个完整的:

可以观察到主要涉及的文件也就是/system/framework/XposedBridge.jar,也就是前文中放到/system/framework/XposedBridge.jar文件,可见XposedBridge.jar文件在Xposed插件的运行中起到了关键的作用。

根据官方tutorial,典型的插件开发流程分为:

比如编写下述javahook代码,最终效果就是改变系统时钟颜色:

可以看到引入的包都位于de.robv.android.xposed包中,当然这也是引入Xposed Framework API时被包含进项目的:

官网最新的版本还是api-82.jarapi-source-82.jar

下载来看下里面的内容,一个是.class字节码,一个是.java源代码而已。

随便打开个文件来康康,IXposedHookLoadPackage.java

里面的各种xposed特征字符串到处都是。

也就是说,如果我们更改了xposed的字符串特征,也要制作这样的一份api-82.jarapi-source-82.jar,供开发者编写代码时进行调用。

并且开发者在编码时,使用的系列API中,至少不存在xposed字样。

到这里正常的Xposed插件开发及使用流程中可以搜集到的特征就都有了,接下来看一个专业检测XposedApp,看看它主要检测哪些方面。

作者已经将源码开源:XposedChecker,安装包位于app目录中,名字叫Xposed Checker 4.apk,先装上去跑一下,申请root权限时点击“同意”,结果如下图所示,可信度竟然5/9,我的GravityBox插件还在跑着,状态栏还变着色:

这个结果肯定是不准确的,那四个绿色的项目中,只有“检测虚拟Xposed环境”是对的,毕竟我们不是VirtualXposed,而是真实的Xposed。其他三项出现了失误,可以看看它的源码怎么写的,主要的检测逻辑位于app\src\main\java\ml\w568w\checkxposed\ui\MainActivity.java文件中,定义了以下功能:

Android逆向之旅---破解某支付软件防Xposed等框架Hook功能检测机制

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

美团出品-Android Hook技术防范漫谈

看雪出品-企业壳反调试及hook检测分析

支付宝小专栏-无需 Root 也能使用 Xposed

抖音短视频检测 Xposed 分析(一)

抖音短视频检测 Xposed 分析(二)

检测Android虚拟机的方法和代码实现

以上每一篇都看过来之后,发现文章还是比较过时的,现在大部分风控都是写在so中,检测项目可能多达成百上千项,并且Ollvm甚至自家vmp来混淆下,不会让你轻易地找到并patch的;只是他们收集了环境特征后只是加密上传,并不会把app退掉让你发现而已。

针对这种加固/风控的行为特征,可能比较好的方案就是修改aosp系统源码,打更多的埋点,收集so的检测项目,形成一个checklist;或者unicorn来模拟执行,只是现在对抗unicorn的技术也越来越多,unicorn的终极形态,就是一个完整的安卓系统;所以不如直接改系统。

当然我们不用分析那么远,只需要简单修改XPOSED的字符串,过简单的根据字符串特征的XPOSED检测是没有问题的。

在下一篇中我们将介绍XPOSED框架之间的关系,以及如何编译使用原版XPOSED框架,最后一篇中再来简单更改特征。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 9
支持
分享
最新回复 (21)
雪    币: 657
活跃值: (68)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
2
2020-4-5 16:50
0
雪    币: 1073
活跃值: (2013)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
已经定制xposed  能过一些检测 以后遇到什么 app检测的就在分析吧
2020-4-5 17:09
0
雪    币: 977
活跃值: (435)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
2020-4-5 17:18
0
雪    币: 5189
活跃值: (9712)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
5
666,学习!
2020-4-5 17:29
0
雪    币: 6573
活跃值: (3893)
能力值: (RANK:200 )
在线值:
发帖
回帖
粉丝
6
666
2020-4-5 22:02
0
雪    币: 0
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
2020-4-5 23:26
0
雪    币: 1821
活跃值: (831)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好详细
2020-4-6 00:03
0
雪    币: 239
活跃值: (552)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2020-4-6 01:00
0
雪    币: 182
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
2020-4-8 10:49
0
雪    币: 4883
活跃值: (18890)
能力值: ( LV13,RANK:317 )
在线值:
发帖
回帖
粉丝
11
感谢分享
2020-4-8 11:32
0
雪    币: 221
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
哪里需要这么复杂的分析, 直接全局替换 xposed为其他字符串即可,唯一麻烦的就是不同系统版本的编译, 你这里只编译一个版本还好点, 当初我编译所有系统版本的时候,可把我累够呛, 下载源码特麻烦, 编译环境还不兼容, 最后分别用Ubuntu14和Ubuntu16才把所有系统版本编译完成
2020-4-8 17:59
0
雪    币: 712
活跃值: (121)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2020-4-10 15:24
0
雪    币: 208
活跃值: (479)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
”只是现在对抗unicorn的技术也越来越多“
—— 
有没有相关文章可分享一下呢?感谢
2020-4-16 10:34
0
雪    币: 2081
活跃值: (2685)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
我写的确实是太干了。。 因为我知道整个流程想全部写详细 要好多字   400个G的硬盘没了 编译源码期间无数问题 全部写出来累死
最后于 2020-4-17 15:20 被世界美景编辑 ,原因:
2020-4-17 15:11
0
雪    币: 3907
活跃值: (5817)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
16
世界美景 我写的确实是太干了。。 因为我知道整个流程想全部写详细 要好多字   400个G的硬盘没了 编译源码期间无数问 ...
感谢大佬抛砖引玉
2020-4-20 17:17
0
雪    币: 8195
活跃值: (6419)
能力值: ( LV12,RANK:207 )
在线值:
发帖
回帖
粉丝
17
感谢分享
2020-4-24 17:41
0
雪    币: 244
活跃值: (266)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
666,学习!
2020-5-7 12:51
0
雪    币: 244
活跃值: (266)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
666,学习
2020-9-8 15:33
0
雪    币: 1446
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
大佬问下我按照你的步骤输入 Google 官方原生系统之后,发现wifi 可以正常连接,但是不能上网,知道怎么回事吗??还请赐教
2020-9-9 01:44
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
期待 XPOSED魔改二 
2021-5-25 14:31
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
魔改后的成品能分享吗
2021-10-23 00:12
0
游客
登录 | 注册 方可回帖
返回
//