スクリプトエンコーダActiveScriptのエンコーダについて調べた。Encode**を埋め込んだVBScriptやJScriptをエンコードする仕組みだ。エンコードしたスクリプトは、通常のVBScriptではなく、VBScript.Encodeというクラス名で作成できるActiveScriptエンジンが処理する。encodingされた文字列に見える。いっても、デコードしても良くわからないバイナリーとなる。キーワードを固定辞書でバイナリ値に置き換えているのではないだろうか。いずれにしろ、暗号化しているわけではないというような説明がされている。なんの役に立つかと言うと、難読化と一種のハッシュ埋め込み(字が変わればデコードできないので安心)ということらしい。ありそうではあるが、脆弱性も見つかったりしている。それはそれとして、Rubyで似たような仕組みを考えてみる。デコードして書き変えて再エンコードを防ぐ必要はないということ。圧縮でバイナリにして、それをBase64でエンコードすれば良さそうだ。getsがARGFになるので最初びっくりした。!エンコーダはこんな感じで作ってみた。endendデコーダはこんな感じかな。残念ながら、木村さんが間違っているのだが、何しろ、VB6以前はひげ(.NET)の世界より昔なので、土に埋もれてなかなか見つからない。それともVB.NETの話をしているのだろうか?とりあえず、XLソフトの資料が見つかったので、リンクしとこう。arr(3,7)実際のところ、効率を無視すれば、どっちがどっちでも動くことは動くので、仕事プログラムでも逆に書いているのをたくさん見つけて頭を抱えたものだ(直さなかったけど。いうか、VBプログラマは仕様を読まない。その代わりに、どこぞのCプログラマから聞かされた与太話を信じて仕事をするということはわかった)。このあたりは、SAFEARRAYの定義を読むとわかることはわかる(と思って読み返したらわからなかった)。追記:やっぱりSAFEARRAYの仕様でわかるや。dimensionだということ、あるいは(同じことだけど)Redim(10)をRedim(10,10)に変えられること(.NETではできない)というように、各ランクが独立していることと、最初のランクが左端ということから、メモリ配置はランク単位に行われることになる。