JS逆向之加密參數(shù)定位
前言
當(dāng)我們對網(wǎng)絡(luò)請求進(jìn)行抓包分析之后,需要用開發(fā)者工具對加密參數(shù)進(jìn)行全局搜索。當(dāng)搜索不到加密參數(shù)的時(shí)候,應(yīng)該采取什么解決方法去定位。
還有一個(gè)應(yīng)用場景是我們發(fā)現(xiàn)請求服務(wù)端的時(shí)候有一個(gè)cookie,而這個(gè)cookie又不是服務(wù)端返回的,那么它很有可能就是JS生成的,怎么快速定位這個(gè)cookie生成的地方。
加密參數(shù)的處理步驟
在JS逆向的過程中,當(dāng)遇到有加密參數(shù)的時(shí)候,不是上來就找函數(shù)入口進(jìn)行分析,這樣的話會(huì)走很多彎路。簡單描述一下這個(gè)過程的一般流程,下面的步驟很重要,可以幫你少走很多彎路。
- 重放攻擊
- 刪參數(shù)進(jìn)行重放攻擊。當(dāng)你遇到一個(gè)加密參數(shù),可以嘗試刪除這個(gè)參數(shù)的情況下進(jìn)行重放攻擊,如果成功的話,說明該參數(shù)并不是必須的,可以省去分析的過程。
- 如果重放攻擊無效,再查看參數(shù)是不是某個(gè)接口的返回值
- 如果不是接口返回值,直接在頁面源碼里面搜索,看這個(gè)參數(shù)是否是頁面的固定值(關(guān)于這一點(diǎn),我之前就走過一次彎路,參數(shù)直 接固定在頁面里面了,結(jié)果我用各種方法愣是沒找著)
- 如果需要定位cookie,優(yōu)先看包的返回內(nèi)容是否有set-cookie
加密參數(shù)的定位方法
如果前面的五個(gè)步驟都進(jìn)行了嘗試,還找不到參數(shù)來源的話,就需要通過逆向分析的方法去找到參數(shù)的來源。一般來說有下面幾種方案。
搜索
開發(fā)者工具里面一共有兩個(gè)搜索,這兩個(gè)搜索的作用域不一樣,一個(gè)只能搜索到當(dāng)前的頁面元素,第二個(gè)是全局的搜索,可以搜索到所有的內(nèi)容。
使用這種方案定位加密參數(shù)的位置會(huì)比較準(zhǔn)確,但是搜索到的位置會(huì)比較多,需要進(jìn)行篩選。
斷點(diǎn)
XHR斷點(diǎn)
以網(wǎng)易云音樂為例,
當(dāng)我點(diǎn)擊播放按鈕的時(shí)候,可以看到這么一條請求,攜帶的返回?cái)?shù)據(jù)里面有音樂的url下載鏈接。如果我們能夠模擬這個(gè)請求,那么就可以做到下載網(wǎng)易云音樂的目的。
這個(gè)請求里面需要攜帶兩個(gè)參數(shù),params和encSecKey
那么我們就可以在source面板的XHR斷點(diǎn)里面添加一個(gè)包含params的斷點(diǎn),當(dāng)請求的內(nèi)容里面包含這個(gè)字符串的時(shí)候就會(huì)斷下來。
這個(gè)時(shí)候我們點(diǎn)擊播放,可以看到程序已經(jīng)斷下來了,并且arguments的值就是我們想要追蹤的加密參數(shù),那么這個(gè)時(shí)候就可以通過調(diào)用堆棧向上去找到加密參數(shù)的生成位置了。
DOM斷點(diǎn)
所謂的DOM斷點(diǎn),其實(shí)就是通過給頁面的DOM節(jié)點(diǎn)附帶的事件添加斷點(diǎn)。
我們可以通過頁面的選擇器定位到這個(gè)按鈕,然后右鍵break on下斷,當(dāng)這個(gè)節(jié)點(diǎn)或者屬性發(fā)生改變的時(shí)候,程序會(huì)斷下,但是在這個(gè)案例里面這個(gè)DOM斷點(diǎn)并不會(huì)生效。
這個(gè)斷點(diǎn)的應(yīng)用場景是頁面的元素或者屬性發(fā)生改變的時(shí)候,在登陸的場景里面用的比較多。
EVENT斷點(diǎn)
首先用選擇器選擇播放按鈕,然后在EventListener里面有這個(gè)元素的所有的事件
點(diǎn)開click事件,里面有這個(gè)元素的點(diǎn)擊事件,不過選項(xiàng)還是比較多,不太容易篩選。
然后也可以在source頁面的Event Listener Breakpoints里面,把需要下斷的事件打勾,就可以直接斷下來。
hook
我們也可以通過hook的方式,通過hook一些關(guān)鍵函數(shù),來獲取到一些信息,下面都是一些HOOK了以后對逆向有幫助的點(diǎn)
json cookie window attr eval/Function websocket
以json為例,可以去Hook下面兩個(gè)函數(shù)
JSON.stringify JSON.parse
通過HOOK這兩個(gè)方法,打印參數(shù),就可以拿到所有的json相關(guān)的字符串,也就相當(dāng)于在網(wǎng)站里面加入了一個(gè)日志系統(tǒng)。其他幾個(gè)HOOK點(diǎn)的應(yīng)用也是類型。
關(guān)于cookie的hook
如果想要快速找到cookie算法的生成位置,可以對cookie進(jìn)行hook,這個(gè)是最常見的hook方案, 由于 cookie 是document里面的屬性,所以我們可以修改 document這個(gè)對象中 cookie屬性的描述符。
(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('填cookie名') != -1) { debugger; } var cookie = val.split(";")[0]; var ncookie = cookie.split("="); var flag = false; var cache = cookie_cache.split("; "); cache = cache.map(function (a) { if (a.split("=")[0] === ncookie[0]) { flag = true; return cookie; } return a; }) cookie_cache = cache.join("; "); if (!flag) { cookie_cache += cookie + "; "; } return cookie_cache; } }); })();
上面的代碼對對象屬性的cookie進(jìn)行了hook,當(dāng)獲取cookie的時(shí)候會(huì)打印cookie的值,當(dāng)設(shè)置cookie的時(shí)候如果滿足要求,那么就會(huì)產(chǎn)生debugger斷點(diǎn),斷到cookie生成的位置,從而就可以去分析加密算法了。
到此這篇關(guān)于JS逆向之加密參數(shù)定位的文章就介紹到這了,更多相關(guān)JS 加密參數(shù)定位內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript使用docx-preview和mammoth預(yù)覽Docx
這篇文章主要為大家詳細(xì)介紹了兩個(gè)庫,即docx-preview和mammoth,利用它們,你就能在瀏覽器中完美預(yù)覽 Word 文檔,甚至連表格樣式,頁眉頁腳都原汁原味地呈現(xiàn)出來,下面我們來看看具體使用步驟吧2025-04-04Javascript創(chuàng)建自定義對象 創(chuàng)建Object實(shí)例添加屬性和方法
創(chuàng)建自定義對象的最簡單的方式就是創(chuàng)建一個(gè)Object實(shí)例,然后再為它添加屬性和方法2012-06-06javascript實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)頁面
本文給大家介紹了如何使用javascript實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)到其他頁面的方法以及實(shí)現(xiàn)原理,非常的簡單實(shí)用,有需要的小伙伴可以參考下。2016-01-01原生JS+HTML5實(shí)現(xiàn)跟隨鼠標(biāo)一起流動(dòng)的粒子動(dòng)畫效果
這篇文章主要介紹了原生JS+HTML5實(shí)現(xiàn)跟隨鼠標(biāo)一起流動(dòng)的粒子動(dòng)畫效果,涉及javascript事件響應(yīng)、數(shù)值運(yùn)算及頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05