JavaScript Hook文档
## 🔧 基本原理
JavaScript 是动态语言,函数是一等公民(first-class citizen),可以被重新赋值。因此,我们可以“保存原函数 → 替换为新函数 → 在新函数中调用原函数并加入自定义逻辑”。
### ✅ 经典 Hook 模式:
```javascript
// 1. 保存原始函数
const originalFunction = window.someFunc;
// 2. 重写函数
window.someFunc = function(...args) {
// 自定义逻辑:比如打印日志、修改参数、阻止执行等
console.log('Hooked! 调用参数:', args);
// 3. (可选)调用原始函数
const result = originalFunction.apply(this, args);
// 4. (可选)修改返回值
return result;
};
```
---
## 🛠 常见应用场景
### 1. **调试与日志记录**
- 监控 `XMLHttpRequest`、`fetch`、`WebSocket` 等网络请求。
- 跟踪用户点击、输入等行为。
```javascript
// Hook fetch
const origFetch = window.fetch;
window.fetch = (...args) => {
console.log('发起 fetch 请求:', args);
return origFetch(...args);
};
```
### 2. **绕过前端反调试**
某些网站会检测开发者工具(如 `debugger` 语句、`console.log` 被清空等)。通过 Hook `debugger` 或 `console` 可以绕过:
```javascript
// 禁用 debugger
window.debugger = () => {};
// 或 Hook Function 构造器(高级反调试对抗)
```
### 3. **爬虫/自动化(对抗反爬)**
- 某些网站通过检测 `navigator.webdriver` 判断是否为 Selenium。
- 可通过 Hook 修改该属性:
```javascript
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined,
configurable: false
});
```
### 4. **游戏外挂/安全研究**
- Hook 游戏中的关键函数(如 `attack()`, `sendScore()`)来修改行为。
- 安全人员用 Hook 分析恶意脚本行为。
### 5. **前端监控 SDK**
像 Sentry、友盟等监控工具,内部大量使用 Hook 技术自动捕获错误、性能数据。
---
## ⚠️ 注意事项
- **作用域问题**:确保 `this` 指向正确(使用 `.apply(this, args)`)。
- **递归调用风险**:不要在 Hook 函数内部不小心再次触发自身。
- **防 Hook 机制**:高级网站会检测函数是否被重写(如检查 `toString()` 输出是否为 `native code`),需更隐蔽的 Hook 方式(如 Proxy、VM 隔离等)。
- **仅限客户端**:JS Hook 只影响浏览器运行时,不影响服务器逻辑。
---
## 📦 工具推荐
- **Tampermonkey / Greasemonkey**:编写用户脚本注入 Hook 逻辑。
- **Puppeteer + evaluateOnNewDocument**:在页面加载前注入 Hook。
- **Frida(用于 Electron 应用)**:对桌面 JS 应用进行动态插桩。
- **Burp Suite + Browser Extension**:结合代理和 JS Hook 分析流量。 111 研究研究研究研究研究研究研究研究研究研究 111 研究研究研究研究研究研究研究研究研究研究
页:
[1]