聲明
本文章中所有內(nèi)容僅供學(xué)習(xí)交流,抓包內(nèi)容、敏感網(wǎng)址、數(shù)據(jù)接口均已做脫敏處理,嚴禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無關(guān),若有侵權(quán),請聯(lián)系我立即刪除!
網(wǎng)站
https://match.yuanrenxue.cn/match/5
網(wǎng)站分析
首先 剛進入頁面即顯示了
說明次題就和cookie有關(guān)系。
然后我們通過瀏覽器自帶的抓包軟件觀察一下
可以看到 這個接口是我們所需要的接口
這里params的加密參數(shù)是 m
和 f
cookie的加密參數(shù)是 m
和 RM4hZBv0dDon443M
并且 RM4hZBv0dDon443M
的值也是定值 不會改變
經(jīng)過多次分析,這兩個cookie的值 是一直改變且變化的
可以觀察到 這個 m
和params中的m
同名 那有沒有可能二者也存在某種關(guān)系呢?
既然是cookie 可以通過以下方式去查找
- 查找set_cookie
- 通過搜索 cookie的key 或者直接搜索cookie
- hook cookie
抓包分析
控制臺有這么一段信息。一直會打印出來,
我們首先點進這個js文件里面
在1092行 發(fā)現(xiàn)這是個打印函數(shù)。很煩人,我們可以去除掉這段信息。
第一種方式呢就是通過hook 改寫掉console.log
第二種方式呢 其實和hook差不多,就是直接把console.log 置空。
console.log = function () {
return
}
去除掉這段代碼然后我們就可以分析這段代碼了
可以看到在這段js里面有大量的混淆代碼
尋找參數(shù)
我們既然已經(jīng)找到了 混淆的JS文件
我們可以試著搜一搜RM4hZBv0dDon443M
看看能不能搜到,發(fā)現(xiàn)搜不到,我們可以再試試 m=
發(fā)現(xiàn)可以搜的到。而且這個值就是 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=
的位置
然后我們測試了一下發(fā)現(xiàn)_0x4e96b4['_$ss']
函數(shù)是我們所需要的cookie值
'R' + 'M' + '4' + 'h' + 'Z' + 'B' + 'v' + '0' + 'd' + 'D' + 'o' + 'n' + '4' + '4' + '3' + 'M=' + _0x4e96b4['_$ss'] + ';\x20path=/';
我們打印下_0x4e96b4
發(fā)現(xiàn)其實它是個window對象。
通過這個window對象 ,我們看到 加密函數(shù),指紋識別 還有一大堆都掛載在這個window對象里面
這里可以也可以通過兩種方式往下尋找加密棧
1.通過油猴腳本來hook window 這個對象 2.通過Ast來還原這個混淆后的JS
這里貼上hook代碼
(
function(){
Object.defineProperty(window, '_$ss', {
set: function(val){
debugger;
console.log(val);
return val;
}
});
}
)();
如果通過hook 會發(fā)現(xiàn)(當(dāng)然也可以繼續(xù)回車搜索_0x4e96b4
) 走到如下位置>>>>>>
發(fā)現(xiàn)在1224 行有一個加密 函數(shù)。
發(fā)現(xiàn)這是個AES
通過這個我們可以發(fā)現(xiàn)AES加密需要傳入三個值,
message:加密的值
這個message的值也是通過加密而來 是由五個類似于MD5的值拼接而來,然后轉(zhuǎn)換成字節(jié)類型
可以通過兩種方式查找 _$pr
- hook
window._$pr
- 直接搜索
_$pr
這里我們直接搜索
通過這個我們可以判斷 這個m的值 被放到了 window._$pr
中,然后再通過加密手段 得到了cookie RM4hZBv0dDon443M
的值。
key: 加密秘鑰
其次這個key 也是掛載到windows中的
我們既然知道 這個值是 _$qF
我們來搜索下 _$qF
這個值看看
發(fā)現(xiàn)直接給我們了。
而這個_0x4e96b4['_$is']
則是時間戳 所以說秘鑰應(yīng)該是 通過base64編碼時間戳然后取16位 做為秘鑰
_0x4e96b4['_$qF'] = CryptoJS['enc']['Utf8']["parse"](window.btoa(_0x4e96b4['_$is'])['slice'](0, 16));
cfg: 配置
我們直接看這個mode 和padding
mode:
padding:
結(jié)論
url params中的 m 通過base64編碼取了16位 做了 然后通過上文的這個函數(shù),做了 cookie中的m
然后再用cookie的m 做了 RM4hZBv0dDon443M 加密的秘鑰
然后這個 url params中的f 就是cookie的過期時間
然后我們繼續(xù)往下追棧
而前面這個值
就是我們上文提到的 window._$ss
而后者 就是我們所需要的值
!話說有能力最好還是用AST 這么弄真的很麻煩
扣代碼
這里有個坑
他們每次的值都是變化的。
_0x4e96b4['_$6_']
_0x4e96b4['_$tT']
_0x4e96b4['_$Jy']
我們可以打印下看看, 也可以hook看看
所以說在扣代碼時 這個要死
// 這三個數(shù)據(jù)不能變
_0x4e96b4['_$6_'] = -389564586
_0x4e96b4['_$tT'] = -660478335
_0x4e96b4['_$Jy'] = -405537848
友情提示 debugger 一定要打在這虛擬機里面 大概在 23 行 window['\x24\x5f\x71\x70'] = window,
這個地方文章來源:http://www.zghlxwxcb.cn/news/detail-465578.html
(function () {
var hook__0x474032 = _0x474032;
_0x474032 = function (e) {
var _ = hook__0x474032(e);
console.log(`時間戳為${e} >>>> 加密后的數(shù)據(jù)為 ${_}`);
console.log(`_0x4e96b4['_$6_']++++++'${_0x4e96b4['_$6_']}'`)
console.log(`_0x4e96b4['_$tT']++++++'${_0x4e96b4['_$tT']}'`)
console.log(`_0x4e96b4['_$Jy']++++++'${_0x4e96b4['_$Jy']}'`)
return _;
}
})()
然后就扣代碼,扣完代碼放入執(zhí)行即可文章來源地址http://www.zghlxwxcb.cn/news/detail-465578.html
到了這里,關(guān)于JS逆向?qū)崙?zhàn)15——猿人學(xué)第五題 動態(tài)cookie亂碼增強的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!