首页
社区
课程
招聘
[原创] XposedFridaBridge:使用Frida加载Xposed插件
2020-7-9 17:22 13139

[原创] XposedFridaBridge:使用Frida加载Xposed插件

2020-7-9 17:22
13139

背景

在前文《Frida加载和启动XServer》中提到,Xposed的使用环境越来越受限制。Frida成为了新宠,这在论坛中新技术文章的频率中就可以看到。
但是不可否认的是,Xposed的生态和工具还是相当的丰富。所以,如果能将Xposed移植到Frida中,那将是极好的。

介绍

Xposed API本身的移植在技术上是畅通的,比如EdXposed等,使用其他框架来实现Xposed API是可行的。实质上讲,实现Xposed API其实就是加载XposedBridge并实现其中的native方法,而Frida的Hook正好是一种native方法实现。

 

所以可以用Frida实现XposedBridge,然后剩下的杂七杂八的事情交给XposedBridge去做就行了。

 

有类似的还有@Leadroyal同学,他在《friposed —— Write java hook with frida》也提到了这种可能,对我有一些启发。不过确实说来容易做来难,Frida实现Xposed Bridge里有不少坑,甚至发现了Frida的BUG提了Issue。

 

项目地址:https://github.com/monkeylord/XposedFridaBridge

使用

使用前要做一点准备

  1. 将XposedBridge.jar推进设备
  2. 安装Xposed插件,或将APK推进设备
  3. 配置modules.list

比如说,目标应用是com.monkeylord.hooktarget,要使用的插件是justtrustme

adb push XposedBridge.jar /data/local/tmp/XposedBridge.jar
adb install justtrustme.apk
adb shell 'echo "/data/app/just.trust.me-1/base.apk" > /data/local/tmp/conf/modules.list'

然后就可以用Frida在目标应用里启动Xposed和插件了

frida -U com.monkeylord.hooktarget -l .\XposedFridaBridge.js

效果:
图片描述
然后Burp里就顺利抓到包了。

关于modules.list

这是XposedBridge寻找插件时加载的配置文件,可以在XposdInstaller沙箱中的conf/modules.list看到,其格式很简单,就是插件APK的路径,每行一个。其实这些APK不安装也行,只要在里面指明APK路径就行。所以其实完全可以不安装:

adb push XposedBridge.jar /data/local/tmp/XposedBridge.jar
adb push justtrustme.apk /data/local/tmp/justtrustme.apk
adb push xserver.apk /data/local/tmp/xserver.apk
adb shell 'echo "/data/local/tmp/justtrustme.apk" > /data/local/tmp/conf/modules.list' 
adb shell 'echo "/data/local/tmp/xserver.apk" >> /data/local/tmp/conf/modules.list'

已知问题

发现Frida在夜神模拟器中不能Hook com.android.org.conscrypt.TrustManagerImpl 中的checkServerTrusted方法,否则会崩溃,这不是XposedFridaBridge的问题,可能是模拟器和Frida不兼容。
在测试设备(Nexus 5)中一切正常,本质上还是Hook框架不稳定。
如果发现其他问题,欢迎提出。

总结

使用Frida实现了Xposed API,实现Xposed API的实质是加载XposedBridge.jar并实现其native方法。成功实现之后,就可以用Frida在无需Xposed Framework的情况下加载Xposed插件了。

 

好了,我这个Xposed遗民可以坐到一边等待Xposed的诸神黄昏了。


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞11
打赏
分享
最新回复 (23)
雪    币: 3539
活跃值: (911)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
smartdon 1 2020-7-9 17:32
2
0
太强了
雪    币: 1305
活跃值: (389)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
Craft_A 1 2020-7-9 17:34
3
0
mark 学习一下
雪    币: 1867
活跃值: (3703)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
virjar 1 2020-7-9 18:08
4
1
xp遗民又可以挣扎一段时间了
雪    币: 62
活跃值: (572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2020-7-9 22:28
5
0
雪    币: 36
活跃值: (996)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
芃杉 2020-7-10 09:26
6
0
mark
雪    币: 2580
活跃值: (2950)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
Snark 1 2020-7-10 10:48
7
0
大神
雪    币: 348
活跃值: (1358)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lipengzhu 2020-7-10 10:58
8
0
太牛逼了
雪    币: 81
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kris777 2020-7-11 14:10
9
0
强啊,铁汁
雪    币: 25
活跃值: (1740)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
dryzh 2020-7-14 10:03
10
1
很有想法。点赞
雪    币: 723
活跃值: (1246)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
skyun 3 2020-7-14 14:13
11
0
我这个Xposed遗民可以坐到一边等待Xposed的诸神黄昏了。赞赞赞
雪    币: 2944
活跃值: (3936)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
0xEA 2020-7-27 18:00
12
0
厉害了
雪    币: 4752
活跃值: (2923)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
LeadroyaL 1 2020-7-27 19:53
13
0

非常好的项目,做到了我曾经想去做、但没做到的事情,学习了

最后于 2020-7-27 19:54 被LeadroyaL编辑 ,原因:
雪    币: 3
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hatawong 2020-7-28 12:31
14
0
好了,我这个Xposed遗民可以坐到一边等待Xposed的诸神黄昏了。
雪    币: 2113
活跃值: (2264)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
世界美景 1 2020-7-28 14:46
15
0
好思路 赞
雪    币: 77
活跃值: (929)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
cyxvc 3 2020-9-3 11:12
16
0
应该给加个精的!
雪    币: 62
活跃值: (572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2020-12-3 14:05
17
0
大佬 xserver报错了 说不能在主线程进行网络请求 这个怎么搞?
雪    币: 447
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
kanxue666 2020-12-4 07:20
18
0
人才!
雪    币: 634
活跃值: (1503)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Monkeylord 2020-12-4 10:07
19
0
万里星河 大佬 xserver报错了 说不能在主线程进行网络请求 这个怎么搞?
你试试看
setprop persist.sys.strictmode.disable 1
雪    币: 62
活跃值: (572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2020-12-4 13:25
20
0
Monkeylord 你试试看 setprop persist.sys.strictmode.disable 1
大佬 我昨天直接定位源码 把trysend()函数放在了子线程 好像能跑了 但是关于xserver如何主动调用 好像要设置中间人什么的 还是不明白 而且堆栈调用信息也没看到 主动调用时调用对象也总是为空 不知道是不是我乱改出的bug 我以前搞过java的服务器开发 那时用的Spring+tomcat 不知道大佬这个是用了什么技术把安卓手机本身变成服务器的呀?
雪    币: 62
活跃值: (572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2020-12-4 13:46
21
0
其实关于Frida加载xposed 我觉得可以把hook的任务交给Frida hook之后的功能实现交给java 把Java写的功能代码编译成dex或者apk,frida hook成功后动态加载dex,调用dex的函数 把hook结果传到java 应该也可行吧
雪    币: 634
活跃值: (1503)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Monkeylord 2020-12-6 01:43
22
0
万里星河 其实关于Frida加载xposed 我觉得可以把hook的任务交给Frida hook之后的功能实现交给java 把Java写的功能代码编译成dex或者apk,frida hook成功后动态加载dex ...
可行的。动态加载,然后去调里面的方法。
实际上frida在动态创建新类时也是这么干的。
缺点是学习成本高,不如复用已有的格式。
所以有了XposedFridaBridge来跑xposed插件。
雪    币: 15
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_因为那太遥远 2022-6-21 16:19
23
0
大佬 这个XposedBridge是多少版本的
雪    币: 519
活跃值: (3759)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
龙飞雪 2023-9-7 16:45
24
0
赞,思路不错
游客
登录 | 注册 方可回帖
返回