处女作,有写错的地方,请各路大佬明确指出。

逆向分析方法:

WeChatWin模块基址:0x5CD60000

a、不停的向测试号发送消息,不要点开,让未读消息总数不断增加(此方法比搜特征码、字符串更通用,所有版本都可以用这个方法快速定位);

b、

        1⃣️、在ce里面首次搜索《未知的初始值》、发送消息、接着再搜索《增加的数值》

        2⃣️、点一下微信界面或者拖动一下微信界面、搜《未变动的数值》

        1⃣️和2⃣️结合使用。

c、不停过滤之后,只剩几条稳定的数据,在od里面下内存写入断点,此时断在此处:

5D78A8EF    8943 30         mov dword ptr ds:[ebx+0x30],eax                             ; 未读消息总数-内存写入断点

d、看数据窗口,可以看到这样的数据结构:

16CC09D0  5F73C350  WeChatWi.5F73C350

16CC09D4  00000000

16CC09D8  170A82B8  UNICODE "wxid_8v3brokcw。。。。"

16CC09DC  00000013

16CC09E0  00000013

16CC09E4  00000000

16CC09E8  00000000

16CC09EC  16F92CD8  UNICODE "微信昵称"

16CC09F0  00000005

16CC09F4  00000005

16CC09F8  00000000

16CC09FC  00000000

16CC0A00  00000001

16CC0A04  00000000

16CC0A08  00000000                 此处为收发标记:1=自己发送的,0=收到消息

16CC0A0C  64364FD1  PicFace.64364FD1

16CC0A10  03146B18  UNICODE "想日啥想日在新"

16CC0A14  00000007

16CC0A18  00000007å…………

16CC0A1C  00000000

e、根据以往的经验,直接搜汇编指令:

mov dword ptr ds:[esi],0x5F73C350

  定位到收消息内存分配的地方:

5D650035    8D8E D8000000   lea ecx,dword ptr ds:[esi+0xD8]

5D65003B    C706 50C3735F   mov dword ptr ds:[esi],WeChatWi.5F73C350

5D650041    E8 DA040000     call WeChatWi.5D650520                                      ; 收消息调用malloc内存分配

但从相关字符串和行为来看,此处其实是内存释放,底层调用了free函数,所以走到此处的时候就填充了完整的消息结构

换不同的寄存器分别搜一遍(除了ebp、esp没必要搜):

        mov dword ptr ds:[寄存器],0x5F73C350                

收消息真正内存分配位置:

5D6505AE    C707 50C3735F   mov dword ptr ds:[edi],WeChatWi.5F73C350

2、收消息最佳hook位置:

5DA4D0D7    E8 04500000     call WeChatWi.5DA520E0                                      ; 收消息hook这里

消息存储在局部变量:EBP-0x408的位置

相关附图:

 

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐