因为之前用各种抓包软件都没有抓到过小程序的数据包,于是就尝试一下用frida获取vx小程序的包。下面进入正题,感谢这位大佬提供的思路
1. 首先用Jadx打开微信安装包,搜索字符串createRequestTask,这样可以找到两个类,分别用于创建同步任务和异步任务。
C76AD273-6ABF-40df-B0B3-5717C44BF2CE.png (36.25 KB, 下载次数: 3)
下载附件
2024-7-25 23:15 上传
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的,那实际的拿到发送数据的代码就是这样的:
[JavaScript] 纯文本查看 复制代码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。