zoukankan      html  css  js  c++  java
  • 关于微信公众平台模拟登录

    转到脚本标签页,我们要找的是登录那块的JS代码,好根据大家丰富的经验,判断出那个名字很长的前后有个勾的JS文件是包含登录代码的,我们选择查看它。没有经验的朋友们也不要慌,右边有个搜索框,你去搜下“登陆”或者“login”,然后慢慢找也是可以的嘛。(我前文和下文说的都是IE9,其它浏览器我不知道,请大家自己对应)

    选择了这个JS文件后,可能你看到的是一坨压缩过的代码,点击上图长的红框左边的那个锤子和不知道什么东西交叉在一起的那个按钮,在下拉菜单里选择“格式化JavaScript”。然后我们翻翻代码,找到这一段代码:

    第一句里的t,我们猜他是jquery好了,其实并不重要,关键是后面的post,网址是这个“/cgi-bin/login?lang=zh_CN”,加上主机地址就是“https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN”,也就是说我们要像这个网址post这些个东西过去:username:e.account,pwd:t.md5(e.password.substr(0,16)),imgcode:c.data("isHide")?"":e.verify,f:"json"。简单分析一下,就四个东西username用户名、pwd密码(MD5加密)、imgcode验证码、f格式是json。

    我们可以看到验证码可以是三目运算,要是验证码图片是隐藏的,就传"",要是显示着就传验证码。我一开始想着传一个"",它老是返回-6,看上面的代码可知是“请输入图中的验证码”,开源社区里有一个开源的项目,java写的,他的做法是失败了再试,多试几次,不知道试几次能成功,应该很少的次数吧,算是一种成功的案例吧,大家可以试试循环不停的登录。当时我就是死脑筋,它让我输入验证码我就输入验证码好了,在“开发人员工具”可以看到登录代码的上面一点点是下载验证码图片的

    可以很简单的看到网址是 https://mp.weixin.qq.com /cgi-bin/verifycode?username=你的帐号&r=一个日期毫秒数(名字是我乱起的,相当于一个随机数)。我们先获取验证码,然后把它和帐号密码一起发回去,返回的结果应该还是-6,这是怎么回事呢?(不得不注一下:我说的是几个月前的,那是后微信公众平台还是HTTP的不是HTTPS的,期间网站变动过,我说的东西不一定对,但是出来的结果一定是对的,比如你把帐号和密码发过去一次就成功了,也没发验证码。我接下来说的是极端的情况,即:帐号密码验证码都发了还是-6,如果你一次就成功了,下面的请跳过)

    接下来要讲到IE9开发人员工具的另一个功能(相当于抓包),在“网络”选项卡里有一个按钮叫“开始捕获”,点了它之后,这个网页发的接的所有的消息都内被记录下来。
    我来试试看登录,这次我不会输入正确的帐号密码,因为正确的话它会调到另一个页面,捕获的内容会被重置掉(因为又是一个新的页面了)。

    双击这个记录,然后可以看到下面的

    还有请求正文,我就不截图了:username=帐号&pwd=32位小写MD5加密之后的密码&imgcode=验证码&f=json。
    我们反过来思考,我们明明什么都发了,做的和IE一样,这些值都post过去了,为啥服务器还说我们错呢?我们看那张请求标头的图,它上面每一个我们都分析一下,我们全都照着抄好了,我们把HttpRequest的属性都是设一下,我总结了一下,主要是Content-Type、User-Agent、Content-Length和cookie。前面三个都是固定的值,那么cookie从哪来呢?看那张捕获列表截图,login下面那个记录,我们登录失败后它去获取验证码了,我们去看一下它的详细信息

    我们可以看到,在下载到图片的同时,接收到了一个cookie,反正我们的目的就是要模拟IE(模拟浏览器),所以我们每次请求资源的时候,都把cookie保存下来,在下次请求的时候传回去好了,也别管它需要不需要。

    这样post消息的话应该就能成功了。成功消息应该是这样的

    如果不成功,自己多试试,看看上述的这些有哪些漏了。社区里我见过一位同志用ASP写的,我看了他po出来的所有代码也没有发现任何问题。。。。这种东西只有自己试,以前还好,能用wireshark抓包看的,现在是HTTPS的,抓出来的都是乱码,不好对比了。

    小结一下:

    模拟登录的步骤可以是:不停的向   https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN    post   username:帐号,pwd:t.md5(密码.substr(0,16)),imgcode:"",f:"json",
    或者先获取验证码(同时保存cookie),然后发送帐号密码验证码(带上cookie)。关于收发cookie,C#我推荐用CookieContainer,VB的好像不用保存,只要在一个程序里貌似对象自己会保存

  • 相关阅读:
    [HDU3247]Resource Archiver
    [POJ2243]考研路茫茫——单词情结
    [POJ2778]DNA Sequence
    [bzoj3670] [Noi2014]动物园
    [bzoj3786] 星系探索
    [bzoj1493] [NOI2007]项链工厂
    postgreSQL的设置自增主键初始值
    postgreSQL绝对值
    GitHub上新建或删除仓库Repository
    Intellij Idea上传本地项目到Git
  • 原文地址:https://www.cnblogs.com/keleyu/p/3413097.html
Copyright © 2011-2022 走看看