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,安装这个框架, 网上的教程很多,不在本系列研究范围以内!
相关文档:
- 作者Github仓库:github.com/rovo89
- XposedBridge.jar下载:jcenter.bintray.com/de/robv/and…
然后是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 2:build.gradle文件添加库依赖
可能会有的疑问:provided只提供编译支持,不会写到apk里!!! 别手贱改成compile,装上打开后会报错的!
- Step 3:res/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解释了!