JScriptで自己解凍スクリプト

これは使い道があるのだろうか・・・?

 

使い方は、

1.jsファイルにファイル、またはフォルダをドロップする。

 ⇒スクリプト内にファイル、またはフォルダのデータが組み込まれる。

2.jsファイルを実行

 ⇒1でドロップしたファイル、またはフォルダが復元される。

 

1でファイル、またはフォルダをZip圧縮し、Base64エンコードした文字列を

スクリプト内にコメントとして埋め込みます。

 

スクリプトサイズをできるだけ小さくしているので、(2,455 byte)

難読化されているような状態です。

 

見やすさの為、複数行に分けていますが

使用する際は、すべて1行にまとめてファイルにしてください。

 

zipの展開、圧縮やBase64変換の読めるコードは

wscjsfwを参照してください。

ZipFile.jsf、Base64.jsfを見れば分かると思います。

(テキストファイルです)

 

ファイル

zcp.zip
自己圧縮展開スクリプト(JScript)
zcp.zip
zip ( 圧縮 ) ファイル 1.3 KB

追記:2012.02.05

  上のファイルがなんかダウンロードできない状態になっていたので上げ直しました。

 

以下コード

var A,B,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,X,Y,Z,u,v,w,x,y;
A=new ActiveXObject("scripting.filesystemobject");
B=new ActiveXObject("Shell.Application");
V=["ascii","iso-8859-1"];
D=WScript.ScriptFullName;E=D+"$";
F=E+".zip";
H=function(){
    var a=new ActiveXObject("ADODB.Stream");
    a.Type=2;
    a.Charset=V[1];
    a.Open();
    return a;
};
I=function(a,b){
    var c,d,e,f,g,h;
    c=a.Size-a.Position;
    b=Math.min(c,b);
    d=[];
    e=a.Position;
    f=J(a,e,0,b);
    g=J(a,e,1,b);
    for(h=0;h<b;h++){
        d.push(f.charCodeAt(h)|(g.charCodeAt(h)<128?0:128));
    }
    return d;
};
J=function(a,b,c,d){
    K(a,0);
    a.Charset=V[c];
    K(a,b);
    return a.ReadText(d);
};
K=function(a,b){a.Position=b;};
L=function(a,b){
    var c,d;
    c=a.Position;
    J(a,c,1,0);
    for(d=0;d<b.length;d++){
        a.WriteText(String.fromCharCode(b[d]&255));
    }
};
M=function(a){a.Close();};
N=function(a,b){
    return A.OpenTextFile(a,b,b!=1);
};
O=function(a){X=a.ReadLine()};
P=function(a,b){a.WriteLine(b?b:X);};
Q=function(a){return B.NameSpace(a);};
R=function(a){
    var b,c,d,e;b="";
    c=Math.floor(a.length/3);
    d=0;
    for(e=0;e<c;e++){
        b+=    Z[a[d]>>2]+
            Z[((a[d]<<4)|(a[d+1]>>4))&63]+
            Z[((a[d+1]<<2)|(a[d+2]>>6))&63]+
            Z[(a[d+2])&63];
        d+=3;
    }
    switch(a.length%3){
        case 1:
            b+=    Z[a[d]>>2]+
                Z[(a[d]<<4)&48]+"==";
            break;
        case 2:
            b+=    Z[a[d]>>2]+
                Z[((a[d]<<4)|(a[d+1]>>4))&63]+
                Z[(a[d+1]<<2)&60]+"=";
            break;
    }
    return b;
};
S=function(a){A.DeleteFile(a,true);};
T=function(a){
    var b,c,d,e,f,g,h,i;
    b=[];
    c=Math.floor(a.length/4)-1;
    d=U(a);
    e=0;
    g=function(){
        b.push(((Y[d[e]]<<2)|(Y[d[e+1]]>>4))&255);
    };
    h=function(){
        b.push(((Y[d[e+1]]<<4)|(Y[d[e+2]]>>2))&255);
    };
    i=function(){
        b.push(((Y[d[e+2]]<<6)|(Y[d[e+3]]))&255);e+=4;
    };
    for(f=0;f<c;f++){
        g();
        h();
        i();
    }
    if(d[e+2]=="="){
        g();
    }
    else if(d[e+3]=="="){
        g();
        h();
    }
    else{
        g();
        h();
        i();
    }
    return b;
};
U=function(a){
    var b=[];
    while(a!=""){
        b.push(a.substring(0,1));
        a=a.substring(1);
    }
    return b;
};

Z=U("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
try{G=WScript.Arguments.Item(0);}catch(z){}
if(G){
    y=H();
    L(y,[80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
    y.SaveToFile(F,2);
    M(y);
    y=Q(F);
    x=A.FolderExists(G);
    w=Q(x?G:A.GetParentFolderName(G));
    w=x?w:w.ParseName(A.GetFileName(G));
    y.CopyHere(w);
    while(y.Items().count!=1)
        WScript.Sleep(100);
    y=N(D,1);
    O(y);
    M(y);
    y=N(E,2);
    P(y);
    P(y,"/*");
    x=H();
    x.LoadFromFile(F);
    while(!x.EOS)
        P(y,R(I(x,60)));
    M(x);
    P(y,"*/");
    M(y);
    S(D);
    A.MoveFile(E,D);
}
else{
    Y=[];
    for(y=0;y<Z.length;y++){
        Y[Z[y]]=y;
    }
    y=N(D,1);
    O(y);
    O(y);
    x=H();
    O(y);
    while(X!="*/"){
        L(x,T(X));O(y);
    }
    M(y);
    x.SaveToFile(F,2);
    M(x);
    y=Q(F);
    x=Q(A.GetParentFolderName(D));
    x.CopyHere(y.Items());
}
S(F);
WScript.Echo("完了");

2010.08.06