Xposed原理

  1. Xposed框架原理
  2. Xposed框架组成
  3. 常见的Xposed插件及动态工具
    1. Xposed插件常见功能
    2. 常用的动态工具
  4. Xposed和Frida的区别

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//inspeckage功能
Logcat 实时查看该app的logcat输出
Tree View 可以实时浏览app的数据目录并直接下载文件到本地
Package Information 应用基本信息(组件信息、权限信息、共享库信息)
Shared Preferences LOG:app XML文件读写记录;Files:具体XML写入内容
Serialization 反序列化记录
Crypto 常见加解密记录(KEY、IV值)
Hash 常见的哈希算法记录
SQLite SQLite数据库操作记录
HTTP HTTP网络请求记录
File System 文件读写记录
Misc. 调用Clipboard,URL.Parse()记录
WebView 调用webview内容
IPC 进程之间通信记录
+Hooks 运行过程中用户自定义Hook记录

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

💰

×

Help us with donation