See this page to understand `defer`, `async` JavaScript.
HObfusから、ETObfにdispatchEventで開始のシグナルを送るアイディアを考察する。 結論を急ぐと、無理のようである。理由は2つある。 理由1:ハッカーより先にシグナルを送れない。
最初の計画では、上記の図のA点で、dispathEventを行って...const el_html=document.documentElement; el_html.dispatchEvent( new CustomEvent("hobfus-signal",{detail:{msg:"hello"}}) );...etobf.js が addEventListener で指示を受け取ることを考えていた。(Example)const el_html=document.documentElement; el_html.addEventListener("hobfus-signal",function(e){ console.log("in ETObf"); });しかし、etobf.js の実行は、A点ではなく、B点になる可能性があることがわかった。 A点で実行されていなければ、当然 addEventListener を設置することもできない。 etobf.js に async や defer を付けてみたらどうであろうか? async はまず問題外である。async を付けたら、その実行のタイミングは完全に 独立してしまい、タイミングに関するなにかしらの保証はまったくなくなる。 defer は「ページの終わり」で JavaScript を実行させるためのコマンドだが、 この「ページの終わり」はC点での実行であり、A点でもB点でもはない。Hacker が HObufs の JavaScript の下に、ハッキング用の JavaScript を置いた場合、 それが etobf.js より先に実行されてしまう。従って、defer も不可である。
理由2:いつETObfが難読化するかは、ETObfが決めるべき。 よくよく考えてみると、ETObfの難読化のタイミングは単純ではない。 ページが完全なスタティックな場合、bodyの一番下で、難読化を 実行すればよい。しかし、その後にJavaScriptなどで、Text が追加される場合は、そのつどに難読化を行うべきである。 これは、ETObfのマニュアルで説明すべきことであり、 HObfusが関与すべきではない。