吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 34746|回复: 260

[调试逆向] 微信网页版登陆协议详细分析,并检测好友。

    [复制链接]
laodan 发表于 2018-12-9 10:48
本帖最后由 laodan 于 2018-12-9 11:21 编辑

以前写过出来一个软件,但是因为微信的尿性啊,有些重,其他省份使用不了,懒得再改了。所以一直没有发布,今天来仔细分析一波微信网页版的协议。有需求的可以写一下工具。

先放一下我写的成品图。

1234.jpg

微信网页版的协议无外乎和QQ网页版协议差不多,但也有不同之处。QQ的网页协议暂不分析,以前曾经在论坛发布的源码前几天好像失效了,有人想叫我再找找问题,我找出来问题,到时候再修改吧。


协议分析开始。

  • [GET]https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1540887586026


先说一下URL参数,appid不用管。直接带入。redirect_uri返回URL不用管,直接带入。标红的这个字符串,也不用管,就是一个随机数。
GET提交方式之后返回内容:

window.QRLogin.code = 200; window.QRLogin.uuid = "4ZOQ8OfKLQ==";

4ZOQ8OfKLQ==” 此处必须记下来,因为这个是扫码的二维码必须携带的参数,方便下个包的调用。

扫码
  • [GET]https://login.weixin.qq.com/qrcode/4ZOQ8OfKLQ==


标红的地址,为第一个包所得到的参数。

直接进行了提交,然后这个二维码就出现了。

1.jpg

二维码出现之后,那么接下来的操作就是判断扫码状态。

  • [GET]https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=AdHVfxierg==&tip=0&r=1870135597&_=1544318065401


循环响应此包,uuid为第一次发包所得到的UUID。

进行扫码,如果判断扫码成功,登陆成功,那么返回内容:

window.code=200;
window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AdSsiKmYz2u_XBWSMkWskH7y@qrticket_0&uuid=AcLnMRh9GQ==&lang=zh_CN&scan=1544318120";

出现window.redirect_uri 返回的URL,就代表明面上已经登陆成功了,但是你的登陆信息还没有得到。


获得关键信息
  • [GET]https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AdSsiKmYz2u_XBWSMkWskH7y@qrticket_0&uuid=AcLnMRh9GQ==&lang=zh_CN&scan=1544318120



此处请求第三个包所返回的地址,就是登陆成功的地址。在这个地方,得到请求头中的set-cookie和返回中的内容信息才算是真正的登陆成功。

先来看一下返回中的信息:


333.jpg

得到的是一个xml格式的消息,其中<skey><wxsid><wxuin><pass_ticket>保存并记录下来,以便后续包调用。

再来看一下cookie中的消息。


222.jpg

其中比较重要的是webwx_data_ticket=、webwx_auth_ticket=记录下来,以便后续包名发包时带入。

记录下来这些信息之后才算是真正的登陆成功,可以进行一些操作了。

  • [POST]https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=1869988690&pass_ticket=xcWifD9MMB3vKNTM2PBiGWCZhYMhFryW5UK%252BORQTxJwr0spIVaJScdE6W%252BxS59zc


参数中pass_ticket为上一个包所得到的内容,

cookie无需带入。

但是发送的消息如下。

{"BaseRequest":{"Uin":"2402936223","Sid":"mJM+MFX2RoB0og8h","Skey":"@crypt_239b7b7c_03d892405af9080758a6a0e1354abbf9","DeviceID":"e387877040871158"}}
Uin为上一个包得到的wxuin
Sid为上一个包得到的wxsid
Skey为上一个包得到的skey
DeviceID为e+15位的随机数。


响应为自己当前登陆的签名,以及昵称,还有最新聊天的用户,以及微信关注的消息。内容太多就不发了。

但是返回的json数据节点【data.SyncKey.List[0].Key】里面的内容必须记录下来,如果没有这些Key值,消息会发送不出去。标红的0值为递增。

记录Key值
  • [GET]https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?lang=zh_CN&pass_ticket=pass_ticket&r=1540953981074&seq=0&skey=sKey


URL中带入pass_ticket、Skey参数,刚才发的包里面已经得到了。至于r就是一个随机数。

返回关注的微信公众号、以前所有的好友json数据。

到了这个阶段就是开始了重头戏,因为要循环判断消息,确定是否有新的消息,而带入的请求这个key值是必不可少的。

发送Key值
  • [GET]https://webpush.wx.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1540974131329&skey=" & sKey & "&sid=" & sid & "&uin=" & wxuin & "&deviceid=e" & 随机数 & "&synckey=1_KEY1%7C2_KEY2%7C3_KEY3%7C1000_KEY1000&_=1541036165840


这个是初始请求,初始请求需要带入Key值,这个Key值的得到是上上一个包所得到的内容。

Cookie需带入wxuin=、wxsid=、webwx_data_ticket=

在这里需记住,这个是第一次发Key值,如果有新消息的话会自动获取并自动生成一个Key值。

返回的消息:

444.jpg

selector为2,有新的消息,那么接下来请求最新消息,就是得到新的消息。

返回Key值
  • [POST]https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=sid&skey=skey&lang=zh_CN&pass_ticket=pass_ticket


URL中的参数sid为wxsid、skey为skey、pass_ticket为pass_ticket,前面发包已经得到了。

发送

{""BaseRequest"":{""Uin"":" & wxuin & ",""Sid"":""" & wxsid & """,""Skey"":""" & sKey & """,""DeviceID"":""e" & 随机数 & """},""SyncKey"":{""Count"":个数,""List"":[{""Key"":1,""Val"":" & Key1 & "},{""Key"":2,""Val"":" & Key2 & "},{""Key"":3,""Val"":" & Key3 & "},{""Key"":1000,""Val"":" & Key1000 & "}]},""rr"":914483736}

这次的请求有些繁琐,但是也能看得清,这些数据在这之前都已经获得成功了,在这里就不多说了。

uin就是得到的wxuin
Sid就是得到的wxsid
sKey就是得到的skey
DeviceID就是e+15位的随机数。
count就是下面的key有几个key,但是这个时候是不固定的。我就曾经吃过这个地方的亏。
key值就是咱们之前得到的key值。

返回的包如下:
[JavaScript] 纯文本查看 复制代码
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
}
,
"AddMsgCount": 0,
"AddMsgList": [],
"ModContactCount": 0,
"ModContactList": [],
"DelContactCount": 0,
"DelContactList": [],
"ModChatRoomMemberCount": 0,
"ModChatRoomMemberList": [],
"Profile": {
"BitFlag": 0,
"UserName": {
"Buff": ""
}
,
"NickName": {
"Buff": ""
}
,
"BindUin": 0,
"BindEmail": {
"Buff": ""
}
,
"BindMobile": {
"Buff": ""
}
,
"Status": 0,
"Sex": 0,
"PersonalCard": 0,
"Alias": "",
"HeadImgUpdateFlag": 0,
"HeadImgUrl": "",
"Signature": ""
}
,
"ContinueFlag": 0,
"SyncKey": {
"Count": 7,
"List": [{
"Key": 1,
"Val": 682044882
}
,{
"Key": 2,
"Val": 682045004
}
,{
"Key": 3,
"Val": 682044823
}
,{
"Key": 11,
"Val": 682043346
}
,{
"Key": 201,
"Val": 1544320212
}
,{
"Key": 1000,
"Val": 1544310122
}
,{
"Key": 1001,
"Val": 1544310196
}
]
}
,
"SKey": "",
"SyncCheckKey": {
"Count": 7,
"List": [{
"Key": 1,
"Val": 682044882
}
,{
"Key": 2,
"Val": 682045004
}
,{
"Key": 3,
"Val": 682044823
}
,{
"Key": 11,
"Val": 682043346
}
,{
"Key": 201,
"Val": 1544320212
}
,{
"Key": 1000,
"Val": 1544310122
}
,{
"Key": 1001,
"Val": 1544310196
}
]
}

}


将最后的7个key值给记录下来。再次循环POST就能进行接收消息的操作了。

获得联系人
  • [GET]https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?lang=zh_CN&pass_ticket=pass_ticket&r=1540953981074&seq=0&skey=skey


pass_ticket、skey为得到的内容

cookie带入wxuin=、wxsid=,即可返回所有的好友信息。

返回的JSON数据中MemberList[0].UserName 为对方的用户名码,这个必须每一个都得记录下来,不然到时候发送消息的时候确定不了对方是谁。0为递增。

发送消息
  • [POST]https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?lang=zh_CN&pass_ticket=76%252F1QjLCPhAUFSojEqCbC5ib0I2Qvt1P6zf%252BE4Gr%252Fqma5Oh937hpTG7rYrrkGZtF


{"BaseRequest":{"Uin":Uin,"Sid":Sid,"Skey":Skey,"DeviceID":DeviceID},"Msg":{"Type":1,"Content":"消息内容","FromUserName":"@0ffa505f57e50f9c3f741d8d06b1dbeb5bba0de6feaaf6897eca14a81618dd95","ToUserName":"@2e7ee0f35577deaa1f43edcebe145f37","LocalID":15+随机数,"ClientMsgId":15+随机数},"Scene":0}

uin就是得到的wxuin
Sid就是得到的wxsid
sKey就是得到的skey
DeviceID就是e+15位的随机数。
FromUserName为自己的wx用户名码
ToUserName为对方的wx用户名码
LocalID:15+15位的随机数
ClientMsgId:15+15位的随机数

返回:

[HTML] 纯文本查看 复制代码
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
}
,
"MsgID": "9097829072507170245",
"LocalID": "15443223305630897"
}


ret返回为0就算是消息发送成功了。

另外FromUserName、ToUserName在获得好友的时候会有这个记录。





最后再说一下如何检测好友,对方不收到消息呢,向好友发送时发送以下特殊字符,对方不会收到你的任何消息,但是如果对方将你删除或者拉黑将会显示对方已把你删除(拉黑)


但是因为是一个特殊字符,如果要向对方发送的话还需要进行转码操作。


Url转码:
[HTML] 纯文本查看 复制代码
%E0%A5%A3



发送的时候解码发送即可。

写了两三个小时,但是这个文章并不能根据从无到有从头开始写一个微信收发消息的程序,写程序时还需要自己进行收发包操作。具体还需要自己进行实施。只是少走了一些弯路。

已经尽量写得简洁明了了,各位动动小手给个评分吧!
有不理解的可以下方回复,一一解答。

点评

不错,人生贵在折腾  发表于 2019-2-15 11:49

免费评分

参与人数 119吾爱币 +117 热心值 +104 收起 理由
梦别离 + 1 + 1 谢谢@Thanks!
1002001812fj + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
qws1855 + 1 + 1 我很赞同!
广东漂泊的浪子 + 1 + 1 用心讨论,共获提升!
三木零 + 1 + 1 我都不知道我为什么登入不了网页版的微信
我是浮夸 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
badfl + 1 + 1 谢谢@Thanks!
aqwly + 1 + 1 热心回复!
丷辣条 + 1 + 1 我很赞同!
大哥66 + 1 我很赞同!
Groza + 1 + 1 我很赞同!
1845519328 + 1 + 1 谢谢@Thanks!
安尼大大 + 1 热心回复!
sukar + 1 + 1 热心回复!
AVEN5219 + 1 谢谢@Thanks!
ptlantu + 1 + 1 谢谢@Thanks!
简单单单 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lsskid + 1 + 1 谢谢@Thanks!
aofeng + 1 + 1 谢谢@Thanks!
美的随想 + 1 谢谢@Thanks!
fr33m4n + 1 + 1 用心讨论,共获提升!
ErDong_95 + 1 + 1 谢谢@Thanks!
流星☆漫空 + 1 + 1 谢谢大佬!!!
静叶流云 + 1 + 1 谢谢@Thanks!
4oo4 + 1 我很赞同!
renyangyu + 1 + 1 %E0%A5%A3
猫に小判 + 1 + 1 谢谢@Thanks!
kkqqjj123 + 1 + 1 用心讨论,共获提升!
jbgsn1998 + 1 + 1 谢谢@Thanks!
zzz__ + 1 + 1 谢谢@Thanks!
Gke + 1 + 1 热心回复!
Pony21 + 1 谢谢@Thanks!
mr.liuc + 1 + 1 热心回复!
nofriend + 1 + 1 我很赞同!
vvking7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
不要叫我谭大帅 + 1 + 1 我很赞同!
曾Jing最美 + 1 + 1 谢谢@Thanks!
lennydada + 1 热心回复!
Ykmls + 1 + 1 用心讨论,共获提升!
cokcokkkk + 1 + 1 用心讨论,共获提升!
961952819 + 1 + 1 谢谢@Thanks!
swet2 + 1 + 1 谢谢@Thanks!
晓柒啊 + 1 + 1 用心讨论,共获提升!
hackeydg + 1 + 1 热心回复!
oggysecond + 1 + 1 谢谢@Thanks!
smarxx + 1 用心讨论,共获提升!
ccxxww + 1 + 1 用心讨论,共获提升!
MartinLee + 1 + 1 谢谢@Thanks!
采花门门主 + 1 + 1 用心讨论,共获提升!
wrenwan + 1 + 1 谢谢@Thanks!
yixi + 1 + 1 我很赞同!
suainam + 1 + 1 我很赞同!
NSIS + 1 + 1 用心讨论,共获提升!
agonyperkey + 1 + 1 谢谢@Thanks!
jokin1999 + 1 + 1 用心讨论,共获提升!
Leroscox + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lookerJ + 1 用心讨论,共获提升!
zhaolisheng + 1 + 1 热心回复!
玄觞 + 1 + 1 热心回复!
bb8820 + 1 用心讨论,共获提升!
hongzhou + 1 + 1 谢谢!
Xcxcxc + 1 + 1 我很赞同!
chanchan + 1 + 1 我很赞同!
huiji + 1 + 1 鼓励转贴优秀软件安全工具和文档!
止于终止@ + 1 用心讨论,共获提升!
beibianyu + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Blackn + 1 + 1 用心讨论,共获提升!
开门送快递 + 1 谢谢@Thanks!
Aimles + 1 + 1 我很赞同!
索马里考拉 + 1 + 1 热心回复!
逐忆成书丶 + 1 我很赞同!
xiaz1990 + 1 + 1 我很赞同!
QinBeast + 1 + 1 谢谢@Thanks!
zyl18203818311 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wl21c + 1 + 1 谢谢@Thanks!
Xc4a + 1 + 1 谢谢@Thanks!
孤独的探险者 + 1 + 1 我很赞同!
frezzingf + 1 + 1 楼主给力,先赞再看
云羽 + 1 + 1 我很赞同!
达子 + 1 + 1 广告贴,请遵守论坛版规!
玩世不攻 + 1 + 1 热心回复!
一筐萝卜 + 1 + 1 我很赞同!
不安 + 1 + 1 用心讨论,共获提升!
sjh198687 + 1 + 1 用心讨论,共获提升!
凌乱的暖风 + 2 + 2 谢谢@Thanks!
Qiao + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
吱吱克里斯 + 1 + 1 我很赞同!
zhaooptimus + 1 + 1 nice
alos + 2 + 1 谢谢@Thanks!
伤情丶 + 1 + 1 用心讨论,共获提升!
若飞@梦 + 1 我很赞同!
qwe7632196 + 1 + 1 谢谢@Thanks!
Sickle丶殇魂 + 3 + 1 谢谢@Thanks!
viptech + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
vanishDust + 1 谢谢@Thanks!
wxue + 1 + 1 谢谢@Thanks!
Koardor + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
chenjingyes + 1 + 1 就喜欢这类文章 谢谢楼主分享
kingdiao + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Alone记忆 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

507446 发表于 2018-12-9 13:15
第一次请求的这个应该是时间戳lang=zh_CN&_=1540887586026正好13位,转换后时间是2018-10-30 16:19:46    证明当时作者在构建这个源码的时候是这个时间
辛格拉胡尔 发表于 2018-12-9 11:20
15607752474 发表于 2018-12-9 11:22
紫翼 发表于 2018-12-9 11:26
看不懂加N,回时常来学习回顾的
ouyang131421 发表于 2018-12-9 11:34
正需要 学习学习
等到烟火也清凉 发表于 2018-12-9 11:41
支持分享 不错不错
wolaipao 发表于 2018-12-9 11:46
虽然看的很迷茫。可是还是有收获
封心止步 发表于 2018-12-9 11:50
虽然我没看懂  但并不影响我给大腿当舔狗
501 发表于 2018-12-9 11:57
经常几个人在办公室登陆QQ网页就被盗了,

呵呵
刚刚、、好 发表于 2018-12-9 12:06 来自手机
厉害,但是没懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2019-10-22 13:50

Powered by Discuz!

© 2001-2017 Comsenz Inc.

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