JS逆向之?webpack?打包站點(diǎn)實(shí)戰(zhàn)原理分享
webpack 原理說(shuō)明
webpack 是前端程序員用來(lái)進(jìn)行打包 JS 的技術(shù),打包之后的代碼特征非常明顯,例如下述代碼。
(window.webpackJsonp = window.webpackJsonp || []).push([[0], []]);
有經(jīng)驗(yàn)之后,當(dāng)看到出現(xiàn) app.版本號(hào).js
,chunk-libs.版本號(hào).js>
就能大概猜到 JS 是使用了 webpack 加密。
學(xué)習(xí)過(guò)程中,我們順手解決一個(gè) webpack 的加密站點(diǎn),地址如下所示:https://passport.gm99.com/
添加了包含關(guān)鍵字 login/login3
的斷點(diǎn)之后,通過(guò)開(kāi)發(fā)者工具調(diào)試得到下述代碼段。
當(dāng)通過(guò)調(diào)試進(jìn)入 a.encode()
函數(shù)內(nèi)部之后,發(fā)現(xiàn)了大量的 webpack 打包 JS 的痕跡,例如下圖紅框部分。
其實(shí)發(fā)現(xiàn)加密邏輯之后,可以直接用 Python 進(jìn)行復(fù)寫(xiě)代碼也是可以的。
這里面出現(xiàn)的關(guān)鍵字包含如下內(nèi)容。
n = function(t,e,n)
n.exports = s
.call(e,i,e,t)
然后翻閱到 JS 文件頭部,簡(jiǎn)化代碼得到如下內(nèi)容,到這里 webpack 的痕跡。
!(function (t) { function e(s) { return t[s].call(n.exports, n, n.exports, e), (n.loaded = !0), n.exports; } })();
如果在細(xì)研究一下,webpack 打包之后的代碼執(zhí)行規(guī)則也非常簡(jiǎn)單。
!(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 代碼
接下來(lái)我們就實(shí)戰(zhàn)扣取一下可執(zhí)行的 JS 代碼。
第一步:創(chuàng)建一個(gè) JS 文件,名稱(chēng)任意編寫(xiě)如下代碼,將函數(shù) e
暴露出來(lái)。
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; })();
接下來(lái)分區(qū)域扣取 JS 代碼,這里依據(jù) function()
進(jìn)行區(qū)分即可。
所有不全之后的代碼,可以去 gitcode 進(jìn)行下載。
接下來(lái)運(yùn)行生成的靜態(tài)文件,測(cè)試可執(zhí)行函數(shù),就能得到對(duì)應(yīng)的數(shù)據(jù)了。
到此這篇關(guān)于JS逆向之 webpack 打包站點(diǎn)實(shí)戰(zhàn)原理分享的文章就介紹到這了,更多相關(guān)JS webpack 打包 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
原生JS實(shí)現(xiàn)隱藏顯示圖片 JS實(shí)現(xiàn)點(diǎn)擊切換圖片效果
這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)隱藏顯示圖片,JS實(shí)現(xiàn)點(diǎn)擊切換圖片效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07用JavaScript實(shí)現(xiàn)讓瀏覽器停止載入頁(yè)面的方法
下面小編就為大家?guī)?lái)一篇用JavaScript實(shí)現(xiàn)讓瀏覽器停止載入頁(yè)面的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01JavaScript構(gòu)造函數(shù)原理及實(shí)現(xiàn)流程解析
這篇文章主要介紹了JavaScript構(gòu)造函數(shù)原理及實(shí)現(xiàn)流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11JavaScript?字符串新增方法?trim()?的使用說(shuō)明
這篇文章主要介紹了JavaScript字符串新增方法trim()的使用說(shuō)明,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09HTML元素拖拽功能實(shí)現(xiàn)的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于HTML元素拖拽功能實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Cropper.js進(jìn)階實(shí)現(xiàn)圖片旋轉(zhuǎn)裁剪處理功能示例
這篇文章主要為大家介紹了Cropper.js進(jìn)階實(shí)現(xiàn)圖片旋轉(zhuǎn)裁剪功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05mqtt.js?無(wú)法連接/錯(cuò)誤提示?WebSocket?connection?to?‘ws://xxxxx‘?
這篇文章主要介紹了mqtt.js?無(wú)法連接/錯(cuò)誤提示?WebSocket?connection?to?‘ws://xxxxx‘?failed:,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01純JS打造網(wǎng)頁(yè)中checkbox和radio的美化效果
這篇文章主要介紹了純JS打造網(wǎng)頁(yè)中checkbox和radio的美化效果,代碼簡(jiǎn)單易懂,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10JavaScript實(shí)現(xiàn)繪制兩個(gè)坐標(biāo)之間的連線(xiàn)
本文主要介紹了JavaScript實(shí)現(xiàn)繪制兩個(gè)坐標(biāo)之間的連線(xiàn)功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11