invoke etobf

See this page to understand `defer`, `async` JavaScript.

HObfusから、ETObfにdispatchEventで開始のシグナルを送るアイディアを考察する。

結論を急ぐと、無理のようである。理由は2つある。

理由1:ハッカーより先にシグナルを送れない。
Page
HObfus
code

<html>

<script src="etobf.js" async,defer,(none) ></script>

</html>
document.write(code);
A点
dispatchEvent(...);
B点
Hacker
C点
最初の計画では、上記の図の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が関与すべきではない。