亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當(dāng)前位置:首頁(yè) > IT技術(shù) > Web編程 > 正文

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

              一、總結(jié)

              1. 搜索:全局搜索、代碼內(nèi)搜索
              2. debug:常規(guī)debug、XHR debug、行為debug
              3. 查看請(qǐng)求調(diào)用的堆棧
              4. 執(zhí)行堆內(nèi)存中的函數(shù)
              5. 修改堆棧中的參數(shù)值
              6. 寫(xiě)js代碼
              7. 打印windows對(duì)象的值
              8. 勾子:cookie鉤子、請(qǐng)求鉤子、header鉤子

              二、js逆向技巧

              博客對(duì)應(yīng)課程的視頻位置:

              當(dāng)我們抓取網(wǎng)頁(yè)端數(shù)據(jù)時(shí),經(jīng)常被加密參數(shù)、加密數(shù)據(jù)所困擾,如何快速定位這些加解密函數(shù),尤為重要。本片文章是我逆向js時(shí)一些技巧的總結(jié),如有遺漏,歡迎補(bǔ)充。

              所需環(huán)境:Chrome瀏覽器

              1. 搜索

              1.1 全局搜索
              適用于根據(jù)關(guān)鍵詞快速定位關(guān)鍵文件及代碼

              當(dāng)前頁(yè)面右鍵->檢查,彈出檢查工具

              搜索支持 關(guān)鍵詞、正則表達(dá)式

              1.2 代碼內(nèi)搜索
              適用于根據(jù)關(guān)鍵詞快速定位關(guān)鍵代碼

              點(diǎn)擊代碼,然后按ctrl+f 或 command+f 調(diào)出搜索框。搜索支持 關(guān)鍵詞、css表達(dá)式、xpath

              2. debug

              2.1 常規(guī)debug
              適用于分析關(guān)鍵函數(shù)代碼邏輯

              a、埋下斷點(diǎn)

              b、調(diào)試

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

              1.執(zhí)行到下一個(gè)端點(diǎn)
              2.執(zhí)行下一步,不會(huì)進(jìn)入所調(diào)用的函數(shù)內(nèi)部
              3.進(jìn)入所調(diào)用的函數(shù)內(nèi)部
              4.跳出函數(shù)內(nèi)部
              5.一步步執(zhí)行代碼,遇到有函數(shù)調(diào)用,則進(jìn)入函數(shù)
              6.Call Stack 為代碼調(diào)用的堆棧信息,代碼執(zhí)行順序?yàn)橛上轮辽?,這對(duì)于著關(guān)鍵函數(shù)前后調(diào)用關(guān)系很有幫助

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

              2.3 行為debug
              適用于點(diǎn)擊按鈕時(shí),分析代碼執(zhí)行邏輯

              如圖所示,可快速定位點(diǎn)擊探索按鈕后,所執(zhí)行的js。

              3 查看請(qǐng)求調(diào)用的堆棧

              可以在 Network 選項(xiàng)卡下,該請(qǐng)求的 Initiator 列里看到它的調(diào)用棧,調(diào)用順序由上而下:

              4. 執(zhí)行堆內(nèi)存中的函數(shù)

              當(dāng)debug到某一個(gè)函數(shù)時(shí),我們想主動(dòng)調(diào)用,比如傳遞下自定義的參數(shù),這時(shí)可以在檢查工具里的console里調(diào)用

              此處要注意,只有debug打這個(gè)函數(shù)時(shí),控制臺(tái)里才可以調(diào)用。如果想保留這個(gè)函數(shù),可使用this.xxx=xxx 的方式。之后調(diào)用時(shí)無(wú)需debug到xxx函數(shù),直接使用this.xxx 即可。

              5. 修改堆棧中的參數(shù)值

              6. 寫(xiě)js代碼

              7. 打印windows對(duì)象的值

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

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

              8. 勾子

              以chrome插件的方式,在匹配到關(guān)鍵詞處插入斷點(diǎn)

              8.1 cookie鉤子
              用于定位cookie中關(guān)鍵參數(shù)生成位置

              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);
              當(dāng)cookie中匹配到了 TSdc75a61a, 則插入斷點(diǎn)。

              8.2 請(qǐng)求鉤子
              用于定位請(qǐng)求中關(guān)鍵參數(shù)生成位置

              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);
              當(dāng)請(qǐng)求的url里包含MmEwMD時(shí),則插入斷點(diǎn)

              8.3 header鉤子
              用于定位header中關(guān)鍵參數(shù)生成位置

              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);
              當(dāng)header中包含Authorization時(shí),則插入斷點(diǎn)

              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、如圖所示,創(chuàng)建一個(gè)文件夾,文件夾中創(chuàng)建一個(gè)鉤子函數(shù)文件inject.js 及 插件的配置文件 mainfest.json 即可

              b、打開(kāi)chrome 的擴(kuò)展程序, 加載已解壓的擴(kuò)展程序,選擇步驟1創(chuàng)建的文件夾即可

              c、切換回原網(wǎng)頁(yè),刷新頁(yè)面,若鉤子函數(shù)關(guān)鍵詞匹配到了,則觸發(fā)debug

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

              開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >