X-hub

JavaScript逆向工具大全:爬虫工程师必备指南

详细介绍JavaScript逆向分析常用工具,包括Chrome DevTools、Fiddler、Charles等抓包工具,以及AST分析、代码美化等专业工具的使用方法

JavaScript逆向工具大全:爬虫工程师必备指南

在进行JavaScript逆向分析时,合适的工具能大大提高工作效率。本文将介绍一些常用的JS逆向工具,帮助你更好地进行爬虫工作。

一、抓包分析工具

1. Chrome DevTools

最基础也是最常用的工具,主要功能:

  • Network面板:监控请求
  • Sources面板:断点调试
  • Console面板:执行代码
  • Elements面板:分析DOM

使用技巧:

// 设置XHR断点
// 在 Network 面板右键选择 "Break on XHR/fetch"

// 使用 console.log 跟踪函数调用
var oldFunction = window.encrypt;
window.encrypt = function() {
    console.log('encrypt called with:', arguments);
    return oldFunction.apply(this, arguments);
};

// 使用 debugger 语句
function someFunction() {
    debugger;
    // 代码继续
}

2. Fiddler

专业的抓包工具,特点:

  • 支持HTTPS解密
  • 自定义规则拦截
  • 请求重放功能
  • 自动化脚本

配置示例:

// Fiddler 自定义规则
if (oSession.uriContains("api/getData")) {
    oSession.utilDecodeResponse();
    var responseBody = oSession.GetResponseBodyAsString();
    // 处理响应数据
}

3. Charles

跨平台抓包工具:

  • 支持移动端抓包
  • 断点调试功能
  • Map Local/Remote功能
  • 限速测试

二、代码分析工具

1. AST Explorer

在线AST分析工具:astexplorer.net

使用场景:

// 分析混淆代码的结构
// 示例混淆代码
var _0x1234 = ['value', 'getElementById', 'input'];
document[_0x1234[1]](_0x1234[2])[_0x1234[0]];

// 通过AST分析还原为
document.getElementById('input').value;

2. JavaScript Beautifier

代码美化工具:beautifier.io

功能特点:

  • 格式化混淆代码
  • 自定义格式化规则
  • 支持多种语言

3. JavaScript Deobfuscator

专业的JS反混淆工具:

// 混淆前
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4 5="3";4 1="2";6(1,5);',7,7,'|b|hello|world|var|a|console.log'.split('|'),0,{}))

// 反混淆后
var a = "world";
var b = "hello";
console.log(b, a);

三、环境模拟工具

1. Puppeteer

无头浏览器自动化工具:

const puppeteer = require('puppeteer');

async function analyze() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    
    // 监听请求
    page.on('request', request => {
        console.log(request.url());
    });
    
    await page.goto('https://example.com');
    await browser.close();
}

2. Selenium

自动化测试工具:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

# 等待元素加载
element = driver.find_element(By.ID, "target")

3. DrissionPage

新一代Python网页自动化工具,结合了Selenium和Playwright的优点:

  • 支持CDP协议
  • 无需安装浏览器驱动
  • 支持多标签页管理
  • 内置反爬虫处理

基础使用示例:

from DrissionPage import ChromiumPage

# 创建页面对象
page = ChromiumPage()

# 访问网页
page.get('https://example.com')

# 等待并获取元素
element = page.ele('#login-button')
element.click()

# 执行JS代码
result = page.run_js('return window.encrypt("test")')

# 处理弹窗
page.handle_alert()

# 获取接口数据
response = page.wait.ajax('/api/data')
data = response.json()

高级功能示例:

# 设置请求拦截
def on_request(request):
    if 'api/getData' in request.url:
        print('拦截到请求:', request.url)
        
page.set_request_handler(on_request)

# 注入JavaScript代码
page.run_js('''
window.encrypt = function(data) {
    console.log('加密数据:', data);
    return originalEncrypt(data);
}
''')

# 多标签页操作
new_page = page.new_tab('https://example.com/page2')
new_page.wait.load_complete()
data = new_page.run_js('return window.getData()')
new_page.close()

特色功能:

  • 智能等待机制
  • 内置反反爬虫功能
  • 支持d模式和s模式切换
  • 支持远程调试
  • 性能优于传统Selenium

四、专业逆向工具

1. IDA Pro

用于分析混淆的JavaScript代码:

  • 支持反编译
  • 交叉引用分析
  • 数据流分析

2. x64dbg

动态调试工具:

  • 断点调试
  • 内存分析
  • 代码追踪

五、实用工具集

1. CyberChef

在线编解码工具:CyberChef

常用功能:

  • Base64编解码
  • URL编解码
  • 各种加密解密

2. Postman

API测试工具:

// 预处理脚本
pm.environment.set("timestamp", Date.now());
pm.environment.set("sign", CryptoJS.MD5(secretKey + timestamp).toString());

// 测试脚本
pm.test("Response OK", function () {
    pm.response.to.have.status(200);
});

使用技巧

1. 定位加密参数

// 使用 Proxy 监听对象属性
window.param = new Proxy(window.param, {
    get: function(target, property) {
        console.log('Getting:', property);
        return target[property];
    },
    set: function(target, property, value) {
        console.log('Setting:', property, value);
        target[property] = value;
        return true;
    }
});

2. 跟踪函数调用

// 使用 Function.prototype.toString 分析函数
function analyzeFunction(fn) {
    console.log(fn.toString());
    // 分析函数源码
}

// 使用 Performance 分析性能
console.time('encrypt');
encrypt(data);
console.timeEnd('encrypt');

3. 绕过反调试

// 处理 debugger 语句
Function.prototype.constructor = function() {
    return () => {};
};

// 处理 console.log
console.log = function() {};

工具选择建议

  1. 入门阶段

    • Chrome DevTools
    • JavaScript Beautifier
    • CyberChef
  2. 进阶阶段

    • Fiddler/Charles
    • AST Explorer
    • Puppeteer
  3. 专业阶段

    • IDA Pro
    • x64dbg
    • 自定义工具

注意事项

  1. 法律合规
  • 遵守网站robots.txt
  • 注意请求频率限制
  • 保护用户隐私
  1. 工具使用
  • 定期更新工具
  • 注意安全风险
  • 合理使用资源
  1. 代码保护
  • 做好数据加密
  • 实现反调试措施
  • 代码混淆保护

总结

JavaScript逆向分析工具众多,选择合适的工具组合能够大大提高工作效率。建议:

  1. 熟练掌握基础工具
  2. 针对性选择专业工具
  3. 持续学习新工具和技术
  4. 构建自己的工具链

参考资源

如果你在使用这些工具时遇到问题,欢迎在评论区讨论交流。

评论