參考:? ? ?https://github.com/clllanqing/solve_captcha/tree/master/anjuke
其實(shí)以前也破解過(guò),只是沒(méi)有詳細(xì)記錄 2.大神冷月的js破解代碼? ? ? ?https://lengyue.me/index.php/2018/10/06/anjuke/
準(zhǔn)備驗(yàn)證碼接口:? ? ??https://www.anjuke.com/captcha-verify/?callback=shield&from=antispam
破解安居客的反爬頁(yè)面url?:? ? ? ?https://www.anjuke.com/captcha-verify/?callback=shield
1? ?打開(kāi)google F12,清除緩存,訪問(wèn)url,滑動(dòng)一下試試
2? ?會(huì)發(fā)現(xiàn)checkV3為驗(yàn)證碼的請(qǐng)求接口

sessionId 存在于網(wǎng)頁(yè)內(nèi), responseId 則是從: sessionId= "".join(etree.HTML(html).xpath('//*[@id="sessionId"]/@value')).strip()
https://verifycode.58.com/captcha/getV3?callback=jQuery1910793616819186288_1538833002980&showType=embed&sessionId=d1cfd44eca6b4a2f9940ea8af414836d&_=1538833002981

這一步獲取的是data為 AES 加密。
第二步?拆分加密

我們找到AES 加密是這一塊 原數(shù)據(jù)為:
{
? ? "x": "126",
? ? "track": "23,34,0|24,33,41|26,33,50|34,32,65|47,31,81|63,31,99|84,31,116|121,31,132|145,31,150|166,33,165|185,35,181|201,36,200|216,38,216|228,40,232|235,41,249|241,41,265|249,43,282|256,43,300|260,43,315|266,44,333|271,45,352|273,47,367|274,47,382|275,47,408|274,47,596|272,47,604|270,47,616|267,48,633|265,48,649|260,48,668|251,48,684|240,48,699|227,48,716|210,49,733|201,49,750|193,50,765|189,50,783|188,51,799|185,51,815|183,51,982|180,51,999|177,51,1018|177,51,1033|175,51,1061|173,51,1088|172,51,1101|161,51,1117|158,51,1134|155,51,1150|153,50,1167|150,50,1183|149,50,1199|149,50,1217|149,50,1472|",
? ? "p": "0,0",
? ? "finger": "QOwj/ycQ413zOqrj7RGPPKg9gEwg3NX9YEoIDvfo3GrCYzgkCEUS77EzwxnnUmayin35brBb//eSODvMgkQULA=="
其中 track 和 x 一目了然 分別是 x坐標(biāo) 和 軌跡:? ?x,y,經(jīng)過(guò)的時(shí)間:finger? 看起來(lái)有點(diǎn)像指紋 (并不是
第三步?找出finger? ? ?https://cdata.58.com/fpToken?callback=dpjsonp_017597508371879544
finger的來(lái)源是

由此定位到

那么這是一個(gè)函數(shù)的回調(diào),然后找到:

這個(gè)函數(shù),這時(shí)候 MessageEvent出現(xiàn)了 堆棧也沒(méi)有信息:

找到了可愛(ài)的origin,得出 token 來(lái)自:

也就是finger了,至此 安居客解析完成。https://github.com/leng-yue/Lengyue-Vcode/tree/master/%E6%AF%8F%E5%91%A8%E4%B8%A4%E7%88%86/%E5%AE%89%E5%B1%85%E5%AE%A2
#請(qǐng)求數(shù)據(jù)為
callback: jQuery19108408108632218079_1543310767116? #估計(jì)用不到
responseId: ed3ce1892d6f4baa8e942e996a1553a7? ? ? ? ? ? ?#請(qǐng)求getV3接口獲取的值(其實(shí)是圖片的標(biāo)識(shí))
sessionId: fd3b3e22d056408cb898d357e585f4f6? ? ? ? ? ? ? #網(wǎng)頁(yè)中有
data: 6E997EC058A756D97A00A3432F1300BDA8C611A531F7E17874673574FFC2A12BC99892D3D659513EEB726CA92F8F6F4DDB4308CDD24263C64EA4C1B70C1BFD17451F66255BF1953A1CB7B7F0AF64EA13CC1AB8652E5BDD8B58AE575935B855B399967A8780EB21A26F0A9F140B4FA0636B7280369622B4C40E20BC42B8274A61E86C1F60709C240710960B2A3E7F2C4EF9E97D2405F32B7854DE1373FE606C56E1B7469CA736FDF316DE2B73BD30618DCE511A2AB84396F860CE5E9CDD8C713CABD34B88713A6AA04AD3664654B30DF34FC0648417056EB56B6EADB17204A9145B779E4FD417E9BFFDDD1CAA3C1E1E9F6B4B27DBB3F5AF3F3EB7D99DE0BA9418D929CD90B5820735FB7E30199CD2E18448BFC62878E56A4B3A0307EC83D332BF5126956180282EC014C2E6B259E88EA0DFD533CAF71068E901609967B6E13EA149EAA2F468D530D9537E6FFB90740D1E75007DE644A9ACE3D6CFF8F20E8302EDD1CAE33A7FDC7E8C30705AE5C54A3AE2? #加密數(shù)據(jù)
_: 1543310767118? ?
#返回?cái)?shù)據(jù)
jQuery19108408108632218079_1543310767116({
? ? "message": "校驗(yàn)失敗",
? ? "data": {
? ? ? ? "ischange": false,
? ? ? ? "status": 1
? ? },
? ? "code": 0
})
3? ?獲取responseId
#請(qǐng)求鏈接? ? ?請(qǐng)求數(shù)據(jù)
callback: jQuery19108408108632218079_1543310767116? #估計(jì)用不到
showType: embed? ? #固定值(驗(yàn)證碼類型)
sessionId: fd3b3e22d056408cb898d357e585f4f6? #網(wǎng)頁(yè)中的值
_: 1543310767117? #時(shí)間
#返回?cái)?shù)據(jù)
jQuery19108408108632218079_1543310767116({
? ? "message": "成功",
? ? "data": {
? ? ? ? "responseId": "ed3ce1892d6f4baa8e942e996a1553a7",
? ? ? ? "level": 310,
? ? ? ? "status": 0,
? ? ? ? "puzzleImgUrl": "/captcha/captcha_img?rid=ed3ce1892d6f4baa8e942e996a1553a7&it=_puzzle",
? ? ? ? "tip": "請(qǐng)點(diǎn)擊并將滑塊拖動(dòng)到指定位置",
? ? ? ? "bgImgUrl": "/captcha/captcha_img?rid=ed3ce1892d6f4baa8e942e996a1553a7&it=_big"
? ? },
? ? "code": 0
})
4? ?破解加密數(shù)據(jù)
知識(shí)點(diǎn)1,如果是xhr的請(qǐng)求,可以在XHR/fetch Breakpoints中打斷點(diǎn),數(shù)據(jù)url的部分值
知識(shí)點(diǎn)2,如果是js的請(qǐng)求,可以直接點(diǎn)進(jìn)那個(gè)js文件
知識(shí)點(diǎn)3,點(diǎn)進(jìn)的js文件會(huì)定位到ajax的內(nèi)部函數(shù),Call Stack可以看堆棧(點(diǎn)checkVerifyResult函數(shù)),可以看到熟悉的ajax請(qǐng)求
5? ?加密數(shù)據(jù)是由CryptoJS加密的
只是一段js 下載這個(gè)js就行了
6? ? 路徑數(shù)組的獲得 因?yàn)槁窂胶蜁r(shí)間滑動(dòng)的距離都有關(guān)系,如果只是用加速度模擬,我試了好久都沒(méi)有試出來(lái) 我的做法是 直接打開(kāi)google調(diào)試工具,在驗(yàn)證碼滑動(dòng)的地方打斷點(diǎn),然后重復(fù)滑動(dòng)了200次,得到200個(gè)軌跡數(shù)組,以后直接去路徑數(shù)組中找到對(duì)應(yīng)的路徑就可以了
7? ?圖片的滑動(dòng)的距離 簡(jiǎn)單的像素分析,很垃圾,但是正確率80%+把
8? ? js 以前的做法是打一個(gè)node.js,將js代碼全部丟進(jìn)去 現(xiàn)在使用execJs.