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-REcd 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