[]["constructor"]["constructor"](<string representing JavaScript code>)()
をバイパスします。この場合、[]のプロトタイプはArrayクラスです。 Arrayクラスの "constructor"プロパティにアクセスすると、Functionオブジェクトが返されます。 Functionオブジェクトのコンストラクタは関数を返し、その関数の本体は最後のパラメータであり、コンストラクタに渡されます。これにより、提供された文字列を関数の本体(すなわちコード)として使用し、即座に実行される関数が作成されます。上記のコード行を「評価」の方法を用いることなく、難読化JavaScriptコードを実行するために使用されたhttps://www.trustwave.com/Resources/SpiderLabs-Blog/Angler-Exploit-Kit-%E2%80%93-Gunning-For-the-Top-Spot/?page=1&year=0&month=0賢いJavaScriptは「コンストラクタ」プロパティは、オブジェクトのプロトタイプを返すJavaScriptでは評価方法
:から、上の段落で述べたように
。この段落を読んだ後、私はこの巧妙なコード行を理解できません。実際に何が起きているのか誰でも説明できますか?
[].constructor === Array
さらに、Array
のコンストラクタはFunction
ある: