toString

結局、write.toString も toString.toString も Function.prototype.toString と同等である。
これは、Hacker の立場からすると問題である。

write.toString では、write を native code に見せるために、
`function write() { [native code] }`を返す必要がある。

一方、.toString.toString では、.toString を native code に見せるために、
`function toString() { [native code] }`を返す必要がある。

しかし、この2つの関数は、結局、Function.prototype.toString という一つの関数なので、
以下のように、関数の名前の部分が、呼ばれた順序により、変更しなければならない。

let name=""; Function.prototype.toString=function(){ name=(name=="")?"write":"toString"; return "function "+name+"() { [native code] }"; };
もし、HObfus側で、document.write.toString() をダミーとして複数回呼び出した場合、 ハッカー側が、正しく関数の名前を設定するのは著しく困難になる。 さらに、window.decodeURIComponents を使用している場合、関数の名前は、 "write", "decodeURIComponents", "remove", "toString" の3つを切り替えなければ ならなくなる。