JS逆向之Webpack(二)

JS逆向之Webpack(二)

难度: ⭐️

网址如下

https://synconhub.coscoshipping.com/

需要逆向的值:

登录请求的password

image-20220310114706857

image-20220310114735790

找到加密的位置

看起来想RSA,所以试着搜搜以下关键词

setPublicKey(
encrypt(
password
username

比如搜password,73个,直接放弃~

image-20220310123051418

setPublicKey(,这个少,就这个了

image-20220310123153630

xhr断点也打一个

image-20220310123617133

image-20220310123626993

可以看到已经是加密的

image-20220310123654667

翻翻方法栈,找到个很可疑的,也加个断点

image-20220310123814267

再提交一下

image-20220310123856868

我们进入s.w这个方法再下个断点

image-20220310123942403

好了找到密码加密的地方了,就是调用o.a((t),其中t就是明文

image-20220310124010989

然后我们发现o是在这里定义的,很显然就是通过webpack装载器装载的了

image-20220310124138137

寻找装载器

我们在o这里下一个断点,刷新下页面,然后跳过去,发现到这里了,还不给格式化

image-20220310124400088

image-20220310124431946

那我们就复制到webstrom里面格式化一下

可以看到f是导出函数

image-20220310124605273

那我们把f导出来

window = this;
var _f;
!function (c) {
   
	// ...

    function f(n) {
   
        if (h[n]) return h[n].exports;
        var u = h[n] = {
   i: n, l: !1, exports: {
   }};
        return c[n].call(u.exports, u, u.exports, f), u.l = !0, u.exports;
    }
	// ...
    _f = f;
}({
   

});

然后我们测试一下看看好不好用,发现没有问题

image-20220310124906441

到此我们装载器就找到了

寻找装载模块

由于上一步需要o,而o又依赖MuMZ模块,那么我们接下来就要去找MuMZ模块

image-20220310134129638

image-20220310134358318

把它扒下来可以看到又需要这个

image-20220310134504884

但是这里我们会发现这个模块依赖一万个模块,这时候一个一个扒就显得很笨了,我们随便找几个看看发现都在这一份文件里,那么我就就直接扒整一份文件,放到一个新的js文件里,然后引用它

image-20220310134558875

image-20220310134801412

image-20220310134845251

然后我们测试一下,发现不报错,那就没问题了

image-20220310134930813

构造自执行方法

由于我们知道,e是明文密码,返回的结果就是加密后的字符串,那么我们就需要调用这个方法,这里给出几个方法

image-20220310135408386

方法一

它怎么调用我们就怎么调用

image-20220310135712738

image-20220310135811666

但在这里给我报了个错,说是找不到这个方法,nodejs不支持使用atob和btoa 进行字符串base64转换,转换方法如下:

// 转为base64
var strToBase64 = new Buffer().from('aaabbbccc').toString('base64');
// base64反解析为字符串
var base64ToStr = new Buffer(str , 'base64').toString();

image-20220310140300328

发现就可以了

image-20220310140320609

方法二

直接定义成window,简单粗暴

image-20220310140518890

image-20220310140622941

image-20220310140827613

源代码

window = this;
require("./1.js")
var _f;
!function (c) {
   
    function n(n) {
   
        for (var h, e, f = n[0], b = n[1], d = n[2], t = 0, o = []; t < f.length; t++) e = f[t], Object.prototype.hasOwnProperty.call(k, e) && k[e] && o.push(k[e][0]), k[e] = 0;
        for (h in b) Object.prototype.hasOwnProperty.call(b, h) && (c[h] = b[h]);
        for (r && r(n); o.length;) o.shift()();
        return a.push.apply(a, d || []), u();
    }

    function u() {
   
        for (var c, n = 0; n < a.length; n++) {
   
            for (var u = a[n], h = !0, e = 1; e < u.length; e++) {
   
                var b = u[e];
                0 !== k[b] && (h = !1);
            }
            h && (a.splice(n--, 1), c = f(f.s = u[0]));
        }
        return c;
    }

    var h = {
   }, e = {
   runtime: 0}, k = {
   runtime: 0}, a = [];

    function f(n) {
   
        if (h[n]) return h[n].exports;
        var u = h[n] = {
   i: n, l: !1, exports: {
   }};
        return c[n].call(u.exports, u, u.exports, f), u.l = !0, u.exports;
    }

    f.e = function (c) {
   
        var n = [];
        e[c] ? n.push(e[c]) : 0 !== e[c] && {
   
            "chunk-00fd": 1,
            "chunk-05d7": 1,
            "chunk-0e20": 1,
            "chunk-387f": 1,
            "chunk-0c25": 1,
            "chunk-656e": 1,
            "chunk-57a6": 1,
            "chunk-7f42": 1,
            "chunk-98a0": 1,
            "chunk-bd49": 1,
            "chunk-1633": 1,
            "chunk-16f7": 1,
            "chunk-17fe": 1,
            "chunk-a0e4": 1,
            "chunk-0d0d": 1,
            "chunk-1b3d": 1,
            "chunk-1a09": 1,
            "chunk-3786": 1,
            "chunk-57f0": 1,
            "chunk-11cb": 1,
            "chunk-2bb3": 1,
            "chunk-3902": 1,
            
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
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逆向分析,我们可以更加深入地了解应用的整体结构和模块依赖关系,从而更好地进行代码还原和调试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值