要分析的參數為:digest conversationId smsCodesmsCode 對應的是驗證碼全部代碼: window = global const NodeRSA = require('node-rsa'); // 引入用于 RSA 加密的模块 const crypto = require('crypto'); // 引入 Node.js 自带的加密模块 // 当前时间 const curtime = Date.now(); function formatNumber(num, n) { let rv = num.toString(); const length = rv.length; if (length <= n) { rv = '0'.repeat(n - length) + rv; } else { rv = rv.substring(length - n); } return rv; } function getConversationId(curtime) {
看上去參數蠻多的,請求内容倒是沒加密,主要是請求頭的這部分:traceparent 和 tracestate 蠻簡單的,一個是直接扣就行,另一個是webpack,像之前一樣扣就行,這兩個參數搞定了。後續的參數等我更新吧。var Tool_obj function k(e) { return Array.from({ length: e }).map(( () => "0123456789abcdef".charAt(Math.floor(16 * Math.random())))).join("") } traceparent = `00-${k(32)}-${k(16)}-${"00"}` console.log(traceparent) !function(o){ c = {}; function l(e) { var t = c[e]; if (void 0 !== t) return t.expo
這個網站的邏輯大致如下:第一次访问后:https://auth.fedex.com/am/json/realms/root/realms/alpha/authenticate?authIndexType=service&authIndexValue=LP_user_login&_si=0获取網頁返回的authId后作为第二个url:https://auth.fedex.com/am/json/realms/root/realms/alpha/authenticate?authIndexType=service&authIndexValue=LP_user_login&_si=1的请求体获取第二个url返回的authId网页内容,作为第三个url的请求体:https://auth.fedex.com/am/json/realms/root/realms/alpha/authenticate?authIndexType=service&authIndexValue=LP_user_login&_si=2最後獲取到結果。雖然這個邏輯搞清了,但是實際操作好像有點麻煩,有個參數似乎蠻難辦的,如下
找到登陸包,看到需要兩個參數,comp_d 和 uLogin(下面password的加密算法相同。)我先找的 uLogin,抓包定位,然後找到 crypt.encode 方法,跟進去,這個方法只會執行後面那個,所以從後面開始扒下。直接給出算法cb_utob = function(R) { let oe = null; return R.length < 2 ? (oe = R.charCodeAt(0), oe < 128 ? R : oe < 2048 ? fromCharCode(192 | oe >>> 6) + fromCharCode(128 | oe & 63) : fromCharCode(224 | oe >>> 12 & 15) + fromCharCode(128 | oe >>> 6 & 63) + fromCharCode(128 | oe & 63)) : (oe = 65536 + (R.charCodeAt(0) - 55296)
測試過了,headers并沒有加密的東西,必須携帶Cookie才能獲取響應内容,經過篩選,找到如下三個必備參數.bm_sz 參數是第一次訪問這個網頁,網站返回的,JSESSIONID 在不同網頁訪問返回的,第三個是固定值。那麽主要就是獲取 JSESSIONID,發現請求頭有加密,測試了,只要解決這個參數就順水推舟了。找到 this.calculateDigest(V + z + K + W["x-dbi-app-id"] + W["x-dbi-app-version"] + W["x-dbi-build-number"]);webpack,扣解釋器后傳入模塊就好了,這裏遇到一個問題,解釋器上面的好像有些問題,改成以下就行了。那麽下面是全部代碼:var encryption_obj; var window = global; !function(g){ // var e, g = {}, v = {}; v = {} function t(e) { var f = v[e]; if (void 0 !== f)
一般的網站接口都是固定的url地址,但是這個網站有點特殊。以下是正常請求網頁地址,會返回一些cookie,後面發包需要用到。這個是登陸包,箭頭指向的是會變化的。也就是説,根據每次打開瀏覽器訪問這個登錄接口,都會生成不同的地址,構成不同的url(我在這裏卡了好久,明明headers和cookies還有請求内容都正確但是一直訪問失敗。)搜索這個值,回到第一個請求包的響應内容裏面。這個網站沒什麽難度,考驗的是細心。第一次訪問頁面會返回csrf、cookie,保存后第二次用之前獲取的參數拼接url,配置好headers和cookies,最後發包就行了。
在請求頭裏面有這麽個參數,嘗試逆向。看到如下代碼,找到了h和x,代碼類型為 webpack我盡力了,雖然沒有報錯,但是輸出不了結果,如下是代碼,有解決方案可以在下面評論var encryption_obj; var window = global; !function(e){ t = {}; function n(r) { var i = t[r]; if (void 0 !== i) return i.exports; var a = t[r] = { id: r, loaded: !1, exports: {} }; console.log(r) return e[r].call(a.exports, a, a.exports, n), a.loaded = !0, a.exports } n.o = function(e,
逆向一個登錄包,這個參數從網站頁面就可以獲取,但是不是主頁面,而是打開那個login頁面后重新更新的内容,主頁面字段太長了,大概覆蓋整個頁面,而打開login頁面后刷新的字段卻很短,在這裏踩坑了(把主頁面的字段放到請求體裏面了)后經過python可以輕易獲取數據,我換了另一個工具卻不行,嘗試請求頭相同,也不行,經過對比請求體,發現 python自動把 "/" 這個符號轉變爲url編碼 %2F,而我另一個工具獲取到的内容則是 "/",因爲這個差異,導致請求失敗。然後把另一個工具獲取到的數據通過url編碼,就可以正常請求了。花了我蠻長時間的,他媽的。
一直用的racknerd傢的,雖然硬盤只有15G,時不時崩(博客打不開),後來我的寶塔面板甚至都打不開了,重啓了幾遍,端口也開放了,後來衝動重裝了,現在想來應該先備份/www/wwwroot/目錄下的文件,還有sql,寶塔面板和這幾個應該不會牽連,雖然我有設置谷歌硬盤插件自動備份,數據庫是沒問題的,但是web文件在雲盤沒找到備份,只找到8月份的,導致圖片丟失。不過幸好我最近更新的博文少,所以重新上傳了圖片。我現在換成官方的aapanel面板了。遇到這種問題的解決思路:想辦法恢復面板 >> 然後備份本地/www/wwwroot下的文件 >> 備份數據庫 >> 重裝因爲我更換了域名,導致之前的typecho 圖片丟失,直接在VPS上面運行以下代碼即可:UPDATE `typecho_contents` SET `text` = REPLACE(`text`,'旧网址','新网址')然後是縮略圖鏈接更改:UPDATE typecho_fields SET str_value = REPLACE(str_value, 'https://blog.xueli.
測試過了如果沒有這個參數或者這個參數錯誤,就會訪問失敗,看似是uuid,但是網站隨機生成的不可用。然後斷點,搜索關鍵詞,不停的斷點和刷新網頁繼續跟,在uc這裏繼續跟找到了,以下是代碼: const Dr = []; for (let t = 0; t < 256; ++t) Dr.push((t + 256).toString(16).slice(1)); function SD(t, e=0) { return Dr[t[e + 0]] + Dr[t[e + 1]] + Dr[t[e + 2]] + Dr[t[e + 3]] + "-" + Dr[t[e + 4]] + Dr[t[e + 5]] + "-" + Dr[t[e + 6]] + Dr[t[e + 7]] + "-" + Dr[t[e + 8]] + Dr[t[e + 9]] + "-" + Dr[t[e + 10]] + Dr[t[e + 11]] + Dr[t[e + 12]] + Dr[t[e + 13]] + Dr
這裏看到參數只有一個需要解密然後下斷點,找到這個位置,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(
熟悉的感覺,是GDDDDD!!!Youtube Link
下单: https://just.hosting/?ref=190337https://justhost.asia/?ref=187286月付1折优惠码:VPSONE90季付/半年付没这么大优惠力度,不推荐购买指南这家计费系统比较神奇,这里说下怎么买比较便宜。先给账户充点钱(一两美元就够),然后选VPS计划下单,地点选俄罗斯-莫斯科。最便宜 0.28美元/月 1核/1G/20G NVMe/300Mbps@不限流量https://just.hosting/zh/services/vps/tariffs/sirius?promocode=VPSONE90&software=centos9&location=dataline&ipv4_count=1&ipv6_count=0&svc_count=1&payment_months=1&cpu_options=none&plan=sirius性价比高 2C/4G 0.78美元/月https://just.hosting/zh/services/vps/tariffs/vega?promocode=&software=centos9&locati
原域名不用了,現更換為 yariaa.lol本博客地址:blog.yariaa.lol
看登陸包,驗證碼先不管,可以看到加密參數只有password。找到位置,斷點,可以發現調用的是 E.fM 來加密明文數據。往上面翻就找到了E的位置,s(802123)斷點並刷新網頁,去尋找分發器,跳轉到了o的位置,那麽o就是分發器。文件全部複製,新建一個js文件來測試。外部定義一個變量來接收 o ,并在o裏面打印調試信息找到 802123: 發現裏面調用的太多了,乾脆全部複製,添加到我們的調試函數裏面。我們只要内容,外邊的就去掉粘貼到 e 裏面運行發現報錯,找到那一行,注釋掉就可以了,我也不清楚這這行代碼有什麽用。繼續調試,面板輸出的模塊名,從網頁裏面搜了再補充就好了。最後看看效果:全部代碼