VBS 加解密 For MS Script Encode
一、加密
dim objectfso
if (lcase(right(wscript.fullname,11))="wscript.exe") then
wscript.quit(0)
end if
if wscript.arguments.count<2 then
wscript.echo "vbs code encoder v1.0 powered by enun. http://www.enun.net/"
wscript.echo "notes: dfilename must be '*.vbe'!"
wscript.echo "usage: cscript.exe //nologo sfilename dfilename"
wscript.echo " eg: cscript.exe //nologo test.vbs enc.vbe"
wscript.quit(0)
end if
sfilename = wscript.arguments(0)
dfilename = wscript.arguments(1)
set objectfso = createobject("scripting.filesystemobject")
set readdata = objectfso.opentextfile(sfilename, 1)
objectfso.opentextfile(dfilename, 8, true).write(encoder(readdata.readall))
function encoder(data)
encoder = createobject("scripting.encoder").encodescriptfile(".vbs", data, 0, "vbscript")
end function
二、解密
option explicit
dim oargs, nomfichier
'optional argument : the encoded filename
nomfichier=""
set oargs = wscript.arguments
select case oargs.count
case 0 'no arg, popup a dialog box to choose the file
nomfichier=browseforfolder("choose an encoded file", &h4031, &h0011)
case 1
if instr(oargs(0),"?")=0 then '-? ou /? => aide
nomfichier=oargs(0)
end if
case else
wscript.echo "too many parameters"
end select
set oargs = nothing
if nomfichier<>"" then
dim fso
set fso=wscript.createobject("scripting.filesystemobject")
if fso.fileexists(nomfichier) then
dim fic,contenu
set fic = fso.opentextfile(nomfichier, 1)
contenu=fic.readall
fic.close
set fic=nothing
const taginit="#@~^" '#@~^awqaaa==
const tagfin="==^#~@" '& chr(0)
dim debutcode, fincode
do
fincode=0
debutcode=instr(contenu,taginit)
if debutcode>0 then
if (instr(debutcode,contenu,"==")-debutcode)=10 then 'if "==" follows the tag
fincode=instr(debutcode,contenu,tagfin)
if fincode>0 then
contenu=left(contenu,debutcode-1) & _
decode(mid(contenu,debutcode+12,fincode-debutcode-12-6)) & _
mid(contenu,fincode+6)
end if
end if
end if
loop until fincode=0
wscript.echo contenu
else
wscript.echo nomfichier & " not found"
end if
set fso=nothing
else
wscript.echo "please give a filename"
wscript.echo "usage : " & wscript.fullname & " " & wscript.scriptfullname & " <filename>"
end if
function decode(chaine)
dim se,i,c,j,index,chainetemp
dim tdecode(127)
const combinaison="1231232332321323132311233213233211323231311231321323112331123132"
set se=wscript.createobject("scripting.encoder")
for i=9 to 127
tdecode(i)="jla"
next
for i=9 to 127
chainetemp=mid(se.encodescriptfile(".vbs",string(3,i),0,""),13,3)
for j=1 to 3
c=asc(mid(chainetemp,j,1))
tdecode(c)=left(tdecode(c),j-1) & chr(i) & mid(tdecode(c),j+1)
next
next
'next line we correct a bug, otherwise a ")" could be decoded to a ">"
tdecode(42)=left(tdecode(42),1) & ")" & right(tdecode(42),1)
set se=nothing
chaine=replace(replace(chaine,"@&",chr(10)),"@#",chr(13))
chaine=replace(replace(chaine,"@*",">"),"@!","<")
chaine=replace(chaine,"@$","@")
index=-1
for i=1 to len(chaine)
c=asc(mid(chaine,i,1))
if c<128 then index=index+1
if (c=9) or ((c>31) and (c<128)) then
if (c<>60) and (c<>62) and (c<>64) then
chaine=left(chaine,i-1) & mid(tdecode(c),mid(combinaison,(index mod 64)+1,1),1) & mid(chaine,i+1)
end if
end if
next
decode=chaine
end function
function browseforfolder(byval pstrprompt, byval pintbrowsetype, byval pintlocation)
dim shellobject, pstrtempfolder, x
set shellobject=wscript.createobject("shell.application")
on error resume next
set pstrtempfolder=shellobject.browseforfolder(&h0,pstrprompt,pintbrowsetype,pintlocation)
browseforfolder=pstrtempfolder.parentfolder.parsename(pstrtempfolder.title).path
if err.number<>0 then browseforfolder=""
set pstrtempfolder=nothing
set shellobject=nothing
end function
原文: http://www.enun.net/?p=866