吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6826|回复: 26
收起左侧

[原创] Windows逆向分析入门(九)——实战篇(内存直接读取通讯录)

  [复制链接]
KongKong20 发表于 2020-6-27 19:34

前言

上一篇,聊到函数的调用关系是一条线的。这一篇,聊下函数的调用关系是分叉的,应该怎么分析。目的是内存直接读取通讯录。

分析

通讯录,是数据。

全局数据直接读取,局部数据间接拦截。

通讯录要经常用到,写成全局数据,方便读取。

看着和个人信息一样,是全局数据,内存里直接搜索。

但用什么搜索呢?并没有一个明确的数据可以代表通讯录。

一般说,通讯录里面有很多好友信息,要获取某个好友信息,在里面搜索。

也就是说,通讯录可以是一个数组,链表,或者一棵树,而这个集合的开头写成全局数据。

切入点

从获取某个好友的信息入手。

要获取某个好友信息,得在通讯录里面搜索。

顺藤摸瓜,知道获取单个人的信息,就知道通讯录的了。

依然是从日志入手,看下有什么线索。

日志

和上一篇一样,注入打开日志模块的插件,点击通讯录某个好友,看看日志有什么。

有一个字符串:NetSceneBatchGetContact,表示通过网络获取联系人的信息。

对字符串进行下断点:NetSceneBatchGetContact

图片1.png

点击通讯录某个好友的头像,触发到断点

图片2.png

堆栈往下翻,发现这里已经有好友的多个信息

图片3.png

已经有信息,还需要网络获取,意味着本地存储了一些基本信息,然后还需要去网络获取。

可以猜测,WX获取好友信息的函数大概是

获取好友信息(参数:好友ID)

函数:获取好友本地信息

如果消息不全

    函数:通过网络获取

而我们现在断点到的是:通过网络获取,要找的函数是:获取好友本地信息。也就是遇到的是分叉情况,获取好友本地信息这个函数不在堆栈里面。

所以要回到分叉点,也就是已经有基本信息的函数里面,从函数头开始分析。

分析

1、返回分叉的地方(已经有好友的基本信息)

图片4.png

2、往上翻翻代码,到函数的头部,定下断点

图片27.png

前两个函数都没有wxid,直到第三个才有

图片28.png

但这个函数里面只是对数据处理,没有调用别的函数,排除掉

图片29.png

接下来的两个函数和刚才的一样,也排除掉

图片30.png

接下来的函数还是没有微信ID,到了第二个才有。

图片31.png

3、F7进入函数,F8单步执行,到这个函数,才有微信ID

图片32.png

函数里面是拿到一个写死的全局变量 0x10995060

图片33.png

执行结果eax,又给下一个函数使用:mov ecx,eax

图片34.png

4、跟踪进去下一个函数,里面有很多字符串和jnz,这里应该是对微信ID的过滤

跳过字符串,到这个函数又有微信ID,但执行完这个函数,只是把微信ID传入堆栈。

图片35.png

5、继续F7进入下一个的函数,到这里又有微信ID

图片36.png

6、再进入这个函数,注意这里有个je是向上的,意味着是一个循环

图片37.png

单步进行分析,确实是在对通讯录进行遍历,并且通讯录是一个先序排列的二叉树。

图片38.png

在前面有一个全局变量,跟踪这个数据的传递过程

(中间重启过,基址变了,全局变量不一样)

5A279D03    A1 6050615B     mov eax,dword ptr ds:[0x5B615060]

5A279D08    83C0 28         add eax,0x28

5A22E5FD    8BC8            mov ecx,eax

5A4026AB    8BD9            mov ebx,ecx

5A40276C    8BCB            mov ecx,ebx

5A400E87    8BF1            mov esi,ecx

5A400EAE    8D9E 84000000   lea ebx,dword ptr ds:[esi+0x84]

5A400EB5    8BCB            mov ecx,ebx

59FB2584    8B19            mov ebx,dword ptr ds:[ecx]               ; WeChatWi.5B3B4994

59FB2587    8B73 04         mov esi,dword ptr ds:[ebx+0x4]

通讯录第一个节点 = [[[0x5B615060] + 0x28+0x84]+0x4]

左节点:mov esi,dword ptr ds:[esi]

右节点:mov esi,dword ptr ds:[esi+0x8]

节点是否有效:cmp byte ptr ds:[esi+0xD],0x0

算偏移

基址:59F60000

Executable modules, 条目 7

基址=59F60000

大小=01946000 (26501120.)

入口=5ACB4A63 WeChatWi.<ModuleEntryPoint>

名称=WeChatWi

文件版本=2.9.0.123

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

偏移 =  内存地址 - 基址

通讯录偏移:5B615060 - 59F60000 = 16B5060

代码

图片39.png

图片40.png

图片41.png

免费评分

参与人数 14吾爱币 +13 热心值 +12 收起 理由
z122944290 + 1 + 1 谢谢@Thanks!
17616 + 1 + 1 谢谢@Thanks!
19936040638 + 1 + 1 热心回复!
huangyiyi + 1 + 1 值得学习
gaoyong0713 + 1 我很赞同!
氦气球04 + 1 + 1 我很赞同!
jeanytonic + 1 + 1 非常全面~谢谢分享~
plasd + 1 用心讨论,共获提升!
jFae + 1 用心讨论,共获提升!
macolma + 1 谢谢@Thanks!
sunnylds7 + 1 + 1 热心回复!
我的爱是你 + 2 + 1 谢谢@Thanks!
ciker_li + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!

查看全部评分

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

majia4075669072 发表于 2020-6-29 00:10
这个厉害,话说WeChat桌面端是Electron写的吧,一般搞WeChat都是从H5入手,这个直接上汇编了,厉害。
 楼主| KongKong20 发表于 2020-6-30 12:26
majia4075669072 发表于 2020-6-29 00:10
这个厉害,话说WeChat桌面端是Electron写的吧,一般搞WeChat都是从H5入手,这个直接上汇编了,厉害。

是duilib 前面的文章有针对duilib分析
ciker_li 发表于 2020-6-27 19:59
ololay 发表于 2020-6-27 23:00
厉害,学习了
sym945 发表于 2020-6-28 08:03
厉害 学习了
OO2OO 发表于 2020-6-28 08:07
感谢楼主分享
shaunkelly 发表于 2020-6-28 12:24
你这个算不算侵犯别人的隐私呢?
longggggg_2000 发表于 2020-6-28 13:23
厉害 学习了
plasd 发表于 2020-6-28 13:28
学习学习
ptmaliang 发表于 2020-6-28 13:51
厉害,学习了
meeokl 发表于 2020-6-28 22:32
厉害啊,还能这么弄
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-27 00:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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