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() {};
工具选择建议
-
入门阶段
- Chrome DevTools
- JavaScript Beautifier
- CyberChef
-
进阶阶段
- Fiddler/Charles
- AST Explorer
- Puppeteer
-
专业阶段
- IDA Pro
- x64dbg
- 自定义工具
注意事项
- 法律合规
- 遵守网站robots.txt
- 注意请求频率限制
- 保护用户隐私
- 工具使用
- 定期更新工具
- 注意安全风险
- 合理使用资源
- 代码保护
- 做好数据加密
- 实现反调试措施
- 代码混淆保护
总结
JavaScript逆向分析工具众多,选择合适的工具组合能够大大提高工作效率。建议:
- 熟练掌握基础工具
- 针对性选择专业工具
- 持续学习新工具和技术
- 构建自己的工具链
参考资源
如果你在使用这些工具时遇到问题,欢迎在评论区讨论交流。
评论