抱歉,Xposed真的可以为所欲为——1.基础知识储备(上)

简介: 本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。

1.Xposed是什么


一个很牛逼的框架,可以在不修改APK的情况下影响程序的运行,比如: 直接把APP的界面改成自己想要的样子,去掉界面里不喜欢的东西, 自动抢红包,消息防撤回,步数修改等等;简直酷得不行,网上有 很多插件作者开发出来的优秀插件,随手打开Xposed Installer下载 就有很多:



插件用起来是挺爽的,不过呢,因为Xposed拥有最高权限,如果不法分子 在插件里植入了恶意代码,比如登录劫持,偷偷采集你的账号密码发送到 他们的手里,如果涉及到了金钱,就很恐怖啦,所以在使用Xposed插件的时候, 尽量选那些开源的,并进行代码review,看是否存在恶意代码,再进行安装体验 (开源不一定就没问题,之前有个抢外卖红包的开源项目在里面加了一段挖矿代码, 令人窒息的操作!)


大概简述下Xposed的原理吧,后面有一节会专门研究源码~


Android基于Linux,第一个启动的进程自然是init进程,该进程会 启动所有Android进程的父进程——Zygote(孵化)进程,该进程的启动配置在/init.rc脚本中,而Zygote进程对应的执行文件是**/system/bin/app_process**, 该文件完成类库的加载以及一些函数的调用工作。在Zygote进程创建后, 再fork出SystemServer进程和其他进程。


而Xposed Framework呢,就是用自己实现的app_process替换掉了系统原本 提供的app_process,加载一个额外的jar包,然后入口从原来的:

**com.android.internal.osZygoteInit.main()**被替换成了:

de.robv.android.xposed.XposedBridge.main(), 然后创建的Zygote进程就变成Hook的Zygote进程了,而后面Fork出来的进程 也是被Hook过的。这个Jar包在: /data/data/de.rbov.android.xposed.installer/bin/XposedBridge.jar


大概原理就是这样,源码我还没去撸,后面会研究一波,有说错的再回来改。 另外使用Xposed模块是需要Root权限的,怎么Root,安装这个框架, 网上的教程很多,不在本系列研究范围以内!


相关文档:






然后是Xposed Installer,由于Android 5.0以上采用ART,而5.0以下默认采用Dalvik, 所以是有两个版本的Xposed,附上下载链接:Android 4.0.3-4.4

repo.xposed.info/module/de.r…Android 5.0以上:forum.xda-developers.com/showthread.…


PS:点下面这两个地方即可下载:



2.创建一个Xposed工程


接着演示一波如何创建一个Xposed工程


  • Step 1:新建一个工程,然后修改下AndroidManifest.xml,增加下面的代码:



  • Step 2build.gradle文件添加库依赖



可能会有的疑问:provided只提供编译支持不会写到apk里!!! 别手贱改成compile,装上打开后会报错的!


  • Step 3res/asserts文件夹创建一个xposed_init文件


XposedBridge会从assets 目录中的xposed_init文件中获取入口点,比如我的:



  • Step 4编写我们的入口点类


在此之前我们先修改下我们的MainActivity.java,修改下TextView显示的文字:



代码很简单,就是设置成"渣渣辉"而已,接着编写我们的Xposed入口类:

XposedInit.java



继承了IXposedHookLoadPackage接口,重写了handleLoadPackage方法, 判断了下包名,如果是的,XposedHelpers.findAndHookMethod(), hook掉onCreate()方法,XC_MethodHook()重写afterHookedMethod, 当onCreate()执行后会回调这个方法,在这里获得TextView对象, 把文字修改成"贪玩难约",接着运行,安装后需要重启设备。


重启后,打开应用,查看是否生效:



生效了,log也能看到打印出来的日志:



注意事项:


在运行Xposed之前,记得把InstallRun的钩钩去掉哦!



每次运行都需要重启手机哈~ 知道怎么创建一个Xposed项目后,接着就到API解释了!


相关文章
|
消息中间件 缓存 安全
抱歉,Xposed真的可以为所欲为——终 · 庖丁解码(下)
Xposed的使用不难,API也就那些,难点是: 逆向弄清楚Hook APP的方法调用流程,怎么调,参数都是干嘛的等。 经过反复练习,逆向Hook一个普通的APP(非企业级加固)写出可用的Xposed插件早已驾轻就熟(主要是磨时间),但有一个顾虑一直萦绕心间:不知道Xposed底层的具体实现原理。Tips:Xposed通常只能 Hook java层 及 应用资源的替换,有两个实现版本:4.4前的Dalvik虚拟机实现 和 5.0后ART虚拟机实现,本文针对后者进行分析,同时搭配 Android 5.1.1_r6 源码食用。
2075 0
|
Java API 开发工具
如何将python应用编译到android运行
【6月更文挑战第27天】本文介绍在Ubuntu 20上搭建Android开发环境,包括安装JRE/JDK,设置环境变量,添加i386架构,安装依赖和编译工具。并通过`p4a`命令行工具进行apk构建和清理。
637 6
如何将python应用编译到android运行
|
数据可视化 数据管理 定位技术
如何将QGIS中的属性表与Excel表格关联?
作为UE开发人员,经常会使用到QGIS进行数据管理编辑。QGIS与Excel之间数据并不完全兼容,而UE开发过程中大部分的前期数据都储存在Eecel里。为了将Excel数据写入QGIS属性表实现数据可视化,我们内部总结了一个最快捷的方法
|
API Android开发 iOS开发
个人微信开发API协议接口
个人微信开发API协议接口
|
存储 Oracle 关系型数据库
达梦数据库入门语法:从基础到进阶的指南
达梦数据库入门语法:从基础到进阶的指南
3487 2
|
监控 安全 Java
【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )
【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )
966 1
|
JSON Java 数据格式
Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
参考文章: Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json 解决spring boot中rest接口404,500等错误返回统一的json格式 spring boot最新教程(五):404错误500错误统...
3422 0
|
传感器 前端开发 Java
Android流媒体开发之路一:Camera2采集摄像头原始数据并手动预览
Android流媒体开发之路一:Camera2采集摄像头原始数据并手动预览
1234 0
|
网络协议 Linux 网络安全
Macos 配置ProxyChains设置网络代理
Macos 配置ProxyChains设置网络代理
1603 0
|
Web App开发
Android11(R) system_ext 分区 system_ext_specific 属性
Android11(R) system_ext 分区 system_ext_specific 属性
1802 0