mosheng 发表于 2026-1-8 04:32:31

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 分析流量。

aheiye 发表于 2026-1-31 11:09:11

111 研究研究研究研究研究研究研究研究研究研究

sw1816 发表于 2026-1-13 10:50:52

111 研究研究研究研究研究研究研究研究研究研究
页: [1]
查看完整版本: JavaScript Hook文档