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
- & 演算子は連結対象が文字列ではない場合は文字列に型変換する
- - 演算子は数値型では無い値を数値に変換する
- & 演算子は - や + 演算子より優先順位が低い
ということを踏まえて読めば理解していただけるかと思います。
修正
変換表のデータ作成ミスで ( が (( になっていたのを修正しました。