2021-06-12 11:32:50
12 06 2021
摘要:使用od和ce寻找pc端微信接收消息的call

CSDN浏览器插件

  登录

微信PC Hook - 接收文本消息 原创

2020-02-17 17:33:06

 2点赞

 

ZHX0AN 

 

码龄3年

 

关注

一、系统环境

使用到的软件:

 

Parallels虚拟机

Windows 10系统

Visual studio 2019

Cheat Engine

Ollydbg 51破解版

微信版本:3.1.0.67

二、CE附加微信

给微信发消息11111111,CE扫描中11111111。

在这里插入图片描述

发送aaaaaaaa,变成aaaaaaaa的地址是我们要找的。修改type长度为100,再次发送cccccccc,含有<msgsource>是我们要找的地址,记录地址05D06E26。

在这里插入图片描述

三、OD获取内容

打开OD,因为每次内容会改变,所以使用dd 05D06E26下内存写入的断点。

发送一条消息,程序中断,堆栈窗口往下翻,看到“lass SyncMgr”,消息同步。

在这里插入图片描述

53524AAB中右键【反汇编窗口跟随】,函数位置下断点

在这里插入图片描述

 

删除内存写入断点,放程序执行完。

再发一条消息,程序断下来。查看寄存器的值。

dd esp的值:

在这里插入图片描述

dd [[esp]],往下翻能看到消息内容。

在这里插入图片描述

 

获取消息的偏移地址:

 

消息类型

$+30 >00000001

消息发送者:[[esp]] + 40

113F57F8 12081648 UNICODE "wxid_4j4mqsuzdgie22"

消息:[[esp]] + 68

113F5820 11EC4C50 UNICODE "123456789"

[[esp]] + 178

113F58E0 12081878 UNICODE "4a41e2c81b8aa6ac942f50d24eb2fd06"

[[esp]] + 1b8

113F5920 11EC48C0 UNICODE "<msgsource />\n"

发送一条群消息,获取群消息的偏移地址:

 

消息类型

$+30 >00000001

消息接收者:[[esp]] + 40

$+40 >0480E0E8 UNICODE "24377562166@chatroom"

消息:[[esp]] + 68

$+68 >0BE25220 UNICODE "@小助手 00000000"

发送者:[[esp]] + 164

$+164 >0BE24DD0 UNICODE "wxid_4j4mqsuzdgie22"

$+178 >0D2F3D40 UNICODE "e8f16db681840089c227bef5239b0832"

at微信号:[[esp]] + 1B8

$+1B8 >0D5BA348 UNICODE "<msgsource>\n\t<atuserlist>wxid_4sy2barbyny712</atus"

 

代码实现

这儿我选择79F1D505作为hook地址,79F1D50B作为返回地址。

 

//hook地址

79F1D505 B9 503C3F7B mov ecx,WeChatWi.7B3F3C50

79F1D50A 57 push edi

//返回地址

79F1D50B FF50 08 call dword ptr ds:[eax+0x8]

 

核心代码

hook函数:

 

//组装跳转数据

BYTE jmpCode[5] = { 0 };

jmpCode[0] = 0xE9;

 

//新跳转指令中的数据=跳转的地址-原地址(HOOK的地址)-跳转指令的长度

*(DWORD*)&jmpCode[1] = (DWORD)RecieveMsgHook - hookAddress - 5;

 

//覆盖指令 B9 503C3F7B

WriteProcessMemory(GetCurrentProcess(), (LPVOID)hookAddress, jmpCode, 5, 0);

 

RecieveMsg函数:

 

DWORD** msgAddress = (DWORD**)r_esp;

//消息类型[[esp]]+0x30

DWORD msgType = *((DWORD*)(**msgAddress + msgTypeOffset));

...

在这里插入图片描述

延伸阅读
  1. 上一篇:JDK
  2. 下一篇:Nginx
发表评论