编写微信聊天机器人3《聊天精灵WeChatGenius》:使用Xposed来hook微信,找到微信进程。
接上一篇,引入Xposed库,使模块生效:https://blog.csdn.net/weixin_42127613/article/details/81839002
现在开始实战Xposed框架的hook功能。
1、新建一个类MainXposed,用于Xposed框架的启动入口。这个类要实现Xposed框架的IXposedHookLoadPackage接口。如下图所示。
我们在这个类的实现方法中,输出当前的包名和进程名,以Xposed的日志形式进行输出。完成后,该类的源码如下。
[code]package net.dalu2048.wechatgenius; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.callbacks.XC_LoadPackage; public final class MainXposed implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { XposedBridge.log("当前包名:" + lpparam.packageName + ",进程名:" + lpparam.processName); } }
2、加入Xposed框架的入口说明。
在项目中新建assets文件夹。在app文件夹上点击右键,新建文件夹,选择Assets Folder。如下图所示。
在assets文件夹中,新建文件,输入文件名:xposed_init。只能用这个文件名,是固定死的。Xposed框架就是通过这个文件名来寻找入口类。
打开文件,在其中只需要输入一个类名即可。一行一个,也可输入多个。一般我们也只用一个。
文件内容,输入一行:net.dalu2048.wechatgenius.MainXposed
3、运行测试。
现在编译运行,重启模拟器,打开Xposed installer,选择日志菜单,进行日志查看。
通过日志记录,可以看到编写的代码生效了,输出了系统的所有包名和进程。实际上是以进程为索引,Xposed都是hook的进程。如下图所示,可以看到微信的进程和包名。微信是多进程,所以看到有多次出现微信的包名。
最后,做一下过滤。由于我们只需要获取微信的消息,所以只需要hook微信进程即可。
加入判断,如果当前的进程为微信进程,那么继续;否则返回。很多类似代码都是进行包名的对比,由于微信是多进程,所以包名会出现多次,也就hook了多次。虽然影响不大,因为其他进程可能不会调用我们hook的方法,但毕竟不是最精确的做法。所以精确的做法,还是进行进程的对比。
微信的聊天消息,在主进程里面,我们只需要hook主进程即可。
修改后的MainXposed类代码如下。
[code]public final class MainXposed implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!lpparam.processName.equals("com.tencent.mm")){ return; } XposedBridge.log("进入微信进程:" + lpparam.processName); } }
编译、运行、重启后,打开Xposed日志,查看到只有一条日志记录,说明我们顺利的进入了微信进程。hook住了微信。
OK。至此,我们hook进入了微信的进程。
最后,源码提交github。项目地址是:https://github.com/dalu2048/WeChatGenius.git
下一篇,将实时获取到微信聊天消息,hook数据库插入操作:https://www.geek-share.com/detail/2745678793.html
阅读更多- 编写微信聊天机器人6《聊天精灵WeChatGenius》:使用QMUI Android框架美化UI主界面。
- 编写微信聊天机器人7《聊天精灵WeChatGenius》:判断Xposed是否安装,以及模块是否激活
- All-In-One Code Framework(AIO): 如何使用C#编写进程外的COM组件 (How to write an out-of-proc COM server in C#)
- 使用Python编写Linux系统守护进程实例
- 使用Python编写Linux系统守护进程实例
- 使用VS2010编写C#程序时总是提示正由另一进程使用,因此该进程无法访问此文件的解决办法
- 使用图灵api创建微信聊天机器人
- 【微信小程序+ES6新特性应用】使用箭头操作符简化回调函数繁琐的编写过程
- 编写一个程序库,实现定时器的功能,它能为用户提供在同一进程中多次使用的定时器。
- 使用python构造一个微信聊天机器人
- 使用Python WSGI编写Web服务器前端,并利用Boost.Python在同一进程内连接到C++服务后端实现
- 解决爱加密加固之后使用xposed hook的时候log打印不出来的问题
- [置顶] 使用React Native 和 微信小程序 编写的一款阅读类app ———《轻松一刻》
- VC++使用HOOK API 屏蔽PrintScreen键截屏以及QQ和微信默认热键截屏
- 端口被占用了,使用netstat找到占用端口的进程
- zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控
- linux下使用C语言编写管理进程
- 解决爱加密加固之后使用xposed hook的时候log打印不出来的问题
- xposed hook框架的使用(二)