如果代码经过混淆(Obfuscation),变量名和函数名可能被压缩成短字符(如 a
、b
),直接搜索 location
可能无效。以下是针对混淆代码的快速定位方法:
方法 1:通过行为特征动态监听
1.1 监听所有 location.href
修改
在控制台注入以下代码,监听对 location
的修改:
const originalLocation = window.location;
Object.defineProperty(window, 'location', {
get() {
console.trace('读取了 location');
return originalLocation;
},
set(value) {
console.warn('尝试修改 location:', value);
debugger; // 自动触发断点
return false; // 阻止跳转(可选)
}
});
- 效果:任何试图修改
location
的行为会触发断点,直接定位到调用位置。
1.2 Hook 原生方法
如果代码通过 window.open()
或 <a>
标签跳转,可以 Hook 这些方法:
const originalOpen = window.open;
window.open = function(url) {
console.warn('调用了 window.open:', url);
debugger;
return originalOpen.apply(this, arguments);
};
方法2:静态分析(适用于轻度混淆)
2.1 全局正则搜索
在开发者工具的 Sources 面板中:
- 按
Ctrl + Shift + F
(全文件搜索)。 - 使用正则表达式匹配可能的模式:
/([a-zA-Z0-9_]+)\.(href|assign|replace|reload)/g
- 解释:匹配类似
a.href
、b.assign()
的调用。
- 解释:匹配类似
2.2 AST反混淆工具
如果代码高度混淆,可使用工具还原部分语义:
- 工具推荐:
- AST Explorer(在线解析 JS AST)
- deobfuscate.io(自动化反混淆)
- 步骤:
- 复制混淆代码到工具中。
- 查找 AST 中的
MemberExpression
,筛选属性名为href
/assign
/等。
方法3:动态执行追踪
3.1 Chrome DevTools “Event Listener Breakpoints”
- 打开开发者工具 → Sources → 右侧展开 Event Listener Breakpoints。
- 勾选 Navigation →
hashchange
/popstate
。 - 触发页面跳转时自动暂停,检查调用栈。
3.2 Performance Monitor
- F12 → Performance → ⚙️ →勾选 Network Requests。 2.录制页面操作,观察是否有意外的 URL请求或跳转。
补充技巧
- XHR/Fetch监控:有些“伪跳转”是通过 API + DOM操作模拟的,需监控网络请求。
- toString():在 Console输入可疑变量后加
.toString()
,可能暴露原始功能。
总结建议
- 优先动态监听(方法1),无需理解混淆逻辑即可定位。 -若需完整分析,结合静态正则+AST工具(方法2)。
- SPA框架项目重点检查路由库(Vue Router/React Router)。
内容由零声教学AI助手提供,问题来源于学员提问