webpack扣代码技巧

0 目标网站

主要介绍,webpack的扣代码技巧

网址链接:
‘aHR0cHM6Ly9tLmN0eXVuLmNuL3dhcC9tYWluL2F1dGgvbG9naW4=’

对应接口:
‘aHR0cHM6Ly9tLmN0eXVuLmNuL2FjY291bnQvbG9naW4/cmVmZXJyZXI9d2FwJm1haW5WZXJzaW9uPTMwMDAzMTUwMCZjb21QYXJhbV9jdXJUaW1lPTE3NDIwNTQwNzUyNzMmY29tUGFyYW1fc2VxQ29kZT03NDhCNTg0NDFEQ0I1RThFQzAxMUM5QTg5ODRCRjg5OCZjb21QYXJhbV9zaWduYXR1cmU9ZWU3NzZhNGU0NWM3YzFmMmNlNmQ1YmIwMzAxZTJkYmMmaXNDaGVjaz10cnVlJmxvY2FsZT16aC1jbg==’

相关参数:

1
2
userName: 17312@qq.com
password: 3JvoqI+7tdA=

密码其实是输入的 123456

1 浏览器调试

可自行跟堆栈帧
2025-03-16-00-02-38.png

主要的js

1
2
3
4
n = k({
userName: Object(b["g"])(r.value),
password: encodeURI(Object(b["c"])(i.value, Object(b["f"])(Object(b["g"])(r.value))))
}, a),

通过观察,是执行了 b 对象里面的 “g” “c” “f” 等方法完成的加密,所以需要找 b

将光标滚轮往上滑,找到了 b 赋值的地方

1
, b = o("7f6d")

给当前行打上断点,F5 刷新浏览器,发现一个main的js,进入

找到导出函数的核心代码,问题是如何将 “7f6d” 给导出?

在 u 方法定义完毕之后,插入如下代码,并且将整个 main 的 js 内容给拷贝出来到代码片段

1
window.xiamu = u;

然后执行,发现控制台报了很多了错

通过控制台观察,这里在进行一个初始化的过程,并且是调用了 t() 方法

直接注释掉,这行

再次执行,得到 undefined ,并且控制台没有报错了

然后回到调试的 js ,输出 webpackJsonp ,得到所有的子 js 文件,这里可以看到有七个

挨个打开,进入,全选,拷贝,将所有的 子 js 文件函数都拷贝到之前 main 的代码片段后面

如下,大概也就四万多行而已,拿到代码片段运行,将所有代码折叠,可以发现在往 webpackJsonp 这个数组添加函数

自己定义的部分如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let r = {
value: "17312@qq.com"
}
let i = {
value: "123456"
}

let bbb = xiamu("7f6d")
let parma = {
userName: Object(bbb["g"])(r.value),
password: encodeURI(Object(bbb["c"])(i.value, Object(bbb["f"])(Object(bbb["g"])(r.value))))
}

console.log(parma);

输出得到结果

与浏览器参数进行比对,发现一致

2 Fiddler插件调试

将四万多行代码, 拷贝到 Fiddler 中 JS 调试工具,点击加载代码

发现 window 没定义,在头部加上

1
var window = this;

再次运行,发现没有’userAgent’,直接删了

再次运行,发现 Q.indexOf 不是函数 ,直接删了,后面还有 Q.match 不是函数

删完效果如下:

setTimeout 未定义,也删了

document 未定义

setTimeout 未定义

‘origin’ of undefined

使用 V8 执行,得到结果

1
JSON.stringify(parma)

3 简化代码

上面的操作是针对于四万行代码进行操作的,其实有些函数压根都没有使用到,可以进行简化

代码解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function u(n) {
if (r[n]) // 缓存
return r[n].exports; // 文件的导出函数

// 缓存没有,就创建缓存
var t = r[n] = {
i: n,
l: !1, // 用于方法自身进行二次判断
exports: {} // 创建导出对象
};
// e 所有函数 e[n] 函数
return e[n].call(t.exports, t, t.exports, u),
t.l = !0,
t.exports
}

插入如下两行代码:

注意是在 Fiddler 插件中运行,然后将 window.code 的内容拷贝过去

1
2
window.code = '';
window.code += "\"" + n + "\": " + e[n] + ",";

输出,并且复制

也是可以计算出正常的结果的,并且代码量少了很多

5 总结扣代码流程

  1. webpackJsonp 拿到所有子文件
  2. 通过加载器拿到主文件
  3. 把子文件依次添加到主文件下面
  4. 删除初始化代码 导出加载器
  5. 先在浏览器运行成功 然后 Fiddler 插件运行成功
  6. 修改加载器 window.code += “"“ + n + “":” + e[n] + “,”;
  7. 在 Fiddler 插件运行拿到code和原本的加载器头部

webpack扣代码技巧
https://xiamu.icu/逆向/webpack扣代码技巧/
作者
肉豆蔻吖
发布于
2025年3月15日
许可协议