js逆向--webpack打包怎么辦?

webpack打包是前端js模塊化壓縮打包常用的手段访敌。同時對于后端的爬蟲調(diào)試有著一下困擾寺旺。
簡單的認識下:https://zhuanlan.zhihu.com/p/79706247 原理性知識。

1阻塑、webpack打包的特征

定義上來說:自執(zhí)行(例:!funtcion)函數(shù)的外邊一個大的數(shù)組。
舉例說明:

1渤昌、函數(shù)數(shù)值在自執(zhí)行的函數(shù)后邊(特征代碼和上邊原理鏈接有類似的代碼地方)
!function(t) {
    function e(e) {
        for (var i, o, s = e[0], l = e[1], u = e[2], h = 0, d = []; h < s.length; h++)
            o = s[h],
            Object.prototype.hasOwnProperty.call(r, o) && r[o] && d.push(r[o][0]),
            r[o] = 0;
        for (i in l)
            Object.prototype.hasOwnProperty.call(l, i) && (t[i] = l[i]);
        for (c && c(e); d.length; )
            d.shift()();
        return a.push.apply(a, u || []),
        n()
    }
    function n() {
        for (var t, e = 0; e < a.length; e++) {
            for (var n = a[e], i = !0, s = 1; s < n.length; s++) {
                var l = n[s];
                0 !== r[l] && (i = !1)
            }
            i && (a.splice(e--, 1),
            t = o(o.s = n[0]))
        }
        return t
    }
    var i = {} , r = {15: 0}, a = [];
    function o(e) {if (i[e])return i[e].exports;var n = i[e] = {
i: e,l: !1,exports: {}};return t[e].call(n.exports, n, n.exports, o),n.l = !0,n.exports}
o.m = t,o.c = i,o.d = function(t, e, n) {o.o(t, e) || Object.defineProperty(t, e, {enumerable: !0,
get: n })} ,o.r = function(t) {"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {value: "Module"}),Object.defineProperty(t, "__esModule", {value: !0 })},
    o.t = function(t, e) {
        if (1 & e && (t = o(t)),8 & e)return t; if (4 & e && "object" == typeof t && t && t.__esModule)return t;var n = Object.create(null); if (o.r(n),Object.defineProperty(n, "default", {enumerable: !0,value: t }),2 & e && "string" != typeof t)for (var i in t)o.d(n, i, function(e) {return t[e]}.bind(null, i));return n },o.n = function(t) {var e = t && t.__esModule ? function() {return t.default}: function() {return t};return o.d(e, "a", e),e},o.o = function(t, e) {return Object.prototype.hasOwnProperty.call(t, e)},o.p = "http://bgcdn.qixin.com/pcweb/";
    var s = window.webpackJsonp = window.webpackJsonp || []
      , l = s.push.bind(s);s.push = e, s = s.slice();for (var u = 0; u < s.length; u++) e(s[u]);
    var c = l;a.push([2250, 0]),n()}([function1(), function2()])
2独柑、函數(shù)的列表會單獨的生成一個文件夾忌栅,自執(zhí)行的入口在其他文件索绪。
(window.webpackJsonp = window.webpackJsonp || []).push([[0], {1:function1(), 2:function2()}

總結(jié):
webpack打包后的代碼有一個在自執(zhí)行函數(shù)內(nèi)的入口,這個入口可能會在函數(shù)數(shù)組上邊或者其他文件夾瑞驱。

2钱烟、如何找到自執(zhí)行入口

對于上邊第一種,我們很簡單的就能看到自執(zhí)行函數(shù)在上邊拴袭。但是對于第二種拥刻,我們需要在執(zhí)行的地方打斷點調(diào)試父泳。
如:


圖片.png

點擊定位位置惠窄,就能出來函數(shù)的執(zhí)行位置。

3楞卡、數(shù)組內(nèi)函數(shù)的運行流程

代碼解釋下:

    1747: function(t, e, n) {
        t.exports = n(1843)
    },
    1748: function(t, e, n) {
        "use strict";
        t.exports = function(t, e) {
            return function() {
                for (var n = new Array(arguments.length), r = 0; r < n.length; r++)
                    n[r] = arguments[r];
                return t.apply(e, n)
            }
        }
    },

1、他們擁有相同的參數(shù)淘捡,這些參數(shù)在不同的執(zhí)行階段(不同函數(shù)內(nèi))焦除,參數(shù)的值是不同的作彤,但是大部分是可能摸索的,比如:我找的headers中的加密值在t中宦棺,我就會側(cè)重跟蹤t的值
2瓣距、這些函數(shù)的執(zhí)行都是需要經(jīng)過執(zhí)行器黔帕,可以簡單的看下代咸,執(zhí)行器內(nèi)一般都為x.call(c,e,n)類型。都是經(jīng)過執(zhí)行器然后用call執(zhí)行函數(shù)成黄。
重點:某些網(wǎng)站呐芥,如上圖中t.exports我們可以顯性的體會到它是暴露模塊,但是奋岁,這種語法還是真沒見過哈哈思瘟,它return上邊的值是打不住斷點的,調(diào)用函數(shù)一般執(zhí)行的都是exports闻伶,可能我還沒看明白滨攻。

4、如何調(diào)試

首先說蓝翰,js文件會在瀏覽器進行緩存光绕,對于同一個界面中,進行的xhr請求不會出現(xiàn)二次加載的情況畜份。打包后的代碼塊可能不會進行二次加載停蕉,如上圖中在11451打斷點是不會斷著慧起,這就會影響逆向調(diào)試。
但是我們對加密部分的調(diào)試還是會正常進行的屈尼,相對來說麻煩了一點甲捏。

圖上示例網(wǎng)站:aHR0cHM6Ly93d3cucWl4aW4uY29tLw==

實戰(zhàn):鏈接http://www.reibang.com/p/5c42730a4e84

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市大溜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌付材,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異页徐,居然都是意外死亡,警方通過查閱死者的電腦和手機贰锁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門物咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芯肤,“玉大人崖咨,你說我怎么就攤上這事署拟。” “怎么了馒铃?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我述寡,道長,這世上最難降的妖魔是什么螟炫? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任然评,我火速辦了婚禮碗淌,結(jié)果婚禮上碎罚,老公的妹妹穿的比我還像新娘。我一直安慰自己耙考,他們只是感情好倦始,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布枚碗。 她就那樣靜靜地躺著肮雨,像睡著了一般锡足。 火紅的嫁衣襯著肌膚如雪舶得。 梳的紋絲不亂的頭發(fā)上纫骑,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天捻撑,我揣著相機與錄音个唧,去河邊找鬼徙歼。 笑死魄梯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稀蟋,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼窃肠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糯而,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤诺祸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仰禀,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年映企,在試婚紗的時候發(fā)現(xiàn)自己被綠了苹享。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝌衔,死狀恐怖挟鸠,靈堂內(nèi)的尸體忽然破棺而出硅急,到底是詐尸還是另有隱情,我是刑警寧澤凤壁,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站淌哟,受9級特大地震影響誊垢,放射性物質(zhì)發(fā)生泄漏缴啡。R本人自食惡果不足惜秒咐,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澳泵,春花似錦击喂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至段审,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背催式。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咽白。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子漱抓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353