js逆向技巧分享

當(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è)面右鍵->檢查真慢,彈出檢查工具


-w771

搜索支持 關(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


-w567

2. debug

2.1 常規(guī)debug

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

  1. 埋下斷點(diǎn)

    -w963
  2. 調(diào)試

    -w790

    如圖所示朗鸠,我標(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ù)全局搜索搜不到芽卿,可采用這種方式攔截

-w991

2.3 行為debug

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

-w1515

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

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

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

-w1211

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

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

-w990

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

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

1580782927968_2

6. 寫js代碼

-w647

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"
        }
    ]
}

使用方法

  1. 如圖所示闰蚕,創(chuàng)建一個(gè)文件夾,文件夾中創(chuàng)建一個(gè)鉤子函數(shù)文件inject.js 及 插件的配置文件 mainfest.json 即可

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

    -w634
  3. 切換回原網(wǎng)頁(yè)没陡,刷新頁(yè)面,若鉤子函數(shù)關(guān)鍵詞匹配到了索赏,則觸發(fā)debug

    -w763

總結(jié)

以上為我做js逆向分析時(shí)用到的手段盼玄,如有不足之處或更多技巧,歡迎指教補(bǔ)充潜腻。愿本文的分享對(duì)您之后分析js有所幫助埃儿。謝謝~

下期分享預(yù)告

字體加密破解

1565671931221_4

了解更多

歡迎加入知識(shí)星球 https://t.zsxq.com/eEmAeae

知識(shí)星球

本星球?qū)W⒂谂老x(chóng)技術(shù)分享,通過(guò)一些案例詳細(xì)講解爬蟲(chóng)中遇到的問(wèn)題以及解決手段融涣。涉及的知識(shí)包括但不限于 爬蟲(chóng)框架刨析童番、js逆向、中間人威鹿、selenium 妓盲、pyppeteer、Android 逆向专普!期待您的加入悯衬,和我們一起探討爬蟲(chóng)技術(shù),拓展爬蟲(chóng)思維!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筋粗,一起剝皮案震驚了整個(gè)濱河市策橘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娜亿,老刑警劉巖丽已,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異买决,居然都是意外死亡沛婴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門督赤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嘁灯,“玉大人,你說(shuō)我怎么就攤上這事躲舌〕笮觯” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵没卸,是天一觀的道長(zhǎng)羹奉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)约计,這世上最難降的妖魔是什么诀拭? 我笑而不...
    開(kāi)封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮煤蚌,結(jié)果婚禮上耕挨,老公的妹妹穿的比我還像新娘。我一直安慰自己铺然,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布酒甸。 她就那樣靜靜地躺著魄健,像睡著了一般。 火紅的嫁衣襯著肌膚如雪插勤。 梳的紋絲不亂的頭發(fā)上沽瘦,一...
    開(kāi)封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音农尖,去河邊找鬼析恋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盛卡,可吹牛的內(nèi)容都是我干的助隧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滑沧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼并村!你這毒婦竟也來(lái)了巍实?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哩牍,失蹤者是張志新(化名)和其女友劉穎棚潦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體膝昆,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丸边,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荚孵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妹窖。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖处窥,靈堂內(nèi)的尸體忽然破棺而出嘱吗,到底是詐尸還是另有隱情,我是刑警寧澤滔驾,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布谒麦,位于F島的核電站,受9級(jí)特大地震影響哆致,放射性物質(zhì)發(fā)生泄漏绕德。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一摊阀、第九天 我趴在偏房一處隱蔽的房頂上張望耻蛇。 院中可真熱鬧,春花似錦胞此、人聲如沸臣咖。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)夺蛇。三九已至,卻和暖如春酣胀,著一層夾襖步出監(jiān)牢的瞬間刁赦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工闻镶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甚脉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓铆农,卻偏偏與公主長(zhǎng)得像牺氨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355