前言
本文章中所有內容僅供學習交流使用,不用于其他任何目的,不提供完整代碼,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關!本文章未經許可禁止轉載,禁止任何修改后二次傳播,擅自使用本文講解的技術而導致的任何意外,作者均不負責,若有侵權,請聯系作者刪除。
網址:
aHR0cHM6Ly93d3cucGluZHVvZHVvLmNvbS9ob21lL21lZGljYWwv
目標:參數
anti_content
1.抓包分析
接口:query_tf_goods_info
2.逆向分析
直接搜索anti_content
進行定位,打上斷點,然后單步調試
發現 t.sent
就是我們需要加密參數,已經生成了,所以大概率是前面Object(x.a)()
生成的
Object(x.a)()
跟進去發現調了m方法,m方法調的是v方法,v方法里面還是一個控制流,單步調試會發現anti_content
在r.messagePackSync()
里面生成了
然后看一下r是哪里來的,找一下同級作用域下定義r的位置,
發現是r = new({serverTime:e})
,其中e是十位的時間戳,接下來找到i的定義位置,
這個明顯是webpack
打包的模塊,可以打上斷點然后進入n里面看看
那么大致的調用流程已經清楚了,
1. i = n("febz")
2. r = new({serverTime:e})
3. anti_content_Promise = r.messagePackSync()
r.messagePackSync()
返回的是一個Promise對象,里面包含了我們需要的anti_content
,
后面發現直接調用r.messagePack
生成直接就是anti_content,就不用異步改同步了,可以直接拿到結果。
接下來就是扣代碼環節
3.扣代碼
Js逆向案例 Scrape Spa2(Webpack自吐)
Js逆向之Webpack原理及如何扣代碼
對Webpack不熟悉的可以參考這兩篇文章
把加載器拿下來,找個地方先放著
接下來我們進行模塊自吐
注意傳入的r,要和我們需要調用的模塊保持一致 。
在加載器第一行打上條件斷點
aaa[r] = e[r],false
然后在 控制臺輸入aaa = {}
和 n = {}
,目的是定義一個空對象存放吐出的模塊 和清空已緩存的模塊
然后釋放斷點
此時aaa中獲取到了所有我們需要模塊,然后在控制臺輸入下面的代碼,將對象合并成字符串,
xxx = Object.entries(aaa).map(([key, value]) => `"${key}":${value}`).join(",\r\n")
copy(xxx)
然后進行Js格式化,然后找個地方先放著
JS在線格式化
然后回到我們之前扣下來的加載器,定義一個全局變量,然后導出加載器,隨后傳入模塊
get_anticontent = function (){i = xu.loader("fbeZ")xx = i({serverTime:Math.floor(Date.now()/1000)})anticontent = xx.messagePack()console.log("長度:",xx.messagePack().length)return anticontent}
然后在瀏覽器環境下調試一下
Ok,沒問題,接下就是在Node環境下運行,開始補環境
4.補環境
注意一下常見的Node環境檢測點即可,然后掛上代理開補。
借用一下大佬封裝好的代理即可
function setProxyArr(proxyObjArr) {for (let i = 0; i < proxyObjArr.length; i++) {const objName = proxyObjArr[i]; const handler = {get(target, property, receiver) {console.log("方法:", "get", "對象:", objName, "屬性:", property, "屬性類型:", typeof property, "屬性值:", target[property], "屬性值類型:", typeof target[property]);return target[property];}};// 檢查并初始化對象let targetObject = global[objName] || {}; // 在 Node.js 環境中使用 globalglobal[objName] = new Proxy(targetObject, handler); // 在 Node.js 中使用 global}
}
setProxyArr(['window', 'document','location','screen','history','navigator'])