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

你可能感兴趣的:(javascript,webpack,开发语言)