JS逆向之?webpack?打包站點(diǎn)實(shí)戰(zhàn)原理分享
webpack 原理說明
webpack 是前端程序員用來進(jìn)行打包 JS 的技術(shù),打包之后的代碼特征非常明顯,例如下述代碼。
(window.webpackJsonp = window.webpackJsonp || []).push([[0], []]);
有經(jīng)驗(yàn)之后,當(dāng)看到出現(xiàn) app.版本號.js,chunk-libs.版本號.js> 就能大概猜到 JS 是使用了 webpack 加密。
學(xué)習(xí)過程中,我們順手解決一個(gè) webpack 的加密站點(diǎn),地址如下所示:https://passport.gm99.com/

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

當(dāng)通過調(diào)試進(jìn)入 a.encode() 函數(shù)內(nèi)部之后,發(fā)現(xiàn)了大量的 webpack 打包 JS 的痕跡,例如下圖紅框部分。
其實(shí)發(fā)現(xiàn)加密邏輯之后,可以直接用 Python 進(jìn)行復(fù)寫代碼也是可以的。

這里面出現(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;
}
})();
如果在細(xì)研究一下,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 代碼
接下來我們就實(shí)戰(zhàn)扣取一下可執(zhí)行的 JS 代碼。
第一步:創(chuàng)建一個(gè) 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() 進(jìn)行區(qū)分即可。

所有不全之后的代碼,可以去 gitcode 進(jìn)行下載。
接下來運(yùn)行生成的靜態(tài)文件,測試可執(zhí)行函數(shù),就能得到對應(yīng)的數(shù)據(jù)了。

到此這篇關(guān)于JS逆向之 webpack 打包站點(diǎn)實(shí)戰(zhàn)原理分享的文章就介紹到這了,更多相關(guān)JS webpack 打包 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Object.defineProperty如何巧妙找到修改某個(gè)變量的準(zhǔn)確代碼位置
Object.defineProperty() 方法直接在一個(gè)對象上定義一個(gè)新屬性,或者修改一個(gè)已經(jīng)存在的屬性, 并返回這個(gè)對象。下面這篇文章主要給大家介紹了關(guān)于使用Object.defineProperty如何巧妙找到修改某個(gè)變量的準(zhǔn)確代碼位置的相關(guān)資料,需要的朋友可以參考下2018-11-11
學(xué)習(xí)使用bootstrap的modal和carousel
這篇文章主要教大家學(xué)會(huì)用bootstrap的modal和carousel,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
使用js操作css實(shí)現(xiàn)js改變背景圖片示例
有個(gè)朋友在weibo上問我可不可以用JS和CSS讓頁面每次刷新隨機(jī)產(chǎn)生一張背景圖,當(dāng)然是可以的。具體的方法看下面的實(shí)現(xiàn)代碼吧2014-03-03
JavaScript 組件之旅(三):用 Ant 構(gòu)建組件
我們走到哪兒了?前兩期思考了太多東西,你是否已有倦意?別擔(dān)心,本期的話題很輕松,你只需要簡單了解一些語法,寫幾行配置,就能驅(qū)使系統(tǒng)按你預(yù)設(shè)的方式自動(dòng)完成一些工作。2009-10-10
關(guān)于better-scroll插件的無法滑動(dòng)bug(2021通過插件解決)
這篇文章主要介紹了關(guān)于better-scroll插件的無法滑動(dòng)bug(2021通過插件解決),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03

