吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5874|回复: 11
收起左侧

[原创] Windows逆向分析入门(八)——实战篇(收发文本消息)

[复制链接]
KongKong20 发表于 2020-6-27 18:56
本帖最后由 KongKong20 于 2020-6-27 19:00 编辑

前言

这一篇,用到找偏移的第三个方法:日志;第四个方法:字符串;第五个方法:系统函数;第六个方法:第三方库。目标是收发文本消息。

一、发送消息

分析

1、发送信息的一般流程

1、界面上编辑消息

2、点击发送按钮

3、消息存入数据库

4、通过网络发送出去

2、可以切入的点

1、界面

2、数据库

3、网络发送函数

3、入手方式

界面入手,得跟踪Duilib的响应过程

数据库入手,得监听数据库Sqlite的函数 

网络函数入手,数据依据加密了,难识别出来 

数据从产生到发送,中间会有比较长的过程。

看下日志有没有可以参考的信息。

Xlog

WX的日志模块是第三方库:Xlog。

关于Xlog的介绍和分析,后续会分享了《微信日志Xlog分析——带源码》。

注入打开日志的dll

图片1.png

随便操作界面,就有日志输出

图片2.png

发送一个文本信息

日志看到了关键词On MsgAdd PrefixId,和 sendTextMsg。

图片3.png

用OD搜索字符串,发现没有sendTextMsg,但是有On MsgAdd PrefixId,进行断点。

图片4.png

触发断点

函数调用的关系有两种

1、函数A调用函数B,函数B调用函数C(一条线)

2、函数A调用函数B,函数A调用函数C(分叉开)

点击发送按钮,WX会收到操作信息,部分信息给Duilib处理,部分信息给系统自带的函数处理:ntdll.NtdllDefWindowProc_W。

堆栈里面往下翻,发现有这个函数。意味着这个断点的位置,和发送消息函数的调用的关系是一条线的。也就是说,在堆栈就能找到发送消息的函数。

图片5.png

找函数

问题来了,堆栈这么多函数,到底哪一个呢?

一般发送消息函数的格式是:发送消息函数(参数:接收人,参数:发送的消息)

函数的调用约定有多种情况 fastcall stdcall cdecl thiscall。

这就意味这发送消息函数至少需要两个参数.

但不一定都在堆栈,可能在ecx或者edx。

从断点往回找,看有没有满足条件的。

第一个函数,堆栈没有关键的参数,函数也没用到ecx和edx,排除。

图片6.png

第二个函数,堆栈有发送的消息;两个参数,其中一个是0,函数也没用到ecx和edx,排除

图片7.png

第三个函数,堆栈有接收人;三个参数,没有发送的消息,函数也没用到ecx和edx,排除

图片8.png

第四个函数,堆栈有发送的消息;用到ecx和edx,加上3个push,总共五个参数,断点看下

图片9.png

可以看到这里的参数是齐全的。

图片10.png

但是参数1未知,[ebp-0x738]是函数内一个变量,清空后发现能发送信息,可以直接伪造

图片11.png

修改发送的内容,验证下

1、发送老的信息 oldmsg

图片12.png

2、od里看下拦截的数据也是oldmsg

图片13.png

3、修改成newmsg

图片14.png

4、最终发送的是newmsg,这里就是我们要找的发送信息函数

图片15.png

算偏移

基址 :5A090000

Executable modules, 条目 8

基址=5A090000

大小=01946000 (26501120.)

入口=5ADE4A63 WeChatWi.<ModuleEntryPoint>

名称=WeChatWi

文件版本=2.9.0.123

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

源码

5A17CA91    6A 01        push 0x1                                 ; 参数5:1

5A17CA93    8D43 34    lea eax,dword ptr ds:[ebx+0x34]

5A17CA96    50              push eax                                 ; 参数4:空结构

5A17CA97    53              push ebx                                 ; 参数3:发送的消息

5A17CA98    8D55 9C         lea edx,dword ptr ss:[ebp-0x64]              ; 参数2:接收人

5A17CA9B    8D8D C8F8FFFF   lea ecx,dword ptr ss:[ebp-0x738]    ; 参数1:未知 可置空

5A17CAA1    E8 AAFF2500     call WeChatWi.5A3DCA50                 ; 发送文本消息函数

5A17CAA6    83C4 0C         add esp,0xC                                            ;平衡堆栈用

参数

eax

13EF5AA8  00000000

13EF5AAC  00000000

13EF5AB0  00000000

13EF5AB4  00000000

ebx

13EF5A74  13FB51E0  UNICODE "发送文本消息"

13EF5A78  00000006

13EF5A7C  00000008

13EF5A80  00000000

13EF5A84  00000000

ecx

空buffer:char buffer[0x738] = {0};

edx

0096EF00  13CA0610  UNICODE "filehelper"

0096EF04  0000000A

0096EF08  00000010

0096EF0C  00000000

0096EF10  00000000

偏移 = 内存地址 - 基址

发送文本消息函数 5A3DCA50 - 5A090000 = 34CA50

写代码

参数结构

图片16.png

构造参数

图片17.png

调用函数

图片18.png

二、接收消息

当WX收到消息时,也会在On MsgAdd PrefixId处触发断点。

图片19.png

跳转到ebp(ebp相对比较稳定)

图片20.png

双击ebp所在的行,地址这一列显示的是相对地址。

发送者 : ebp-0x220

$-220    > 13BD3EC0  UNICODE "filehelper"

发送的消息:ebp -0x1F8

$-1F8    > 13C0C380  UNICODE "手机发送的消息"

HOOK拦截至少需要五个字节,这里刚好五个(68 C0 03 49 5B)

5A3B9743    68 C003495B     push WeChatWi.5B4903C0                   ; UNICODE "On MsgAdd PrefixId : %I64d RealId : %I64d, SvrId :"

算偏移

基址:5A090000

Executable modules, 条目 8

基址=5A090000

大小=01946000 (26501120.)

入口=5ADE4A63 WeChatWi.<ModuleEntryPoint>

名称=WeChatWi

文件版本=2.9.0.123

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

偏移 =  内存地址 - 基址

接收消息hook位置 5A3B9743  - 5A090000 = 329743

被覆盖的数据偏移  5B4903C0 - 5A090000 = 14003C0

写代码

图片21.png

图片26.png

图片22.png

图片23.png

图片25.png

免费评分

参与人数 8吾爱币 +9 热心值 +8 收起 理由
nue12138 + 2 + 1 我很赞同!
psycongroo + 1 + 1 我很赞同!
majia4075669072 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
1008601 + 1 + 1 我很赞同!
howsk + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
sunnylds7 + 1 + 1 热心回复!
hor5 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| KongKong20 发表于 2020-6-30 20:22
subtlelonging 发表于 2020-6-30 20:20
注入打开日志的dll
你好SOD注入的是那个dll

这个还没整理,可以先研究xlog,开源的。
 楼主| KongKong20 发表于 2020-6-27 19:46
lxhwan100 发表于 2020-6-27 19:30
很细致啊,感谢分享

小白一路走坑走过来的,自己也希望看到的资料是比较详细点
lxhwan100 发表于 2020-6-27 19:30
zhangjj001 发表于 2020-6-28 08:37
膜拜!!!!!!
雨呱 发表于 2020-6-28 16:40
太厉害了 学习了
J4son 发表于 2020-6-28 17:13
小白入坑,感觉分享!
xiaoyudian 发表于 2020-6-29 11:12
感谢分享,非常详细
asiothor 发表于 2020-6-29 15:08
谢谢分享,高手。我等小白只能仰望。
subtlelonging 发表于 2020-6-30 20:20
注入打开日志的dll
你好SOD注入的是那个dll
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-25 13:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表