Illustratorデータをのぞき見するメソッドについて

昨晩適当にスマホからツイッターに流したネタなのですが、そんな事すると自分自身が読み返すのが面倒になると言う事を忘れていました。ですから、ちょちょっとまとめてみた次第です。
昔からIllustratorにはごく一部にしか利用価値が無いと思われる様なメソッドやプロパティがやまほど用意されています。ほ〜んと、肝心なオブジェクトは足りないのにどういう事なのでしょうね。まあ、わたしは利用するのですがねw
こんなニッチなネタを真面目にやってしまうのはわたししか居ないだろうと言う事で、このような物を日々追いかけ続けている訳です。しかし、手抜きLabなのに通常営業の数倍労力がかかっている部分もあります。特にExternalObjectとか某SDK絡みのモノは調べてもろくな文献が無いため、多大な犠牲の上に構築された適当に書かれた文書をまき散らしている次第です。あ、この辺りの事に関しては協力者募集中です。一人でやってると環境に応じた物を用意する時にかなり苦痛になります。OSX10.5とかに対応させる為にもコンパイルかけていただける方が欲しいのです。古い環境用意するのが大変な物でwww
もちろんノウハウはぜ〜んぶお伝えします。と言うより、ココ読んでください。よく考えたら、ぜ〜んぶ公開してるわwww

と言う事で、今回ご紹介するのはこちらのメソッドです。

var f = File.openDialog (‘select AI file.’);
app.dumpPGFFile(f, undefined, f.parent);

まあ、実行してみましょう。ダイアログが出ますのでターゲットのAIファイルを選択します。すると、aiファイルの隣にテキストデータが保存されます。
このファイルはPGFと呼ばれるillustratorのネイティブフォーマットのデータなのです。ちなみにこのファイルをAIにドロップすると、元ファイルと同様に開いちゃいます。当然です、通常Illustratorはファイルのこの部分を見てドキュメントをウインドウに展開します。
これをテキストエディタで開いてみると…

%!PS-Adobe-3.0
%%Creator: Adobe Illustrator(R) 17.0
%%AI8_CreatorVersion: 17.0.0
%%For: (No41) ()
%%Title: (test.ai)
%%Canvassize: 16383
%%BoundingBox: 104 -149 299 -64
%%HiResBoundingBox: 104 -148.5 298.5 -64.5
%%DocumentProcessColors: Black
%%DocumentFonts: KozGoPr6N-Regular-83pv-RKSJ-H
%%DocumentNeededFonts: KozGoPr6N-Regular-83pv-RKSJ-H
%AI5_FileFormat 13.0
%AI3_ColorUsage: Color
%AI7_ImageSettings: 0
%%CMYKProcessColor: 1 1 1 1 ([レジストレーション])
%AI3_Cropmarks: 0 -841.889999999999 595.280000000001 0
%AI3_TemplateBox: 298.5 -421.5 298.5 -421.5
%AI3_TileBox: 18.1400000000003 -800.945 577.139999999999 -17.9449999999997
%AI3_DocumentPreview: None
%AI5_ArtSize: 14400 14400
%AI5_RulerUnits: 1
%AI9_ColorModel: 2
%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
%AI5_TargetResolution: 800
%AI5_NumLayers: 1
%AI9_OpenToView: -347 69 1 1295 971 18 0 0 46 98 0 0 0 1 1 0 1 1 0 0
%AI5_OpenViewLayers: 7
%%PageOrigin:0 0
%AI7_GridSettings: 56.6929016113281 8 56.6929016113281 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929
0.899999976158142 0.899999976158142 0.899999976158142
%AI9_Flatten: 1
%AI12_CMSettings: 00.MS
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
[
39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
 ・
 ・
 ・
%AI11_EndTextDocument
%%EndSetup
%AI5_BeginLayer
1 1 1 1 0 0 1 0 79 128 255 0 50 0 Lb
(レイヤー 1) Ln
%_/ArtDictionary :
%_/XMLUID : (レイヤー_1) ; (AI10_ArtUID) ,
%_;
%_
0 A
0 Xw
1 Ap
0 O
0 0 0 0 k
0 R
0 0 0 1 K
0 1 0 0 0 Xy
0 J 0 j 1 w 10 M []0 d
0 XR
298 -106.5 m
298 -129.4198171167 279.4198171167 -148 256.5 -148 c
233.5801828833 -148 215 -129.4198171167 215 -106.5 c
215 -83.5801828833 233.5801828833 -65 256.5 -65 c
279.4198171167 -65 298 -83.5801828833 298 -106.5 c
b
/AI11Text :
0 /FreeUndo ,
0 /FrameIndex ,
0 /StoryIndex ,
2 /TextAntialiasing ,
;

0 0 Xd
6 () XW
LB
%AI5_EndLayer–
%%PageTrailer
gsave annotatepage grestore showpage
%%Trailer
%%EOF

という具合の状態です。実際のデータは「%AI5_BeginLayer」以降に書かれています。%AI5が示す通り、この構造はAI5以降連綿と使い回されているAIファイルフォーマットの形式に則った部分です。要するにPostscriptのサブセットとして定義された構造です。一例を見てみます。

298 -106.5 m
298 -129.4198171167 279.4198171167 -148 256.5 -148 c
233.5801828833 -148 215 -129.4198171167 215 -106.5 c
215 -83.5801828833 233.5801828833 -65 256.5 -65 c
279.4198171167 -65 298 -83.5801828833 298 -106.5 c

この部分はellipseの描画ですが、オペランドが2種類見えてます。一行目の「m」が「move to」でありオブジェクトの開始点[298,-106.5]のポイントへの移動を定義しています。そこを起点に次の行の「c」は「curve to」ということでカーブポイントの定義です。6コの数値はanchor、leftDirection、rightDirectionの座標を示します。
このオペランド構造、コマンドの前に引数が列挙されていますね、この部分が特徴的な為にAdobe社のページ記述言語は「Postscript」という名前が付けられています。
さて、先の省略された部分の直後に「%AI11_EndTextDocument」という一文が見えてますね。これがCS以降のAIファイルに特徴的な仕組みで、テキストに関しては「Setup」領域にFreeUndoTextDocumentと言う形で鎮座していらっしゃる訳です。

/AI11UndoFreeTextDocument : /ASCII85Decode ,
%+>5`7+?Vb/0/+M-+?ht30/+M24<q:3+?vb 0="" +mq+?vb="" +m240/+M24=p%4s3$Q+?ht34?O`>0H`J?+>5`8+>6*#DerBuE+MLWDKI!S0H`J?+>5Dk./s5H9`TG=
%EWBeR@/sg5Jm0H`PC+?ht35!C)p+?ht30/Xk74<q:2+bosn4<q:2+?vb 0="" +lsrr2t&!)kD
%!$D8/!,)@@!-/’J!+Q”N!+c.N!$D8?!-A3d!,MXH!*q#r0/aq84Ful0d&2+/heD$1*C1;Cia/10/F__@;L!r+>5PoFE2M8
%+>5Sp1,gg>+>5Vq0eP.&0/k”./heD$3$9mt00(.//heD$0ea_(/heD$0eje*+>5H)+>=ok0f’q++>5H++>=ok0f:(-+>5H-+>=ok
%0fL4//heD$0fU:tEckq90/5I0AmoLsAKWW]0Hat9Cia/10/>7)AmoLsAKWW]1*C1;Cia/10/>=+AmoLsAKWW]1a$C=Cia/10/>C-
%AmoLsAKWW]2BZU?Cia/10/>I/AmoLsAKWW]3$;gACia/10/>O1AmoLsAKWW^0H`%l0/G=*AmoLsAKWW^1*C1;Cia/10/GC,AmoLs
%AKWW^1a$C=Cia/10/GI.0d&,*2BX\+0H`#)2]sju0/GR10H`#)3?U!u0/P@*AmoLsAKWW_0d&4o0/PF,0H`#*1E\eB+>5Dk/i=b8
%4s2L81a”Or0/PO/1*A5,2BXq$0/PU10H`#*3$9mt0/P[3/MSk3+>5T++>#<#0H`#+0d&.m0/YL-AmoLsAKWW`1E\eB+>5`8+>6Z-
%D/a<&:gn’UF5Gl>9GXQ0H`&%0H`&%0H`&%0HaXD5!C)Q4s2L91a”nC+>5`8+>6Z-D/a<&:gn’UF5Gl>9GXQ0H`&%0H`&%0H`&%0HaXD5!C)Q4s2L92′>”D+>5`8+>6)J8Q98GF@’eTDId=!+?ht30/YX1FE2M8+>5T2+D,%u
%F(HII2)l_#Eckq90/Ya4AmoLsAKWWa0Hat9Cia/10/bO-0H`#,1*A7n0/bU/0eP.&0/bX01bLI)0/b[10J5%%0/b^2>9I2o0/ba3
%>9I2o0/bd40H`#,3?U!u0/kR-0H`#-0d&:q0/kX/0J5%%0/k[00J5%%0/k^1AmoLsAKWWb2′?L>Cia/10/kd3AmoLsAKWWb2^!3_
%F_)[K2`Mq%Eckq90/km64?O`>3B838;e^)fCh6FOBl8#80/+M24Ful0d'[C0eP.&0eP.&0eP.&0J5%%>p)

3B838;e^)fCh5tVF*)>;7V-“MF`M%95!C)B
%3&_s70JG+5+>5]6+EVXHAKX0#+?ht35!C)p+>5Gl>9H$j+>5Dk0H`PC+C-*R4s2L:+?Vb/0/+MQ+?Vb/0/+M24kH!,)?T!)il>!-nQ\!+c.9.3L9$+?Vb/0/+M&+>5Gl0J5%%0/=Y(/heD$1E\A(0H`#*
%+>>E%+>5Sp0J5%%0/aq-+>5Yr0eP4(0/t(.+>5_tFE2M8+>5H’+>t>q0eje++>5H)+>P&m0f’q++>5H++>Yo.0H`#’2’@!]F_)[K
%0fC.,2’=P,2]up(dT3$;EJ0J5%%0J5%%0J5%%>p(dT3?VNK0eP.&0eP.&0eP.&>p(dU0H`7r0/>7)AmoLs
%AKWW]1*A7n0/>=+AmoLsAKWW]1a”Ip0/>C-0H`#(2]sbkBl”nF1,^7e@;L!r+>5K0+>7VHC`kAd3?VpBCia/10/G:)4?O`M4s2L7
%0d&81/heD$1GU(845N,+>=ok1Gg4.+>5N.+>=ok1H$@/DJ0H`%l5!C)p+?ht35!C)B0d&S@+>5Dk4?O`>0H`J?+>5Dk0H`#’+BosN4<q:2+=r6h!$e^50 4rtrr2sq.3lf<="" %+?vb="" 0="" +lsrr2s-.3l8u+="R6h!&c8K5!C)O4<Q:2+=R6h!!t(s0/4Rtrr2sP.3Lf0H_eCrr<-M+>5Gl./s5H2(9Y34s2sM+>5Dk./s6#!%B$D0d%nDrr=c&+?ht34?O`>0H_eCrrB/M+>5Gl./s5H1FXG14s4,R
%5!C)B0d&.m0/=Y(+>5Mn/i>UE+>5Po/i,:>+>5Sp/i>UE+>5Vq/i,:>+>5Yr/iOn+3$<<`F_)[K3?VNK4?O`>0H`%l0/4Rtrr4)\
%.3L9!+=R6h+<;mR0/F_!rr4)X.3L9#+=R6h+;lUN5!C)O4Ful0d%nDru`=2+>5Jm./s5h*@W*a1E\+Fru`1.+>5Po./s5h
%)(?[l4s2sM+>5Dk1*A5)+=R6h!37Ok0/=Xurr2u1.3L9″+=R6h+;cOM0/Oe”rr4)Y.3Lf<+?Vb/0/+M)+>5Gl./s5HX!o/E1*A”E
%rrBY[+>5Mn./s5h(b$R\1a”4Gru`1.+?ht34?O`>0H`1p0/4Rtrr4)^.3L9!+=R6h+<2gQ0/F_!rr4)Z.3L9#+=R6h+;cOM5!C)O
%4k8p0d%nDru`@3+>5Jm./s5h*%5Po./s5h(b$Rk4s2sM+>5Dk2BXY-+=R6h!37Ok0/=Xurr2u1.3L9″
%+=R6h+?:kn0/Oe”rr4*%.3Lf<+?Vb/0/+M-+>5Gl./s5h*%5Mn./s5h(b$R\1a”4Gru`1.+?ht34?O`>0H`=t
%0/4Rtrr2u!.3L9!+=R6h!4s[&0/F_!rr4)X.3L9#+=R6h+;lUN5!C)O45Jm./s5H].”jU1E\+Fru`.-
%+>5Po./s5h)(?[l4s2sM+>5Dk0esk)0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk0f’q*0d%nD
%ru`=2+>5Jm./s5h*@W*a1E\+Fru`1.+>5Po./s5h)(?[l4s2sM+>5Dk0f1″+0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po
%./s5h)(?[l4s2sM+>5Dk0f:(,0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk0fC.-0d%nDru`=2
%+>5Jm./s5h*@W*a1E\+Fru`1.+>5Po./s5h)(?[l4s2sM+>5Dk0fU:/0d%nDrrB)K+>5Jm./s5H].”jU1E\+Fru`.-+>5Po./s5h
%)(?[l4s2sM+>5Dk1,9t*0d%nDru`@3+>5Jm./s5h*%5Po./s5h(b$Rk4s2sM+>5Dk1,C%+0d%nDru`@3+>5Jm
%./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk1,U1-0d%nDrrB)K+>5Jm./s5H].”jU1E\+Frua5Po./s5h3[l18
%4s2sM+>5Dk1,pC00d%nDru`@3+>5Jm./s5h*@W*a1E\+Fru`1.+>5Po./s5h)(?[l4s2sM+>5Dk1-$I10d%nDs”GHB+>5Jm./s6#
%*[r3q4s2sM+>5Dk1GBq)0d%nDs”Fj1+>5Jm./s6#%4ND`4s2sM+>5Dk0ea_’0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po
%./s5h)(?[l4s2sM+>5Dk0eje(0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk0fL4.0d%nDru`:1
%+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk0f^@00d%nDrrB)K+>5Jm./s5H].”jU1E\+Fru`.-+>5Po./s5h
%)(?[l4s2sM+>5Dk1,’h(0d%nDru`@3+>5Jm./s5h*%5Po./s5h(b$Rk4s2sM+>5Dk1,0n)0d%nDru`@3+>5Jm
%./s5h*%5Po./s5h(b$Rk4s2sM+>5Dk1,L+,0d%nDru`@3+>5Jm./s5h*@W*a1E\+Fru`4/+>5Po./s5h)(?[l
%4s2sM+>5Dk1,^7.0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk1,g=/0d%nDru`:1+>5Jm./s5h
%*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk1GL”*0d%nDru`@3+>5Jm./s5h*%5Po./s5h)(?[l4s2sM
%+>5Dk1GU(+0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk1G^.,0d%nDru`@3+>5Jm./s5h*%5Po./s5h(b$Rk4s2sM+>5Dk1Gg4-0d%nDrrB)K+>5Jm./s5H].”jU1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk
%1Gp:.0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk1H$@/0d%nDru`@3+>5Jm./s5h*%5Po./s5h(b$Rk4s2sM+>5Dk1H-F00d%nDrrB)K+>5Jm./s5H].”jU1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk1H6L1
%0d%nDru`@3+>5Jm./s5h*%5Po./s5h(b$Rk4s2sM+>5Dk1H?R20d%nDrrB)K+>5Jm./s5H].”jU1E\+Frr>/1
%+>5Po./s5H4t.U<4s2sM+>5Dk1b^%*0d%nDru`@3+>5Jm./s5h*%5Po./s5h(b$Rk4s2sM+>5Dk1bg++0d%nD
%rrB)K+>5Jm./s5H].”jU1E\+Frr>/1+>5Po./s5H4t.U<4s2sM+>5Dk1bp1,0d%nDru`@3+>5Jm./s5h*%5Po
%./s5h(b$Rk4s2sM+>5Dk1c$7-0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h)(?[l4s2sM+>5Dk1c-=.0d%nDrrB)K
%+>5Jm./s5H].”jU1E\+Frua5Po./s5h3[l184s2sM+>5Dk1c6C/0d%nDru`:1+>5Jm./s5h*@W*a1E\+Fru`.-+>5Po./s5h
%)(?[l4s2sM+>5Dk1c?I?4s2sM+>5Dk1cHO@4s2sM+>5Dk1cQUA4s4,R0/51(2BXY-2′>”D+>5Dk./s5H8-!c4D?+_XDuaGLC]J9#
%+?ht30/5@-AmoLsAKWW\2]sds5!C)B1*A\A+>5Dk0d&,(+>GW(0H`#(+D,%uF(HII1E^:=ok3?U”.0H`#’0H`&%0H`#’0d&1n0/54)0H`#’1E\@o0/5:+0H`#’2’=Rq0/5@-0H`#’2]se,0H`#’3$<<`
%F_)[K0f^@g@;L!r+>5K(+D,%uF(HII1,0n`@;L!r+>5K*+D,%uF(HII1,C%b@;L!r+>5K,+D,%uF(HII1,U1d@;L!r+>5K.+D,%u
%F(HII1,g=f@;L!r+>5K0+D,%uF(HII1-$Ih@;L!r+>5N)+>=ok1GL”a@;L!r+>5N++D,%uF(HII1G^.c@;L!r+>5N-+D,%uF(HII
%1Gp:0+>5N/+>>E%+>5N0+>P&m1H6L2+>5N2+>=ok1b^%a@;L!r+>5Q++>P&m1bp1-+>5Q-+?Vb/0/+M$2′>(H+>5Q.+>P&m1c6C2
%+>5Q0+?(Dr1cHO2+>5Q2+>=ok1cZ[10eP.&0/YF+/MSk3+>5T,+>=ok2)6:d@;L!r+>5T.+?Vb/00)$802lS%E,9)^@;0V$+>5Dk
%4?O`>0H`(m0/4SR+>GK&+>>E%+>>E%+>>E%+C-*R4s3$Q+>5T/+?Vb/00)$802lS%E,9)^@;0V$+>5Dk4?O`>0H`(m0/4SR+>GK&
%+>>E%+>>E%+>>E%+C-*R4s3$Q+>5T0+?Vb/00)$801/#s<+U;r6>U4NA7]d(5!C)B2)ZS!Eckq90/Y[2AmoLsAKWW`3$<<`F_)[K
%2)udk@;L!r+>5W,+D,%uF(HII2DH=.+>5W.+>=ok2DZI1/heD$2DcO5/heD$2DlU2/heD$2Du[^+C-*C2E)a_+C-*C2E2g5+>5W5
%+>=ok2_Z@.+>5Z.+>b2o2_lL0/heD$2_uR1/heD$2`)Xh@;L!r+>5Z2+D,%uF(HII2`;dj@;L!r+>5Z4+EVXHAKWWb3$<<`F_)[K
%2`W!C45Dk0d&,(+BosC/heD&/heD&/heD%/heDR+?ht35!C)B3%uIe@;L!r+>5]/+>=ok
%3&2U4/heD$3&;[5/heD$3&Dai@;L!r+>5]3+>=ok3&VmA4<q:;3?ttrbl.g*aoct]fdl"cart\'eb-@w4s2l<2]sh 0j5%%0="" tp6="" %fe2m8+?ht30="" f_54=ok0d&/&0H`#(+>>E%+>5Mn0J5%%0/Oe*/heD$2’=S*0H`#,+>Ful2]sh-1*A50+>=ok3?WEaF_)[K
%0ea_.+>5H(+>P&m0esk,+>5H*+>=ok0f1″/2D-[+0/5=,FE2M8+>5H-+>,Mo0/5C.>9GOX+>GK&+>GK)1E]sG0/5F/>9GUP0H`&%
%0H`&%0HaXD0/5I0>9GXQ0H`)&0H`)&0HaXD0/>4(2BXY.0d((:Cia/10/>:*0H`#(1E^:@,0H`#(2’=Rq0/>I/05bK?
%+>5K.+D,%uF(HII1,pC0DJO1AmoLsAKWW^0H`J?+?ht30/G=*1H$j>+>5N++?Vb/5!C)B1G^.-+>5N-+>=ok1Gp:/+>5N/
%+>7VHC`kAe2]sds0/GR1AmoLsAKWW^3?U!u0/P@*1*AbE+?hs~>
;
%AI11_EndTextDocument</q:;3?ttrbl.g*aoct]fdl"cart\'eb-@w4s2l

</q:2+bosn4

その部分を抜き出してみました。この領域はAscii85という形式のエンコーディング処理が施されています。
ここで、Dojoのライブラリを利用したデコーダを用意します。

function decode_85(input){
     //this function is a part of dojo toolkit.
     // summary: back to array of decoded numbers.
     // input: String: encoded strings.
     //if you want more infomation of ascii85, see “http://en.wikipedia.org/wiki/Ascii85&#8221;.
     var n = input.length, r = [], b = [0, 0, 0, 0, 0], i, j, t, x, y, d;
     for(i = 0; i < n; ++i){
          if(input.charAt(i) == “z”){
               r.push(0, 0, 0, 0);
               continue;
               }
          for(j = 0; j < 5; ++j){
               b[j] = input.charCodeAt(i + j) – 33;
               }
          d = n – i;
          if(d < 5){
               for(j = d; j < 4; b[++j] = 0);
                    b[d] = 85;
                    }
               t = (((b[0] * 85 + b[1]) * 85 + b[2]) * 85 + b[3]) * 85 + b[4];
               x = t & 255;
               t >>>= 8;
               y = t & 255;
               t >>>= 8;
               r.push(t >>> 8, t & 255, y, x);
               for(j = d; j < 5; ++j, r.pop());
               i += 4;
          }
          return r;
     };

var re = /\r/;
var _st = “”;
var st = “”;
var fl = File.openDialog (“select ascii85”);
var f = new File(fl);
var fn = “~/desktop/decode_st1.txt”;
var fs = new File (fn);
var r_st = “”;
fn.encoding = “UTF-8”;
fs.encoding = “Binary”;
if (fs.open(“w”) && f.open (“r”)){
     while (!f.eof){
          _st = f.readln ();
          if(re.test(_st)){
               st += _st.substr (0, _re.length-1);
               } else {
                    st += _st
                    }
               }
          //alert(st);
     a = decode_85(st);
     //alert(a);
     for (i=0;i<a.length;i++){
          if (a[i]!=0) {
               r_st += String.fromCharCode(a[i]);
               }
          }
     alert(r_st);
     fs.writeln(r_st);
     r_st = “”;
     }

f.close();
fs.close();
<a.length;i++){ if="" (a[i]!="0)" {="" r_st="" +="String.fromCharCode(a[i]);" }="" alert(r_st);="" fs.writeln(r_st);="" ;="" f.close();="" fs.close();

こーんな感じのコードです。これを利用して前述のエンコードされたテキストをESTKでデコードして見ました。

/98 << /0 7 >> /0 << /1 << /0 [ << /0 << /99 /CoolTypeFont /0 << /0 (..AdobeInvisFont) /2 0 >> >> >> << /0 << /99 /CoolTypeFont /0 << /0 (..Myriad-Roman) /2 0 >> >> >> ] >> /5 << /0 [ << /0 << /0 (..[Normal Character Style]) /6 << /0 1 /1 12.0 /2 false /3 false /4 true /5 27.0 /6 1.0 /7 1.0 /8 0 /9 0.0 /10 0.0 /11 1 /12 0 /13 0 /14 0 /15 0 /16 0 /17 0.0 /18 true /19 false /20 false /21 false /22 false /23 false /24 false /25 false /26 false /27 false /28 false /29 false /30 0 /31 false /32 false /33 false /34 false /35 1 /36 0.0 /37 2 /38 0 /39 0 /40 false /41 2 /42 0 /43 << /0 .5 >> /44 2 /45 2 /46 7 /47 0 /48 0 /49 -1.0 /50 -1.0 /51 0 /52 false /53 << /99 /SimplePaint /0 << /0 1 /1 [ 1.0 0.0 0.0 0.0 ] >> >> /54 << /99 /SimplePaint /0 << /0 1 /1 [ 1.0 0.0 0.0 0.0 ] >> >> /55 << /99 /CAITextBlender >> /56 true /57 false /58 true /59 false /60 false /61 0 /62 0 /63 1.0 /64 4.0 /65 0.0 /66 [ ] /67 [ ] /68 0 /69 0 /70 0 /71 4 /72 0.0 /73 0.0 /74 false /75 false /76 false /77 true /78 true /79 << /99 /SimplePaint /0 << /0 1 /1 [ 1.0 1.0 1.0 0.0 ] >> >> /80 false /81 0 /82 3.0 /83 3.0 /84 false /85 0 /86 << /99 /SimpleCustomFeature >> /87 100.0 /88 true >> >> >> ] /1 [ << /0 0 >> ] >> /6 << /0 [ << /0 << /0 (..[Normal Paragraph Style]) /5 << /0 0 /1 0.0 /2 0.0 /3 0.0 /4 0.0 /5 0.0 /6 1 /7 1.2 /8 0 /9 true /10 6 /11 2 /12 2 /13 0 /14 36.0 /15 true /16 .5 /17 [ .8 1.0 1.33 ] /18 [ 0.0 0.0 0.0 ] /19 [ 1.0 1.0 1.0 ] /20 6 /21 false /22 0 /23 false /24 0 /25 0 /27 /nil /26 false /28 /nil /29 false /30 << >> /31 36.0 /32 << >> /33 0 /34 0 /35 0 /36 /nil /37 0 /38 false /39 0 /40 2 >> >> >> ] /1 [ << /0 0 >> ] >> >> /1 << /0 << /0 << /0 0 /1 [ << /0 (…) /1 (..1) >> << /0 (..) /1 (..6) >> << /0 (.. ) /1 (..0) >> << /0 (.. \)) /1 (..5) >> << /0 (…) /1 (..5) >> << /0 (..0) /1 (..1) >> << /0 (…) /1 (..3) >> ] >> /1 0 /2 0 /3 .583 /4 .333 /5 .583 /6 .333 /7 .7 /8 true /9 [ << /0 0 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 1 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 2 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 3 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 4 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 5 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 6 /1 (…) /2 (…) /3 (.. 9) /4 (.. 🙂 >> << /0 7 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 8 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 9 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 12 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 13 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 14 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 15 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 16 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 18 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 22 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 23 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 25 /1 (…) /2 (…) /3 (.. 9) /4 (…) >> << /0 28 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 29 /1 (..0.) /2 (..0.) >> << /0 30 /1 (..0) /2 (..0) >> << /0 10 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 11 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 17 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 19 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 20 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 21 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 24 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 26 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 27 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 31 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 32 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 33 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 34 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 35 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 36 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 37 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 38 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 39 /1 (…) /2 (…) /3 (..<) /4 (..>) >> << /0 40 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 41 /1 (…) /2 (…) /3 (..<) /4 (..>) >> << /0 42 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 43 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 44 /1 (…) /2 (…) /3 (.. 9) /4 (.. 🙂 >> << /0 45 /1 (…) /2 (…) /3 (…) /4 (…) >> << /0 46 >> << /0 47 >> << /0 48 >> ] /11 6 /15 << /0 (..Hunspell) >> /16 false /17 0 >> /2 << /0 1 /1 12.0 /2 false /3 false /4 true /5 27.0 /6 1.0 /7 1.0 /8 0 /9 0.0 /10 0.0 /11 1 /12 0 /13 0 /14 0 /15 0 /16 0 /17 0.0 /18 true /19 false /20 false /21 false /22 false /23 false /24 false /25 false /26 false /27 false /28 false /29 false /30 0 /31 false /32 false /33 false /34 false /35 1 /36 0.0 /37 2 /38 0 /39 0 /40 false /41 2 /42 0 /43 << /0 .5 >> /44 2 /45 2 /46 7 /47 0 /48 0 /49 -1.0 /50 -1.0 /51 0 /52 false /53 << /99 /SimplePaint /0 << /0 1 /1 [ 1.0 0.0 0.0 0.0 ] >> >> /54 << /99 /SimplePaint /0 << /0 1 /1 [ 1.0 0.0 0.0 0.0 ] >> >> /55 << /99 /CAITextBlender >> /56 true /57 false /58 true /59 false /60 false /61 0 /62 0 /63 1.0 /64 4.0 /65 0.0 /66 [ ] /67 [ ] /68 0 /69 0 /70 0 /71 4 /72 0.0 /73 0.0 /74 false /75 false /76 false /77 true /78 true /79 << /99 /SimplePaint /0 << /0 1 /1 [ 1.0 1.0 1.0 0.0 ] >> >> /80 false /81 0 /82 3.0 /83 3.0 /84 false /85 0 /86 << /99 /SimpleCustomFeature >> /87 100.0 /88 true >> /3 << /0 0 /1 0.0 /2 0.0 /3 0.0 /4 0.0 /5 0.0 /6 1 /7 1.2 /8 0 /9 true /10 6 /11 2 /12 2 /13 0 /14 36.0 /15 true /16 .5 /17 [ .8 1.0 1.33 ] /18 [ 0.0 0.0 0.0 ] /19 [ 1.0 1.0 1.0 ] /20 6 /21 false /22 0 /23 false /24 0 /25 0 /27 /nil /26 false /28 /nil /29 false /30 << >> /31 36.0 /32 << >> /33 0 /34 0 /35 0 /36 /nil /37 0 /38 false /39 0 /40 2 >> >>.[

こちらの結果では文字化けした部分を「.」で置換してあります。恐らくピュアなテキストデータではなくてバイナリが混ざっているのでしょう。しかしながら、なんとなく意味がありそうな感じに見えますよね。現状では詳細が非公開な為ここまでが精一杯です。まあ、ぼちぼち解析を続けたいと思います。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中