PC微信hook登录二维码
学了一点hook,那么就取一下64位微信的登录二维码,练练手。打开微信,截图看一下二维码地址的构造,它是这样的**http://weixin.qq.com/x/字符串**,那可以直接用CE搜一下对应的字符串,结果字符串是搜到了,但是CE中的地址和x64dbg看到的地址却不一样,搞了半天没有搞明白,求大佬指点一下。
CE不行的话,那就上IDA,搜一下二维码相关的字符串,比如QrCode,成功搜到了这样的字符串**NetSceneCheckLoginQRCode**,这一看就是跟二维码相关了。大概的看一下伪代码,很好,看不懂。
把里面相关的函数挨个看了一下,发现了这样一个方法,很像构造那个字符串的
```
__int64 *__fastcall sub_1823B7730(__int64 a1, __int64 *a2)
{
__int64 *result; // rax
__int64 v5; // r8
*(a1 + 44) |= 4u;
result = *(a1 + 24);
if ( result == &qword_1856C45D8 )
{
result = sub_1843555C8(32i64);
*result = 0i64;
result = 0i64;
result = 15i64;
*(a1 + 24) = result;
}
if ( result != a2 )
{
v5 = a2;
if ( a2 >= 0x10 )
a2 = *a2;
result = sub_181B3BBE0(result, a2, v5);
}
return result;
}
```
frida启动,尝试打印一下数据
```
var targetOffset = 0x23b7730;
var baseAddress = Module.findBaseAddress("WeChatWin.dll");
var targetAddress = baseAddress.add(targetOffset);
if (targetAddress) {
Interceptor.attach(targetAddress, {
onEnter: function (args) {
this.a1 = args;
this.a2 = args;
console.log("a2 address:", this.a2);
try {
// 读取 a2 指向的数据内容
var dataPtr = Memory.readPointer(this.a2);
if (!dataPtr.isNull()) {
var dataContent = Memory.readByteArray(dataPtr, 24);
console.log("Data content at a2:", dataContent);
var dataStr = String.fromCharCode.apply(null, new Uint8Array(dataContent));
console.log("Data content at a2 (as string):", dataStr);
} else {
console.log("a2 pointer is null, no data to read.");
}
} catch (e) {
console.error("Error reading data at a2:", e);
}
},
onLeave: function (retval) {
console.log("sub_1823B7730 returned:", retval);
console.log("---- Interception Complete ----\n");
},
});
} else {
console.error("Function address not found!");
}
```
果然这里会被定时调用,那这样就是找到了二维码字符串的地址了,由于它是由参数得到的,没法直接基址+偏移的方式获取,那我们就hook这个方法。
根据frida,c++核心代码如下:
```
static void LoginQr(__int64 a1, __int64* a2) {
if (a2 && a2) {// 增加空指针检查
char* dataPtr = reinterpret_cast<char*>(a2);
std::string loginUrl(dataPtr, 22); //读取内容
LOG_INFO("Login QR Code URL: {}", loginUrl);
{
std::lock_guard<std::mutex> lock(gQrCodeMutex);
gLoginQrCodeUrl = "http://weixin.qq.com/x/" + loginUrl;// 更新二维码 URL
}
gQrCodeCv.notify_all(); // 通知等待的线程
}
realLoginQr(a1, a2);
}
```
这样就成功通过hook拿到了微信的登录二维码了。 电脑端恢复记录到手机,需要主设备先登录,平板端是不能扫码登录的,
既然楼主都hook到了,不知道楼主有没有想到借此解决掉平板(副设备)不能扫码登录的问题,直接恢复 这样拿到了有什么用 是不是要做微信自动发卡 方便谢谢分享咯 谢谢分享 vscos 发表于 2024-11-9 05:47
这样拿到了有什么用
人家是在讲技术,不是给你讲有没有用。
有了这个方法,可以去拿别的东西啊。
牛逼啊111 厉害了,学习一下 厉害,作者牛逼
页:
[1]
2