【Android】Xposed 框架解析

前言

Xposed这位老兄大家可能不认识,微信自动抢红包大家听过吧、微信记录器作弊大家听过吧、地理位置模拟大家听过吧,我很负责任的告诉大家,这些都是Xposed干的,对的,就是它,相信大家充着“谁抢我红包”的愤怒,也想结识下这个牛逼的人物吧,草民在此(淫荡一笑),我们开始吧。

Xposed 介绍

大名鼎鼎得Xposed,是Android平台上最负盛名的一个框架,百度百科介绍是:“Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作”,在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接劫持、篡改、伪造一些信息。有了Xposed后,理论上我们的插件APP可以hook到系统任意一个Java进程zygote、systemserver、systemui。

Xposed 原理

Zygote 进程简析及与Xposed关系

在Android系统中,应用程序进程以及系统服务进程SystemServer都是由Zygote进程孵化出来的,而Zygote进程是由Init进程启动的,Zygote进程在启动时会创建一个Dalvik虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个Dalvik虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序进程都有一个独立的Dalvik虚拟机实例,这也是Xposed选择替换app_process的原因。

Zygote进程在启动的过程中,除了会创建一个Dalvik虚拟机实例之外,还会注册一些Android核心类的JNI方法到Dalvik虚拟机实例中去,以及将Java运行时库加载到进程中来。而一个应用程序进程被Zygote进程孵化出来的时候,不仅会获得Zygote进程中的Dalvik虚拟机实例拷贝,还会与Zygote一起共享Java运行时库,这也就是可以将XposedBridge这个jar包加载到每一个Android应用程序中的原因,想更多了解Zygote 进程可以去看下老罗的文章Android系统进程Zygote启动过程的源代码分析。

Hook/Replace 简析

Xposed 框架中真正起作用的是对方法的hook。在Repackage技术中,如果要对APK做修改,则需要修改Smali代码中的指令,而另一种动态修改指令的技术需要在程序运行时基于匹配搜索来替换smali代码,但因为方法声明的多样性与复杂性,这种方法也比较复杂。

在Android系统启动的时候,zygote进程加载XposedBridge将所有需要替换的Method通过JNI方法hookMethodNative指向Native方法
xposedCallHandler,xposedCallHandler在转入handleHookedMethod这个Java方法执行用户规定的Hook Func。

Xposed框架的原理是通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。
与采取传统的Inhook方式详见Dynamic Dalvik Instrumentation这篇文章 相比,Xposed在开机的时候完成对所有的Hook Function的劫持,在原Function执行的前后加上自定义代码,由于是通过安装基于Xposed框架的App来修改系统,所以风险会比直接修改系统文件来得少,有一定风险,如变砖、无限重启等,需谨慎!

工程组成

XposedInstaller

这是Xposed的插件管理和功能控制APP,也就是说Xposed整体管控功能就是由这个APP来完成的,它包括启用Xposed插件功能,下载和启用指定插件APP,还可以禁用Xposed插件功能等。注意,这个app要正常无误得运行必须能拿到root权限。

Xposed

这个项目属于Xposed框架,其实它就是单独搞了一套xposed版的zygote。这个zygote会替换系统原生的zygote。所以,它需要由XposedInstaller在root之后放到/system/bin下。

XposedBridge

这个项目也是Xposed框架,它属于Xposed框架的Java部分,编译出来是一个XposedBridge.jar包。

XposedTools

Xposed和XposedBridge编译依赖于Android源码,而且还有一些定制化的东西。所以XposedTools就是用来帮助我们编译XposedXposedBridge的。

使用示例

环境搭建

一、下载、安装XposedInstaller

下载地址

安装后如图所示:

XposedInstaller.apk

 XposedInstaller.apk

...

二、gradle 配置

dependencies {// ** 省略部分代码provided 'de.robv.android.xposed:api:82'//如果需要引入文档,方便查看的话provided 'de.robv.android.xposed:api:82:sources'
}

三、AndroidManifest 配置

在application标签下添加配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xxx<application xxx><!-- 1、标识自己是否为一个Xposed模块 --><meta-dataandroid:name="xposedmodule"android:value="true"/><!-- 2、Xposed模块的描述信息 --><meta-dataandroid:name="xposeddescription"android:value="a sample for xposed"/><!-- 3、支持Xposed框架的最低版本 --><meta-dataandroid:name="xposedminversion"android:value="53"/></application></manifest>

至此,准备工作都已完毕,下面可以扩展xposed模块了~

模块扩展

这里我简单模拟一下获取imei号的劫持篡改。

一、activity 代码示例:

        TextView tvImei = (TextView) findViewById(R.id.tv_imei);TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);String imei = telephonyManager.getDeviceId();tvImei.setText("imei:" + imei);

二、TelephonyHooks

通过源代码跟踪,我们发现telephonyManager.getDeviceId()
在android.telephony.TelephonyManager包下,所以我们需要劫持此方法。

public class TelephonyHooks implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {// 可以排除非当前包名if (!lpparam.packageName.equals("com.walid.xposedlocation")) {return;}XC_MethodHook hook = new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {XposedBridge.log("beforeHookedMethod");}@Overrideprotected void afterHookedMethod(MethodHookParam methodHookParam) throws Throwable {methodHookParam.setResult("walid");XposedBridge.log("Hook device id is successful!!! ");}};findAndHookMethod("android.telephony.TelephonyManager", lpparam.classLoader, "getDeviceId", hook);}}

三、在assets目录下创建xposed_init文件并添加TelephonyHooks文件所在完整目录

例如我的是:

com.walid.xposedlocation.TelephonyHooks

四、运行项目

运行结果如下:

 

劫持篡改前运行结果

此刻有的同学要吐槽了:

问:说您老忙活半天,这不还是没篡改成功吗,结果还是真正的imei号呀!是在逗我呢吗?

答: 由于xposed框架从根上Hook了Android Java虚拟机,所以它需要root,且每次为它启用新插件APP都需要重新启动才能生效,这点草民也有些想吐槽,不过这个权衡之后草民还是接受了,毕竟人无完人,何况程序呢。

五、开启xposed模块并软重启

1、选中模块

模块列表

2、选择重启

重新启动

3、运行结果

运行结果

长叹一口气,我们终于看到劫持篡改后的结果了~

结语

这篇简短的教程,草民并没有像其他人一样给予大家demo地址之类的,因为草民并不想让大家直接下载demo,run一下就可以了,还是希望大家多动手,同时如果有不清楚的同学,随时联系草民,同时这样的hook技术可以应用到任何场合,包括反编译、分析竞品、植入广告、抢红包等等,还是希望将技术应用到该用的地方,而不是应用在非法或者违法常规的事情上面,忘谨记!!!

转载地址:【Android】Xposed 框架解析 - 简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620295.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Android之Xposed框架完全使用指南

文章目录 Xposed环境搭建Xposed简介Xposed原理Xposed的安装 Xposed插件开发Xposed插件编写流程Xposed开发之Hook构造函数相关API无参构造函数的hook有参构造函数的hook实际效果 Xposed开发之修改属性相关API修改静态字段和成员字段实际效果 Xposed开发之hook一般函数相关APIhoo…

深入理解Android(三):Xposed详解

编者按&#xff1a;随着移动设备硬件能力的提升&#xff0c;Android系统开放的特质开始显现&#xff0c;各种开发的奇技淫巧、黑科技不断涌现&#xff0c;InfoQ特联合《深入理解Android》系列图书作者邓凡平&#xff0c;开设深入理解Android专栏&#xff0c;探索Android从框架到…

Xposed入门教程

2019年8月27日16时51分47秒以前一直没机会接触Android Hook方式的逆向今天有空试了下&#xff0c;以前也很少写这种东西&#xff0c;今天第一次&#xff0c;认真写下&#xff0c;记录一下?准备 准备搞太极的&#xff0c;但是Xposed都不会&#xff0c;不好搞&#xff0c;所以就…

RabbitMQ---订阅模型-Topic

订阅模型-Topic • Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符&#xff01; • Routingkey 一般都是有一个或多个单词组成&#xff0c;多个单词之间以…

PostgreSQL命令行工具psql常用命令

1. 概述 通常情况下操作数据库使用图形化客户端工具&#xff0c;在实际工作中&#xff0c;生产环境是不允许直接连接数据库主机&#xff0c;只能在跳板机上登录到Linux服务器才能连接数据库服务器&#xff0c;此时就需要使用到命令行工具。psql是PostgreSQL中的一个命令行交互…

pyreverse+Graphviz 快速理清整个项目中的代码结构

作用 &#xff1a; 分析代码中的调用关系&#xff0c;帮助快速理清代码。 安装方法&#xff1a;以windows为例 • 从官网下载 https://www.graphviz.org/download/ 安装• 记得将其添加到系统路径• 运行下面命令来检查安装是否完成&#xff1a; dot -V• 安装Pyreverse&…

配置web服务

Web服务器又称为WWW服务器&#xff0c;它是放置一般网站的服务器。一台Web服务器上可以建立多个网站&#xff0c;各网站的拥有者只需要把做好的网页和相关文件放置在Web服务器的网站中&#xff0c;其它用户就可以用浏览器访问网站中的网页了。 LAMP是Linux, Apache, MySQL, PH…

Web Service(Web服务)

什么是webservice&#xff1f; 一句话概括&#xff1a;WebService是一种跨编程语言和跨操作系统平台的远程调用技术。 所谓跨编程语言和跨操作平台&#xff0c;就是说服务端程序采用Java编写&#xff0c;客户端程序则可以采用其他编程语言编写&#xff0c;反之亦然&#xff01…

什么是Web 服务?

Web 服务是一种可以用来解决跨网络应用集成问题的开发模式&#xff0c;这种模式为实现“软件作为服务”提供了技术保障。而“软件作为服务”实质上是一种提供软件服务的机制&#xff0c;这种机制可以在网络上暴露可编程接口&#xff0c;并通过这些接口来共享站点开放出来的功能…

什么是web服务

2001年秋天互联网公司&#xff08;dot-com)泡沫的破灭标志着互联网的一个转折点。许多人由此断定互联网是被大家过分炒作了&#xff0c;事实上网络泡沫和相继而来的股市大衰退是所有技术革命的共同特征。股市大衰退通常标志着蒸蒸日上的技术已经开始占领中央舞台&#xff0c;假…

Web服务基础

1 Web服务器 WEB服务器用来接收客户的请求&#xff0c;然后向客户返回一些结果。 用户可以通过web浏览器请求一个资源。Web服务器在接收到请求之后&#xff0c;负责查找资源&#xff0c;然后向用户返回一个结果。 2 Web客户端 Web客户端允许用户请求服务器上的某个资源&#xf…

WEB服务的部署

文章目录 一、WEB服务相关概念1. WEB服务器2. 协议端口号3. WEB服务器发布软件 二、WEB服务器的部署1.配置服务器的静态IP&#xff1a;10.1.1.12.安装IIS-WEB插件3.停用默认站点4. 新建站点senting5. 一台服务器同时发布多个WEB站点6. 对于动态网站的搭建 一、WEB服务相关概念 …

Web 服务的概述

Web 服务的概述 由于能够提供图形、声音等多媒体数据&#xff0c;再加上可以交互的动态 Web 语言的广泛普及&#xff0c;WWW&#xff08;World Wide Web&#xff0c;万维网&#xff09;深受Internet用户欢迎。一个最重要的证明就是&#xff0c;当前的绝大部分Internet流量都…

【网络安全】Web服务器

文章目录 1、Web服务器概述1.1、Web服务器1.2、端口1.3、网站与网页 2、Web服务器发布2.1、发布软件2.2、发布形式2.3、网站类型 3、部署Web服务器3.1、配置服务器IP地址3.2、安装IIS服务3.3、新建和发布网站3.3.1、同端口&#xff0c;不同IP3.3.2、同IP&#xff0c;不同端口3.…

Web服务(02)——Web服务器中间件

文章目录 Web服务&#xff08;02&#xff09;——Web服务器中间件前言一、JAVA中间件1、Tomcat2.Weblogic3.Jboss4.Webshaere 二、Python中间件1、wsgi2、uwsgi3.uWSGI 三、Php中间件1、php-fpm2、CGI3、FastCGI4、Php-FastCGI 四、其他中间件1、事务处理中间件——Hadoop2、消…

Web服务是什么

1、Web服务 服务&#xff1a;提供的某个功能&#xff1b;网络服务&#xff08;Net Service&#xff09;&#xff1a;使用不同的网络协议&#xff08;http、ftp、stmp/pop3&#xff09;提供的服务&#xff1b;Web服务&#xff1a;指使用 http 或 https 协议接受用户的服务请求并…

【优化算法】Python实现面向对象的遗传算法

遗传算法 遗传算法(Genetic Algorithm)属于智能优化算法的一种&#xff0c;本质上是模拟自然界中种群的演化来寻求问题的最优解。与之相似的还有模拟退火、粒子群、蚁群等算法。 在具体介绍遗传算法之前&#xff0c;我们先来了解一些知识&#x1f9c0; DNA&#xff1a; 携带有…

pyinstaller打包openvino 2021.4.2

打包准备 1. 测试环境准备 conda create -n opinstall python3.7 -y conda activate opinstall pip install openvino2021.4.2 pip install pyinstaller PyCharm新建openvino_install&#xff0c;选择虚拟环境opinstall&#xff0c;编写测试代码 app.py import numpy as n…

8.27周报

文章目录 前言论文阅读摘要介绍模型算法 总结 前言 本周学习了GAN论文《Generative Adversarial Nets》&#xff0c;了解GAN主要由两部分组成&#xff1a;生成器和判别器&#xff0c;知道生成器G和判别器D的作用及原理&#xff0c;相比于其他的生成模型&#xff0c;了解GAN的优…

API管理测试 - 最佳实践和关键要素

什么是API管理测试&#xff1f; API管理测试是在软件开发和集成功能中对应用程序接口&#xff08;API&#xff09;进行测试和验证的过程。它涵盖了测试API的功能、性能、安全性以及与其他系统的交互。API管理测试对于确保API的正确运行和稳定性非常重要。 ​ 为什么API管理测…