反编译某软件直接进入微信二维码扫描界面

3,951 阅读2分钟

今天无意发现了一款软件,进去点了两下,竟然直接跳到了微信二维码扫描界面,喜悦之情难以掩饰,终于等到你...

昨夜西风凋碧树

没错,三个月之前,我需要这个技能,网上搜索了一番,得到如下代码:

    public static void toWeChatScan(Context context) {
        try {
            Uri uri = Uri.parse("weixin://");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            context.startActivity(intent);
        } catch (Exception e) {
        }
    }

然而新版本微信已经失效,只能进入到微信界面,不能打开二维码.独上高楼,望尽天涯路.

衣带渐宽终不悔

时间如流水般飞逝了两周,忽然打开了小米的扫一扫,这个软件技能真多,不仅可以扫码,还可以扫题,扫名片,扫文档,扫字翻译,这都不是重点,关键能直接进入微信和支付宝扫一扫.

于是提取了这个apk(怎么提取呢,后面会写个文章,专门介绍那些安卓开发神器APP,颤抖吧...).反编译了下,这个app也没混淆,也没加固,哈哈哈,最新版不知道啥情况,不过可悲的是去掉了微信和支付宝扫一扫入口...

反编译得到了如下代码:

    public static void toWechatScanFromMIUI(Context context) {
        String packageName = "com.tencent.mm";
        String activityName = "com.tencent.mm.plugin.scanner.ui.BaseScanUI";
        Intent intent;
        try {
            intent = new Intent();
            intent.setClassName(packageName, activityName);
            intent.setFlags(268435456);
            intent.setComponent(new ComponentName(packageName, activityName));
            context.startActivity(intent);
        } catch (Exception e) {
        }
    }

这个可以直接进入微信扫一扫二维码 Activity, 怎么知道是这个 Activity 呢,期待神器祭出吧.然鹅,我的APP使用这个代码,同样只打开了微信界面,并没有卵.
发生了什么,谷歌了一下,发现只有两种情况可以打开其他软件的 Activity:

  1. 目标 Activityexported 标签
  2. 需要权限 android.permission.START_ANY_ACTIVITY

发现微信扫一扫这个 Activity 并没有 exported 标签,然后在小米扫一扫的清单文件里发现了上面那个神一般的权限,然而这个权限和系统有关系,不同的系统处理有些差异,具体未测试,在miui上不好使,有了系统权限肯定好使,而这个扫一扫就具有系统权限,为伊消得人憔悴.

众里寻他千百度

时间转眼就来到了七月份的前头,一切仍在他合适的轨道上运转,不偏不倚,不快不慢.

今天,一个普通应用打开了你,原来这就是你的样子.

  1. 使用反编译神器 jadx 破解,还好没加固,只是混淆了一下,希望还是有的
  2. 用显示任意 Activity 的神器找到该 Activity
  3. 还好代码不多,点击事件处理里跳转了一下,找到了下面的代码:
    public static void toWeChatScanDirect(Context context) {
        try {
            Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.LauncherUI"));
            intent.putExtra("LauncherUI.From.Scaner.Shortcut", true);
            intent.setFlags(335544320);
            intent.setAction("android.intent.action.VIEW");
            context.startActivity(intent);
        } catch (Exception e) {
        }
    }

测试了下,完美展现了你的样子.蓦然回首,原来,你在这里.