1、项目简介
Xposed框架可以在不修改APK的情况下影响程序运行,我们可以利用它对App进行Hook,以实现一些自定义的功能。CPWechatXposed
是笔者开发的一款微信插件,本文介绍的是此插件开发过程与复盘。
网络异常,图片无法展示
|
网络异常,图片无法展示
|
Tips:项目早已搁置许久,原因是:每次微信更新都要耗费较多时间适配,重复体力活对逆向水平没啥提升,而且大号被封过,怕了怕了。读者有兴趣想写Xposed插件的可以参考下,弄下去广告插件啥的还是挺有意思的~
2、项目背景
一次年会上,公司领导们微信群发红包让大家抢,一边吃饭一边盯着手机蹲红包,结果饭没吃好红包也没抢到:
过年在家也是重蹈覆辙,每次打开群聊都是已抢完,还让不让人好好过节了,于是乎萌生了写一个自动抢红包工具的想法。
一开始想到的是模拟人一直监测红包信息,然后检测到有特定文本 自动点
,学习了一波Android无障碍服务 AccessibilityService,肝了个工具 WechatHelper:
网络异常,图片无法展示
|
投入使用后,在 相亲相爱一家人 类的群里都是抢第一,但在开发仔的群里经常抢不到第一,有时还抢不到。
后面了解到别人也是用了外挂,不过比我写的更快,用的Xposed抢红包插件,直接Hook微信信息的方法,监测到红包信息,直接调起抢红包,有些甚至还做到了无感拆,以及自动回复谢谢老板。
于是乎我也研究起Xposed插件开发了,也开始接触起逆向,所以也有了这个项目。
3、实践过程
① 创建一个Xposed项目
- Step 1 → 新建Android工程,修改
AndroidManifest.xml
,增加下述代码:
网络异常,图片无法展示
|
- Step 2:
build.gradle
文件添加库依赖(provided只提供编译支持,不会写到apk里):
网络异常,图片无法展示
|
- Step 3:
res/asserts
文件夹创建一个xposed_init
文件,XposedBridge 会从 assets 目录中的xposed_init文件中获取入口点,比如:
网络异常,图片无法展示
|
- Step 4:编写入口点类,Hook MainActivity里Textview显示的文字,渣渣辉改成贪玩蓝月:
网络异常,图片无法展示
|
Xposed入口类 XposedInit.java
:
网络异常,图片无法展示
|
流程解析:
- ① 实现
IXposedHookLoadPackage
接口,重写handleLoadPackage
函数;
- ② 判断是否为应用包名,
XposedHelpers.findAndHookMethod()
查找Hook掉onCreate()
函数;
- ③
XC_MethodHook
重写 afterHookedMethod() 函数,onCreate()执行完会回调此函数;
- ④ 在此获得TextView对象,把文字修改为“贪玩蓝月”,运行安装后,重启设备查看是否生效。
网络异常,图片无法展示
|
log也可以看到打印的日志信息:
网络异常,图片无法展示
|
注意:在运行Xposed项目前,记得把InstallRun的钩钩去掉!
网络异常,图片无法展示
|