前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS逆向之webpack 通用扣取思路

JS逆向之webpack 通用扣取思路

原创
作者头像
拉灯的小手
发布2022-12-07 12:48:08
1.7K0
发布2022-12-07 12:48:08
举报

标题

环境

win10 chrome106

目标站:aHR0cHM6Ly93d3cuZ205OS5jb20v

加密参数 password: K6YEmQrNy%2FQgdnacXhdIZ1upCj4UU562IW89oOZquLkZ%2F16JDNyMqEU7pGVemvQzjfAlOzh7nSOLPkJp3kxbTm8XtWrHp9K%2BmMClOmmhkbdjAyax5xLBWC6PJiD6o8H

随便输入一些信息,触发登录,抓包找到接口

在这里插入图片描述
在这里插入图片描述
全局搜索password,没有找到明显的有用信息,使用xhr堆栈随便找个疑似位置打个断点跟进去
在这里插入图片描述
在这里插入图片描述

明显分析出a.encode就是加密方法

,查看结构可以看出是webpack结构
在这里插入图片描述
在这里插入图片描述

1.定位加载模块的方法(加载器)

webpack必有一个加载模块的方法:call或apply,找到加载器先抠出来

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
function e(s) {
    if (i[s])
        return i[s].exports;
    var n = i[s] = {
        exports: {},
        id: s,
        loaded: !1
    };
    return t[s].call(n.exports, n, n.exports, e),
}

2.构造成自执行方法

在控制台调试一下缺什么补什么

代码语言:javascript
复制
!function(t) {
    function e(s) {
    	var i = {};
        if (i[s])
            return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        return t[s].call(n.exports, n, n.exports, e),
    }
}()

3.定位并扣除调用的加密方法

在a.encode处下断点,跟进去找到最终的加密方法

分析得知jsencrypt.encrypt就是最终的加密方法

在这里插入图片描述
在这里插入图片描述

将jsencrypt.encrypt的方法整段扣出来,然后作为参数填入自执行加载器中,然后在将调用jsencrypt.encrypt的方法也抠出来

在这里插入图片描述
在这里插入图片描述

代码太长就不贴了,最终的格式就是下面的样子,

代码语言:javascript
复制
!(function(t) {
    var i = {};
    function e(s) {
        if (i[s]) return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        return t[s].call(n.exports, n, n.exports, e), n.loaded = !0, n.exports
    }
    _e = e;
})({
    encrypt: function(t, e, i) {},
    diaoyong: function(t, e, i) {}
});

4.导出加密方法

代码语言:javascript
复制
var _e;
!(function(t) {
    var i = {};
    function e(s) {
        if (i[s]) return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        return t[s].call(n.exports, n, n.exports, e), n.loaded = !0, n.exports
    }
    _e = e;
})({
	encrypt: function(t, e, i) {},
    diaoyong: function(t, e, i) {}
});

5.编写自定义方法 按照流程加密

代码语言:javascript
复制
function getkey(pass, time) {
    var diaoyong= _e("diaoyong");
    //这儿需要new一下调用方法,不然获取不到方法属性
    var new_diaoyong = (new diaoyong);
    return new_diaoyong.encode(pass, time)
}

效果

在这里插入图片描述
在这里插入图片描述

资源下载

https://download.csdn.net/download/qq_38154948/87253109


本文仅供学习交流使用,如侵立删!


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 标题
  • 1.定位加载模块的方法(加载器)
  • 2.构造成自执行方法
  • 3.定位并扣除调用的加密方法
  • 4.导出加密方法
  • 5.编写自定义方法 按照流程加密
  • 效果
  • 资源下载
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档