我们先用CE 附加一下微信 然后使用另外一个微信号 给这个微信发一条消息 然后搜索一下消息内容

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

 

我这里搜索完还有15条 这对我们分析来说 还是太多了

我们再发送一条 看下哪些地址的数据变化了

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

 

可以看到 我这边 只有3个地址有包含我们第二次的信息 我们把他们添加到下面地址框 并对他们进行类型的修改

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

 

 

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

改完 可以看到 第三条消息明显有其他的内容

虽然没有我们要的wxid

但是 我们可以用CE 的 内存查看

看下这块内存附加都有什么数据

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

 

这里可以看到

这里有我们要的wxid

我们打开OD 附加微信

到个内存地址进行一下内存写入断点

看看是那个call 修改了这块地址的内容

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

 

附加微信后

在我标识这个地方

输入 dd 你找到的那个内存地址

比如我这里是 145EF526

那我就dd 145EF526 然后回车

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

然后下一个内存写入断点

然后点击左上角的运行 放过去

再用另外一个微信 给这个微信发一条消息

发完消息 如果不出意外 OD 已经断下来了

我们先取消刚刚设置的内存写入断点

 

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

接下来我们来看看 右边的堆栈界面

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

这里可以看到出现了很多 返回到 WeChatWi.xxxx 这样的函数返回

我们要做的 就是从上往下 都追进去看一下

看看有没有我们需要的内容

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

 

第一个call 看起来像是一个赋值的操作 像这种 我们基本上就可以略过了

我们一个一个往下慢慢看

根据我抓了几次的经验来看

前面 10个左右的call 基本都可以忽略掉 基本都是一些赋值 操作

 

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

最后 我是看了 15,6个 返回 找到了一个最接近的

这里根据注释 不难理解 聊天信息的存储库

那么 这里 肯定就已经是拿到了我们要的内容了

然后才开始入库 我们往上翻 找到这个函数的入口

Push ebp;

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

 

我们在函数头 下一个断点

然后点击运行发放过这条消息

再用另外一个微信号 给这个微信发一条消息

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

OD 会在这里断下来

我们看堆栈界面 这里有一个返回到 WeChatWi.xxxxx

我们回车 追进去 看看适不适合我们下hook

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

看起来也不太适合

我们继续上一步的操作 找到函数头 下断点

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

继续返回上一层

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

作为教程 我也就不找太深了

我们就在这里做讲解吧

我们在call上 下一个断点 然后把刚刚前面几个断点先取消了

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

这里 一共是压入了3个参数

我们在第一个 mov eax,xxxx 这里下一个断点

单步来分析一下 这里面都有什么

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

我们看下ecx 的值

可以右键右上角的寄存器中的 ecx 寄存器

然后 选择数据窗口跟随

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

这里可以看到 ecx 的值是一个 0x0

我们再走一步 继续分析下一个参数

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

这里在压入 eax 之前 eax 的值 + 0x14

我们已经知道 eax 在最开始 就是赋值了 [ebp-0x3c]

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

我们来看下 他这里面到底放了什么东西

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

这里指向了一个内存地址

我们在追进去看下

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

可以看到 还是一个内存指针

继续追进去

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

这里 已经有我们的wxid 发的内容 这些消息了 也就是说 压入的这个参数 就是 我们微信消息的结构体

eax 这个地址怎么来呢

78A0A55D 8B45 C4 mov eax,dword ptr ss:[ebp-0x3C] ; eax 赋值 [ebp-0x3c]

78A0A564 83C0 14 add eax,0x14

也就是

消息结构体内存地址 = [[ebp + 0x3c] + 0x14]

我们继续看 下一个参数是什么

PC微信 3.0.0.47 分析并HOOK 接收消息CALL (1)

由于我们是在写入库的上一层做的分析 第三个参数这里是一个数据库文件名字

这个我们可以不用管它 毕竟我们用不到她

我们现在记录下 微信模块WeChatWin.dll的基址 等会我们拿数据 得用这个来计算偏移量

Executable modules, 条目 11

基址=786A0000

大小=01B0C000 (28360704.)

入口=79514DAC WeChatWi.<ModuleEntryPoint>

名称=WeChatWi

文件版本=3.0.0.47

路径=C:\Program Files (x86)\Tencent\WeChat\WeChatWin.dll

 

我们吧这个call 也记录下来

78A0A570 E8 4B020000 call WeChatWi.78A0A7C0

 

基本上 到这里 就已经是拿到了我们要的call的地址 已经 知道我们要的消息结构体的内存地址计算方式了 下一个文章,我将给大家演示一下 如何通过我们这些已有的内存地址 来 hook 出我们要的东西

未完待续....

如果有什么不懂的,可以联系我QQ:3195774121

相关文章:

  • 2022-01-07
  • 2022-01-10
  • 2021-11-30
  • 2021-06-06
  • 2021-12-20
  • 2021-10-02
  • 2021-12-21
  • 2021-12-01
猜你喜欢
  • 2021-12-14
  • 2022-12-23
  • 2022-01-07
  • 2022-01-15
  • 2021-06-18
  • 2022-12-23
  • 2021-10-03
相关资源
相似解决方案