ZBLOG

如果代码做了混淆,如何快速找出JS代码中所有的location对象

如果代码经过混淆(Obfuscation),变量名和函数名可能被压缩成短字符(如 ab),直接搜索 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 面板中:

  1. Ctrl + Shift + F(全文件搜索)。
  2. 使用正则表达式匹配可能的模式:
    
    /([a-zA-Z0-9_]+)\.(href|assign|replace|reload)/g
    
    • 解释:匹配类似 a.hrefb.assign() 的调用。

2.2 AST反混淆工具

如果代码高度混淆,可使用工具还原部分语义:

  • 工具推荐
  • 步骤
    1. 复制混淆代码到工具中。
    2. 查找 AST 中的 MemberExpression,筛选属性名为 href/assign/等。

方法3:动态执行追踪

3.1 Chrome DevTools “Event Listener Breakpoints”

  1. 打开开发者工具 → Sources → 右侧展开 Event Listener Breakpoints
  2. 勾选 Navigationhashchange/popstate
  3. 触发页面跳转时自动暂停,检查调用栈。

3.2 Performance Monitor

  1. F12 → Performance → ⚙️ →勾选 Network Requests。 2.录制页面操作,观察是否有意外的 URL请求或跳转。

补充技巧

  • XHR/Fetch监控:有些“伪跳转”是通过 API + DOM操作模拟的,需监控网络请求。
  • toString():在 Console输入可疑变量后加 .toString(),可能暴露原始功能。

总结建议

  • 优先动态监听(方法1),无需理解混淆逻辑即可定位。 -若需完整分析,结合静态正则+AST工具(方法2)。
  • SPA框架项目重点检查路由库(Vue Router/React Router)。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23162

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?