使用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 {
        // 操作
    }
});

反射获取控件

通过获取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);
        }
    }
}

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

结果:

扫一扫登录

结语

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

微信自动确认登录

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

自动确认电脑端登录

GitHub

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345