本文同步更新于旺仔的个人博客,访问可能有点慢,多刷新几次。

缘由

不知道大家有没有用过QQ/TIM登录的时候使用扫描二维码登录的功能呢?

也就是登录界面的右下角那里有个二维码的按钮

点击之后就会出现二维码

然后用手机QQ/TIM打开扫一扫界面,扫了之后,会弹出允许登录的界面

然后我们需要点击允许登录TIM/QQ,电脑端就登录成功了。

但是每次登录都要点击允许登录,我觉得好麻烦,所以就实现了自动点击功能,这篇文章就是来介绍如何使用Xposed来实现自动点击。

实践

首先我们先整理一下思路,先要获取确认登录界面的Class,然后获取允许登录这个控件的Field,然后通过调用performClick这个方法来实现点击。

查找确认登录Activity

接下来,我们需要获取确认登录界面的Activity是哪一个,在这里我们先下载一个软件当前界面,可以获取到当前界面的Activity

在这里我们找到了确认界面的Activity的类名是com.tencent.biz.qrcode.activity.QRLoginActivity,然后我们进行下一步

反编译classes.dex

当前使用的apk版本是2.0.0,然后改后缀,打开压缩包,复制里面的dex文件

然后通过dex2jardex转换成jar文件,然后用jd-gui打开jar包,最后在classes6-dex2jar.jar里面找到QRLoginActivity

使用AndroidKiller

由于我们需要获取控件相关的内容,就需要获取控件的id、text之类的东西,那么仅仅靠dex2jarjd-gui两个东西是完成不了的,所以这里我们需要用到AndroidKiller,AndroidKiller是一款可视化的安卓应用逆向工具,具体使用,大家自行上网搜索,这里不介绍。

获取text引用

将我们的TIM的apk打开,然后搜索允许登录内容,找到对应的16进制内容

找到之后,发现有两个16进制的值,一个是7f0a0872,一个是7f0a0ba9,既然有两个,那么就有分别去搜索这两个值的调用,我这里有搜索过,第二个才是我们需要的,我们来看搜索结果

可以看出,这个值的引用是在hxq类上面调用的,点开jd-gui,找到这个类,同样是在classes6-dex2jar.jar里面

可以看出这个类是个Handler类,那么我们就可以这样理解,当扫描二维码后,会调用sendMessage之类的方法,然后在handleMessage里面进行修改控件的Text值。

Hook方法

通过上面的说明,我们可以很明确的知道该hook的地方在哪里了:

  1. 首先我们需要将Hook控件初始化的方法,然后再Hook我们的hxq类里面的handleMessage方法
  2. 之后进行判断控件的值是不是包含允许登录的内容(因为二维码过期我们不需要进行处理,只有登录的时候才进行处理),如果包含的话就调用performClick这个方法实现点击。

找到初始化方法

如何找到初始化方法呢,通过搜索findviewbyid,找到了doOnCreate方法

然后我们Hook这个方法

// 获取Class
final Class<?> aClass = XposedHelpers.findClassIfExists("com.tencent.biz.qrcode.activity.QRLoginActivity", lpparam.classLoader);
if (aClass == null) {return;
}
// Hook指定方法
XposedHelpers.findAndHookMethod(aClass, "doOnCreate", Bundle.class, new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {// 操作}
});

反射获取控件

通过获取QRLoginActivity的Class之后,我们通过反射获取里面的所有变量,然后通过判断变量的类型,然后判断控件的Text值是否包含允许登录内容,然后实现点击。

for (Field declaredField : declaredFields) {// 设置truedeclaredField.setAccessible(true);// 判断类型是否是Buttonif (declaredField.getGenericType().toString().contains("android.widget.Button")) {// 获取值final Button loginButton = (Button) declaredField.get(param.thisObject);if (loginButton == null) {return;}// 默认的Button的Text为空,需要在Handler这个类里面的方法后面加上判断Class<?> handlerClass = XposedHelpers.findClassIfExists(resultStr, lpparam.classLoader);if (handlerClass == null) {return;}try {// Hook方法,对handleMessage方法调用后,进行判断Button的Text进行判断,并且自动调用点击方法XposedHelpers.findAndHookMethod(handlerClass, "handleMessage", Message.class, new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {// 当Button的Text为允许登录TIM/允许登录QQ的时候才实现点击if (loginButton.getText().toString().contains("允许登录")) {loginButton.performClick();}}});} catch (Throwable t) {XposedBridge.log("Hook 出错 " + t);}}
}

最后打包,安装,激活重启

结果:

结语

文章说的简单一点,实际上自己反编译并且查找内容,是一个比较繁琐的事情,明确的方向会减轻需要操作的步骤。

微信自动确认登录

同样我们可以实现自动确认电脑端登录,这里就不再介绍了,大家可以自己试一试:

GitHub

Github地址在此奉上:ScanLogin,欢迎star

使用Xposed实现QQ/TIM自动确认电脑扫一扫登录相关推荐

  1. qq邮箱电脑版登录入口_Windows版TIM体验更新,微信可以直接登录QQ

    虽然QQ.微信都是腾讯家的,但两者之间却很少发生互通关系,连QQ的微信小程序上线都能引发热议以及无限猜测.那这次TIM体验版更新呢,微信能够直接登录QQ,该怎么解释? 3月26日,TIM发布最新体验版 ...

  2. 工具使用-QQ/TIM(1)QQ/TIM客户端聊天窗口输入/自动变成表情 - 解决方案

    问题: 我们在使用QQ/TIM客户端(电脑端)时,输入英文字符/时,会自动变成表情,且无法取消,无法避免.如下图所示: 解决: 打开QQ/TIM客户端,并打开一个聊天窗口. 在聊天窗口中点击表情图标, ...

  3. 网站前端联系我们之点击自动打开qq/Tim对话窗口

    自动跳出QQ/TIM对话框 没有完美的网站,需要用户的反馈来完善我们的页面.那么,联系我们必不可少.在即时通讯软件中,QQ/Tim用的最多.前几天发现了自动调用QQ/Tim代码,经测试发现可以用,很方 ...

  4. Python 使用win32相关的库实现简单自动操作电脑QQ--(1,登录QQ、批量登录)

    今天来教大家来认识QQ的第一个界面--登录界面.并实现可以自动登录 废话不多说 上代码: 注:代码中含有大量注释 所以本文就不做太多解释 #date--2020.06.19 import win32g ...

  5. python调用win32 自动登陆_Python 使用win32相关的库实现简单自动操作电脑QQ--(1,登录QQ、批量登录)...

    今天来教大家来认识QQ的第一个界面--登录界面.并实现可以自动登录 废话不多说 上代码: 注:代码中含有大量注释 所以本文就不做太多解释 #date--2020.06.19 import win32g ...

  6. 【神器出炉】微信/QQ/TIM,如何查看对方撤回的消息?

    Ⅰ.对方撤回消息看不到??? 你是否经常遇到朋友发了消息又撤回的情况?感觉错过了一个亿? 想要知道撤回了啥,怎么办?? 别慌,这样的工具又双叒叕地来了!!! Ⅱ.RevokeMsgPatcher 这个 ...

  7. mysql取消自动登录_腾讯QQ怎么取消QQ宠物自动登录?,你需要学习了

    QQ软件仍是我们不可缺少的社交工具,但QQ宠物已经没有刚出来那火了,很多人开始厌烦每次登录QQ,QQ宠物都会自动登录的情况,每次登上QQ的第一件事就是手动去退出QQ宠物,登一次QQ就要退一次QQ宠物, ...

  8. 利用权限禁止QQ的自动升级(QQUpdateCenter)

    我很少写一些软件技巧性的文章,不过有时候不得以,有了这些需求,但是从网上又找不到非常满意的解决方案.所以在自己找到后,非常愿意写出来和大家分享. 最近在Vista下使用最新版本的QQ(兼容Vista) ...

  9. Spring boot 项目(十二)——实现电脑网页微信扫码自动授权

    引言 电脑端微信网页扫码授权登录有2种方式: 第一种:基于微信公众号,单独获取登录二维码扫码,然后扫码登录,程序控制跳转逻辑,例如CSDN 第二种:基于微信开放平台,跳转到微信二维码页面进行扫码登录, ...

最新文章

  1. Python设计模式-单例模式
  2. 8.公有继承 保护继承 私有继承
  3. 有可能在onPause之前调用onSaveInstanceState
  4. Nginx七层负载均衡配置
  5. 操作系统-信号量的使用
  6. Spark入门(十八)之多表关联
  7. 决策树缺失值python_【机器学习笔记之二】决策树的python实现
  8. 记某次CTF中Let me in
  9. php数据库添加会员等级显示,给ECSHOP后台订单列表加上显示会员等级
  10. python实验室公众号_区块链研究实验室 | 使用Python编写Tendermint应用程序
  11. 文件复制 详解(C++)
  12. KDD 2022论文合集(持续更新中)
  13. 重装系统后开机启动项菜单如何删除
  14. 国科大学习资料--高级软件工程-复习题设计题答案
  15. stc15w4k32s4芯片引脚图片_STC15W4K32S4系列
  16. 高斯帕滑翔机枪matlab,高斯帕滑翔机枪的播种机这么做?
  17. gazebo的bumper使用
  18. 小旋风虚拟服务器怎么用,小旋风aspweb服务器该怎么使用
  19. 基于Java毕业设计学习自律养成小程序后台源码+系统+mysql+lw文档+部署软件
  20. 如何在百度搜索到自己的网站,加快百度的关键字录入

热门文章

  1. [NOIP2008]排座椅
  2. 使用for循环在控制台打印方形和三角形
  3. javaScript的一些小项目01-Drum Kit架子鼓
  4. 【Java】-【使用smtp协议发邮件】
  5. 基于Python实现的药店|药房管理系统
  6. python 类方法 实例方法的区别_python基础教程Python实例方法、类方法、静态方法区别详解...
  7. 移动端页面构建需注意?
  8. 如何从零开始架设邮件服务器
  9. 用 Win2003 架设邮件服务器
  10. 基于CAMx的空气质量模拟及污染来源解析技术与案例分析