JavaScript逆向webpack

webpack逆向分析

webpack是一个现代 JavaScript 应用程序的静态模块打包器(module bundler),负责分析翻译压缩打包代码。我们js逆向过程中会经常遇到,这里借助某麦数据的例子,介绍下webpack逆向的通用方法。

接口分析

首先我们分析接口,不难得出请求参数中analysis是我们需要破解的核心加密参数

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

定位加密位置

加密位置定位不是本文重点,可以通过xhr断点等多种手段定位到加密位置如下图所示。

在这里插入图片描述
分析上下文不难得出,该段代码处于webpack的其中一个模块中,这里先称之为A模块。函数的参数t为请求相关的对象,函数中的e即我们需要的加密参数analysis。有很多人在这里会想办法将这段代码解混淆,我这边的思路是在该A模块中自定义一个新函数my,并全局导出,该函数直接复制这段加密代码,但是最终的返回值修改为我们需要的e。

function my(t) {
  var n;
  f ||
    $ != s ||
    ((n = (0, i[Zt])(m)),
    (s = c[x][k][Rt] = -(0, i[Zt])(l) || +new R[K]() - r2 * n));
  var e,
    r = +new R[K]() - (s || H) - 1661224081041,
    a = [];
  return (
    void 0 === t[Ot] && (t[Ot] = {}),
    R[W][o7](t[Ot])[M](function (n) {
      if (n == v) return !B;
      t[Ot][_2](n) && a[b](t[Ot][n]);
    }),
    (a = a[jt]()[I5](N)),
    (a = (0, i[Jt])(a)),
    (a = (a += p + t[qt][T](t[Tt], N)) + (p + r) + (p + 3)),
    (e = (0, i[Jt])((0, i[Qt])(a, d)))
  );
}
window.my = my;

那我们最终的逆向思路就转化为:

  1. 使用加载器加载A模块
  2. 构造请求对象t
  3. 调用全局的my函数得出加密参数analysis

综上所述webpack加载器及模块定位就成了我们整个逆向过程中的核心。

webpack加载器及模块定位

webpack加载器及模块的定位方法相对固定。

加载器定位

首先在上述模块A中第一行代码打上断点,然后刷新页面,模块是在页面刷新时加载的。当断点断住后,我们看调用堆栈,上一个栈即为加载器位置。我们把整段js代码拷贝下来。

在这里插入图片描述
加载器所在代码为一个自执行函数,大致分为两种类型,一种是多js文件加载模块,自执行函数中没有传入请求参数。

在这里插入图片描述
另一种类型是整体加载,模块执行通过自执行函数的请求参数传入。这里我们只介绍前者,后者相对简单。

模块定位

加载器只是用来加载模块的工具,我们需要实际获取到模块代码才能将该模块在本地加载。模块A我们不是已经定位到了吗,为什么要定位模块?因为模块A还依赖其他模块,其他模块还依赖其他其他的模块…我们需要把这些模块代码全部拷贝下来,那模块A才能正确加载,这是一个补环境的思想。定位模块大致分为以下几个步骤:

加载器断点

在浏览器的加载器代码加载模块的地方打上断点,并将程序运行到断点处,并且观察代码可以得出加载器存在一个m属性,其实保存了所有已加载的模块,即断点处的变量f。

在这里插入图片描述

本地代码加载模块A

我们修改加载器代码,将加载器通过全局变量导出,并且加上日志提示当前正在加载的模块。

在这里插入图片描述
本地执行代码加载模块A,根据报错日志我们可以得知当前本地环境中缺少的模块是什么。

在这里插入图片描述
那我们从哪里获取这个模块65165呢?上面第一步里的加载器断点就起到作用了,我们可以直接在浏览器调试工具的控制台中直接输入f[65165],即能获取到该模块,点击代码则能跳转到源代码处,我们一般将整个js都拷贝到本地。

在这里插入图片描述
重复以上步骤直到没有模块加载的报错。

补充缺少的环境

最后我们可能还需要补充一些缺少的浏览器环境。

逆向代码

逆向代码可以下载下来参考链接: JS逆向-webpack逆向-某麦

03-26
### 逆向工程与反编译概述 逆向工程是一种通过对软件的目标代码进行分析,将其转化为更高级别的表示形式的过程。这一过程通常用于研究现有系统的内部结构、功能以及实现细节。在Java和Android领域,反编译工具被广泛应用于逆向工程中。 #### Java逆向工程中的Jad反编译工具 Jad是一款经典的Java反编译工具,能够将`.class`字节码文件转换为可读的`.java`源代码[^1]。虽然它可能无法完全恢复原始源代码,但它提供了足够的信息来帮助开发者理解已编译的Java程序逻辑。Jad支持多种反编译模式,并允许用户自定义规则以适应不同的需求。此外,其命令行接口和图形界面使得复杂代码的分析变得更加便捷。 #### Android逆向工程中的JEB反编译工具 针对Android应用的逆向工程,JEB是由PNF Software开发的一款专业级工具[^2]。相较于其他同类产品,JEB不仅具备强大的APK文件反编译能力,还能对Dalvik字节码执行高效而精准的操作。它的核心优势在于以下几个方面: - **广泛的平台兼容性**:除Android外,还支持ARM、MIPS等多种架构的二进制文件反汇编。 - **混淆代码解析**:内置模块能有效应对高度混淆的代码,提供分层重构机制以便于深入分析。 - **API集成支持**:允许通过编写Python或Java脚本来扩展功能并完成特定任务。 #### APK反编译流程及其意义 当涉及到具体的APK包时,可以通过一系列步骤提取其中的信息来进行全面的安全评估或者学习目的的研究工作[^3]。这些步骤一般包括但不限于获取资产目录(`assets`)内的资源数据;解密XML配置文档如`AndroidManifest.xml`定位应用程序启动点;最后利用上述提到的各种专用软件重现整个项目框架供进一步探讨。 ```bash # 使用apktool反编译APK示例 apktool d your_app.apk -o output_directory/ ``` 以上命令展示了如何借助开源工具ApkTool轻松拆卸目标安卓档案至易于探索的状态下。 ### 结论 无论是传统的桌面端还是现代移动端环境里头,恰当运用合适的反编译解决方案都是达成逆向工程项目成功不可或缺的一环。每种工具有各自专精之处,在实际应用场景当中应当依据具体需求做出明智的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SamsongSSS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值