Xposed框架原理
xposed的hook原理是基于Java的反射机制和JNI。Xposed框架通过在系统层面进行hook,允许用户在不修改apk源码的情况下对android应用进行定制和拓展,实现修改界面元素,禁止广告等操作,也有一些衍生的框架, Exposed、VirtualXposed、太极框架等。android系统是基于linux的,其第一个由内核启动的用户进程是init,随后会创建zygote进程,android应用的进程都是由zygote进程孵化而来的,zygote所对应的可执行程序是app_process,xposed框架通过替换系统的app_process可执行文件以及虚拟机动态链接库,让zygote在启动应用程序时注入框架代码,进而实现对应用程序进程的劫持。
Xposed在hookjava方法时,先将虚拟机里的这个方法的Method改为nativeMethod,然后将该方法的nativeFunc指向自己实现的一个native方法,在这个native方法中xposed直接调用了一个java方法,这个java方法里面对原方法进行了调用,并在调用前后插入了钩子,这样就实现了方法的hook。Dalvik Hook通常通过修改Method结构体内容实现,常见的Dalvik Hook框架有AndFix,DDI,Xposed,常见的思路有将被hook方法Method结构体的accessFlags置为native,然后将nativeFunc指向自定义的函数,比较灵活,也可以声明一个与被hook方法相同的新方法,将新方法的Method结构体覆盖到被hook的Method结构体上,相对简单但不够灵活
Xposed框架组成
- Xposed,Xposed框架Native部分,Xposerd框架版的app_process,用于替换原生的app_process,并为XposedBridge提供JNI方法
- XposedBridge,Xposed框架java部分,编译后生成jar包,Xposed框架的app_process会将此加入到系统class path中
- android art,xposed框架定制的Android ART
- XposedInstall,Xposed框架插件管理App
- XposedTools,用于编译项目的工具集
常见的Xposed插件及动态工具
Xposed插件常见功能
- 拦截,修改应用程序的方法调用,参数传递和返回结果
- 为安卓系统添加额外的功能模块
- 修改应用程序的权限请求,如justTrustMe
- 微信就有一些xposed插件可以实现防撤回等功能,支付宝也有一键支付等
- 上帝模式,去除app界面控件
常用的动态工具
- Xprivacy,可以对所有应用可能泄露隐私的权限进行管理,可以禁用应用程序读取联系人信息,定位服务,存储等权限,对禁止可能会导致崩溃的应用采取欺骗策略,提供伪造信息
- justTrustMe,一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块,将apk中所有用于校验ssl证书的api都进行了hook从而实现了证书校验
- inspeckage,一个用来动态分析安卓 app 的 xposed 模块,提供了对所分析 apk 的一些基本信息,提供直接下载 apk 到电脑,截图手机屏幕等辅助功能,最核心的功能是监控 share preferences,加解密函数的使用,http 访问等
1 | //inspeckage功能 |
Xposed和Frida的区别
Xposed可以在运行时动态的修改应用程序的类和方法,可以在不重新编译应用程序的情况下进行修改,需要root设备,核心是hook函数和模块化的方式
frida可以注入js代码到目标应用程序中,还提供了rpc机制,可以通过网络接口与目标应用程序进行通信,但许多应用程序都有针对frida的防御措施,核心是动态插桩和js脚本
同时需要注意的是Xposed不能在Android8.0上使用,因为android8具有系统分区完整性,该特性会检查系统分区的完整性,如果检测到系统分区被修改或者破坏系统将无法启动,而Xposed框架需要修改系统分区的一些文件。同时ART(Android Runtime)有所改变,art在android8.0中引入了一些重要的变化,加强了应用程序的隔离性和安全性,导致了xposed框架的一些核心功能无法正常工作
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3049155267@qq.com