网页爬虫之WebPack模块化解密(JS逆向)

news2024/12/27 0:07:18

WebPack打包:
webpack是一个基于模块化的打包(构建)工具, 它把一切都视作模块。
概念:
webpack是 JavaScript 应用程序的模块打包器,可以把开发中的所有资源(图片、js文件、css文件等)都看成模块,通过loader(加载器)和plugins(插件)对资源进行处理,打包成符合生产环境部署的前端资源。所有的资源都是通过JavaScript渲染出来的。
如果一个页面大部分是script标签构成,80%以上是webpack打包。

添加图片注释,不超过 140 字(可选)

  1. webpack打包简介

添加图片注释,不超过 140 字(可选)

在这里插入图片描述

1.0 多个JS文件打包:
如果模块比较多,就会将模块打包成JS文件, 然后定义一个全局变量 window[“webpackJsonp”] = [ ],它的作用是存储需要动态导入的模块。
然后重写 window[“webpackJsonp”] 数组的 push( ) 方法为 webpackJsonpCallback( ),也就是说 window[“webpackJsonp”].push( ) 其实执行的是 webpackJsonpCallback( ),window[“webpackJsonp”].push( )接收三个参数,第一个参数是模块的ID,第二个参数是 一个数组或者对象,里面定义大量的函数,第三个参数是要调用的函数(可选)

1.1 webpack数组形式

给需要处理业务的模块进行打包,通过下标取值。
!function(e) {
    var t = {};

    // 加载器  所有的模块都是从这个函数加载 执行
    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对象形式

给需要处理业务的模块进行打包,通过key取值。
!function(e) {
    var t = {};
    //  所有的模块 都是从这个加载器 执行的  分发器
    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)  // 对象 根据KEY 找模块
}({

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

        1: function () {
            console.log('我是模块2')
        }
    }
);
  1. webpack处理代码
    2.1 逆向目标

    站点:http://www.kuwo.cn/

    参数:reqId

2.2 逆向分析

全局搜索关键字,查看生成位置,方便后续调试

添加图片注释,不超过 140 字(可选)

下断点调试,发现是C函数

添加图片注释,不超过 140 字(可选)

继续调试发现是这个模块进行了处理

添加图片注释,不超过 140 字(可选)

2.3 结果处理
在这里插入图片描述

  1. webpack案例
    3.2 逆向分析

    地址:https://static.waitwaitpay.com/web/sd_se/index.html
    接口:https://api.waitwaitpay.com/api/vendors/nearby
    目标:响应数据

4.2 逆向分析
打开目标网站,往下拉,在开发者工具可以抓到这三个包,其中nearby接口请求到的数据是加密之后的密文
添加图片注释,不超过 140 字(可选)

4.2.1 关键字搜索
这个时候可以尝试再在该文件里搜索 JSON.parse就会找到这样一个地方,这里可以发现有一个decode函数,就比较可疑,下个断点

添加图片注释,不超过 140 字(可选)

数据处理
往上看堆栈,可以发现该函数就是解密的入口,讲请求得到的加密数据e传到f函数,即可解密得到明文数据
添加图片注释,不超过 140 字(可选)

可以很明显的看到这个f函数内部关键调用了这两个函数来进行数据的解密,那么,我们首先就来看看这个 a.default.decode ,向上寻找a是在哪里被定义的

添加图片注释,不超过 140 字(可选)

可发现 a = s(n(432)),这里的432就是代表导出webpack打包的大数组里面第432个大函数,大数组指的是这个大数组
4.2.2 JavaScript分析
​ 那我们在本地js里面,怎么才能实现像浏览器这样导出呢,这个时候我们可以直接去找到 导出器 类似于 exports 这样的关键字,所有的 webpack 导出器都是长这样的

添加图片注释,不超过 140 字(可选)

直接复制全部的代码,之前已经发现处理解密的话只有f函数,观察整个函数调用第三方库很少,那么就可以全复制代码,然后调用这个函数即可。

直接扣出加密代码,调用当前这个函数

// 本地的话,我们就可以这样来进行导出然后赋值给a还有o
function s(e) {
    return e && e.__esModule ? e : {
        default: e
    }
};
// 这里的window.ts就是上面导出器函数
var a = s(window.ts(432));
var o = s(window.ts(423));

总结(webpack逆向步骤)

  • 找到这个加载器
  • 找到调用模块
  • 构造一个自执行方法
  • 导出加密方法
  • 编写自定义方法 按照流程加密

声明:本文章所有演示内容仅供学习交流使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系作者立即删除!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/465460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中Lambda表达式(面向初学者)

目录 一、Lambda表达式是什么?什么场景下使用Lambda? 1.Lambda 表达式是什么 2.函数式接口是什么 第二章、怎么用Lambda 1.必须有一个函数式接口 2.省略规则 3.Lambda经常用来和匿名内部类比较 第三章、具体使用场景举例() …

水果店(库)管理系统 —— 实现了管理员模式与顾客模式 JAVA

水果店(库)管理系统 1.前言:2.功能简介及部分测试视频:3.本管理系统的构建原理(简介):(1).如何跳转页面:(2).如何让控制台能输出彩色字体:(3).如何稳定存储数据:(4).如何…

误操作清空了回收站文件如何找到文件

我们在删除文件的时候,文件都是先跑到回收站里的,这样的防止我们出现误删的情况,但往往也会出现我们要恢复删除的文件却误操作清空了回收站的情况,那么误操作清空了回收站如何找到呢,下面小编给大家分享误操作清空了回…

window 10 安装node.js时遇到2502 2503错误(已解决)

node安装失败2503的解决办法:1、在WIN搜索框搜索powershell并右击;2、点击使用管理员身份运行powershell命令行工具;3、输入“msiexec /package node”;4、打开安装包,根据提示安装即可。 本文操作环境:Win…

9.Join的应用

1.reduceJoin的应用 案例:将两个表合并成一个新的表 需求分析:通过将关联条件作为Map输出的key(此处指pid),将两表满足Join条件的数据并携带数据所来源的文件信息,发往同一个ReduceTask,在Redu…

汇编小程序解析--3D立方体旋转

汇编小程序解析–3D立方体旋转,源代码如下,是vulture大神于1995年写的,我到现在才基本看懂。 ;本程序由国外的Vulture大哥编写,并公布了源码,这个是他95年的一个作品,可以说是在当时是非常成功的&#xff…

论shell之条件语句-if语句、case语句

目录 一:条件测试 1.文件测试 2.常见的测试操作符 3.整数值比较 ​4.字符串比较 ​5. 逻辑测试 二:if语句 1.单分支结构 2.单分支结构实例 3.双分支结构 4.双分支结构实例 5.多分支结构 6.多分支机构实例 7.嵌套if语句实例 三:case语…

2023企业服务的关键词:做强平台底座

作者 | 曾响铃 文 | 响铃说 4月下旬,软件行业相关的大会紧锣密鼓地开了好几场,不仅有政府主办的2023中国国际软件发展大会、中国软件创新发展大会,也有用友、浪潮等服务商举办的品牌活动,让软件业的话题一直保持热度。 以用友为…

十大排序算法简单总结与对比

假设排序均从小到大排序 排序算法工作原理平均时间复杂度最坏时间复杂度空间复杂度是否稳定排序冒泡排序把相邻元素两两比较,若左侧的元素大于右侧的元素,则交换,否则不交换。(每一轮最大的会跑到最右边)O(&#xff0…

VGA协议实践

文章目录 前言一、VGA接口定义与传输原理1、VGA接口定义2、传输原理3、不同分辨率对应不同参数 二、Verilog编程1、VGA显示彩色条纹2、VGA显示字符3、输出一幅彩色图像4、Quartus操作1、添加PLL核2、添加ROM核 三、全部代码四、总结五、参考资料 前言 VGA的全称是Video Graphi…

VBA最基础的趣味速成练习--VBA资料

很多朋友想学VBA,但是苦于无处入手,我特意花了几天时间,做了一个VBA速成练习表格 能让你快速上手VBA,感受到VBA的神奇之处,相信我们日常使用表格的朋友会非常喜欢它的, 下面是我们的表格界面,…

选择营销自动化软件时的3个常见错误

做出投资营销自动化软件的决定是一个重大决定,可能很难知道从哪里开始,尤其是当市场上有这么多选择时。选择正确的自动化软件可能是拥有良好的营销运营与拥有低效营销团队之间的区别。在这篇博文中,我们将讨论人们在选择营销自动化软件时最常…

Flink之TaskManager内存解析

一、CK失败 Flink任务的checkpoint操作失败大致分为两种情况,ck decline和ck expire: (1)ck decline 发生ck decline情况时,我们可以通过查看JobManager.log或TaskManager.log查明具体原因。其中有一种特殊情况为ck cancel&…

排序 - 选择排序(Selection sort)

文章目录 选择排序介绍选择排序实现选择排序的时间复杂度和稳定性选择排序时间复杂度选择排序稳定性 代码实现核心&总结 每日一道算法,提高脑力。第四天,选择排序。 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素&#…

Shiro详解(超全面)

目录: 一、简介二、Shiro的整体架构1、Subject2、Security Manager3、Cryptography4、Authenticator5、Authorizer6、realm7、sessionManager8、SessionDAO9、CacheManager 三、入门案例四、认证流程1、认证流程2、常见异常 五、授权流程1、授权流程2、自定义realm实现授权 六、…

JavaScript日期库之date-fn.js

用官网的话来说,date-fn.js 就是一个现代 JavaScript 日期实用程序库,date-fns 为在浏览器和 Node.js 中操作 JavaScript 日期提供了最全面、但最简单和一致的工具集。那实际用起来像它说的那么神奇呢,下面就一起来看看吧。 安装 安装的话就…

深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

前言 pytorch中的动态图机制是pytorch这门框架的优势所在,阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解,同时在博客的后半部分有关于逻辑回归的知识点,并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 …

Springboot 自动装配流程分析

目录 1.基础知识: 2.具体代码执行流程 3.流程总结: 4.参考文章: 1.基础知识: springboot的自动装配是利用了spring IOC容器创建过程中的增强功能,即BeanFactoryPostProcessor, 其中的ConfigurationCla…

【JavaEE】SpringBoot的日志

目录 日志作用 SpringBoot日志框架 日志打印 日志级别 类型 作用 修改级别 日志永久化 配置日志文件目录 配置日志文件名 简化日志打印和永久化——lombok 日志作用 问题定位:可以帮助开发人员快速找到问题出现的位置系统监控:可以把系统的运…

你不知道的node.js小知识——使用nvm管理node版本及node与npm版本对应关系详解

一、下载和安装nvm管理包 (1)下载链接 https://github.com/coreybutler/nvm-windows/releases (我选的是nvm-setup.exe) (2)解压安装 (2次选择文件要安装的目录 第一次是nvm 第二次是node.js) (…