Hook微信分享时签名校验

由于手机上修改的软件比较多,分享到微信时会弹出“签名不对,请检查签名是否与开放平台上填写的一致。” ,并且无法分享,因而完成一个Xposed模块过掉校验。

先按照一个完整思路写一遍方法,然后再写一下踩的坑。

定位目标代码

方法一 根据字符串进行定位

从资源文件夹找到“签名不对,请检查签名是否与开放平台上填写的一致。”,获取到其id值是7f10247c,然后搜索smali定位到微信为其重新命名的变量名openapi_invalid_signature,然后翻一翻代码就能定位到函数com.tencent.mm.pluginsdk.model.app.q.a

 public static boolean a(final Context context, g gVar, String str, boolean z) {
       	//此处省略一大段代码…… 
                if (z) {
                    MMHandlerThread.postToMainThread(new Runnable() {
                        /* class com.tencent.mm.pluginsdk.model.app.q.AnonymousClass2 */

                        public final void run() {
                            AppMethodBeat.i(162008);
                            Toast.makeText(context, context.getString(c.h.openapi_invalid_signature), 1).show();
                            AppMethodBeat.o(162008);
                        }
                    });
                }
                Log.w("MicroMsg.AppUtil", "isAppValid, signature is diff");
                fmG.e(gVar);
                AppMethodBeat.o(151767);
                return false;
            }
        }
    }

方法二 利用Xposed Hook Toast的堆栈,定位到关键代码

打印堆栈代码:

Throwable ex = new Throwable();
StackTraceElement[] stackElements = ex.getStackTrace();
if (stackElements != null) {
    for (int i = 0; i < stackElements.length; i++) {

        XposedBridge.log("Dump Stack" + i + ": " + stackElements[i].getClassName()
                         + "----" + stackElements[i].getFileName()
                         + "----" + stackElements[i].getLineNumber()
                         + "----" + stackElements[i].getMethodName());
    }
}
XposedBridge.log("Dump Stack: " + "---------------over----------------");

得到结果:

修改返回值

Class<?> dumpClass = XposedHelpers.findClass("com.tencent.mm.pluginsdk.model.app.q", loadPackageParam.classLoader);
            Class<?> fclass2 = XposedHelpers.findClass("com.tencent.mm.pluginsdk.model.app.g", loadPackageParam.classLoader);
            XposedHelpers.findAndHookMethod(dumpClass, "a", Context.class, fclass2, String.class, boolean.class,
                    new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            XposedBridge.log(TAG + "BeforeSignHook: " + param.args[0] + " " + param.args[1] + " " + param.args[2] + " ");
                            //直接改返回值就可以
                            param.setResult(true);
                        }

                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            XposedBridge.log(TAG + "AfterSignHook: " + param.getResult());

                        }
                    });

简单粗暴,收工。

踩坑

参数错误,导致NoSuchMethodError

大坑,这个地方导致浪费了很长时间,我看到前面有一个g类的import,就想当然的以为是com.tencent.mm.b.g这个类了,vscode点进去也是这个(神坑)。

但是当我dump出所有的函数的时候发现不是:

泪目。感觉这一点Xposed不如Frida,Frida会提示正确的类型,但是Xposed只提示找不到,搞得我以为是微信有什么很牛逼的反Hook方案,大雾。

更:我又看了下smali文件,发现是jadx的锅。。。。

顺便扔一下dump代码方便以后用:

 // 获取指定名称的类声明的类成员变量、类方法、内部类的信息
    public void dumpClass(Class<?> actions) {
        XposedBridge.log("Dump class " + actions.getName());
        XposedBridge.log("Methods");
        // 获取到指定名称类声明的所有方法的信息
        Method[] m = actions.getDeclaredMethods();
        // 打印获取到的所有的类方法的信息
        for (int i = 0; i < m.length; i++) {

            XposedBridge.log(m[i].toString());
        }
        XposedBridge.log("Fields");
        // 获取到指定名称类声明的所有变量的信息
        Field[] f = actions.getDeclaredFields();
        // 打印获取到的所有变量的信息
        for (int j = 0; j < f.length; j++) {
            XposedBridge.log(f[j].toString());
        }
        XposedBridge.log("Classes");
        // 获取到指定名称类中声明的所有内部类的信息
        Class<?>[] c = actions.getDeclaredClasses();
        // 打印获取到的所有内部类的信息
        for (int k = 0; k < c.length; k++) {
            XposedBridge.log(c[k].toString());
        }
    }

Frida无法Hook 微信

原因未知:

可以看到Frida找不到com.tencent.mm进程。

评论

  1. mocobk
    2月前
    2022-5-17 11:15:53

    请问可以分享下这个模块吗

    • 博主
      mocobk
      1月前
      2022-5-28 14:54:42

      模块已分享在GitHub:https://github.com/icespite/WXHook

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇