• 微信网页版分析


    去年有写过一个微信好友提取的单子,因为需求简单,只要扫码登录,然后提取好友就可以了,所以只是简单分析了登录和获取好友,昨天没事儿了,突然想起,心血来潮,就好好分析一下,今天把昨天的一些东西分享出来,供新手学习,也供自己以后参阅,有不对的地方还望指正,大家一起交流。

    第一步:获取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貌似不会检测,我测试不动他也能提交成功,如果嫌麻烦的朋友可以不看下边

                     

    查询了一番后,发现是在JS里生成的, ~new date 意思是现行时间戳按位取反,就是把10位的时间戳,转成2进制,例如01010101这样的形式,然后把0变成1,把1变成0,然后转到10进制...... 凭咱这水平,不理解为啥要搞成这样比样......当然,我也不想用易语言代码来实现这个算法,直接用JS实现就好了。

                  
    易语言中用精易模块类_脚本组件调用是这样的

    js.属性_语言 ()
    js.添加代码 (“function r(){return ~new Date;}”)
    r = js.运行 (“r”)
    返回 (r)

    返回结果:window.code=值;根据code的值不同,后边跟不同的返回。
                     其中 code为201时,说明已经扫码,返回了头像
                       
    头像图片不是字节集形式返回,而是一串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中的实现如图
    <ignore_js_op> 
    返回结果:返回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个是文件传输助手微信支付。
    未完待续.....................

  • 相关阅读:
    20145302张薇 《信息安全系统设计基础》期中总结
    20145302张薇 《信息安全系统设计基础》第7周学习总结
    20145302张薇 《信息安全系统设计基础》第6周学习总结
    20145302张薇 《信息安全系统设计基础》第5周学习总结
    20145314郑凯杰《信息安全系统设计基础》第14周学习总结
    20145314郑凯杰《信息安全系统设计基础》第13周学习总结
    《信息安全系统设计基础》第12周学生博客问题总结
    20145314郑凯杰《信息安全系统设计基础》第12周学习总结
    20145314郑凯杰《信息安全系统设计基础》GDB调试32位汇编堆栈分析
    北京电子科技学院(BESTI)实验报告2
  • 原文地址:https://www.cnblogs.com/microWhite/p/6930364.html
Copyright © 2020-2023  润新知