聲明:
本文章中所有內容僅供學習交流使用,不用于其他任何目的,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關!
根據上一篇文章,我們破解了本網站的,手機號和密碼驗證,這篇文章我們繼續破解sign加密值?python爬蟲:喜馬拉雅登錄案例-CSDN博客
-
?我們今年天要破解的就是請求加密的sign值(箭頭所指):
?前置知識點:判斷加密值可能采用哪種算法
- 我們這個案例的sign值是:3dc612f47e51715f62e0d1ab66490637c16b4851
- 這個值的長度是40,我們就可以找找網上的加密網站?SHA1 在線加密工具 | 菜鳥工具
- 我們可以挨個試一下,只有sha1算法符合我們的sign,我們就推斷sign值可能是使用的啥sha1算法加密
?1. 找到我們之前的加密入口進行觀察(找到signnature),我們判斷應該與e有關
- ?在這一張圖中,我們看到它定義了e,所以我們應該點進a.getSignature中查看js源代碼代碼如下
var e = (0,a.getSignature)({account: n,password: i,nonce: t});
- ?懸浮鼠標,點進源碼,查看源碼,復制、粘貼源碼:
?
?2. 把代碼復制到Pycharm中進行調試
- 其中我們知道n,i是我們之前逆向出來的值,none可能是固定值、也有可能是變化值
- ?在調試過程中,代碼出現了錯誤,如下圖:
- ?我們就發現錯誤,但是讀代碼我們就可以看出,這個函數是將n、i、t的值今昔那個拼接,js代碼可以處理,python也可以處理(這里我們就使用js進行處理把,有基礎的可以試一試使用python去處理)
?
- ?解決了y的錯誤,我們需要解決d的錯誤(這里的d看著像是個固定值),我們直接把固定值拿過來
3.最后我們就破解了它的sign值
- 代碼如下:?
cryptoJs = require("crypto-js")d = "WEB-V1-PRODUCT-E7768904917C4154A925FBE1A3848BC3E84E2C7770744E56AFBC9600C267891F"function y(t) {var e = "", r = Object.keys(t).sort((function (t, e) {return (t = t.charCodeAt(0)) - (e = e.charCodeAt(0))})), n = r.length;return r.forEach((function (r, o) {var i = t[r];e += "".concat(r, "=").concat(i),o < n - 1 && (e += "&")})),e
}function getSignature() {var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, e = y(t) + "&" + d;return e.toUpperCase(),cryptoJs.SHA1(e.toUpperCase()).toString()
}let n = "duWIGfpxabRcy5On5nyp37xK6r5JsL5vvzBC40SnqBl+ahQaKibOnJXeAWjOOWO8mOMQGnxxF1GyOpclRAdOkJvMb1ELSFqgFBbilqUtZipPJzzFyaRUMmbI+W9+m7VBDV1gAGwxUpj79M4x6ksl62QQrxm4k/IYybO9x9tZiFg="
let i = "Y2OZqFIfMpmKcIM98fOedsuwN0KHfvSlSQq6ugie7cYKH2F5hd3c6tXoKTzqeBkTKPo4qgbelCKLOvRdkShls0rBHuwEUZ4z2WJSyYSKG96natp7XhopHh27UUDGQX1BHSlNu8g0axx5WG9e9wEKKIhh2pz/LhbcZcBfAQ6qD9s="
let t = "0-29DAD105A65486c80bf90ec611605af8df9feffc8ec85e24e195efdc8e36d5"// 測試
ret = getSignature({account: n,password: i,nonce: t
});console.log(ret)