本文章中所有內容僅供學習交流,抓包內容、敏感網址、資料介面均已做脫敏處理,嚴禁用於商業用途和非法用途,否則由此產生的一切後果均與作者無關,若有侵權,請聯絡我立即刪除!
首先 剛進入頁面即顯示了
說明次題就和cookie有關係。
然後我們通過瀏覽器自帶的抓包軟體觀察一下
可以看到 這個介面是我們所需要的介面
這裡params的加密引數是 m
和 f
cookie的加密引數是 m
和 RM4hZBv0dDon443M
並且 RM4hZBv0dDon443M
的值也是定值 不會改變
經過多次分析,這兩個cookie的值 是一直改變且變化的
可以觀察到 這個 m
和params中的m
同名 那有沒有可能二者也存在某種關係呢?
既然是cookie 可以通過以下方式去查詢
控制檯有這麼一段資訊。一直會列印出來,
我們首先點進這個js檔案裡面
在1092行 發現這是個列印函數。很煩人,我們可以去除掉這段資訊。
第一種方式呢就是通過hook 改寫掉console.log
第二種方式呢 其實和hook差不多,就是直接把console.log 置空。
console.log = function () {
return
}
去除掉這段程式碼然後我們就可以分析這段程式碼了
可以看到在這段js裡面有大量的混淆程式碼
我們既然已經找到了 混淆的JS檔案
我們可以試著搜一搜RM4hZBv0dDon443M
看看能不能搜到,發現搜不到,我們可以再試試 m=
發現可以搜的到。而且這個值就是 RM4hZBv0dDon443M
的cookie值
我們也可以通過hook
然而 有個注意事項,其實直接hook是hook不進去這段程式碼的,所以我們需要打個斷點,然後手動的去hook
我們在這裡打上debuger 然後手動去注入如下程式碼
以下是hook的程式碼
(function () {
'use strict';
var cookie_cache = document.cookie;
Object.defineProperty(document, 'cookie', {
get: function () {
return cookie_cache;
},
set: function (val) {
console.log('Setting cookie', val);
// 填寫cookie名
if (val.indexOf('RM4hZBv0dDon443M') !== -1) {
debugger;
}
return val
}
});
})();
之後放開斷點 ============>>>>>
然後成功進入棧,然後我我們向上追棧 也能找到剛剛M=
的位置
然後我們測試了一下發現_0x4e96b4['_$ss']
函數是我們所需要的cookie值
'R' + 'M' + '4' + 'h' + 'Z' + 'B' + 'v' + '0' + 'd' + 'D' + 'o' + 'n' + '4' + '4' + '3' + 'M=' + _0x4e96b4['_$ss'] + ';\x20path=/';
我們列印下_0x4e96b4
發現其實它是個window物件。
通過這個window物件 ,我們看到 加密函數,指紋識別 還有一大堆都掛載在這個window物件裡面
這裡可以也可以通過兩種方式往下尋找加密棧
1.通過油猴指令碼來hook window 這個物件 2.通過Ast來還原這個混淆後的JS
這裡貼上hook程式碼
(
function(){
Object.defineProperty(window, '_$ss', {
set: function(val){
debugger;
console.log(val);
return val;
}
});
}
)();
如果通過hook 會發現(當然也可以繼續回車搜尋_0x4e96b4
) 走到如下位置>>>>>>
發現在1224 行有一個加密 函數。
發現這是個AES
通過這個我們可以發現AES加密需要傳入三個值,
這個message的值也是通過加密而來 是由五個類似於MD5的值拼接而來,然後轉換成位元組型別
可以通過兩種方式查詢 _$pr
window._$pr
_$pr
這裡我們直接搜尋
通過這個我們可以判斷 這個m的值 被放到了 window._$pr
中,然後再通過加密手段 得到了cookie RM4hZBv0dDon443M
的值。
其次這個key 也是掛載到windows中的
我們既然知道 這個值是 _$qF
我們來搜尋下 _$qF
這個值看看
發現直接給我們了。
而這個_0x4e96b4['_$is']
則是時間戳 所以說祕鑰應該是 通過base64編碼時間戳然後取16位元 做為祕鑰
_0x4e96b4['_$qF'] = CryptoJS['enc']['Utf8']["parse"](window.btoa(_0x4e96b4['_$is'])['slice'](0, 16));
我們直接看這個mode 和padding
mode:
padding:
url params中的 m 通過base64編碼取了16位元 做了 然後通過上文的這個函數,做了 cookie中的m
然後再用cookie的m 做了 RM4hZBv0dDon443M 加密的祕鑰
然後這個 url params中的f 就是cookie的過期時間
然後我們繼續往下追棧
而前面這個值
就是我們上文提到的 window._$ss
而後者 就是我們所需要的值
!話說有能力最好還是用AST 這麼弄真的很麻煩
這裡有個坑
他們每次的值都是變化的。
_0x4e96b4['_$6_']
_0x4e96b4['_$tT']
_0x4e96b4['_$Jy']
我們可以列印下看看, 也可以hook看看
所以說在扣程式碼時 這個要死
// 這三個資料不能變
_0x4e96b4['_$6_'] = -389564586
_0x4e96b4['_$tT'] = -660478335
_0x4e96b4['_$Jy'] = -405537848
友情提示 debugger 一定要打在這虛擬機器器裡面 大概在 23 行 window['\x24\x5f\x71\x70'] = window,
這個地方
(function () {
var hook__0x474032 = _0x474032;
_0x474032 = function (e) {
var _ = hook__0x474032(e);
console.log(`時間戳為${e} >>>> 加密後的資料為 ${_}`);
console.log(`_0x4e96b4['_$6_']++++++'${_0x4e96b4['_$6_']}'`)
console.log(`_0x4e96b4['_$tT']++++++'${_0x4e96b4['_$tT']}'`)
console.log(`_0x4e96b4['_$Jy']++++++'${_0x4e96b4['_$Jy']}'`)
return _;
}
})()
然後就扣程式碼,扣完程式碼放入執行即可