Python爬虫-百度模拟登录(二)

接上一篇的继续

参数 codestring

套路我相信很多人已经掌握了,先在Charles中搜索值

参数值都看到了,token、tt、dv、callback这些变化的参数我们都知道了吧,其他的参数固定,别问我为什么。这个logincheck注意到了吗?是不是有人能想起前面的?不能放在字典里赋空值,要直接写在url后面,好了轻松搞定codestring。

参数 verifycode

验证码就不用全量搜索了,图片嘛,浏览一下图片请求就知道了

参数是codestring不用我提醒了吧,请求一下手动输入哦,有的人问为什么不搞自动识别的,其实没有必要,现在打码平台很便宜,而且大部分验证码都可以搞定,如果自己去搞得话,太费时间识别率还低,所以我这里就不说验证码这个了,如果有时间以后单独写一篇吧。

参数 traceid

老套路先搜索值,没搜到!!!,换name试试

搜了很多发现都是这个createTraceID函数创建的

都找到了,自己翻译一下吧

参数 ppui_logintime

又是个时间,直接搜name吧

只搜到这一个,然后搜一下timespan

当前时间减去一个初始时间,这是一个时间段,应该是从某次请求开始到某次请求结束,对于这种我们捏造一个吧,没必要那么精确,看一下大概的时间,取15000~30000吧

参数 rsakey

搜一下值

需要的参数不说了哦,这回看看返回值,pubkey、key,这个key的值就是我们的rsakey,pubkey我们后面会用到,先记下

fp_info&fp_uid

这两个参数放在一起说,注意fp_uid和fp_info前面的是一样的,从002~~开始不一样了

先搜了fp_uid,发现是获取cookie的,又没有搜到set cookie的地方,那么有可能是通过本地生成的,对于本地生成的,其实最简单就是固定值,我也是使用固定值试了试,没有问题,当然是调试了一番以后才这么做的,因为调试太麻烦了。再搜一下fp_info看看吧

这个就可能性比较大了,开始调试了,打开chrome->隐身模式->清理缓存->打开百度首页->点击一下登录按钮,找到刚才的js文件,搜~~~

然后再清理缓存,重新刷新百度首页,点击登录按钮

打印一下n和t的值

开始调试,进入到这个函数以后,我们看到这里有几个函数d.genGUID,打印一下看看

是不是有点fp_uid的样子了,那就它了,这是哪个函数呢,很简单,打印一下

翻译成python或者用python执行js脚本的方式都行,fp_uid干掉了吧,fp_info后半部分太麻烦了,有谁搞定了麻烦告诉我一声。我这里就用固定值了。

参数password

搜一下password=

断点打好了就开始调试吧,完犊子了今天死活调试不到断点处了,其实这个比较明显的,当然如果你对rsa加密不了解或者了解的不多那就不容易了,首先想想我们前面获取的pubkey的值,-----BEGIN PUBLIC KEY-----......-----END PUBLIC KEY-----\n,我先贴一下代码吧

看一下这个load_pkcs1_openssl_pem函数

如果js可以调试进去_SBCtoDBC,你就会发现它对BEGIN和END的处理,那实际上它就是在做rsa加密,所以说如果你了解rsa的这种加密方式,看到BEGIN PUBLIC KEY和END PUBLIC KEY的时候就马上能猜出来了,所以加密函数已经给你了,pubkey获取了,password你自己知道,那这个也搞定了。

至此,登录参数都搞定了,我们可以向下进行了

请求的url和参数都在登录的返回值里,解析一下https://www.baidu.com/cache/user/html/v3Jump.html?err_no=0&callback=parent.bd__pcbs__psvho&codeString=&userName=wuqing198985&phoneNumber=&mail=&hao123Param=RmxaRU5VTVcxTVNWcDFiMDlEU3psMWFVeGtaa2c0TldOSk0yVk1WVFV0WWxCcmVuUmxWSEl0VWpsaVl6bGhRVUZCUVVGQkpDUUFBQUFBQUFBQUFBRUFBQUNzdWQwS2QzVnhhVzVuTVRrNE9UZzFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIM2dwMXA5NEtkYVJG&u=https://www.baidu.com/&tpl=mn&secstate=&gotourl=&authtoken=&loginproxy=&resetpwd=&vcodetype=&lstr=<oken=&bckv=1&bcsync=KnqkeCS8J7B9vuKnaRltPTrp9Kl0hPsH6votXG00OmsypOV8lYboSn7pxuyb%2F1l8XUlp9M0v0gIKoL9og3nXmZYFaGCcMO%2Fx4roGpF7SFA0cqXGlnhwGeBmIY5cVxgeM6aJ2RjPXp3fb6q41WjTiipEvOXCvcfuW7XLemxoEv%2F2ribszd6n7ql7aO7l850fOFqzBiZGeBNu3D0OZFnJeSsOHMEquD6Ahw9dbRl9ahaaRSEMDxQtrn36Bj2jayIY88OTyu7CWjtApT2eZ2SfAjBhr3IzHbnbSPhtoL82nsH7WwqHGeqq3uxYDdqH7ZkgjE3JlQV9SDQCPTnfpPxIrYg%3D%3D&bcchecksum=2590966377&code=&bdToken=&realnameswitch=&setpwdswitch=&bctime=1520951421&bdstoken=&authsid=&jumpset=&appealurl=&realnameverifyemail=0&traceid=&realnameauthsid=&accounts=

请求完以后,返回值里没有什么明显的有用值,那我就直接访问了一下首页

我们怎么判定登录成功呢,一般就是获取有用户名的页面,然后获取一下用户名,看是否存在,如果有那么就登录成功了。很幸运访问首页后登录成功了。百度模拟登录到这里就结束了。之前微博模拟登录的时候,访问一个页面,返回值里是下一个页面链接,再访问再返回下一个。我们在处理这种的时候呢,我们要怎么处理呢?

逆向推理:首先找我们需要的目标点,比如一开始我就找登录请求,然后看登录请求里面需要哪些参数,然后再一步步分析这些参数的来源,其实就是逆向推,另外登录请求完成后,再找一个目标点,就是已登录的页面,如果没有成功,就从登录往下看。基本就是这么一个思路。

最后要再说一下,写这个的目的并不是为了什么项目之类的,就是学习,练习一下,所以大家就不要吹毛求疵了,而且我也不接受吐槽。有意见可以提,反正我也不改^_^

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180512G0GR9T00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券