<tbody id="j99e4"></tbody>

<dd id="j99e4"></dd>

  • <button id="j99e4"><object id="j99e4"></object></button>
      1. <th id="j99e4"></th>
        <button id="j99e4"><acronym id="j99e4"></acronym></button><rp id="j99e4"><object id="j99e4"><input id="j99e4"></input></object></rp>
        當前位置:首頁 > IT技術 > Web編程 > 正文

        js逆向技巧
        2022-09-06 22:53:29

        一、總結

        1. 搜索:全局搜索、代碼內搜索
        2. debug:常規debug、XHR debug、行為debug
        3. 查看請求調用的堆棧
        4. 執行堆內存中的函數
        5. 修改堆棧中的參數值
        6. 寫js代碼
        7. 打印windows對象的值
        8. 勾子:cookie鉤子、請求鉤子、header鉤子

        二、js逆向技巧

        博客對應課程的視頻位置:

        當我們抓取網頁端數據時,經常被加密參數、加密數據所困擾,如何快速定位這些加解密函數,尤為重要。本片文章是我逆向js時一些技巧的總結,如有遺漏,歡迎補充。

        所需環境:Chrome瀏覽器

        1. 搜索

        1.1 全局搜索
        適用于根據關鍵詞快速定位關鍵文件及代碼

        當前頁面右鍵->檢查,彈出檢查工具

        搜索支持 關鍵詞、正則表達式

        1.2 代碼內搜索
        適用于根據關鍵詞快速定位關鍵代碼

        點擊代碼,然后按ctrl+f 或 command+f 調出搜索框。搜索支持 關鍵詞、css表達式、xpath

        2. debug

        2.1 常規debug
        適用于分析關鍵函數代碼邏輯

        a、埋下斷點

        b、調試

        如圖所示,我標記了1到6,下面分別介紹其含義

        1.執行到下一個端點
        2.執行下一步,不會進入所調用的函數內部
        3.進入所調用的函數內部
        4.跳出函數內部
        5.一步步執行代碼,遇到有函數調用,則進入函數
        6.Call Stack 為代碼調用的堆棧信息,代碼執行順序為由下至上,這對于著關鍵函數前后調用關系很有幫助

        2.2 XHR debug
        匹配url中關鍵詞,匹配到則跳轉到參數生成處,適用于url中的加密參數全局搜索搜不到,可采用這種方式攔截

        2.3 行為debug
        適用于點擊按鈕時,分析代碼執行邏輯

        如圖所示,可快速定位點擊探索按鈕后,所執行的js。

        3 查看請求調用的堆棧

        可以在 Network 選項卡下,該請求的 Initiator 列里看到它的調用棧,調用順序由上而下:

        4. 執行堆內存中的函數

        當debug到某一個函數時,我們想主動調用,比如傳遞下自定義的參數,這時可以在檢查工具里的console里調用

        此處要注意,只有debug打這個函數時,控制臺里才可以調用。如果想保留這個函數,可使用this.xxx=xxx 的方式。之后調用時無需debug到xxx函數,直接使用this.xxx 即可。

        5. 修改堆棧中的參數值

        6. 寫js代碼

        7. 打印windows對象的值

        在console中輸入如下代碼,如只打印_$開頭的變量值

        for (var p in window) {
        if (p.substr(0, 2) !== "_$")
        continue;
        console.log(p + " >>> " + eval(p))
        }

        8. 勾子

        以chrome插件的方式,在匹配到關鍵詞處插入斷點

        8.1 cookie鉤子
        用于定位cookie中關鍵參數生成位置

        var code = function(){
        var org = document.cookie.lookupSetter('cookie');
        document.defineSetter("cookie",function(cookie){
        if(cookie.indexOf('TSdc75a61a')>-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);
        當cookie中匹配到了 TSdc75a61a, 則插入斷點。

        8.2 請求鉤子
        用于定位請求中關鍵參數生成位置

        var code = function(){
        var open = window.XMLHttpRequest.prototype.open;
        window.XMLHttpRequest.prototype.open = function (method, url, async){
        if (url.indexOf("MmEwMD")>-1){
        debugger;
        }
        return open.apply(this, arguments);
        };
        }
        var script = document.createElement('script');
        script.textContent = '(' + code + ')()';
        (document.head||document.documentElement).appendChild(script);
        script.parentNode.removeChild(script);
        當請求的url里包含MmEwMD時,則插入斷點

        8.3 header鉤子
        用于定位header中關鍵參數生成位置

        var code = function(){
        var org = window.XMLHttpRequest.prototype.setRequestHeader;
        window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){
        if(key=='Authorization'){
        debugger;
        }
        return org.apply(this,arguments);
        }
        }
        var script = document.createElement('script');
        script.textContent = '(' + code + ')()';
        (document.head||document.documentElement).appendChild(script);
        script.parentNode.removeChild(script);
        當header中包含Authorization時,則插入斷點

        8.4 manifest.json
        插件的配置文件

        {
        "name": "Injection",
        "version": "2.0",
        "description": "RequestHeader鉤子",
        "manifest_version": 2,
        "content_scripts": [
        {
        "matches": [
        "<all_urls>"
        ],
        "js": [
        "inject.js"
        ],
        "all_frames": true,
        "permissions": [
        "tabs"
        ],
        "run_at": "document_start"
        }
        ]
        }
        使用方法
        a、如圖所示,創建一個文件夾,文件夾中創建一個鉤子函數文件inject.js 及 插件的配置文件 mainfest.json 即可

        b、打開chrome 的擴展程序, 加載已解壓的擴展程序,選擇步驟1創建的文件夾即可

        c、切換回原網頁,刷新頁面,若鉤子函數關鍵詞匹配到了,則觸發debug

        本文摘自 :https://www.cnblogs.com/

        亚洲人成图偷偷小说_亚洲图片小说激情综合_国产精品亚洲自在线播放页码_久久综合亚洲色hezyo国产
        <tbody id="j99e4"></tbody>

        <dd id="j99e4"></dd>

      2. <button id="j99e4"><object id="j99e4"></object></button>
          1. <th id="j99e4"></th>
            <button id="j99e4"><acronym id="j99e4"></acronym></button><rp id="j99e4"><object id="j99e4"><input id="j99e4"></input></object></rp>