抱歉,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解释了!


目录
打赏
0
0
0
0
7
分享
相关文章
一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)(下)
一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)
2021年9月28日,老是遇到一些非常奇葩的问题。就离谱、好好的一个web项目就莫名奇妙坏了。
开发者在使用IDEA 2020编辑器搭建的SSM框架图书管理系统中,遇到删除功能异常问题,经过一系列尝试后发现是IDEA编译缓存导致的,最终通过重新编译项目解决了问题。
C++20 协程——你还只是听过?觉得没时间了解,这里可以帮到你。五分钟 从没听过到使用的帮助手册
来源:协程是在C++20 标准中提出的一个新的工具。 它突破传统的程序在cpu中来回切换时需要更新和恢复PCB资源现场的耗时操作(多进程)或者COW(低级调度)操作时间。
290 0
C#程序发布时,一定要好好地保护,不然你会后悔的
C#程序发布时,一定要好好地保护,不然你会后悔的
114 0
一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)(中)
一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)
我用一个小小的开放设计题,干掉了40%的面试候选人
去年团队招聘需求比较大,本人参与了近百次的面试工作。今天来跟大家聊聊,面试候选人过程中,一个常见的开放类设计题目的解题思路,以及候选人的理解设计误区分析。
我用一个小小的开放设计题,干掉了40%的面试候选人
抱歉,Xposed真的可以为所欲为——1.基础知识储备(下)
本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。
796 0

热门文章

最新文章

相关实验场景

更多