<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          解密 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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费在线成人网 | 免费看无码 | 干AV影院 | 91三级片在线观看 | 欧美就是色 |