、前言

上篇文章已经介绍了如何用Xposed实现调一个小功能的方法(Xposed快速入门例子(一)----- 拉黑好友)

那么这个代码在什么时机调用呢?我主要想到了以下两个模式。

二、两种调用模式

1.发广播(主要用于测试)

具体思路就是往Xposed模块中注册广播,然后在其它app中发送广播过去。

那么在什么地方注册广播呢? 网上大佬们给的方法很多,但是很多都会出现重复接收的情况。

所以介绍一下我的思路。看以下代码

        //注意:这是kotlin代码,kotlin中"=="相当于java中的"equals"if (lpparam.processName=="com.tencent.mm"){//在此处注册广播!val intentFilter = IntentFilter().apply {addAction("action_pull_black")}context.registerReceiver(myReceiver, intentFilter)}

可以看到注册广播的时候,我是用进程过滤的。因为微信的进程很多,所以不要用包名过滤。这样保证不会收到重复的广播!

    /*** 广播接收器* */private val myReceiver = object :BroadcastReceiver(){override fun onReceive(context: Context?, intent: Intent) {if (intent.action=="action_pull_black"){val wxid = intent.getStringExtra("extra_wxid")Handle.setBlack(wxid)}}}

通过广播接收器,可以看到收到了一个wxid,直接调拉黑的方法就可以了。

我在app主页,写了一个EditText和一个Button。点拉黑就把广播发送了过去。看以下代码

        btn_pull_black.setOnClickListener {val wxid = et_wxid.text.toString()if (wxid==""){Toast.makeText(this, "wxid不能为空!", Toast.LENGTH_SHORT).show()return@setOnClickListener}sendBroadcast(Intent().setAction("action_pull_black").apply {putExtra("extra_wxid", wxid)})}

这样这种模式就完成了!

2.hook到微信的方法之后,再调相应的Xposed代码

一般做Xposed模块的项目,主要用到的就是这种模式。

我们可以设想一个实际场景,如果好友说了一句骂人的话,我们就把他拉黑。

所以我们现在要做的就是hook到这个聊天内容和好友的wxid。

如何hook呢。我看大佬们的方法也是千奇百怪。

我觉得做实用的思路就是微信巫师所提供的------trace微信的数据库。

这种方式的好处就是简单明了,不用适配微信的版本。

以下是打开微信的db文件(db文件是加密的,网上有很多解密的方法,请自行百度),通过分析找到了聊天记录的表所在的地方。

我们只要hook插入数据库的方法就可以了。

    // Hook SQLiteDatabase to trace all the database operations.@JvmStaticfun traceDatabase() {XposedHelpers.findAndHookMethod(pkg.SQLiteDatabase, "insertWithOnConflict",String::class.java, String::class.java, ContentValues::class.java, Int::class.java, object : XC_MethodHook() {@Throws(Throwable::class)override fun beforeHookedMethod(param: MethodHookParam) {try {val table = param.args[0] as String?val values = param.args[2] as ContentValues?val talker = values?.get("talker").toString()if (table == "message") {val content = values?.get("content").toString()Log.e("Developer","hook到的---->content:$content\n" +"talker--->$talker")if (content == "滚") {Handle.setBlack(talker)}}} catch (e: Exception) {}}})}

下面测试一下这个hook。我用我的微信给测试的微信号发一个“你好啊”

下图可以看到日志已经打印到logcat里了

所以这种方式也可以实时监控聊天记录。

如果我给测试的微信号发一个内容为“滚”的消息,那么测试的微信号肯定就拉黑我了!

三、Xposed修改免重启

修改Xposed代码的时候,每次都得重启设备,给测试工作带来了不少麻烦。

微信巫师中有一套免重启的方案,我拿来用了。文章最后会给出源码。

只要在源码的app主页,点击【重启微信】的按钮,就可以了。

版权声明:本文为博主原创文章,转载请声明出处

源码下载地址:https://github.com/syxxjujing/Occasion

下一篇文章计划分享利用群发助手,按照标签群发消息。

欢迎加QQ群:536941874      群里会实时分享技巧。包括一些简单实用的源码。我有时间也会回答大家的问题

Xposed快速入门例子(二)----- 调方法的合适时机相关推荐

  1. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

  2. c语言类似于 n的标识符,C语言快速入门教程(二)

    C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要: 单词 + 语法! 将单词按照一定的语法拼凑起来就成 ...

  3. 小猪的C语言快速入门系列(二)

    小猪的C语言快速入门系列(二) 标签: C语言 本节引言 在上一节中,对于C语言有了一个初步的了解,学会了如何使用IDE来进行 代码编写,编译和运行.而这一节,我们会对C语言的基本语法进行学习, C语 ...

  4. python快速入门【二】----常见的数据结构

    python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...

  5. HTML快速入门(二)

    HTML快速入门(二) 超链接标签 列表标签 表格标签 布局标签 表单标签 1.超链接标签 标签 描述 a 定义超链接,用于链接到另一个标签 a 标签属性: href:指定访问资源的URL targe ...

  6. Unity快速入门之二 GUI Transform 详解

    Unity快速入门之一 3D基础概念.Camera.Canvas RenderMode的几种方式对比_翕翕堂 Unity快速入门之二 GUI Transform 详解_翕翕堂 Unity快速入门之三 ...

  7. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  8. ih5怎么切换下一个页面_ih5快速入门(二)

    快速入门第二章,使用一个简单案例来帮助大家,第一章所介绍的都会涉及到 大家先浏览一下案例 首先我们先看首页是如何做的,在这里会运用到动效 事件 同时也会在这里告诉大家音乐如何放进去,以及点击左上角可以 ...

  9. Quartz 框架快速入门(二)

    尽可能的用声明式处理软件配置,其次才考虑编程式的方式.在上一篇<Quartz 框架快速入门(一)>中,如果我们要在 Job 启动之后改变它的执行时间和频度,必须去修改源代码重新编译.这种方 ...

最新文章

  1. python UnicodeEncodeError 编码错误总结
  2. 记一些css 3效果
  3. 「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」
  4. 深入理解JavaScript定时函数setTimeout
  5. [loj3056][hnoi2019]多边形
  6. Qt的Socket通信
  7. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(2) - 8086/16位指令格式概述
  8. python 最小二乘回归 高斯核_机器学习技法6-(支持向量回归)
  9. JavaScript:异步执行机制
  10. 开启JAVA死锁之迷
  11. Android中应用程序获得系统签名权限(platform.x509.pem platform.pk8)下载地址
  12. Asp.Net 之 Web.config 配置文件详解
  13. CentOS 添加微软雅黑字体
  14. nacos配置中心[NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has been reache
  15. 某笔试的一道简单题目
  16. Java实现XML格式化
  17. 无需公网IP,在外远程访问NAS威联通QNAP【内网穿透】
  18. 推荐系统组队学习之概述
  19. 对淘宝双飞翼布局的的一点理解
  20. 语音识别ASR - HTK(HResults)计算字错率WER、句错率SER

热门文章

  1. shell可以卖钱_【一点资讯】什么叫Shell Cordovan呢?马臀皮鞋子,牛仔裤和腰带能卖多少钱...
  2. iptables 一些命令
  3. UDP视频流MP2T的分析方法
  4. RH236介绍红帽GLUSTER存储
  5. 使用计算机自适应测验大型测验,计算机自适应测验中测验安全控制方法评述.pdf...
  6. 集成学习——BAGGING和随机森林
  7. 【8583】ISO8583各域段的说明
  8. Spring Security入门01-22 登录验证功能
  9. 国外服务器网站打开速度慢,使用国外服务器时访问为什么很慢?
  10. DNSPod十问杨晓东:从.cn看中国互联网进化史