JS逆向之 webpack 打包站点实战原理分享

 更新时间:2022年06月01日 10:11:22   作者:梦想橡皮擦  
本文主要介绍了JS逆向之webpack打包站点实战原理分享,webpack是前端程序员用来进行打包JS的技术,打包之后的代码特征非常明显,更多相关知识需要的小伙伴可以参考下面文章详细内容

webpack 原理说明

webpack 是前端程序员用来进行打包 JS 的技术,打包之后的代码特征非常明显,例如下述代码。

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

有经验之后,当看到出现 app.版本号.jschunk-libs.版本号.js> 就能大概猜到 JS 是使用了 webpack 加密。

学习过程中,我们顺手解决一个 webpack 的加密站点,地址如下所示:https://passport.gm99.com/

添加了包含关键字 login/login3 的断点之后,通过开发者工具调试得到下述代码段。

当通过调试进入 a.encode() 函数内部之后,发现了大量的 webpack 打包 JS 的痕迹,例如下图红框部分。

其实发现加密逻辑之后,可以直接用 Python 进行复写代码也是可以的。

这里面出现的关键字包含如下内容。

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

然后翻阅到 JS 文件头部,简化代码得到如下内容,到这里 webpack 的痕迹。

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

如果在细研究一下,webpack 打包之后的代码执行规则也非常简单。

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

扣 JS 代码

接下来我们就实战扣取一下可执行的 JS 代码。

第一步:创建一个 JS 文件,名称任意编写如下代码,将函数 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;
})();

接下来分区域扣取 JS 代码,这里依据 function() 进行区分即可。

所有不全之后的代码,可以去 gitcode 进行下载。

接下来运行生成的静态文件,测试可执行函数,就能得到对应的数据了。

到此这篇关于JS逆向之 webpack 打包站点实战原理分享的文章就介绍到这了,更多相关JS webpack 打包 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置

    使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置

    Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。下面这篇文章主要给大家介绍了关于使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置的相关资料,需要的朋友可以参考下
    2018-11-11
  • JavaScript 模块化详解

    JavaScript 模块化详解

    这篇文章主要介绍了JavaScript 模块化详解,块的内部数据与实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信,下面一起进入文章来接更多详细内容
    2021-12-12
  • 学习使用bootstrap的modal和carousel

    学习使用bootstrap的modal和carousel

    这篇文章主要教大家学会用bootstrap的modal和carousel,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JavaScript中获取纯正的undefined的方法

    JavaScript中获取纯正的undefined的方法

    这篇文章主要介绍了JavaScript中获取纯正的undefined的方法的相关资料,需要的朋友可以参考下
    2016-03-03
  • 使用js操作css实现js改变背景图片示例

    使用js操作css实现js改变背景图片示例

    有个朋友在weibo上问我可不可以用JS和CSS让页面每次刷新随机产生一张背景图,当然是可以的。具体的方法看下面的实现代码吧
    2014-03-03
  • JavaScript 组件之旅(三):用 Ant 构建组件

    JavaScript 组件之旅(三):用 Ant 构建组件

    我们走到哪儿了?前两期思考了太多东西,你是否已有倦意?别担心,本期的话题很轻松,你只需要简单了解一些语法,写几行配置,就能驱使系统按你预设的方式自动完成一些工作。
    2009-10-10
  • js控制滚动条滚动的两种简单方法

    js控制滚动条滚动的两种简单方法

    这篇文章主要给大家介绍了关于js控制滚动条滚动的两种简单方法,通过JavaScript可以直接控制滚动条的位置,从而达到锁定滚动条的效果,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 关于better-scroll插件的无法滑动bug(2021通过插件解决)

    关于better-scroll插件的无法滑动bug(2021通过插件解决)

    这篇文章主要介绍了关于better-scroll插件的无法滑动bug(2021通过插件解决),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • JavaScript 中比较字符串的 4 种方法示例详解

    JavaScript 中比较字符串的 4 种方法示例详解

    这篇文章主要介绍了在 JavaScript 中比较字符串的 4 种方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • js实现微博发布小功能

    js实现微博发布小功能

    本篇文章主要介绍了javascript实现微博发布小功能的示例代码,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01

最新评论