接上一篇的继续
参数 codestring
key | value |
---|---|
codestring | jxG9506c1811b44e2fd0220153643013f7e6b1898075a047bbd |
套路我相信很多人已经掌握了,先在Charles中搜索值
参数值都看到了,token、tt、dv、callback这些变化的参数我们都知道了吧,其他的参数固定,别问我为什么。这个logincheck注意到了吗?是不是有人能想起前面的?不能放在字典里赋空值,要直接写在url后面,好了轻松搞定codestring。
参数 verifycode
key | value |
---|---|
verifycode | 又把 |
验证码就不用全量搜索了,图片嘛,浏览一下图片请求就知道了
参数是codestring不用我提醒了吧,请求一下手动输入哦,有的人问为什么不搞自动识别的,其实没有必要,现在打码平台很便宜,而且大部分验证码都可以搞定,如果自己去搞得话,太费时间识别率还低,所以我这里就不说验证码这个了,如果有时间以后单独写一篇吧。
参数 traceid
key | value |
---|---|
traceid | EA43E001 |
老套路先搜索值,没搜到!!!,换name试试
搜了很多发现都是这个createTraceID函数创建的
都找到了,自己翻译一下吧
参数 ppui_logintime
key | value |
---|---|
ppui_logintime | 19863 |
又是个时间,直接搜name吧
只搜到这一个,然后搜一下timespan
当前时间减去一个初始时间,这是一个时间段,应该是从某次请求开始到某次请求结束,对于这种我们捏造一个吧,没必要那么精确,看一下大概的时间,取15000~30000吧
参数 rsakey
key | value |
---|---|
rsakey | 3kUWNJ6tggVCigi7EoQZcsuKpBcDKPKj |
搜一下值
需要的参数不说了哦,这回看看返回值,pubkey、key,这个key的值就是我们的rsakey,pubkey我们后面会用到,先记下
fp_info&fp_uid
key | value |
---|---|
fp_uid | 19ec2fa82bec175d9628b81d9683e9d2 |
fp_info | 0245fc9782abae99a665854526e19a19002~~nIpK32ZQH2fI2i_lnn9ypKA34B… |
这两个参数放在一起说,注意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
key | value |
---|---|
password | ai2s9z7UUf9XFguwg6EUslu607/CNrit0B3c4mGF/VzEIjc+SkFM7kuSRx2LWkTAk0lecetCIQcpZ9xKtXdKy3NG7aJfkFbWxMFqCNtM3birZbkgQw6l7UKGYpeuIDAn0ae/52nU4HkcSmPAL8iGV7hQP9CxoWYpL59r8Vq8dug= |
搜一下password=
断点打好了就开始调试吧,完犊子了今天死活调试不到断点处了,其实这个比较明显的,当然如果你对rsa加密不了解或者了解的不多那就不容易了,首先想想我们前面获取的pubkey的值,-----BEGIN PUBLIC KEY-----......-----END PUBLIC KEY-----\\n
,我先贴一下代码吧
1 | def encript_password(self, password, pubkey): |
看一下这个load_pkcs1_openssl_pem函数
1 | def load_pkcs1_openssl_pem(cls, keyfile): |
如果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=
请求完以后,返回值里没有什么明显的有用值,那我就直接访问了一下首页
我们怎么判定登录成功呢,一般就是获取有用户名的页面,然后获取一下用户名,看是否存在,如果有那么就登录成功了。很幸运访问首页后登录成功了。百度模拟登录到这里就结束了。之前微博模拟登录的时候,访问一个页面,返回值里是下一个页面链接,再访问再返回下一个。我们在处理这种的时候呢,我们要怎么处理呢?
逆向推理:首先找我们需要的目标点,比如一开始我就找登录请求,然后看登录请求里面需要哪些参数,然后再一步步分析这些参数的来源,其实就是逆向推,另外登录请求完成后,再找一个目标点,就是已登录的页面,如果没有成功,就从登录往下看。基本就是这么一个思路。