国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

這篇具有很好參考價(jià)值的文章主要介紹了網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

WebPack打包:
webpack是一個(gè)基于模塊化的打包(構(gòu)建)工具, 它把一切都視作模塊。
概念:
webpack是 JavaScript 應(yīng)用程序的模塊打包器,可以把開發(fā)中的所有資源(圖片、js文件、css文件等)都看成模塊,通過(guò)loader(加載器)和plugins(插件)對(duì)資源進(jìn)行處理,打包成符合生產(chǎn)環(huán)境部署的前端資源。所有的資源都是通過(guò)JavaScript渲染出來(lái)的。
如果一個(gè)頁(yè)面大部分是script標(biāo)簽構(gòu)成,80%以上是webpack打包。

網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

  1. webpack打包簡(jiǎn)介

網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

?網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

1.0 多個(gè)JS文件打包:
如果模塊比較多,就會(huì)將模塊打包成JS文件, 然后定義一個(gè)全局變量 window[“webpackJsonp”] = [ ],它的作用是存儲(chǔ)需要?jiǎng)討B(tài)導(dǎo)入的模塊。
然后重寫 window[“webpackJsonp”] 數(shù)組的 push( ) 方法為 webpackJsonpCallback( ),也就是說(shuō) window[“webpackJsonp”].push( ) 其實(shí)執(zhí)行的是 webpackJsonpCallback( ),window[“webpackJsonp”].push( )接收三個(gè)參數(shù),第一個(gè)參數(shù)是模塊的ID,第二個(gè)參數(shù)是 一個(gè)數(shù)組或者對(duì)象,里面定義大量的函數(shù),第三個(gè)參數(shù)是要網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

1.1 webpack數(shù)組形式

給需要處理業(yè)務(wù)的模塊進(jìn)行打包,通過(guò)下標(biāo)取值。
!function(e) {
    var t = {};

    // 加載器  所有的模塊都是從這個(gè)函數(shù)加載 執(zhí)行
    function n(r) {
        if (t[r])
            return t[r].exports;
        var o = t[r] = {
            i: r,
            l: !1,
            exports: {}
        };
        return e[r].call(o.exports, o, o.exports, n),
            o.l = !0,
            o.exports
    }

    n(0)
}
    ([
        function () {
            console.log('123456')
        },

              function () {
            console.log('模塊2')
        },
    ])

1.2 webpack對(duì)象形式

給需要處理業(yè)務(wù)的模塊進(jìn)行打包,通過(guò)key取值。
!function(e) {
    var t = {};
    //  所有的模塊 都是從這個(gè)加載器 執(zhí)行的  分發(fā)器
    function n(r) {
        if (t[r])
            return t[r].exports;
        var o = t[r] = {
            i: r,
            l: !1,
            exports: {}
        };
        return e[r].call(o.exports, o, o.exports, n),
        o.l = !0,
        o.exports
    }
   n(1)  // 對(duì)象 根據(jù)KEY 找模塊
}({

        0: function () {
            console.log('我是模塊1')
        },

        1: function () {
            console.log('我是模塊2')
        }
    }
);
  1. webpack處理代碼
    2.1 逆向目標(biāo)

    站點(diǎn):http://www.kuwo.cn/

    參數(shù):reqId

2.2 逆向分析

全局搜索關(guān)鍵字,查看生成位置,方便后續(xù)調(diào)試

網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

下斷點(diǎn)調(diào)試,發(fā)現(xiàn)是C函數(shù)

網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

繼續(xù)調(diào)試發(fā)現(xiàn)是這個(gè)模塊進(jìn)行了處理

網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

2.3 結(jié)果處理
網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

  1. webpack案例
    3.2 逆向分析

    地址:https://static.waitwaitpay.com/web/sd_se/index.html
    接口:https://api.waitwaitpay.com/api/vendors/nearby
    目標(biāo):響應(yīng)數(shù)據(jù)

4.2 逆向分析
打開目標(biāo)網(wǎng)站,往下拉,在開發(fā)者工具可以抓到這三個(gè)包,其中nearby接口請(qǐng)求到的數(shù)據(jù)是加密之后的密文
網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

4.2.1 關(guān)鍵字搜索
這個(gè)時(shí)候可以嘗試再在該文件里搜索 JSON.parse就會(huì)找到這樣一個(gè)地方,這里可以發(fā)現(xiàn)有一個(gè)decode函數(shù),就比較可疑,下個(gè)斷點(diǎn)

網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

數(shù)據(jù)處理
往上看堆棧,可以發(fā)現(xiàn)該函數(shù)就是解密的入口,講請(qǐng)求得到的加密數(shù)據(jù)e傳到f函數(shù),即可解密得到明文數(shù)據(jù)
網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

可以很明顯的看到這個(gè)f函數(shù)內(nèi)部關(guān)鍵調(diào)用了這兩個(gè)函數(shù)來(lái)進(jìn)行數(shù)據(jù)的解密,那么,我們首先就來(lái)看看這個(gè) a.default.decode ,向上尋找a是在哪里被定義的

網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

可發(fā)現(xiàn) a = s(n(432)),這里的432就是代表導(dǎo)出webpack打包的大數(shù)組里面第432個(gè)大函數(shù),大數(shù)組指的是這個(gè)大數(shù)組
4.2.2 JavaScript分析
? 那我們?cè)诒镜豭s里面,怎么才能實(shí)現(xiàn)像瀏覽器這樣導(dǎo)出呢,這個(gè)時(shí)候我們可以直接去找到 導(dǎo)出器 類似于 exports 這樣的關(guān)鍵字,所有的 webpack 導(dǎo)出器都是長(zhǎng)這樣的
?
網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)

直接復(fù)制全部的代碼,之前已經(jīng)發(fā)現(xiàn)處理解密的話只有f函數(shù),觀察整個(gè)函數(shù)調(diào)用第三方庫(kù)很少,那么就可以全復(fù)制代碼,然后調(diào)用這個(gè)函數(shù)即可。

直接扣出加密代碼,調(diào)用當(dāng)前這個(gè)函數(shù)

// 本地的話,我們就可以這樣來(lái)進(jìn)行導(dǎo)出然后賦值給a還有o
function s(e) {
    return e && e.__esModule ? e : {
        default: e
    }
};
// 這里的window.ts就是上面導(dǎo)出器函數(shù)
var a = s(window.ts(432));
var o = s(window.ts(423));

總結(jié)(webpack逆向步驟)

  • 找到這個(gè)加載器
  • 找到調(diào)用模塊
  • 構(gòu)造一個(gè)自執(zhí)行方法
  • 導(dǎo)出加密方法
  • 編寫自定義方法 按照流程加密

聲明:本文章所有演示內(nèi)容僅供學(xué)習(xí)交流使用,嚴(yán)禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無(wú)關(guān),若有侵權(quán),請(qǐng)聯(lián)系作者立即刪除!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-431438.html

到了這里,關(guān)于網(wǎng)頁(yè)爬蟲之WebPack模塊化解密(JS逆向)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 20230728----重返學(xué)習(xí)-跨域-模塊化-webpack初步

    跨域 為什么要跨域? 瀏覽器為了安全,不能讓我們的html文件可以隨意引用別的服務(wù)器中的文件,只允許我們的html或js文件中,請(qǐng)求我們自己服務(wù)器。這個(gè)就是瀏覽器的同源策略。 因?yàn)槲覀兊木W(wǎng)頁(yè)是一個(gè)html文件,這個(gè)html是在一個(gè)域名里的。而這個(gè)html會(huì)引用各種文件,如圖片

    2024年02月15日
    瀏覽(51)
  • js 模塊化

    模塊化主要是用來(lái)抽離公共代碼,隔離作用域,避免變量沖突等。 模塊化的整個(gè)發(fā)展歷史如下: IIFE :使用自執(zhí)行函數(shù)來(lái)編寫模塊化,特點(diǎn):在一個(gè)單獨(dú)的函數(shù)作用域中執(zhí)行代碼,避免代碼沖突。 AMD :使用 require 來(lái)編寫模塊化,特點(diǎn):依賴必須提前聲明好。 CMD :使用 seaJS

    2024年02月14日
    瀏覽(19)
  • js模塊化開發(fā)

    js模塊化開發(fā)

    ? 到底什么是模塊化、模塊化開發(fā)呢? ? 事實(shí)上模塊化開發(fā)最終的目的是將程序劃分成一個(gè)個(gè)小的結(jié)構(gòu); ? 這個(gè)結(jié)構(gòu)中編寫屬于自己的邏輯代碼,有自己的作用域,定義變量名詞時(shí)不會(huì)影響到其他的結(jié)構(gòu); ? 這個(gè)結(jié)構(gòu)可以將自己希望暴露的變量、函數(shù)、對(duì)象等導(dǎo)出給其結(jié)

    2024年02月13日
    瀏覽(28)
  • JS模塊化系統(tǒng)

    隨著 JavaScript 開發(fā)變得越來(lái)越廣泛,命名空間和依賴關(guān)系變得越來(lái)越難以處理。人們已經(jīng)開發(fā)出不同的解決方案以模塊系統(tǒng)的形式來(lái)解決這個(gè)問(wèn)題。 CommonJS 是一種同步加載模塊的規(guī)范,主要用于服務(wù)器端的 Node.js 環(huán)境。 top:CommonJS 加載的是一個(gè)對(duì)象(即 module.exports 屬性),

    2024年02月19日
    瀏覽(27)
  • 【前端模塊化】JS模塊化思想以及相關(guān)規(guī)范(CommonJS、ES module)

    1.模塊化概念 隨著前端應(yīng)用日趨復(fù)雜,項(xiàng)目代碼也大量膨脹,模塊化就是一種最主流的代碼組織方式, 一個(gè)模塊就是一個(gè)實(shí)現(xiàn)特定功能的文件 ,它通過(guò)把我們的復(fù)雜代碼按照功能的不同,劃分為不同的模塊單獨(dú)維護(hù)的這種方式,去提高我們的開發(fā)效率,降低維護(hù)成本。要用

    2024年02月01日
    瀏覽(42)
  • Node.js模塊化

    說(shuō)明:將復(fù)雜的程序文件,拆分多個(gè)文件的過(guò)程。模塊的內(nèi)部數(shù)據(jù)是私有的,不過(guò)模塊可以暴露內(nèi)部數(shù)據(jù)供其他模塊使用。 說(shuō)明:編碼時(shí)是按照模塊一個(gè)一個(gè)編碼的,整個(gè)項(xiàng)目就是一個(gè)模塊化的項(xiàng)目。 3.模塊化的優(yōu)勢(shì) 說(shuō)明: 提高代碼的復(fù)用性:模塊化可以將代碼分解為可重

    2024年02月12日
    瀏覽(20)
  • Node.js--模塊化

    1.1 什么是模塊化與模塊 將一個(gè)復(fù)雜的程序文件依據(jù)一定規(guī)則(規(guī)范)拆分成多個(gè)文件的過(guò)程稱之為 模塊化 其中拆分出的 每個(gè)文件就是一個(gè)模塊 ,模塊的內(nèi)部數(shù)據(jù)都是私有的,不過(guò)模塊可以暴露內(nèi)部數(shù)據(jù)以便其他模塊使用 1.2 什么是模塊化項(xiàng)目 編碼時(shí)是按照模塊一個(gè)一個(gè)編碼

    2024年02月16日
    瀏覽(45)
  • 【node.js】04-模塊化

    【node.js】04-模塊化

    目錄 一、什么是模塊化 二、node.js中的模塊化 1. node.js中模塊的分類 2. 加載模塊 3.?node.js 中的模塊作用域 4.?向外共享模塊作用域中的成員 4.1 module對(duì)象? 4.2?module.exports 對(duì)象 4.3 exports對(duì)象 5.?node.js 中的模塊化規(guī)范? ????????模塊化是指解決一個(gè)復(fù)雜問(wèn)題時(shí),自頂向下逐層

    2024年02月15日
    瀏覽(24)
  • (三)Node.js - 模塊化

    (三)Node.js - 模塊化

    Node.js中根據(jù)模塊來(lái)源不同,將模塊分為了3大類,分別是: 內(nèi)置模塊 :內(nèi)置模塊由Node.js官方提供的,例如fs、path、http等 自定義模塊 :用戶創(chuàng)建的每個(gè).js文件,都是自定義模塊 第三方模塊 :由第三方開發(fā)出來(lái)的模塊,并非官方提供的內(nèi)置模塊,也不是用戶創(chuàng)建的自定義模塊

    2024年02月13日
    瀏覽(19)
  • 10-Node.js模塊化

    10-Node.js模塊化

    目標(biāo) 了解模塊化概念和好處,以及 CommonJS 標(biāo)準(zhǔn)語(yǔ)法導(dǎo)出和導(dǎo)入 講解 在 Node.js 中每個(gè)文件都被當(dāng)做是一個(gè)獨(dú)立的模塊,模塊內(nèi)定義的變量和函數(shù)都是獨(dú)立作用域的,因?yàn)?Node.js 在執(zhí)行模塊代碼時(shí),將使用如下所示的函數(shù)封裝器對(duì)其進(jìn)行封裝 ? 而且項(xiàng)目是由多個(gè)模塊組成的,

    2024年02月07日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包