You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hook JavaScript对象字面量构造器,修改不可访问上下文创建的对象

拦截对象字面量并修改属性的解决方案

由于对象字面量的属性初始化最终会调用全局的Object.defineProperty方法,我们可以通过Hook这个方法监控属性定义过程,在目标属性被设置时修改其值。这种方法不依赖目标代码的结构,即使代码被混淆也能生效,适合用书签工具或用户脚本实现。

书签工具版本(可直接添加为浏览器书签)

javascript:(function(){const o=Object.defineProperty;Object.defineProperty=function(e,r,t){if(r==='nestedsubobject'&&t.value&&t.value.foo==='value')t.value.foo='modified value';return o(e,r,t)}})();

用户脚本版本(适配Tampermonkey/Greasemonkey)

// ==UserScript==
// @name         修改目标对象的Foo属性
// @namespace    local
// @version      0.1
// @description  拦截IIFE中的对象字面量,修改其嵌套属性foo的值
// @match        https://目标网站域名/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const originalDefineProperty = Object.defineProperty;

    Object.defineProperty = function(obj, prop, descriptor) {
        // 检测是否是目标嵌套对象的定义
        if (prop === 'nestedsubobject' && descriptor.value) {
            const nestedObj = descriptor.value;
            // 匹配初始值,避免误修改其他对象
            if (nestedObj.foo === 'value') {
                nestedObj.foo = 'modified value';
            }
        }
        return originalDefineProperty(obj, prop, descriptor);
    };
})();

注意事项

  • 若目标代码被混淆,属性名(如nestedsubobject或foo)发生变化,只需将代码中的对应名称替换为混淆后的名称即可。
  • 如果需要更精准的拦截,可以结合属性的特性(如enumerable、writable)进行判断,避免影响其他对象。

内容的提问来源于stack exchange,提问作者Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:17:52