The following code make a proxy of document.getElementsByTagName.
When document.getElementsByTagName.name is accessed,
the proxy will return "write" instead of getElementsByTagName.
console.log("[A]",document.getElementsByTagName.name); const keep_getElementsByTagName=document.getElementsByTagName; document.getElementsByTagName=new Proxy(document.getElementsByTagName,{ get(target, prop, receiver) { if(prop==="name") { return "write"; } return Reflect.get(target, prop, receiver); } }); console.log("[B]",document.getElementsByTagName.name); // restore 'getElementsByTagName' function document.getElementsByTagName=keep_getElementsByTagName; console.log("[C]",document.getElementsByTagName.name);
The usage of this proxy is to countermeasure the hackers who try to get the source code from HObfus javascript using the toString proxy. In the hacker's proxy, they will use thisArg.name to figure out the function name in:
function function-name() { [native code] }
To break the toString proxy, you can set up the name proxy to send a fake name to thisArg.name.