Noonisy
JS逆向学习(AST-HOOK)
2026-02-19
阅读:3

JS逆向学习(AST-HOOK)


前言

目前已经学习了部分JS逆向基础(已经看到志远开源二期视频 第30集),记录一下一些操作

AST-HOOK

工具地址:https://github.com/JSREI/ast-hook-for-js-RE

在 README 中介绍了大部分内容,但有部分内容需要注意,Issues 里面也有很多问题(目前 Commits:3779fa1c13e4e8)

安装依赖(WIN11)

  • git clone https://github.com/JSREI/ast-hook-for-js-RE
  • cd ast-hook-for-js-RE ,进入目录
  • npm install anyproxy,项目内安装 anyproxy 包

anyproxy 证书

安装 anyproxy 包后,进入项目 node_modules/.bin 目录
  • cd node_modules/.bin ,里面有形如 anyproxy、anyproxy.cmd、anyproxy.ps1 等文件
  • anyproxy ca,运行命令,会有两个地址可以访问
[AnyProxy Log][xxxxxxxx]: Http proxy started on port 8001
[AnyProxy Log][xxxxxxxx]: web interface started on port 8002
  • 浏览器访问第二个地址,localhost:8002
  • 左侧导航栏,点击第二个 RootCA,会有一个二维码,下面有按钮 DOWNLOAD,点击 DOWNLOAD,下载一个证书,rootCA.crt
  • 双击该证书安装,安装证书 -> 存储位置选择本地计算机 -> 点击第二个,将所有的证书都放入下列存储(P),证书存储 浏览,选择第二个,受信任的根证书颁发机构 -> 下一步,结束
如果想要看证书安装位置,CMD 中执行 MMC,会打开 Microsoft 管理控制台,选择左上角 文件 -> 添加/删除管理单元 -> 左边可用的管理单元,往下拉,找到倒数第三个,证书 -> 双击,有三个管理单元,选择第三个计算机账户,下一页,完成,确定

在控制台根节点,就可以看见证书(本地计算机),点击第二个,受信任的根证书颁发机构,点击证书,右侧就是安装的证书,如果 AnyProxy 安装正确,就可以看见(前几个应该就有,字母排序)

启动 ast-hook

可以先看一下 github 项目的 Issues,因为比较久了,没更新,现在有点问题,按以下方法解决
  • ast-hook-for-js-RE/src/proxy-server,进入该目录,创建一个符号链接指向上一级src目录,mklink /d src ".."
会在当前目录下创建一个 src 文件夹(有点循环指向的意思),这样就不用像 Issues 中的那样改项目代码

在 ast-hook-for-js-RE/src/proxy-server 目录下,执行命令行 node proxy-server.js
或者,在该目录下新建一个执行文件 run.cmd,内容为
node proxy-server.js
之后就双击执行,时间会稍慢,应该要通过这层代理

使用方法

挂代理

ast-hook 是给浏览器挂一层代理,可以看代码
// ast-hook-for-js-RE/src/proxy-server/proxy-server.js
const AnyProxy = require("anyproxy");

const options = {
    port: 10086,
    rule: require("./rules"),
    webInterface: {
        enable: true,
        webPort: 8002
    },
    throttle: 10000,
    forceProxyHttps: true,
    wsIntercept: false, // 不开启websocket代理
    silent: false
};
const proxyServer = new AnyProxy.ProxyServer(options);

proxyServer.on("ready", () => { /* */ });
proxyServer.on("error", (e) => { /* */ });
proxyServer.start();
代理的端口号是 10086(可以修改),因此,使用 chrome 的话,如果我们想要使用 ast-hook,就需要使用插件,把需要代理访问的网站,挂到 10086 端口上,使用 chrome 插件 Zero Omega(Proxy SwitchyOmega 3),该插件还是很好用的,可以研究一下
  • 情景模式 hookproxy,设置代理服务器,127.0.0.1,代理端口设置 proxy-server.js 相同 port,如 10086 端口,不代理的地址列表清空
  • 情景模式 直接连接,设置代理协议,直接连接
  • 情景模式 自我系统代理,设置端口号为 clash 的端口号,例如 7897,不代理的地址列表清空
  • 情景模式 auto switch,就可以设置切换规则
这样设置后,需要 hook 的就选择 hookproxy,也不会影响 clash 访问

访问

例如极验网站,需要添加为 hookproxy,例如:想要拿到 https://apiv6.geetest.com/get.php 的参数 w,就在 Console 中,执行hook.search(),把 w 值复制进去,就可以看到在哪些地方有 w 值,它是怎么赋值的..

References

最后编辑于:2026 年 02 月 20 日 00:13
邮箱格式错误
网址请用http://或https://开头