這裏看到參數只有一個需要解密然後下斷點,找到這個位置,Object(c.b)(data.password, "AmrGowGCtUwd/2PgTyrJuV==")進入 Object(c.b)可以看到是一個通用庫加密方式,找到在綫網站,輸入密鑰 AmrGowGCtUwd/2PgTyrJuV== 測試分析 Object(c.b) 對應的函數函數功能根據提供的函數定義,可以得出以下結論:功能: 這個函式 r 主要用於 加密 資料。加密方式: 使用的是 TripleDES 加密算法,以 ECB 模式進行加密,並採用 PKCS7 填充。輸入參數:e: 需要加密的原始資料(明文)。t: 加密使用的密鑰,以 UTF-8 格式解析。輸出結果:返回加密後的密文,以字符串形式表示。函數解析引入加密庫: 函數中使用了 o 物件,這個物件很可能是引入的加密庫(例如 CryptoJS)的一個命名空間,提供了加密相關的函數和常量。密鑰解析: o.enc.Utf8.parse(t) 這部分將傳入的密鑰 t 從 UTF-8 字符串轉換為加密庫可以使用的內部表示形式。加密操作: o.TripleDES.encrypt(
看登陸包,驗證碼先不管,可以看到加密參數只有password。找到位置,斷點,可以發現調用的是 E.fM 來加密明文數據。往上面翻就找到了E的位置,s(802123)斷點並刷新網頁,去尋找分發器,跳轉到了o的位置,那麽o就是分發器。文件全部複製,新建一個js文件來測試。外部定義一個變量來接收 o ,并在o裏面打印調試信息找到 802123: 發現裏面調用的太多了,乾脆全部複製,添加到我們的調試函數裏面。我們只要内容,外邊的就去掉粘貼到 e 裏面運行發現報錯,找到那一行,注釋掉就可以了,我也不清楚這這行代碼有什麽用。繼續調試,面板輸出的模塊名,從網頁裏面搜了再補充就好了。最後看看效果:全部代碼
查看登錄包,ts明顯是時間戳,通過斷點可以知道password是經過md5加密,所以把焦點放到sign上面。看到了h的内容,其中後面的key是固定的找到d函數斷點,跳轉到這裏,可以看到這符合 webpack格式經過測試 e 為傳進去的明文數據,n 則是未定義,我們往上面找 t 賦值函數,t 再跳轉到 n 對n那裏斷點,刷新頁面,就找到了解釋器的位置複製全部的内容,然後在後面添加執行函數,同時在函數結束前聲明一個變量接收看下面就是加密解析成功了全部代碼:var encryption_obj; var window = global; (function(t) { function e(e) { for (var i, a, r = e[0], c = e[1], u = e[2], p = 0, l = []; p < r.length; p++) a = r[p], Object.prototype.hasOwnProperty.call(n, a) && n[a] && l
RSA 加密詳解什麼是 RSA 加密?RSA 是一種非對稱加密演算法,廣泛應用於資訊安全領域,尤其是網路通訊。它的名稱來自於三位發明者 Rivest、Shamir 和 Adleman 的姓氏首字母。RSA 的工作原理非對稱加密: RSA 使用一對密鑰:公鑰和私鑰。公鑰可以公開分發,而私鑰必須嚴格保密。加密與解密:加密: 使用公鑰對明文進行加密,得到密文。解密: 使用私鑰對密文進行解密,恢復出原始的明文。數學基礎: RSA 的安全性基於大整數分解問題的難解性。也就是說,要從公鑰中推算出私鑰在計算上是不可行的。RSA 的關鍵組成模數 (modulus): 是一個大整數,用於模運算。公鑰指數 (public exponent): 一個小於模數的整數,用於公鑰加密。私鑰指數 (private exponent): 一個大整數,用於私鑰解密。公鑰: 由模數和公鑰指數組成。私鑰: 由模數和私鑰指數組成。RSA 的加密過程生成密鑰對: 選擇兩個大素數 p 和 q,計算模數 n = p * q,再根據歐拉函數計算出其他參數,生成公鑰和私鑰。加密: 使用公鑰對明文進行模冪運算,得到密文。解密: 使用私鑰
從登陸包可以看到用戶名和密碼的加密方法為同一個繼續搜尋相關參數,找到如下代碼,即通過 encryptByAES 函數加密。提取出來以後,可以看到結果和登陸包的請求内容是一樣的相關js代碼:function encryptByAES(message, key) { let CBCOptions = { iv: CryptoJS.enc.Utf8.parse(key), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }; let aeskey = CryptoJS.enc.Utf8.parse(key); let secretData = CryptoJS.enc.Utf8.parse(message); let encrypted = CryptoJS.AES.encrypt( secretData, aeskey, CBCOptions ); return CryptoJS.e
觀察登錄包,貌似只有sign加密了,是連同輸入的密碼一起加密的,timestamp很明顯是時間戳看上去是層層相扣,要找到sign的參數,就要找到 cr 的值,要找到 cr 的值,就要找到 we 的值不管了,直接全部扣下來,他媽的, var Qe = { exports: {} }; (function(t) { (function() { var e = "input is invalid type" , n = "finalize already called" , o = typeof window == "object" , r = o ? window : {}; r.JS_MD5_NO_WINDOW && (o = !1); var a = !o && typeof self =
!function(a, b) { "object" == typeof exports ? module.exports = exports = b() : "function" == typeof define && define.amd ? define([], b) : a.CryptoJS = b() }(this, function() { var a = a || function(a, b) { var n, c = Object.create || function() { function a() {} return function(b) { var c; return a.prototype = b, c = new a, a.prototype = null, c
API_KEY為2captcha的API import requests creat_task_url = 'https://2captcha.com/in.php?key=API_KEY&method=userrecaptcha&googlekey=WEBSITE_KEY&pageurl=URL' id = '' res = requests.get(creat_task_url) if res.status_code == 200: id = str(re.findall('\|(\d*)', res.text)[0]) time.sleep(20) code_res = requests.get(f'https://2captcha.com/res.php?key=API_KEY&action=get&id={id}') print(code_res.text)
找登錄包后看到三個參數:1.token(網頁刷新直接頁面就可以通過f12搜尋到)2.email3.password(加密)剩下就是尋找加密函數了,搜索token后看到頁面加密的位置,encryptPass('emailPwdInp'),那麽接下來搜索 encryptPass找到加密函數了 function encrypt (str) { const key = CryptoJS.enc.Utf8.parse("idcsmart.finance") const iv = CryptoJS.enc.Utf8.parse("9311019310287172") var encrypted = CryptoJS.AES.encrypt(str, key, { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: iv, }).toString() return encrypted } function encryptPass (id) { le
關於上篇文章用到的驗證碼跳過工具,此次驗證類型為 Turnstile 請求示例為:{ "clientKey":"cc9c18d3e263515c2c072b36a7125eecc078618f", "task": { "type":"TurnstileTaskProxyless", "websiteURL":"https://react-turnstile.vercel.app", "websiteKey":"1x00000000000000000000AA" } }找到了key為 0x4AAAAAAAFWUVCKyusT9T8rwebsiteURL為 https://dashboard.proxyscrape.com/login然後獲取token,傳入到 cf-turnstile-response 參數,發送請求包就好了。
看了一篇帖子,找到了思路來源。對於登錄包,我們通過f12查看到請求網址為:https://www.nodeseek.com/api/account/signIn 該請求為post。然後查看載荷發現該post包,由四部分組成:passwordusernametokenversion可以看到token是必備的,儅看到v3的時候我的反應是 reCaptcha V3驗證。整理思路:1.注冊api用來跳過驗證2.提取api返回的響應3.將api返回的響應添加並模擬發送post包正文開始:1.首先注冊yescaptcha2.獲取 ReCaptcha 网站密钥、Action,websiteURL,分別為:6LebtWYjAAAAAGeCv0BCBmvCcdgZiU6VbLfV3xktsubmithttps://www.nodeseek.com/api/account/signIn或者 f12后 在控制臺輸入以下脚本:function findRecaptchaClients() { // eslint-disable-next-line camelcase if (typeof (___gr