EXECUTEとCHRと記号だけのスクリプトの解説

これは http://d.hatena.ne.jp/masa141421356/20120911/1347376958 の解説です。


コンバート処理の内容

EXECUTEに渡されている文字列式の中身を展開すると、以下のVBScriptコードを文字列で表現したものとなります

Public Function vbs2vbs(t)
vbs2vbs=""
Dim s():Redim s(127)
s(0)="CHR(-("""">""""))"
s(1)="CHR(-(""""=""""))"
s(2)="CHR(-(""""="""")-(""""=""""))"
s(3)="CHR(-(""""="""")-(""""="""")-(""""=""""))"
s(4)="CHR(-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(5)="CHR(-(""""="""")-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(6)="CHR((""&""&-(""""="""")&-("""">""""))+(""""="""")+(""""=""""))"
s(7)="CHR((""&""&-(""""="""")&-("""">""""))+(""""=""""))"
s(8)="CHR(""&""&-(""""="""")&-("""">""""))"
s(9)="CHR((-(""""="""")&-("""">""""))--(""""=""""))"
s(10)="CHR(-(""""="""")&-("""">""""))"
s(11)="CHR(-(""""="""")&-(""""=""""))"
s(12)="CHR(-(""""="""")&-(""""="""")-(""""=""""))"
s(13)="CHR(-(""""="""")&-(""""="""")-(""""="""")-(""""=""""))"
s(14)="CHR(-(""""="""")&-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(15)="CHR((""&""&-(""""="""")-(""""="""")&-("""">""""))+(""""=""""))"
s(16)="CHR(""&""&-(""""="""")-(""""="""")&-("""">""""))"
s(17)="CHR(""&""&-(""""="""")-(""""="""")&-(""""=""""))"
s(18)="CHR(-(""""="""")&--(""&""&-(""""="""")&-("""">"""")))"
s(19)="CHR((-(""""="""")-(""""="""")&-("""">""""))+(""""=""""))"
s(20)="CHR(-(""""="""")-(""""="""")&-("""">""""))"
s(21)="CHR(-(""""="""")-(""""="""")&-(""""=""""))"
s(22)="CHR(-(""""="""")-(""""="""")&-(""""="""")-(""""=""""))"
s(23)="CHR(-(""""="""")-(""""="""")&-(""""="""")-(""""="""")-(""""=""""))"
s(24)="CHR(""&""&-(""""="""")-(""""="""")-(""""="""")&-("""">""""))"
s(25)="CHR(""&""&-(""""="""")-(""""="""")-(""""="""")&-(""""=""""))"
s(26)="CHR(""&""&-(""""="""")-(""""="""")-(""""="""")&-(""""="""")-(""""=""""))"
s(27)="CHR(""&""&-(""""="""")-(""""="""")-(""""="""")&-(""""="""")-(""""="""")-(""""=""""))"
s(28)="CHR((-(""""="""")-(""""="""")-(""""="""")&-("""">""""))+(""""="""")+(""""=""""))"
s(29)="CHR((-(""""="""")-(""""="""")-(""""="""")&-("""">""""))+(""""=""""))"
s(30)="CHR(-(""""="""")-(""""="""")-(""""="""")&-("""">""""))"
s(31)="CHR(-(""""="""")-(""""="""")-(""""="""")&-(""""=""""))"
s(32)=""" """
s(33)="""!"""
s(34)=""""""""""
s(35)="""#"""
s(36)="""$"""
s(37)="""%"""
s(38)="""&"""
s(39)="""'"""
s(40)="""("""
s(41)=""")"""
s(42)="""*"""
s(43)="""+"""
s(44)=""","""
s(45)="""-"""
s(46)="""."""
s(47)="""/"""
s(48)="(-("""">""""))"
s(49)="(-(""""=""""))"
s(50)="(-(""""="""")-(""""=""""))"
s(51)="(-(""""="""")-(""""="""")-(""""=""""))"
s(52)="(-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(53)="(-(""""="""")-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(54)="((""&""&-(""""="""")&-("""">""""))+(""""="""")+(""""=""""))"
s(55)="((""&""&-(""""="""")&-("""">""""))+(""""=""""))"
s(56)="(--(""&""&-(""""="""")&-("""">"""")))"
s(57)="((-(""""="""")&-("""">""""))+(""""=""""))"
s(58)=""":"""
s(59)=""";"""
s(60)="""<"""
s(61)="""="""
s(62)=""">"""
s(63)="""?"""
s(64)="""@"""
s(65)="CHR(""&""&-(""""="""")&-("""">"""")&-(""""=""""))"
s(66)="CHR(""&""&-(""""="""")&-("""">"""")&-(""""="""")-(""""=""""))"
s(67)="CHR(""&""&-(""""="""")&-("""">"""")&-(""""="""")-(""""="""")-(""""=""""))"
s(68)="CHR(""&""&-(""""="""")&-("""">"""")&-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(69)="CHR((((""&""&-(""""="""")&-("""">""""))+(""""=""""))&-("""">""""))+(""""=""""))"
s(70)="CHR(((""&""&-(""""="""")&-("""">""""))+(""""=""""))&-("""">""""))"
s(71)="CHR((""&""&-(""""="""")&-(""""="""")&-("""">""""))+(""""=""""))"
s(72)="CHR(""&""&-(""""="""")&-(""""="""")&-("""">""""))"
s(73)="CHR(""&""&-(""""="""")&-(""""="""")&-(""""=""""))"
s(74)="CHR(""&""&-(""""="""")&-(""""="""")&-(""""="""")-(""""=""""))"
s(75)="CHR(""&""&-(""""="""")&-(""""="""")&-(""""="""")-(""""="""")-(""""=""""))"
s(76)="CHR(""&""&-(""""="""")&-(""""="""")&-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(77)="CHR(((""&""&-(""""="""")&-("""">""""))+(""""=""""))*(-(""""="""")&-(""""="""")))"
s(78)="CHR((""&""&-(""""="""")&-(""""="""")-(""""="""")&-("""">""""))+(""""="""")+(""""=""""))"
s(79)="CHR((""&""&-(""""="""")&-(""""="""")-(""""="""")&-("""">""""))+(""""=""""))"
s(80)="CHR(""&""&-(""""="""")&-(""""="""")-(""""="""")&-("""">""""))"
s(81)="CHR(""&""&-(""""="""")&-(""""="""")-(""""="""")&-(""""=""""))"
s(82)="CHR(""&""&-(""""="""")&-(""""="""")-(""""="""")&-(""""="""")-(""""=""""))"
s(83)="CHR((""&""&-(""""="""")&-(""""="""")&-(""""=""""))--(-(""""="""")&-("""">"""")))"
s(84)="CHR((""&""&-(""""="""")&-(""""="""")&-(""""=""""))--(-(""""="""")&-(""""="""")))"
s(85)="CHR((""&""&-(""""="""")&-(""""="""")&-(""""=""""))--(-(""""="""")&-(""""="""")-(""""="""")))"
s(86)="CHR((""&""&-(""""="""")&-("""">""""))*(-(""""="""")&-(""""=""""))+(""""="""")+(""""=""""))"
s(87)="CHR((""&""&-(""""="""")&-("""">""""))*(-(""""="""")&-(""""=""""))+(""""=""""))"
s(88)="CHR((""&""&-(""""="""")&-("""">""""))*(-(""""="""")&-(""""="""")))"
s(89)="CHR((""&""&-(""""="""")&-("""">""""))*(-(""""="""")&-(""""=""""))-(""""=""""))"
s(90)="CHR((""&""&-(""""="""")&-(""""=""""))*(-(""""="""")&-("""">"""")))"
s(91)="""["""
s(92)="""\"""
s(93)="""]"""
s(94)="""^"""
s(95)="""_"""
s(96)="""`"""
s(97)="CHR((-(""""="""")&-("""">"""")&-("""">""""))+(""""="""")+(""""="""")+(""""=""""))"
s(98)="CHR((-(""""="""")&-("""">"""")&-("""">""""))+(""""="""")+(""""=""""))"
s(99)="CHR((""&""&-(""""="""")&-(""""=""""))*(-(""""="""")&-(""""="""")))"
s(100)="CHR(-(""""="""")&-("""">"""")&-("""">""""))"
s(101)="CHR(-(""""="""")&-("""">"""")&-(""""=""""))"
s(102)="CHR(-(""""="""")&-("""">"""")&-(""""="""")-(""""=""""))"
s(103)="CHR(-(""""="""")&-("""">"""")&-(""""="""")-(""""="""")-(""""=""""))"
s(104)="CHR(-(""""="""")&-("""">"""")&-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(105)="CHR(-(""""="""")&-("""">"""")&-(""""="""")-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(106)="CHR((-(""""="""")&-(""""="""")&-("""">""""))+(""""="""")+(""""="""")+(""""="""")+(""""=""""))"
s(107)="CHR((-(""""="""")&-(""""="""")&-("""">""""))+(""""="""")+(""""="""")+(""""=""""))"
s(108)="CHR((-(""""="""")&-(""""="""")&-("""">""""))+(""""="""")+(""""=""""))"
s(109)="CHR((-(""""="""")&-(""""="""")&-("""">""""))+(""""=""""))"
s(110)="CHR(-(""""="""")&-(""""="""")&-("""">""""))"
s(111)="CHR(-(""""="""")&-(""""="""")&-(""""=""""))"
s(112)="CHR(-(""""="""")&-(""""="""")&-(""""="""")-(""""=""""))"
s(113)="CHR(-(""""="""")&-(""""="""")&-(""""="""")-(""""="""")-(""""=""""))"
s(114)="CHR(-(""""="""")&-(""""="""")&-(""""="""")-(""""="""")-(""""="""")-(""""=""""))"
s(115)="CHR(+(-(""""="""")&(--(""&""&-(""""="""")-(""""="""")&-("""">""""))))+(""""=""""))"
s(116)="CHR(-(""""="""")&(--(""&""&-(""""="""")-(""""="""")&-("""">""""))))"
s(117)="CHR(-(""""="""")&(--(""&""&-(""""="""")-(""""="""")&-(""""=""""))))"
s(118)="CHR(+(-(""""="""")&(--(""&""&-(""""="""")-(""""="""")&-(""""=""""))))-(""""=""""))"
s(119)="CHR(+(-(""""="""")&-(""""="""")-(""""="""")&-("""">""""))+(""""=""""))"
s(120)="CHR(-(""""="""")&-(""""="""")-(""""="""")&-("""">""""))"
s(121)="CHR(-(""""="""")&-(""""="""")-(""""="""")&-(""""=""""))"
s(122)="CHR(-(""""="""")&-(""""="""")-(""""="""")&-(""""="""")-(""""=""""))"
s(123)="""{"""
s(124)="""|"""
s(125)="""}"""
s(126)="""~"""
s(127)="CHR((""&""&-(""""="""")-(""""="""")&-("""">"""")&-("""">""""))+(""""=""""))"
Dim a,b,c,d,i,L,r,w
L=Len(t):w="":r=t:i=1:d=0
While(i<=L)
If Left(r,4)="True"Then
a="(""""="""")":b=4
ElseIf Left(r,5)="False"Then
a="("""">"""")":b=5
Else
c=Ascw(r)
If c>127 Then
MsgBox "NON ASCII":Exit Function
End If
a=s(c):b=1
End If
if d+Len(a)>200 then w=w&" _"&vbCrLf:d=0
if Right(w,1)&Left(a,1)&Right(a,1)=""""""""Then
w = Left(w,len(w)-1)&Mid(a,2):d=d+Len(a)-2
ElseIf i=1 Then
w="EXECUTE "&a:d=Len(w)
Else
w=w&"&"&a:d=d+Len(a)+1
End If
i=i+b:r=Mid(r,b+1)
Wend
vbs2vbs=w
End Function

これはつまり、文字列が空ではない場合は先頭に EXECUTE を書いて、その後ろに文字列を変換テーブル

文字 CHRと記号での表現
Chr(0) CHR(-("">""))
Chr(1) CHR(-(""=""))
Chr(2) CHR(-(""="")-(""=""))
Chr(3) CHR(-(""="")-(""="")-(""=""))
Chr(4) CHR(-(""="")-(""="")-(""="")-(""=""))
Chr(5) CHR(-(""="")-(""="")-(""="")-(""="")-(""=""))
Chr(6) CHR(("&"&-(""="")&-("">""))+(""="")+(""=""))
Chr(7) CHR(("&"&-(""="")&-("">""))+(""=""))
Chr(8) CHR("&"&-(""="")&-("">""))
Chr(9) CHR((-(""="")&-("">""))--(""=""))
Chr(10) CHR(-(""="")&-("">""))
Chr(11) CHR(-(""="")&-(""=""))
Chr(12) CHR(-(""="")&-(""="")-(""=""))
Chr(13) CHR(-(""="")&-(""="")-(""="")-(""=""))
Chr(14) CHR(-(""="")&-(""="")-(""="")-(""="")-(""=""))
Chr(15) CHR(("&"&-(""="")-(""="")&-("">""))+(""=""))
Chr(16) CHR("&"&-(""="")-(""="")&-("">""))
Chr(17) CHR("&"&-(""="")-(""="")&-(""=""))
Chr(18) CHR(-(""="")&--("&"&-(""="")&-("">"")))
Chr(19) CHR((-(""="")-(""="")&-("">""))+(""=""))
Chr(20) CHR(-(""="")-(""="")&-("">""))
Chr(21) CHR(-(""="")-(""="")&-(""=""))
Chr(22) CHR(-(""="")-(""="")&-(""="")-(""=""))
Chr(23) CHR(-(""="")-(""="")&-(""="")-(""="")-(""=""))
Chr(24) CHR("&"&-(""="")-(""="")-(""="")&-("">""))
Chr(25) CHR("&"&-(""="")-(""="")-(""="")&-(""=""))
Chr(26) CHR("&"&-(""="")-(""="")-(""="")&-(""="")-(""=""))
Chr(27) CHR("&"&-(""="")-(""="")-(""="")&-(""="")-(""="")-(""=""))
Chr(28) CHR((-(""="")-(""="")-(""="")&-("">""))+(""="")+(""=""))
Chr(29) CHR((-(""="")-(""="")-(""="")&-("">""))+(""=""))
Chr(30) CHR(-(""="")-(""="")-(""="")&-("">""))
Chr(31) CHR(-(""="")-(""="")-(""="")&-(""=""))
" "
! "!"
" """"
# "#"
$ "$"
% "%"
& "&"
' "'"
( "("
) ")"
* "*"
+ "+"
, ","
- "-"
. "."
/ "/"
0 (-("">""))
1 (-(""=""))
2 (-(""="")-(""=""))
3 (-(""="")-(""="")-(""=""))
4 (-(""="")-(""="")-(""="")-(""=""))
5 (-(""="")-(""="")-(""="")-(""="")-(""=""))
6 (("&"&-(""="")&-("">""))+(""="")+(""=""))
7 (("&"&-(""="")&-("">""))+(""=""))
8 (--("&"&-(""="")&-("">"")))
9 ((-(""="")&-("">""))+(""=""))
: ":"
; ";"
"<"
= "="
> ">"
? "?"
@ "@"
A CHR("&"&-(""="")&-("">"")&-(""=""))
B CHR("&"&-(""="")&-("">"")&-(""="")-(""=""))
C CHR("&"&-(""="")&-("">"")&-(""="")-(""="")-(""=""))
D CHR("&"&-(""="")&-("">"")&-(""="")-(""="")-(""="")-(""=""))
E CHR(((("&"&-(""="")&-("">""))+(""=""))&-("">""))+(""=""))
F CHR((("&"&-(""="")&-("">""))+(""=""))&-("">""))
G CHR(("&"&-(""="")&-(""="")&-("">""))+(""=""))
H CHR("&"&-(""="")&-(""="")&-("">""))
I CHR("&"&-(""="")&-(""="")&-(""=""))
J CHR("&"&-(""="")&-(""="")&-(""="")-(""=""))
K CHR("&"&-(""="")&-(""="")&-(""="")-(""="")-(""=""))
L CHR("&"&-(""="")&-(""="")&-(""="")-(""="")-(""="")-(""=""))
M CHR((("&"&-(""="")&-("">""))+(""=""))*(-(""="")&-(""="")))
N CHR(("&"&-(""="")&-(""="")-(""="")&-("">""))+(""="")+(""=""))
O CHR(("&"&-(""="")&-(""="")-(""="")&-("">""))+(""=""))
P CHR("&"&-(""="")&-(""="")-(""="")&-("">""))
Q CHR("&"&-(""="")&-(""="")-(""="")&-(""=""))
R CHR("&"&-(""="")&-(""="")-(""="")&-(""="")-(""=""))
S CHR(("&"&-(""="")&-(""="")&-(""=""))--(-(""="")&-("">"")))
T CHR(("&"&-(""="")&-(""="")&-(""=""))--(-(""="")&-(""="")))
U CHR(("&"&-(""="")&-(""="")&-(""=""))--(-(""="")&-(""="")-(""="")))
V CHR(("&"&-(""="")&-("">""))*(-(""="")&-(""=""))+(""="")+(""=""))
W CHR(("&"&-(""="")&-("">""))*(-(""="")&-(""=""))+(""=""))
X CHR(("&"&-(""="")&-("">""))*(-(""="")&-(""="")))
Y CHR(("&"&-(""="")&-("">""))*(-(""="")&-(""=""))-(""=""))
Z CHR(("&"&-(""="")&-(""=""))*(-(""="")&-("">"")))
[ "["
\ "\"
] "]"
^ "^"
_ "_"
` "`"
a CHR((-(""="")&-("">"")&-("">""))+(""="")+(""="")+(""=""))
b CHR((-(""="")&-("">"")&-("">""))+(""="")+(""=""))
c CHR(("&"&-(""="")&-(""=""))*(-(""="")&-(""="")))
d CHR(-(""="")&-("">"")&-("">""))
e CHR(-(""="")&-("">"")&-(""=""))
f CHR(-(""="")&-("">"")&-(""="")-(""=""))
g CHR(-(""="")&-("">"")&-(""="")-(""="")-(""=""))
h CHR(-(""="")&-("">"")&-(""="")-(""="")-(""="")-(""=""))
i CHR(-(""="")&-("">"")&-(""="")-(""="")-(""="")-(""="")-(""=""))
j CHR((-(""="")&-(""="")&-("">""))+(""="")+(""="")+(""="")+(""=""))
k CHR((-(""="")&-(""="")&-("">""))+(""="")+(""="")+(""=""))
l CHR((-(""="")&-(""="")&-("">""))+(""="")+(""=""))
m CHR((-(""="")&-(""="")&-("">""))+(""=""))
n CHR(-(""="")&-(""="")&-("">""))
o CHR(-(""="")&-(""="")&-(""=""))
p CHR(-(""="")&-(""="")&-(""="")-(""=""))
q CHR(-(""="")&-(""="")&-(""="")-(""="")-(""=""))
r CHR(-(""="")&-(""="")&-(""="")-(""="")-(""="")-(""=""))
s CHR(+(-(""="")&(--("&"&-(""="")-(""="")&-("">""))))+(""=""))
t CHR(-(""="")&(--("&"&-(""="")-(""="")&-("">""))))
u CHR(-(""="")&(--("&"&-(""="")-(""="")&-(""=""))))
v CHR(+(-(""="")&(--("&"&-(""="")-(""="")&-(""=""))))-(""=""))
w CHR(+(-(""="")&-(""="")-(""="")&-("">""))+(""=""))
x CHR(-(""="")&-(""="")-(""="")&-("">""))
y CHR(-(""="")&-(""="")-(""="")&-(""=""))
z CHR(-(""="")&-(""="")-(""="")&-(""="")-(""=""))
{ "{"
| "| "
} "}"
~ "~"
Chr(127) CHR(("&"&-(""="")-(""="")&-("">"")&-("">""))+(""=""))
True (""="")
False ("">"")


に従って文字を置換し、文字列が一定以上の長さに達したら " _" & vbCrLf で行を折り返すという処理を行っているということです。

変換テーブルの内容については

  • 8進数は&O123 ではなく &123 のように O を省略して書いても良い
  • Trueを数値に変換すると -1, False を数値に変換すると 0
  • & 演算子は連結対象が文字列ではない場合は文字列に型変換する
  • - 演算子は数値型では無い値を数値に変換する
  • & 演算子は - や + 演算子より優先順位が低い

ということを踏まえて読めば理解していただけるかと思います。

修正

変換表のデータ作成ミスで ( が (( になっていたのを修正しました。