首页
社区
课程
招聘
[原创]PCXX逆向:实现自动添加好友分享名片
发表于: 2019-7-26 19:49 8102

[原创]PCXX逆向:实现自动添加好友分享名片

2019-7-26 19:49
8102

在我的成品WeChatRobot里面实现了四个自动系列的功能,自动添加好友分享名片,自动收款,自动同意好友请求,还有自动聊天。今天分享一下如何实现自动添加好友分享名片。其他的三个功能思路大致相同。

想要实现自动添加好友分享的名片的功能,首先需要找到加好友的call,分析加好友需要用到哪些参数,然后在接收到好友名片推送的时候,取出这些参数,调用加好友的call。这样就能实现自动添加好友分享的名片了

首先思考一下一个加好友函数背后的编程逻辑,肯定是需要传入两个参数,第一个参数是需要添加好友的微信ID,第二个参数是加好友时发送给对方的消息。当我们点击发送朋友验证时,就会调用这个加人的call。

那么我们就可以从需要添加的好友的微信ID入手,先在当前窗口找到添加好友时用到的那个微信ID,然后通过对微信ID下内存访问断点,点击发送朋友验证,触发断点,再通过栈回溯,从而找到加人的call。

首先用CE搜索已删除好友的微信ID,将所有地址添加到下方地址栏

接着点击添加发送朋友验证,你会发现这是CE的结果有变化。这是因为当我们点击的时候,客户端会拿到我们当前点击的微信ID,然后放到一个变量里面,将这个变量作为参数传入到函数中。所以我们点击之后搜索的结果一定会有这个变量,接下来我们要做的就是找到这个变量。

那么怎么找到这个变量呢?通过下方地址栏的点击之前的数据和现在搜索结果中的点击之后的数据进行对比,就能找到作为参数传入到加人call里面的微信ID。

通过这个在线的文本对比的网站http://www.jq22.com/textDifference,放入点击前和点击之后的数据(A是点击前,B是点击后),就能筛选出两组数据中不同的地方。我们需要找到点击后的数据中有的地址,点击前的数据中没有的地址。

我这里找到了两处点击后不同的地址,接着我们直接在CE中搜索这两个地址,看看有哪些地址保存有这两个地址

从搜索结果中可以看到第一个地址已经变成了其他字符串,而第二个地址已经被一个指针保存,所以可以确定这个地址就是我们要的传入加人call的微信ID的地址。哈哈,这一步需要有点耐心,我也是找了好几次才找到。

使用OD附加微信,在找到的微信ID地址下内存访问断点,接着点击确定,此时断点断下,删除内存访问断点

这里我们看到在堆栈中的第二个返回地址中传入了要添加的好友的微信ID,那么这里就非常有可能是我们要找的加人的call

我们在这里下一个断点,然后F9运行,让程序再次断在这个位置

此时我们修改这个微信ID,如果此时被添加的微信没有收到加好友消息的话,那么就说明这个call就是我们需要的call


F9运行,此时显示由于对方隐私设置,你无法将其添加至通讯录,说明这个call就是我们要找的加好友的call了

接下来分析一下加好友的call的参数

ebx指向的是微信ID的结构体,这个结构体是有五个成员的

中间的这一句汇编指令mov dword ptr ss:[ebp-0xE0],esp经过测试可以不需要写。

然后这一句将0xFFFFFFFF压入了堆栈,也就是-1。但是我们在这个call所在的寄存器并没有找到加好友时发送的消息。这个结构体是必须要找到的,所以我们继续分析它上面一个call

上面一个call传入的是消息内容,并没有拿到消息的结构体,所以我们继续再分析这个call上面的一个call

单步步过这个函数,这里push了一个6,这个参数是代表添加的渠道,群外加好友是6,群内加好友的E,名片推送是0x11

另外,这个call写代码调用的时候会比较麻烦,需要同时调用6个call,6个call里面少了任何一个微信都会奔溃

微信添加好友名片的call和加好友用的是同一个call,区别只有两点。我们点击添加一个好友分享的名片,让程序断下。

这个地方传入的是0x11而不再是6


这个地方传入的是V1结构体 而不再是微信ID的结构体。而V1的结构体我们可以在收到名片推送消息的时候,从消息结构体中获取。

加好友的call我们已经找到了,而且也已经知道需要传入哪些数据,那么下一步就是去接收名片消息的地方,去拿到这些数据。

直接来到接收消息的地方,至于怎么找到接收消息的call,请看我上一篇文章

https://blog.csdn.net/qq_38474570/article/details/93339861

这里直接给出偏移2.6.8.52版本的接收消息的偏移是0x315E98

直接来到接收消息的地方,在这里下断点,然后用小号分享一个名片,让程序断下

程序断下后,我们查看[[esp]]里面的内容,这里面保存了接收到的消息参数,往下拉

这里有消息发送者的微信ID和xml格式的消息内容

数据窗口跟随进去,里面有我们需要的V1数据,至于其他的数据我们并不关心。OK,分析到这里,自动添加好友分享的名片基本也就完成了。接下来贴代码

第一步 取出V1数据 我这里用的是字符串查找和匹配的方法,你们可以xml解析库来解析数据

第二步 调用call添加好友

首先在好友消息的时候保存一下好友的微信ID,然后调用获取到好友的消息内容,并且将消息内容转发给图灵机器人的公众号

接着拿到图灵机器人回复的内容,将内容转发给好友

这样就实现了自动聊天

我们在接收消息的地方下个断点,让好友发送请求时断下,并且查看[[esp]]里的消息内容

这里保存有两个重要的数据,一个是V1,一个是V2,我们只要在这个地方取出V1和V2,然后调用同意好友请求的call,就能实现自动同意好友请求

同意好友请求的call,我这里直接给出偏移 微信2.6.8.52版本

这里需要同时调用4个call,接着附上代码

同样在接收消息的地方下个断点,接收转账消息,并且查看[[esp]]里的消息内容

这里重要的数据只有一个,就是这个transferid,拿到这个转账ID和微信ID,然后调用收款的call,就能实现自动收款了

这里提供收款call的偏移,微信2.6.8.52版本

接着附上代码

最后附上Github地址,还请亲们帮忙点个star

https://github.com/TonyChen56/WeChatRobot

 
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-7-26 19:49 被鬼手56编辑 ,原因:
收藏
免费 6
支持
分享
打赏 + 15.00雪花
打赏次数 6 雪花 + 15.00
 
赞赏  mb_ovrzbwwl   +1.00 2019/08/03
赞赏  mb_ovrzbwwl   +1.00 2019/08/03 有事找你,看能不能帮忙解决下,如果有时间可以加Q7620971!~~
赞赏  mb_ovrzbwwl   +1.00 2019/08/03 有事找你,看能不能帮忙解决下,如果有时间可以加Q7620971!~~
赞赏  mb_ovrzbwwl   +1.00 2019/08/03 有事找你,看能不能帮忙解决下,如果有时间可以加Q7620971!~~
赞赏  mb_ovrzbwwl   +1.00 2019/08/03 有事找你,看能不能帮忙解决下,如果有时间可以加Q7620971!~~
赞赏  mb_ovrzbwwl   +10.00 2019/08/03 有事找你,看能不能帮忙解决下,如果有时间可以加Q7620971!~~
最新回复 (7)
雪    币: 161
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
羡慕会找call的大佬
2019-7-26 21:21
0
雪    币: 10969
活跃值: (4607)
能力值: ( LV12,RANK:404 )
在线值:
发帖
回帖
粉丝
3
膜拜大佬
2019-7-27 08:34
0
雪    币: 33
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
有没有批量群发 A微信号里“所有好友名片”给B微信功能啊
2019-8-3 21:39
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

这个方法台牛笔了,都不用脱壳,直接搞起来。
2019-8-7 19:30
0
游客
登录 | 注册 方可回帖
返回
//