如果字符串包含某个子字符串,则任何字符串赋值上的断点



我可以放置一个数据断点,如果将任何变量分配给包含某个子字符串的字符串,则会触发该断点吗?

例如,我想对包含&ctoken=的 URL 的构造方式进行逆向工程。它是用复杂的JavaScript完成的,目标是混淆它。

如果我能告诉 JS VM 监视所有字符串变量并在某个子字符串出现在任何变量上时中断,这将对我有很大帮助。

这可能吗?

在我开始之前 - 据我所知,这是不可能的。

您需要的(甚至在创建调试功能之前)是已经装箱以String本机内置对象的原始字符串类型,然后String已经代理。

更多解释:

只有

const s = "hi"

还不是String的实例 - 内置的本机对象,由 ECMAScript 实现提供给您的范围 - 而是一个原始类型。 此类原始类型只不过是指向原始数据存储器引用的指针。我什至假设有像 Java 这样的内置池来优化情况,例如

const s = "hi"
const x = new String("hi")

是数据对象的相同内存引用。 但后者当然会被String框住。 http://bespin.cz/~ondras/html/classv8_1_1String.html

在原始类型上,即使我们想添加订阅者,我们也无法添加订阅者。

例如:

s.charAt(i)

将自动装箱s到其包装器String

观察每个原始类型意味着我们必须将所有原始字符串装箱到String这对性能来说根本不是一件好事。

不仅如此,String本身的实现还必须允许我们添加订阅者,因此已经代理。

在JS中,这样的代理看起来像这样(为了使它更容易理解我所说的代理的意思):

var proxiedString = new Proxy(String, {
defineProperty(target, propKey, propDesc) {
console.log('defined a new string')
},
set(obj, prop, value) {
console.log('set a new value to a string')
}
});
proxiedString.x = 'newPropValue'

我又猜 - 对性能不利。

  1. 您可以在浏览器 devTools 上使用条件断点,通过右侧 单击菜单。
  2. 如果你可以在页面的某个地方写一个js,那么你 可以做到这一点:

.

if(window.location.pathname.indexOf("&ctoken=") > -1){ 
debugger;// browser will put breakpoint automaticaly here, if condition  is trully.
console.dir(window.location);
}

最新更新