关灯

如何搞定知乎模拟登陆的加密难题?

[复制链接]
6werr3b 发表于 2019-4-14 12:50:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
怎样弄定知乎模仿登岸的减稀困难?-1.jpg

做者 | sergiojune

责编 | 郭芮

声明:以下内乱容仅交换进修,请勿用于不法用处。

假如您如今念模仿登岸知乎,会发明 fromdata 是一串减稀的字符串:

怎样弄定知乎模仿登岸的减稀困难?-2.jpg

看了以后是否是很疾苦?您是否是便念利用 selenium 去模仿登岸?不外仿佛知乎对 selenium 也停止了响应的反爬处置,哈哈。可是我没有也念用 selenium,服从太缓了,间接破解 js 才是我最喜好应战的。

好,我如今教您怎样用 js 硬撸破解。空话未几道,间接进进正题。

找出signature减稀

减稀地位那个相对来讲是比力易找的,需求本人对那些混合过的 js 停止一遍又一遍的搜索,偶然候您看到头皮收麻也纷歧定找获得,再减上那个减稀参数是一堆字符串,连个键皆出有,搜刮的前提皆出有。那怎样办呢?我们能够来百度大概谷歌看看前人是怎样弄的。

您间接搜刮知乎模仿登岸的话,会发明从前的知乎的 fromdata 是键值情势的,有以下键值对:

怎样弄定知乎模仿登岸的减稀困难?-3.jpg

趁便也能够看看之前的破解思绪,看到了上里的 signature 是经由过程减稀去的,推测知乎该当也是对之前的键值减稀的 fromdata 停止减稀的,正在掌握台搜搜 signature 看看有无线索:

怎样弄定知乎模仿登岸的减稀困难?-4.jpg

提醒:按下 ctrl + shift + f 可呈现搜刮框

一搜,公然有,看了看,signature 的减稀历程战从前的仍是一样的,证实我的料想准确了,阐明是经由过程之前的 fromdata 的键值对停止减稀成的一堆字符串,如今便看看 signature 是怎样减稀的。

怎样弄定知乎模仿登岸的减稀困难?-5.jpg

假如您对减稀有面理解的话,借简单经由过程上里代码明白那是经由过程 hmac 减稀,哈希算法是 sha1,稀钥为 d1b964811afb40118a12068ff74a12f4,减稀数占有四个,为 clientId、grantType、timestamp 战 source,那些值皆能够正在上里经由过程调试出去的,便未几道了。以下:

怎样弄定知乎模仿登岸的减稀困难?-6.jpg

找出fromdata的完好键值对

正在明白 signature 是怎样减稀的以后,我们借需求找出完好的 fromdata 先,不外正在上里的调试中,您会发明也有几个 fromdata 值,可是没有齐。

怎样弄定知乎模仿登岸的减稀困难?-7.jpg

这时候候假如我们得持续搜刮 signature 的话,找了一成天您城市发明没有到甚么线索,这时候候我们能够经由过程登岸的 url 停止打破,看看 url 是哪一个途径,然后一顿搜。

其登岸url是 https://www.zhihu.com/api/v3/oauth/sign_in。那我们能够间接搜 sign_in 尝尝。搜了发明战上里的 signature 是正在统一个 js 文件上的,觉得该当有戏。

怎样弄定知乎模仿登岸的减稀困难?-8.jpg

那个战登岸地点完整婚配,该当便是那个了,能够停止调试一波:

怎样弄定知乎模仿登岸的减稀困难?-9.jpg

那没有出去了,颠末屡次调试,发明年夜大都值皆是牢固的,只要 signature 战 timestamp 没有是,其他的便是账号暗码之类的,另有个考证码 captcha 和它的范例 lang,signature 上里的曾经找出去了,timestamp 很较着便是工夫戳,其他的便未几道了。

如今的 fromdata 曾经局部找出去了,我们离减稀字符串又远了一步,假如您间接用那个表单停止模仿登岸,会给您返回上面毛病
Missing argument grant_type
可睹我们借得找出那个 fromdata 的减稀办法。

找出 fromdata 减稀地位

假如您是第一次找那个,估量您得不竭天翻 js,也纷歧定能找获得,大概您能够按照上面那个挪用函数历程去找:

怎样弄定知乎模仿登岸的减稀困难?-10.jpg

会发明许多,不外您懂套路的话皆明白减稀普通皆用到 encrypt 名字之类的,能够间接按照那个名字搜:

怎样弄定知乎模仿登岸的减稀困难?-11.jpg

一搜公然有那个,经由过程检察您很简单便找到那个:

怎样弄定知乎模仿登岸的减稀困难?-12.jpg

那个一经由过程调试,您能够看到,我们的减稀字符串出去了,是否是很冲动,我其时找到了那个的时分冲动没有得了。

怎样弄定知乎模仿登岸的减稀困难?-13.jpg

那个是减稀的字符串

怎样弄定知乎模仿登岸的减稀困难?-14.jpg

那个便是我们需求找的

历尽含辛茹苦,终究找出了庐山实面貌,冲动没有?先没有要冲动先,那只是减稀的地位,前面的才是最易的!

找出 fromdata 减稀的一切办法

明白地位后,我们能够间接把那个减稀的 js 办法皆扣出去,放正在一个 html 文件内乱施行便好。

正在上里找出地位以后,很简单就能够看到那个完好的一个的减稀办法:

怎样弄定知乎模仿登岸的减稀困难?-15.jpg

按那个半括号背上找,您就能够找到一个完好的减稀办法,那个便是全部 fromdata 的减稀办法。挺简单找的,假如以为没有便利找的,能够先将那个 js 文件内里的代码复造下去,然后到 Sublime Text 硬件上找,那个能够合叠,也比力简单找,找出去是如许子:

怎样弄定知乎模仿登岸的减稀困难?-16.jpg

格局化以后有 400 多止,并且满是混合,好看得一批。

为了看看那个准确没有准确,我们能够把函数内里的内乱容间接拿出去,便是来失落最中层的函数,然后挪用上面的函数 Q,把我们的 fromdata 传出来:

怎样弄定知乎模仿登岸的减稀困难?-17.jpg

最初将上里的 JavaScript 给弄成一个 html 文件,放正在 script 标签内乱便可:

怎样弄定知乎模仿登岸的减稀困难?-18.jpg

格局便战上里一样,然后间接用阅读器上翻开那个 html 文件,您会看到那个:

怎样弄定知乎模仿登岸的减稀困难?-19.jpg

那个便是我们不断勤奋正在找的 fromdata 减稀字符串。

弄完那个以后,我们持续利用 Python 去操纵了,由于那个减稀的办法格局化以后有 400 多止,其实太多,也齐皆是混合,假如念用 Python 去完成的话也没有是不成能,便是本钱太年夜了,需求的工夫太多了,我们借没有如间接利用 Python 的 execjs 去施行 JavaScript 代码间接得到就能够了,那个简朴便利。

我们除利用 execjs 去施行,借可使用 selenium 运转那个html 文件也是能够的,可是我其实不念用 selenium 那个东西,仍是喜好合腾,以是疏忽了,念用的能够尝尝。

可是那里又会有一个成绩,我们用阅读器翻开的是为它供给了一个阅读器的运转情况,我们正在 Python 利用的 execjs 供给的是 node 情况,两个情况的纷歧样,便会发生差别的结果,上面我们能够挑选利用 webstorm 编纂器去供给 nodejs 情况去停止测验考试以下。

正在 node 情况调试减稀代码

您能够拿上里的 JavaScript 代码正在 webstorm 运转,您便会看到:
TypeError: __g._encrypt is not a function
怎样弄定知乎模仿登岸的减稀困难?-20.jpg

以是我们需求调试,需求把那些正在阅读器上只要的工具,好比 window、navigator 之类的工具给弄失落,从而正在 node 上用不消的代码替代不异的结果便可。

要调试我们先要找到代码运转的初步,能够很简单找到:

怎样弄定知乎模仿登岸的减稀困难?-21.jpg

能够看到,那里它会先来判定有无 window 那个工具去判定是否是正在阅读器上里运转的,以是我们能够间接把它修正成 true 大概其他暗示成 true 的值皆能够。

怎样弄定知乎模仿登岸的减稀困难?-22.jpg

再次运转,能够看到那个毛病:
ReferenceError: atob is not defined
怎样弄定知乎模仿登岸的减稀困难?-23.jpg

那个 atob 是将 base64 减稀的字符串给解稀,正在 node 情况下是出有那个办法的,我们需求利用 Buffer.toString()替换便可。

怎样弄定知乎模仿登岸的减稀困难?-24.jpg

运转以后,仍是报那个毛病:
TypeError: __g._encrypt is not a function
留意:那个是年夜坑,估量常人每一个一两天借弄没有定,那个是由于上里的解稀的,可是上里的其实不一样,您能够正在上里的两个函数减断面,别离正在阅读器战 node 情况下运转,能够看到解稀的数据是纷歧样的,是由于正在阅读器上的 base64 减稀的是 binary 编码,解稀以后也便一样需求利用 binary 编码。那个是我正在知乎的资本文件上搜刮 atob 那个办法,然后渐渐查找看到的,其时也好未几心态崩了,借好对峙下去了。而我正在 node 情况下解稀以后利用了默许的编码,以是解稀的数据堕落了。当我们减上 binary 编码以后,再运转:

怎样弄定知乎模仿登岸的减稀困难?-25.jpg

这时候,毛病没有再是上里谁人了,酿成了另外一个,证实解稀准确了,再去看看上面那个毛病:
execption at 11: ReferenceError: window is not defined
本来是 window 工具惹的福,那个时分便需求我们假造 window 工具了,至于如何假造呢,我们能够调试堕落的处所,看看它利用了甚么办法,便间接利用合适 node 运转的不异结果的代码替代就能够了,颠末屡次调试,需求我们假造 window 战 navigator 那两个工具,上面便是假造以后的代码:

怎样弄定知乎模仿登岸的减稀困难?-26.jpg

那个时分再运转看看:

怎样弄定知乎模仿登岸的减稀困难?-27.jpg

能够看到胜利了,上里的白色字是一个提醒,闭于 Buffer 的,那个我们疏忽便止,接下去就能够利用 Python 情况停止测试了。

怎样弄定知乎模仿登岸的减稀困难?-28.jpg


怎样弄定知乎模仿登岸的减稀困难?-29.jpg

公然,皆出去了,哈哈,留意需求先装置 PyExecJS 库,自止装置,然后正在测试的时分记得导进 execjs 便可。如今那个 fromdata 算是年夜功乐成了,接下去便是登岸考证下我们弄得那个减稀对不合错误了。

模仿登岸知乎

那个知乎的登岸也是坑谦谦,我也给踩了几个,那个便间接道坑吧,其他的便未几道了。

我只是用脚机号去登岸的,也能够用邮箱登岸,历程皆好未几的。

1. 网址的恳求头

恳求登岸的网址的恳求头需求带上那几个:

怎样弄定知乎模仿登岸的减稀困难?-30.jpg

没有带 content-type 的话,会给您返回那个毛病:
Missing argument grant_type
没有带 x-zse-83 的话,会给您返回那个毛病:
恳求参数非常,请晋级客户端后重试
至于 agent-user 那便更没有需求道了。

2. 恳求挨次

知乎那个登岸是起首恳求考证码地点,看需求没有需求挖写考证码,假如需求挖便再恳求一次,并且借需求再再恳求一次检察能否输进考证码准确,没有准确便反复上里步调,当没有需求挖写考证码的时分就能够间接恳求登岸网址了。

另有上里的三次恳求的考证码地点的恳求办法皆是纷歧样的,哪一种办法自止调试便可。

3. 考证考证码

正在考证考证码的时分恳求头的 content-type 没有要挖写值为 multipart/form-data,假如挖了恳求考证码的时分会给您返回那个毛病:
{"error":{"message":"Missing argument input_text","code":400}}
它的意义是道出有带上考证码考证,当我们来失落的那个字段的时分,就能够考证了。

考证考证码的时分恳求头只需求有一个 user-agent 就能够了。

4. 恳求的一切阶段带上 cookie

知乎那个有个 cookie 值是考证码单据,是从第一次恳求考证码地点去的,便是上面那个:

怎样弄定知乎模仿登岸的减稀困难?-31.jpg

假如没有带 cookie恳求大概恳求挨次纷歧样皆有能够给您返回那个毛病:
{"error":{"message":"短少考证码单据","code":120002,"name":"ERR_CAPSION_TICKET_NOT_FOUND"}}
5.XXX

您借念要?出有了,坑临时只要那么多,最初给您们看下登岸胜利的成果:

怎样弄定知乎模仿登岸的减稀困难?-32.jpg

写正在最初

那个登岸合腾了好未几一周了,实践来讲多是三周,由于从刚开端看没有懂 js 代码,便跑来教了两周 js,如今总得来讲 js 也能够道上脚了,当前大概也会利用 nodejs 弄面爬虫,挺好玩的。

假如您上里看没有懂没关系,能够先来进修下 js,保举各人来廖雪峰的民网看 JavaScript 教程,写得蛮没有错的。

至于代码,临时没有宣布了,假如您一步一步根据我办法去弄的话估量也能够,条件的有 js 根底最好。

合腾那个,失落了很多头收,但传闻转收是死收之讲,以是您们懂的!

做者:sergiojune,一个酷爱合腾Python的教者。本文为做者投稿,尾收于做者小我私家公家号一样平常教python,版权回对圆一切。



上一篇:本人进来用饭居然多出去一个男伴侣???
下一篇:年夜卫·芬偶监造,豆瓣开评9.4,那部R级动绘剧散水了
回复

使用道具 举报

 

精彩评论3

正序浏览
rswfpin 发表于 2019-4-14 12:50:39 | 显示全部楼层
 
厉害了,最近也是研究一个前端加密,到了混淆部分
回复 支持 反对

使用道具 举报

 
shitouaaa 发表于 2019-4-14 12:51:23 | 显示全部楼层
 
我靠,看来真的要学js了,我的妈,验证码那一关我还没弄利索,现在又都用js反爬了
回复 支持 反对

使用道具 举报

 
wsm123123 发表于 2019-4-14 12:51:38 | 显示全部楼层
 
不容易[赞]
回复 支持 反对

使用道具 举报

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

本版积分规则

排行榜

关注我们:微信公众号

官方微信

APP下载

全国客服QQ:

3388506817

公司地址:天津市河西区陈塘庄青林大厦众创空间D11室

邮编:300222 Email:3388506817#qq.com

【版权声明】本站大部分内容由网友自发贡献,本站不拥有所有权,不承担相关法律责任,如有侵权请告知,本站将立刻删除涉嫌侵权内容。

Copyright   ©2015-2016  乐云媒自媒体之家Powered by©Discuz!技术支持:乐送网络     ( 津ICP备17006261号 )