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つを切り替えなければ
ならなくなる。