在前文《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
使用前要做一点准备
比如说,目标应用是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里就顺利抓到包了。
这是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的诸神黄昏了。