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

不知道大家有没有用过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两个东西是完成不了的,所以这里我们需要用到AndroidKillerAndroidKiller是一款可视化的安卓应用逆向工具,具体使用,大家自行上网搜索,这里不介绍。

获取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() {
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        // 操作
    }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
反射获取控件

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

for (Field declaredField : declaredFields) {
    // 设置true
    declaredField.setAccessible(true);
    // 判断类型是否是Button
    if (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() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    // 当Button的Text为允许登录TIM/允许登录QQ的时候才实现点击
                    if (loginButton.getText().toString().contains("允许登录")) {
                        loginButton.performClick();
                    }
                }
            });
        } catch (Throwable t) {
            XposedBridge.log("Hook 出错 " + t);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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

结果:

扫一扫登录

结语

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

微信自动确认登录

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

自动确认电脑端登录

GitHub

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

使用Xposed Framework需要一些技术知识和操作步骤。下面是一个简单的Xposed使用教程的概述: 1. ROOT您的Android设备:Xposed Framework需要Root权限才能正常工作,因此首先需要将您的Android设备ROOT。ROOT的具体步骤会因设备型号和Android版本而有所不同,请根据您的设备进行相应的ROOT操作。 2. 下载和安装Xposed Framework:从可信的来源下载适用于您设备和Android版本的Xposed Framework安装文件。常见的下载来源包括Xposed官方网站(https://repo.xposed.info/)和XDA Developers论坛(https://forum.xda-developers.com/)。安装Xposed Framework的具体步骤会因设备和Android版本而有所不同,请根据所下载的安装文件的指引进行安装。 3. 启用Xposed Framework:安装完成后,打开Xposed Installer应用程序。如果一切正常,您将看到Xposed Framework的状态为"Framework installed and active"。如果状态不是这样,请按照应用程序的提示进行修复。 4. 安装和管理Xposed模块:在Xposed Installer应用程序中,您可以浏览和搜索各种Xposed模块。选择您感兴趣的模块,然后点击安装按钮进行安装。安装完成后,您需要在模块列表中启用相应的模块。 5. 重启设备并享受修改:完成模块的安装和启用后,您需要重新启动您的Android设备。在设备重新启动后,Xposed Framework将会加载已安装的模块,并应用相应的修改。您可以根据所安装的模块的功能来体验修改后的系统行为。 请注意,以上仅是一个简单的概述,具体的步骤和操作可能因设备和Android版本而有所不同。在使用Xposed Framework之前,请务必备份重要数据,并仔细阅读相关文档和教程,以确保正确安装和使用。 同时,请注意合法合规使用Xposed Framework,遵守相关规定和法律。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ios and Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值