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

news/2024/7/19 12:38:12 标签: webpack, javascript, 爬虫

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.niftyadmin.cn/n/266375.html

相关文章

【论文写作】-我的第一篇论文形成记(投稿过程、课题来源、python与数学学习、实验设计、论文思路建立与写作、回复审稿人)

我的第一篇论文形成记 投稿过程背景记录课题来源-本科毕业设计python及数学学习实验设计调参阶段实验阶段 论文思路建立论文写作回复审稿人总结 投稿过程 2022年12月28日 投AIChE 2023年01月05日 AlChE编辑认为方向不太符合期刊定位,建议投其他期刊 2023年01月06日…

3分钟入门:Flex 布局

flex 布局原理 全称 flexible box,弹性布局。 如何开启:为元素添加 display: flex。 开启 flex 布局的元素,称为 flex 容器(flex container),其子元素成为容器成员,称为 flex 项目。 flex 布…

延长无线传感器网络网络寿命的异构节点智能部署策略(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 无线传感器网络是通过大量分布的传感器节点作为终端来协同感知和自主地监测外部世界,以多跳、自组织或协作的方式进行通信和信息…

Vector - CAPL - 检查DUT发出与dbc定义一致

目录 ChkCreate_UndefinedMessageReceived 代码示例 有回调函数 无回调函数 Trace报文 报告显示 ChkCreate_UndefinedMessage

vite+vue3+TypeScript 搭建项目基本框架

vitevue3TypeScript 搭建项目基本框架 1 参考文档2 整体步骤3 创建vue3项目4 配置别名5 安装less/scss6 自动导入7 安装配置 router8 安装Pinia9 安装配置axios10 自定义组件名 setup 语法糖11 安装element-plus组件库12 安装 Ant Design Vue 组件库13 安装与使用Echarts 1 参考…

如何快速查询Git的config配置文件的本地路径

如何快速查询Git的config配置文件的本地路径 命令作用git config --local --list --show-origin查看仓库级别 git 配置信息,并打印配置文件本地路径最高优先级(仓库下)git config --global --list --show-origin查看全局级别 git 配置信息&a…

数据可视化开源工具软件

数据可视化工具用于通过图形、图表、表格、地图和其他详细的视觉对象来表示信息。 它们通常将数据呈现和分析结合起来,以帮助专业人员在数据驱动领域(如工程、数据科学和业务分析)做出更明智的决策。 选择正确的数据可视化工具将帮助您减少数据错误,并…

29次-CCF-第一题-田地丈量

1 题目链接 进去后点,模拟考试就可以看到题目了 AC证明: 2 分析 前言: 离谱,这个题考试的时候做了30min才写出来,但是代码还贼简单。 你说它难吧,代码这么简单,你说不难吧,我在这…