当前位置: 首页 > article >正文

【逆向篇】Web逆向WebPack结构分析

JS逆向之webPack加载器分析

    • 一般逆向思路
    • 处理webPack结构
    • 提取相关方法扣下
    • 实践案例

一般逆向思路

案例1: 一般web逆向一个某网站的登录,登录数据如账号密码都会从前端加密后到后端,那么加密代码会在前端里面。用需要找到这个加密代码段给扣下来,进行加密,方便我们写的爬虫或者采集工具去自动登录或者其他操作,一般前端加密代码一个难点是处理webPack打包结构的代码。

处理webPack结构

webpack字如其名,实际上是网页代码的一种打包机制将多个js文件(也可以是其他类型文件,比如.png)统一打包为一个js文件,一个png文件当然如果是webpack多打包机制就会生成多个js文件最终目的肯定是为了压缩代码,提高代码执行效率

在这里插入图片描述

webpack完全采用闭包机制(也就是通过作用域)的办法来避免需要压缩的几个文件内部的函数有重名的现象发生(一人一个作用域就可以避免函数重名的问题),也就是:

var jss = [ {对象1},{对象2},{对象3} ]

对象1也可以是函数形式:
{ getInfo:function(){}}
这样,想要调用不同文件的重名函数变为:
jss[0].func1()
jss[1].func1()

这样既解决了函数名重名问题(即允许重名),又可以调用你希望调用的函数了
但是现在还有一个新的问题就是有些私有方法我不希望被外部调用,也就是访问权限问题,这个就像C++里面的共有、私有函数一样
webpack的解决方案是可以被外部访问的共有方法一律需要导出才行,即:

exportfunction(){
        var getInfo = function(){
        具体代码;
        return {getInfo :getInfo }
	}
}

提取相关方法扣下

!function(形参){}()是一种自执行函数,无需调用网页加载的时候自动执行
这里的e实际上就是[func1,func2,func3…]这个大数组
n(0) 就是调用数组的第一个函数,打印123456
如果是对象{}形式的话,就是n(“7f6d”)这种形式来调用

//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
    }
}
    ([
        function () {
            console.log('123456')
        },
 
              function () {
            console.log('模块2')
        },
    ])
n(0)

实践案例

受害者网站:https://m.ctyun.cn/wap/main/auth/login
首先通过跟栈法追踪到 password 加密的关键位置
在这里插入图片描述
可以看到调用代码,其中有些事干扰代码,提取后如下:

encodeURI(b["c"]("123456789",b["f"]("123456@qq.com")))

ok,调用函数找到了,就需要进行下一步,
向上找到b的生成位置
类似o(“7f6d”)这种形式高度怀疑是webpack打包的
在这里插入图片描述

如果不确定的话把该文件翻到最上面,发现还是一个webpack多打包的形式,如下图

在这里插入图片描述

在这里插入图片描述
可以看出这个结构是webpack打包出来的。

ok,那么我们确定好是webPack结构了,那我们需要把webPack加载函数给扣下来。
下一步刷新网页,控制台输入o,跟进其内部
在这里插入图片描述
这里就知道那个js是主加载器了。

ok.这样我们就得到了webpack加载器的代码!!!

将webpack的主文件全部复制下来到放到新的js文件里(注意这里是全部。!!好几万行代码,如果是高手能直接复制要用到的代码就当我是p话。)

输入webpackJsonp得到所有的子文件

在这里插入图片描述
要调用webpack里面的函数需要把内部方法给导出来
在这里插入图片描述
把u函数给导出给hanshu

windows.hanshu = u;

外部调用

o = window.hanshu; 
b = o("7f6d") ;
encodeURI(b["c"]("123456789",b["f"]("123456@qq.com")));

这样就成了!!。这个加密是有时间戳进去加密运算的所以 不能实时对比,结果会不一样就不放对比截图了。
在这里插入图片描述
实际操作中还有些问题等下一篇讲!!!
喜欢逆向的同学可以关注,有免费逆向工具与文章,谢谢支持。

在这里插入图片描述


http://www.kler.cn/a/451083.html

相关文章:

  • 阿里云 Java 后端一面,什么难度?
  • 第11周作业
  • 全国硕士研究生入学考试(考研)常识详解之分数构成:初试成绩、复试成绩及复录比
  • C++练习:图论的两种遍历方式
  • 无人直播源码
  • 管理面板Ajenti的在Windows10下Ubuntu24.04/Ubuntu22.04里的配置管理
  • Redis的主从集群以及哨兵机制学习总结
  • Google 提供的 Android 端上大模型组件:MediaPipe LLM 介绍
  • 单片机 STM32入门
  • windows C#-对象和集合初始值设定项(中)
  • RustDesk远程及自建服务器搭建教程
  • Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
  • 国标GB28181设备管理软件EasyGBS:P2P远程访问故障排查指南(设备端)
  • 自然语言处理与知识图谱的融合与应用
  • K8s - openeuler2203SP1安装 K8s + flannel
  • 浅谈 前端验证码那些事
  • STM32 与 AS608 指纹模块的调试与应用
  • keepalived踩坑记录
  • 前端:纯前端快速实现html导出word和pdf
  • 【EthIf-13】EthIfGeneral容器配置-01