JS逆向之webpack打包网站实战

前言
最近学习的进度有点缓慢,前段时间研究了下极验的滑动验证的js,怎么说呢,难度还是可以的,之后会写关于极验的一个流程跟加密破解的过程,在这之前呢,我们先了解下另一个知识点---webpack,会对之后研究极验还是有点帮助的。本文会带着大家从了解到实战解决一个webpack打包的网站,网址aHR0cHM6Ly9zeW5jb25odWIuY29zY29zaGlwcGluZy5jb20v

一、webpack是什么?

webpack打包是前端js模块化压缩打包常用的手段,特征明显,比如

!function(x){
    function xx(n){
        return ..call(**.exports, ***, ***.exports, xx)
    }
}()
又或者更直观的表现n["xxx"]这种,你可以大概知道了这是webpack打包的js代码。那我们该怎么解决这类网站呢?说个通用的方法:

1.先去找加密网站的加密入口。这应该是加密网站都必须要做的

2.找到分发器的位置,或者说是加载器,就比如上方中的exports的位置

3.用到了哪些模块就导入哪些模块

4. 将函数入口的地方返回全局,最终返回

二、webpack实战
1.找到加密入口


此网站登录密码是加密的(账号密码随意写都可以,只是了解密码加密的原理,无需注册),我们第一步如标题,先找到加密入口

我们可以看到password的加密方式,Object(o.a)(t),而上方var o = n("MuMZ");是不是有点眼熟,这不是巧了么,这时候我们开始走第二步,看看是不是我们想象中的那样。

2.找到分发器的位置
怎么找?我们此时将其他断点都取消,我们随意在如n("MuMZ")这样的前方打上断点,直接刷新页面,我们进入这个方法中,如下图所示

进去之后我们找到了如下图的分发器的位置

我们把!function自执行的代码全部copy下来,执行的时候会出现window is not defined的报错,我们要做的是定义一下,window=global;要记得我们用到的是f这个函数

3.找模块
我们找到o的方法,上面我们说了var o = n("MuMZ"),如下图

这里我们就直接把整个MuMZ这个模块放入webpack中,然后调用这个模块。我们在外部定义一个变量名,在webpack中让这个变量名与f相等。

我们直接在最下方 sign('MuMZ')调用看报错,你会看到一个经典的报错Cannot read property 'call' of undefined,什么原因呢,是因为你缺少了模块,我们找报错的地方,会找到var r = n("XBrZ");,那我们直接全局搜索,找到后把这个模块继续放进去,继续运行,还出现刚才的经典报错,那就说明还有模块要找,如下图

我的天,这么多,这里我发现了一个让我开心的地方,标记出来的那些方法全在一个js文件中,那我就不一个个模块的去找了,我直接require这个js文件呗

4.返回全局
首先在nodejs中没有btoa,我们在控制平台上看下btoa有没有重新定义写法,这个网站因为是没有自定义写法的,那我们可以直接用buffer来转义,最后我们要把数据返回全局,在外部定义一个desc(),具体代码如下图

总结
这能算典型的webpack网站如何去解决的一个流程,无论里面是否混淆还是里面有很多环境检测,大致流程是这样,你要基于这个流程去解决内部复杂的问题,

webpack不能算是反爬的手段,掌握流程大致上就没有问题了。
————————————————
版权声明:本文为CSDN博主「从前重前」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41586984/article/details/116268341

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript逆向工程涉及到逆向分析、代码还原、代码修改等多个方面,其Webpack作为一个重要的静态模块打包器,也是逆向工程需要重点关注的一部分。以下是一些关于Webpack逆向的笔记: 1. Webpack打包过程是从入口文件开始的,Webpack会递归地遍历所有依赖模块,并将它们打包一个或多个Bundle文件。因此,逆向工程的第一步就是找到Webpack打包的入口文件。 2. 在入口文件Webpack会通过require或import语句加载其他模块,并递归地遍历所有依赖模块。因此,我们可以通过分析入口文件来了解应用的整体结构和模块依赖关系。 3. 在Webpack打包过程,每个模块都会被赋予一个唯一的标识符,这个标识符可以通过module.id来获取。因此,我们可以通过分析打包后的代码,来了解每个模块的标识符和依赖关系。 4. 在Webpack打包过程,Loader和Plugin是非常重要的扩展机制,它们可以对模块进行转换和优化。因此,我们可以通过分析Loader和Plugin的源代码,来了解它们的作用和实现原理。 5. 在逆向工程,我们可以使用Webpack的source-map选项来生源映射文件,从而方便我们进行代码还原和调试。同时,我们也可以使用Webpack的devtool选项来设置不同的调试工具,以便更好地进行逆向分析和调试。 总的来说,Webpack作为静态模块打包器,在JavaScript逆向工程扮演着重要的角色。通过对Webpack逆向分析,我们可以更加深入地了解应用的整体结构和模块依赖关系,从而更好地进行代码还原和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值