l_user 发表于 2024-7-25 23:35

Frida实现对VX小程序的抓包

本帖最后由 l_user 于 2024-7-25 23:36 编辑

作为一个刚接触逆向不久的新手,知道frida的时候,惊为天人,居然有这么好用的东西~

因为之前用各种抓包软件都没有抓到过小程序的数据包,于是就尝试一下用frida获取vx小程序的包。下面进入正题,感谢这位大佬提供的思路

1. 首先用Jadx打开微信安装包,搜索字符串createRequestTask,这样可以找到两个类,分别用于创建同步任务和异步任务。

2. this.h.e(lVar, jSONObject, str); 进入这个方法,可以看到 jVar.g(lVar, i, jSONObject, g, aVar2.q, bVar, str, "createRequestTask"); 这个就是发起请求的地方。接下来就是用frida写代码hook了
3. 一开始的时候我陷入了一个误区,因为Jadx反编译出来的包名都不是完整的,比如这样的package kv0;。我一直在研究怎么拿到完整的包名。后面在论坛看到有大佬说了一句,这个是不影响hook的,那实际的拿到发送数据的代码就是这样的:
var JSendClass = Java.use("sz0.j");
    if (JSendClass.g) {
      JSendClass.g.overload(
      "com.tencent.mm.plugin.appbrand.jsapi.l",
      "int",
      "org.json.JSONObject",
      "java.util.Map",
      "java.util.ArrayList",
      "sz0.o",
      "java.lang.String",
      "java.lang.String"
      ).implementation = function (lVar, i, jsonObject, map, arrayList, oVar, str, str2) {
      console.log("\n------------------ Sending Data ------------------");
      console.log("lVar:" + lVar.toString());
      console.log("jsonObject: " + jsonObject.toString());
      console.log("map: ");
      var keySet = map.keySet();
      var it = keySet.iterator();
      while (it.hasNext()) {
          var key = it.next();
          var value = map.get(key);
          console.log(key.toString() + " -> " + (value ? value.toString() : "null"));
      }
      console.log("str: " + str);
      console.log("str2: " + str2);
      return this.g(lVar, i, jsonObject, map, arrayList, oVar, str, str2);
      };
    } else {
      console.log("Method 'g' not found in the sending class.");
    }
               
运行脚本,就可以拿到发送的数据。注意frida的需要的PID应该是微信本体的PID,而不是小程序进程的PID。

风生·水起 发表于 2024-7-26 17:00

l_user 发表于 2024-7-26 16:58
那可以直接用frida来hook这个js

是啊 但是我找了半天找不到hook点。大佬有兴趣研究一下吗2024-07-01 15:02:47.441 17180-17841 LSPosed-Bridge          com.tencent.mm                     IHookBox:MicroMsg.JsValidationInjectorWC batchInjectUsrJsFiles start assemble requests, appId:wxe89fc000f4991d2a, key:game.js, paths.size:1stack:
2024-07-01 15:02:47.441 17180-17841 LSPosed-Bridge          com.tencent.mm                     IHookBox:MicroMsg.JsValidationInjectorWC batchInjectUsrJsFiles start invoke batchEvaluateJavascript, appId:wxe89fc000f4991d2a, key:game.js, paths.size:1stack:
2024-07-01 15:02:47.527 17180-17841 LSPosed-Bridge          com.tencent.mm                     IHookBox:MicroMsg.JsValidationInjector hy: file game.js inject success! cost:86stack:


HookBox:MicroMsg.JsValidationInjector hy: file game.js inject success! cost:86stack:
2024-07-01 15:02:47.527 17180-17841 LSPosed-Bridge          com.tencent.mm                     I

风生·水起 发表于 2024-7-26 17:13

l_user 发表于 2024-7-26 17:06
啥游戏,发我看一下,另外我不是大佬

我只是举个例子,如果能找到注入点这个就是通用的。微信里的小游戏核心代码全部都是game.js里。就像这个是之前跳一跳分数加倍的hook,现在已经没用了:   if (loadPackageParam.packageName.equals("com.tencent.mm")) {

       Class <?> cljump = XposedHelpers.findClass("com.tencent.mm.plugin.appbrand.appcache.ai", loadPackageParam.classLoader);

       XposedBridge.hookAllMethods(cljump, "a", new XC_MethodHook() { // from class: top.chaego.wejumpp.main.2

         protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param)throws Throwable {}

         protected void afterHookedMethod(XC_MethodHook.MethodHookParam param)throws Throwable {

               String retStr;

               main.this.getKey();

               if (param.args.length >= 2) {

                   String arg = (String)param.args;

                   if (arg == "game.js") {

                     String result = (String)param.getResult();

                     if (main.kaiguan) {

                           retStr = result.replace("this.score+=t", "this.score+=t+=" + main.mag);

                     } else {

                           retStr = result;

                     }

                     param.setResult(retStr);

                   }

               }

         }

       });

   }

   }

l_user 发表于 2024-7-26 16:23

为啥我插入的链接没了,大佬的思路在这里 https://www.52pojie.cn/thread-1764292-1-1.html

风生·水起 发表于 2024-7-26 16:34

能不能实现修改小游戏的js数据?之前可以,新版的微信我研究了很久没有找到。

l_user 发表于 2024-7-26 16:36

风生·水起 发表于 2024-7-26 16:34
能不能实现修改小游戏的js数据?之前可以,新版的微信我研究了很久没有找到。

为啥会找不到,抓包抓的到数据么

风生·水起 发表于 2024-7-26 16:38

l_user 发表于 2024-7-26 16:36
为啥会找不到,抓包抓的到数据么

那个js数据是小游戏的包里面的 好像没有通过网络请求来获取这个js

l_user 发表于 2024-7-26 16:40

风生·水起 发表于 2024-7-26 16:38
那个js数据是小游戏的包里面的 好像没有通过网络请求来获取这个js

直接把小程序反编译了看看,普通抓包抓不到的,试一下抓云函数

风生·水起 发表于 2024-7-26 16:53

l_user 发表于 2024-7-26 16:40
直接把小程序反编译了看看,普通抓包抓不到的,试一下抓云函数

反编译肯定能看到,我是想hook修改他的js实现作弊。就像之前跳一跳辅助线的Xposed模块

l_user 发表于 2024-7-26 16:58

风生·水起 发表于 2024-7-26 16:53
反编译肯定能看到,我是想hook修改他的js实现作弊。就像之前跳一跳辅助线的Xposed模块

那可以直接用frida来hook这个js

风生·水起 发表于 2024-7-26 17:05

l_user 发表于 2024-7-26 16:58
那可以直接用frida来hook这个js

很多小游戏改一行代码就能作弊,比如说开间小店
修改game.js里的this._HasBuyMonthCard = true
这样就能实现本地月卡用很多VIP功能。
在电脑上可以开devtools来改,手机上hook修改js文件要找到他加载js的地方,我找了很久没找到注入点。
页: [1] 2 3 4
查看完整版本: Frida实现对VX小程序的抓包