反編譯某軟體直接進入微信二維碼掃描介面

南無大乘妙法蓮華經發表於2017-07-06

今天無意發現了一款軟體,進去點了兩下,竟然直接跳到了微信二維碼掃描介面,喜悅之情難以掩飾,終於等到你...

昨夜西風凋碧樹

沒錯,三個月之前,我需要這個技能,網上搜尋了一番,得到如下程式碼:

    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) {
        }
    }複製程式碼

測試了下,完美展現了你的樣子.驀然回首,原來,你在這裡.

相關文章