最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS逆向之?webpack?打包站點實戰(zhàn)原理分享

 更新時間:2022年06月01日 10:11:22   作者:夢想橡皮擦  
本文主要介紹了JS逆向之webpack打包站點實戰(zhàn)原理分享,webpack是前端程序員用來進行打包JS的技術(shù),打包之后的代碼特征非常明顯,更多相關(guān)知識需要的小伙伴可以參考下面文章詳細內(nèi)容

webpack 原理說明

webpack 是前端程序員用來進行打包 JS 的技術(shù),打包之后的代碼特征非常明顯,例如下述代碼。

(window.webpackJsonp = window.webpackJsonp || []).push([[0], []]);

有經(jīng)驗之后,當看到出現(xiàn) app.版本號.jschunk-libs.版本號.js> 就能大概猜到 JS 是使用了 webpack 加密。

學習過程中,我們順手解決一個 webpack 的加密站點,地址如下所示:https://passport.gm99.com/

添加了包含關(guān)鍵字 login/login3 的斷點之后,通過開發(fā)者工具調(diào)試得到下述代碼段。

當通過調(diào)試進入 a.encode() 函數(shù)內(nèi)部之后,發(fā)現(xiàn)了大量的 webpack 打包 JS 的痕跡,例如下圖紅框部分。

其實發(fā)現(xiàn)加密邏輯之后,可以直接用 Python 進行復寫代碼也是可以的。

這里面出現(xiàn)的關(guān)鍵字包含如下內(nèi)容。

  • n = function(t,e,n)
  • n.exports = s
  • .call(e,i,e,t)

然后翻閱到 JS 文件頭部,簡化代碼得到如下內(nèi)容,到這里 webpack 的痕跡。

!(function (t) {
  function e(s) {
    return t[s].call(n.exports, n, n.exports, e), (n.loaded = !0), n.exports;
  }
})();

如果在細研究一下,webpack 打包之后的代碼執(zhí)行規(guī)則也非常簡單。

!(function (t) {
  function e(s) {
    // 代碼省略
    return t[s].call(n.exports, n, n.exports, e), (n.loaded = !0), n.exports;
  }
  e(0); // 調(diào)用下面的 0
  e(1); // 調(diào)用下面的 1
})({
  0: function (t, e, i) {
    // 這里有一大堆打碼
  },
  1: function (t, e) {
    t.exports = jQuery;
  },
});

扣 JS 代碼

接下來我們就實戰(zhàn)扣取一下可執(zhí)行的 JS 代碼。

第一步:創(chuàng)建一個 JS 文件,名稱任意編寫如下代碼,將函數(shù) e 暴露出來。

var _e;
!(function (t) {
  var i = {};
  function e(s) {
    if (i[s]) return i[s].exports;
    var n = (i[s] = {
      exports: {},
      id: s,
      loaded: !1,
    });
    return t[s].call(n.exports, n, n.exports, e), (n.loaded = !0), n.exports;
  }
  _e = e;
})();

接下來分區(qū)域扣取 JS 代碼,這里依據(jù) function() 進行區(qū)分即可。

所有不全之后的代碼,可以去 gitcode 進行下載。

接下來運行生成的靜態(tài)文件,測試可執(zhí)行函數(shù),就能得到對應的數(shù)據(jù)了。

到此這篇關(guān)于JS逆向之 webpack 打包站點實戰(zhàn)原理分享的文章就介紹到這了,更多相關(guān)JS webpack 打包 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Object.defineProperty如何巧妙找到修改某個變量的準確代碼位置

    使用Object.defineProperty如何巧妙找到修改某個變量的準確代碼位置

    Object.defineProperty() 方法直接在一個對象上定義一個新屬性,或者修改一個已經(jīng)存在的屬性, 并返回這個對象。下面這篇文章主要給大家介紹了關(guān)于使用Object.defineProperty如何巧妙找到修改某個變量的準確代碼位置的相關(guān)資料,需要的朋友可以參考下
    2018-11-11
  • JavaScript?模塊化詳解

    JavaScript?模塊化詳解

    這篇文章主要介紹了JavaScript?模塊化詳解,塊的內(nèi)部數(shù)據(jù)與實現(xiàn)是私有的,?只是向外部暴露一些接口(方法)與外部其它模塊通信,下面一起進入文章來接更多詳細內(nèi)容
    2021-12-12
  • 學習使用bootstrap的modal和carousel

    學習使用bootstrap的modal和carousel

    這篇文章主要教大家學會用bootstrap的modal和carousel,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript中獲取純正的undefined的方法

    JavaScript中獲取純正的undefined的方法

    這篇文章主要介紹了JavaScript中獲取純正的undefined的方法的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 使用js操作css實現(xiàn)js改變背景圖片示例

    使用js操作css實現(xiàn)js改變背景圖片示例

    有個朋友在weibo上問我可不可以用JS和CSS讓頁面每次刷新隨機產(chǎn)生一張背景圖,當然是可以的。具體的方法看下面的實現(xiàn)代碼吧
    2014-03-03
  • JavaScript 組件之旅(三):用 Ant 構(gòu)建組件

    JavaScript 組件之旅(三):用 Ant 構(gòu)建組件

    我們走到哪兒了?前兩期思考了太多東西,你是否已有倦意?別擔心,本期的話題很輕松,你只需要簡單了解一些語法,寫幾行配置,就能驅(qū)使系統(tǒng)按你預設(shè)的方式自動完成一些工作。
    2009-10-10
  • js控制滾動條滾動的兩種簡單方法

    js控制滾動條滾動的兩種簡單方法

    這篇文章主要給大家介紹了關(guān)于js控制滾動條滾動的兩種簡單方法,通過JavaScript可以直接控制滾動條的位置,從而達到鎖定滾動條的效果,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于better-scroll插件的無法滑動bug(2021通過插件解決)

    關(guān)于better-scroll插件的無法滑動bug(2021通過插件解決)

    這篇文章主要介紹了關(guān)于better-scroll插件的無法滑動bug(2021通過插件解決),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • JavaScript?中比較字符串的?4?種方法示例詳解

    JavaScript?中比較字符串的?4?種方法示例詳解

    這篇文章主要介紹了在?JavaScript?中比較字符串的?4?種方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • js實現(xiàn)微博發(fā)布小功能

    js實現(xiàn)微博發(fā)布小功能

    本篇文章主要介紹了javascript實現(xiàn)微博發(fā)布小功能的示例代碼,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01

最新評論

深水埗区| 城市| 兴城市| 苍南县| 缙云县| 大埔区| 揭西县| 东海县| 永善县| 富蕴县| 炎陵县| 石城县| 安泽县| 禹城市| 阿拉善左旗| 蓬安县| 和平区| 郓城县| 桓台县| 仪陇县| 耒阳市| 庄浪县| 阜城县| 阿克苏市| 祁阳县| 五大连池市| 马尔康县| 塘沽区| 汽车| 突泉县| 石景山区| 潢川县| 河北区| 营山县| 内丘县| 扶沟县| 施甸县| 翼城县| 沙坪坝区| 华安县| 雅安市|