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