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

webpack打包是前端js模块化压缩打包常用的手段。同时对于后端的爬虫调试有着一下困扰。
简单的认识下:https://zhuanlan.zhihu.com/p/79706247 原理性知识。

1、webpack打包的特征

定义上来说:自执行(例:!funtcion)函数的外边一个大的数组。
举例说明:

1、函数数值在自执行的函数后边(特征代码和上边原理链接有类似的代码地方)
!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 = "//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、函数的列表会单独的生成一个文件夹,自执行的入口在其他文件。
(window.webpackJsonp = window.webpackJsonp || []).push([[0], {1:function1(), 2:function2()}

总结:
webpack打包后的代码有一个在自执行函数内的入口,这个入口可能会在函数数组上边或者其他文件夹。

2、如何找到自执行入口

对于上边第一种,我们很简单的就能看到自执行函数在上边。但是对于第二种,我们需要在执行的地方打断点调试。
如:


图片.png

点击定位位置,就能出来函数的执行位置。

3、数组内函数的运行流程

代码解释下:

    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、他们拥有相同的参数,这些参数在不同的执行阶段(不同函数内),参数的值是不同的,但是大部分是可能摸索的,比如:我找的headers中的加密值在t中,我就会侧重跟踪t的值
2、这些函数的执行都是需要经过执行器,可以简单的看下,执行器内一般都为x.call(c,e,n)类型。都是经过执行器然后用call执行函数。
重点:某些网站,如上图中t.exports我们可以显性的体会到它是暴露模块,但是,这种语法还是真没见过哈哈,它return上边的值是打不住断点的,调用函数一般执行的都是exports,可能我还没看明白。

4、如何调试

首先说,js文件会在浏览器进行缓存,对于同一个界面中,进行的xhr请求不会出现二次加载的情况。打包后的代码块可能不会进行二次加载,如上图中在11451打断点是不会断着,这就会影响逆向调试。
但是我们对加密部分的调试还是会正常进行的,相对来说麻烦了一点。

图上示例网站:aHR0cHM6Ly93d3cucWl4aW4uY29tLw==

实战:链接https://www.jianshu.com/p/5c42730a4e84

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343