1. 解密 JS 參數(shù):逆向工程的實(shí)用技巧

        共 5111字,需瀏覽 11分鐘

         ·

        2023-06-05 19:14

        aaf341420fc38b664da64d6d0bff7736.webp

        大家好,我是安果!

        大部分網(wǎng)站都會(huì)對(duì)關(guān)鍵參數(shù)進(jìn)行加密,JS 逆向時(shí),我們首要任務(wù)是定位參數(shù)具體的加密邏輯

        常見方式包含:關(guān)鍵字搜索、堆棧調(diào)試、XHR 及事件監(jiān)聽、AST 內(nèi)存漫游、JS Hook 注入等

        本篇文章以 JS Hook 注入定位?Cookie 中某個(gè)加密參數(shù)為例進(jìn)行講解


        Cookie 監(jiān)聽 ?

        編寫一個(gè) Chrome 插件( V3 版本) 監(jiān)聽瀏覽器 Cookie?值的變動(dòng),當(dāng) Cookie 的 Name?匹配時(shí)執(zhí)行 debugger 命令主動(dòng)觸發(fā)調(diào)試

        具體實(shí)現(xiàn)如下:

        1-1?? 編寫 manifest.json 配置文件

        在配置文件中,指定 background.js、content_script

        并通過?permissions、host_permissions 進(jìn)行權(quán)限設(shè)置

                {
        ??"manifest_version":?3,
        ??...
        ??"background":?{
        ????"service_worker":?"background.js"
        ??},
        ??"content_scripts":[
        ????{
        ??????"matches":?[
        ????????""
        ??????],
        ??????"js":?[
        ????????"js/cookie.js"
        ??????],
        ??????"run_at":?"document_start"
        ???}],
        ??"permissions":?[
        ????"cookies",
        ????"tabs",
        ????"scripting"
        ??],
        ??"host_permissions":?[
        ????"https://host/*"
        ??],
        ?...
        }

        1-2?? 監(jiān)聽 Cookie

        在 background.js 文件中添加一個(gè)事件監(jiān)聽,在它的回調(diào)函數(shù)中再添加一個(gè)對(duì) Cookie 的監(jiān)聽事件

        當(dāng)監(jiān)聽到的?Cookie 滿足條件時(shí),發(fā)送消息給 Content Script?去執(zhí)行具體的動(dòng)作

        需要指出的是, changeInfo.cause?表示 Cookie 變化的原因,值?explicit?表示 Cookie 變化是由于用戶主動(dòng)操作導(dǎo)致的

                #?監(jiān)聽的cookie_name
        const?targetCookieName?=?"cookie_name";

        chrome.runtime.onMessage.addListener((request,?sender,?sendResponse)?=>?{
        ??if?(request.action?===?"startDebugging")?{

        ????chrome.cookies.onChanged.addListener((changeInfo)?=>?{
        ??????//console.log("監(jiān)控到cookie變化")
        ??????//console.log(changeInfo.cookie.name)
        ??????//console.log(changeInfo.cause)

        ??????if?(changeInfo.cookie.name?===?targetCookieName?&&?changeInfo.cause?===?"explicit")?{?
        ????????console.log("監(jiān)控到cookie變化-explicit,名稱:",changeInfo.cookie.name)
        ????????chrome.tabs.sendMessage(sender.tab.id,?{?action:?"debugger"?});
        ??????}
        ????});
        ??}
        });

        1-3? 觸發(fā)調(diào)試

        在 Content Script 中,主動(dòng)觸發(fā)一次發(fā)起調(diào)試的消息給 Background

        然后,設(shè)置一個(gè)監(jiān)聽事件,特定條件下主動(dòng)進(jìn)入調(diào)試模式

                //?cookie.js

        chrome.runtime.sendMessage({?action:?"startDebugging"?});

        chrome.runtime.onMessage.addListener((request)?=>?{
        if?(request.action?===?"debugger")?{
        ??????debugger;
        ??}
        });

        將編寫好的 Chrome 插件安裝到瀏覽器上,打開目標(biāo)網(wǎng)站及瀏覽器開發(fā)者工具

        只要指定的 Cookie 變動(dòng),就會(huì)自動(dòng)觸發(fā)調(diào)試操作


        Cookie Hook??

        通過上面的方式僅僅只能發(fā)現(xiàn) Cookie 變動(dòng)了,但是沒法定位到參數(shù)設(shè)置的具體位置,因此我們需要借助?Hook 進(jìn)行改造

        具體實(shí)現(xiàn)如下:

        2-1 配置文件中指定 Hook 文件

        在 manifest.json 文件中,使用? web_accessible_resources 關(guān)鍵字指定 Hook?腳本及匹配 URL

                //?manifest.json
        {
        ??"manifest_version":?3,
        ??...
        ??"content_scripts":?[
        ????{
        ??????"matches":?[
        ????????""
        ??????],
        ??????"js":?[
        ????????"js/cookie.js"
        ??????],
        ??????"run_at":?"document_end"
        ????}
        ??],
        ??"permissions":?[
        ????"cookies",
        ????"tabs",
        ????"scripting"
        ??],
        ??"host_permissions":?[
        ????"*://*/*"
        ??],
        ??"web_accessible_resources":?[
        ????{
        ??????"resources":?[
        ????????"js/cookie_hook.js"
        ??????],
        ??????"matches":?[
        ????????"https://host/*"
        ??????]
        ????}
        ??]
        }

        2-2? Content Script 注入 JS

        在 Content Script 中注入 JS Hook 代碼

                //?cookie.js
        function?import_js(js_path)?{
        ????let?tmp?=?document.createElement('script');
        ????tmp.src?=?chrome.runtime.getURL(js_path);
        ????tmp.setAttribute('type',?'text/javaScript');
        ????document.head.appendChild(tmp);
        }


        (function?()?{
        ????let?url?=?window.location.href;
        ????import_js('js/cookie_hook.js')
        })()

        2-3? JS Hook 具體邏輯

        在 cookie_hook.js 文件中,使用? document . __lookupSetter__?對(duì) Cookie 設(shè)置注入腳本,手動(dòng)觸發(fā)調(diào)試

                //?cookie_hook.js
        //待匹配的Cookie-Key
        const?targetCookieName?=?"cookie_name";

        //Hook?Cookie?Set
        //注意:這種方法可能與某些網(wǎng)站的JavaScript代碼不兼容,因?yàn)樗蕾囉趶U棄的__defineSetter__方法
        function?hookCookieSetter()?{
        ??const?originalCookieSetter?=?document.__lookupSetter__("cookie");

        ??document.__defineSetter__("cookie",?function?(value)?{
        ????const?cookieName?=?value.split("=")[0].trim();

        ????if?(cookieName?===?targetCookieName)?{
        ??????debugger;
        ????}

        ????//調(diào)用
        ????originalCookieSetter.call(document,?value);
        ??});
        }

        hookCookieSetter();

        當(dāng)然,我們也可以利用下面的方式進(jìn)行注入

                //?cookie_hook.js
        //待匹配的Cookie-Key
        const?targetCookieName?=?"cookie_name";

        //cookie 鉤子:用于定位 cookie 中關(guān)鍵參數(shù)生成位置
        var?code?=?function(){
        ????var?org?=?document.cookie.__lookupSetter__('cookie');
        ????document.__defineSetter__("cookie",function(cookie){
        ????????if(cookie.indexOf(targetCookieName)>-1){
        ????????????debugger;
        ????????}
        ????????org?=?cookie;
        ????});
        ????document.__defineGetter__("cookie",function(){return?org;});
        }
        var?script?=?document.createElement('script');
        script.textContent?=?'('?+?code?+?')()';
        (document.head||document.documentElement).appendChild(script);
        script.parentNode.removeChild(script);

        2-4?? 使用

        在 Chrome 瀏覽器中安裝擴(kuò)展后,打開瀏覽器開發(fā)者工具和目前網(wǎng)站,一旦目標(biāo) Cookie 被設(shè)定一個(gè)值后,會(huì)自動(dòng)進(jìn)入斷點(diǎn)模式

        在調(diào)試模式下,我們就可以在 Source 面板利用?Call Stack?調(diào)用棧一步步查詢到加密參數(shù)生成的具體邏輯

        推薦閱讀
        如何利用 Selenium 對(duì)已打開的瀏覽器進(jìn)行爬蟲!
        微軟最強(qiáng) Python 自動(dòng)化工具開源了!不用寫一行代碼!

        最全總結(jié) | 聊聊 Selenium 隱藏瀏覽器指紋特征的幾種方式!


        END


        好文和朋友一起看~
        瀏覽 57
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 天天插天天日 | 97超碰人人澡人人 | freexxxxhdvideo中国 | 日韩精品123 | 天天操夜夜操夜夜爽爽 |