开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 9162|回复: 38
收起左侧

[技术专题] 网页微信协yi分析

[复制链接]
结帖率:73% (8/11)
发表于 2017-6-1 11:45:15 | 显示全部楼层 |阅读模式   山西省晋城市
本帖最后由 木干鸟栖 于 2017-6-1 18:53 编辑

去年有写过一个微信好友提取的单子,因为需求简单,只要扫码登录,然后提取好友就可以了,所以只是简单分析了登录和获取好友,昨天没事儿了,突然想起,心血来潮,就好好分析一下,今天把昨天的一些东西分享出来,供新手学习,也供自己以后参阅,有不对的地方还望指正,大家一起交流。第一步:获取uuid ,获取二维码图片要用到uuid
请求地址: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&_=1496243303714

请求方式:GET
参数说明:appid是固定的  末尾是13位时间戳。
返回结果:window.QRLogin.code = 200; window.QRLogin.uuid = "4ZgGhinzAQ==";
                  code 200说明获取成功,code还可能有其他值,例如你把appid改一下,就400了
第二步:获取二维码图片
请求地址:https://login.weixin.qq.com/qrcode/4ZgGhinzAQ==
参数说明:红色部分就是uuid
请求方式:GET
返回结果:返回的字节集就是二维码图片
第三步:监测二维码状态
请求地址:https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4ZgGhinzAQ==&tip=0&r=-1594710725&_=1496243303716
请求方式:GET
参数说明:uuid就不说了吧,
                 r=-1594710725,我一开始以为这是一串随机数,但是后来发现不对了,随机的那么有规律?
                先声明,这个r貌似不会检测,我测试不动他也能提交成功,如果嫌麻烦的朋友可以不看下边。
                QQ截图20170601105445.png
                 查询了一番后,发现是在JS里生成的, ~new date 意思是现行时间戳按位取反,就是把10位的时间戳,转成2进制,例如01010101这样的形式,然后把0变成1,把1变成0,然后转到10进制...... 凭咱这水平,不理解为啥要搞成这样比样......当然,我也不想用易语言代码来实现这个算法,直接用JS实现就好了。
                QQ截图20170601105445.png
易语言中用精易模块类_脚本组件调用是这样的
  
子程序名返回值类型公开备 注
获取R文本型 
变量名类 型静态数组备 注
js类_脚本组件 
r文本型 
js.属性_语言 ()
js.添加代码 (“function r(){return ~new Date;}”)
r = js.运行 (“r”)
调试输出 (r)
返回 (r)


i支持库列表   支持库注释   
spec特殊功能支持库

返回结果:window.code=值;根据code的值不同,后边跟不同的返回。
                 其中 code为201时,说明已经扫码,返回了头像
                  QQ截图20170601105445.png
头像图片不是字节集形式返回,而是一串BASE64编码后的文本,只需要BASE64解码就是图片了,解码的部分不包含 data:img/jpg;base64,这个头部,是从/9j/4AA这里开始。
               code为200时,说明在微信点击了确认登录。这时就可以下一步登录获取Cookie了。
               code为408时,说明用户未操作。
               code为400时,说明二维码图片失效,其实就是uuid失效,需要重新获取uuid然后获取新的二维码。
中午了,下午继续哈。
第四步:登录获取Cookie
请求地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=Aalw0U65XU6KO33A8RfEolE7@qrticket_0&uuid=gexAchtPIg==&lang=zh_CN&scan=1496224825&fun=new&version=v2
请求方式:GET
参数说明:这个请求地址是在第三步返回的,就是当第三步的code值为200时,返回里有这个请求地址,后边加上&fun=new&version=v2
返回结果:返回里包含了skey、wxsid、wxuin、pass_ticket,这一步里返回了cookie,只需要取这一步的cookie即可。
第五步:微信初始化  webwxinit
请求地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-1576180982&pass_ticket=DoM2E5MFa0eoTTAi3b8tJbb0SgSkl%252FzNvNmeyatVe8T6jmv60Y6rZYSQMbVUTk2O
请求方式:POST
参数说明:r在前边说过了,pass_ticket是上一步返回的
提交数据:{"BaseRequest":{"Uin":"1107650341","Sid":"GlxIgMdgxgOKmEta","Skey":"@crypt_32e81ea3_7ff722a516ae3548a31ce49c7e0a0007","DeviceID":"e748606750801212"}}
标准的JSON,Uin、Sid、Skey、都在上一步有了,DeviceID是e后边加15位随机数,在JS中的实现如图
QQ截图20170601170549.jpg
返回结果:返回JSON文本,里边包含了UserName和SyncKey,在后边会用到
第六步:获取微信通讯录
请求地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?pass_ticket=DoM2E5MFa0eoTTAi3b8tJbb0SgSkl%252FzNvNmeyatVe8T6jmv60Y6rZYSQMbVUTk2O&r=1496224888208&seq=0&skey=@crypt_32e81ea3_7ff722a516ae3548a31ce49c7e0a0007
请求方式:GET
参数说明:都是之前说过的
返回结果:标准的JSON文本,包含了微信号的好友、群、公众号。群是要保存到通讯录里的群,这里才会提取到,并不是提取你加入的所有群。
                 我的微信好友是129,公众号56,这样加起来是185,保存到通讯录的群是2个,这样是187,但是结果是190 ,我看了一下,190个里包含了自己,这样就是188个,还有2个是文件传输助手微信支付。
未完待续.....................


评分

参与人数 2好评 +2 精币 +3 收起 理由
爲妳執著 + 1 + 1 那么问题来了,大神能带我飞吗
tjzoo111 + 1 + 2 喜欢你的分析

查看全部评分


结帖率:67% (2/3)

签到天数: 1 天

发表于 2017-12-5 21:46:04 | 显示全部楼层   江苏省泰州市
求教大神。我死在最后一步。前面的username都取到了。 到了第六步,就显示“{
"BaseResponse": {
"Ret": 1,
"ErrMsg": ""
}
,
"MemberCount": 0,
"MemberList": [],
"Seq": 0
}
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)
发表于 2017-9-26 23:17:37 高大上手机用户 | 显示全部楼层   河北省石家庄市
支持楼主,
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2017-9-2 17:11:32 | 显示全部楼层   浙江省杭州市
66666666666666
回复 支持 反对

使用道具 举报

发表于 2017-8-11 22:01:30 | 显示全部楼层   广东省东莞市
好贴子,支持楼主。
回复 支持 反对

使用道具 举报

结帖率:33% (2/6)
发表于 2017-8-5 12:43:32 | 显示全部楼层   广东省揭阳市
楼主求更,66666
回复 支持 反对

使用道具 举报

结帖率:50% (2/4)
发表于 2017-7-30 08:21:45 | 显示全部楼层   河南省安阳市
我去试试  
回复 支持 反对

使用道具 举报

发表于 2017-7-21 09:29:05 | 显示全部楼层   河南省洛阳市
收藏收藏收藏
回复 支持 反对

使用道具 举报

结帖率:50% (2/4)
发表于 2017-7-21 08:50:32 | 显示全部楼层   河南省安阳市
收藏  收藏收藏
回复 支持 反对

使用道具 举报

结帖率:95% (18/19)
发表于 2017-7-19 04:14:24 | 显示全部楼层   广东省东莞市
稳稳的收藏
回复 支持 反对

使用道具 举报

结帖率:50% (2/4)
发表于 2017-7-2 16:39:03 | 显示全部楼层   河南省安阳市
支持支持!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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