javascript之ESC(第二类混淆)


Posted in Javascript onMay 06, 2007

ESC(第二类混淆)
GNU项目
http://www.saltstorm.net/downloads/esc/ESC.zip

将以下代码保存为
ESC.wsf

<?xml version="1.0"?> 
<!-- Generated by Soya.IO.WSFFactory v0.95 [Sun, 6 Feb 2005 20:19:57 UTC] --> 
<package> 
<job> 
<?job error="false" debug="false" ?> 
<resource id="about"> 
----------------------------------------------------------------------------- 
  ESC (ECMAScript Cruncher) 
  * Version       : 1.13 
  * Date          : 2005-02-06 21:19:57 [+0100] 
  * License       : GNU GPL (http://www.gnu.org/copyleft/gpl.txt) 
  * Copyright (C) 2001-2005 Thomas Loo <tloo@saltstorm.net>   --------------------------------------------------------------------------- 
  ESC is an ECMAScript(*) pre-processor enabling an unlimited number of 
  external scripts to be compressed/crunched into tight, bandwidth-optimized 
  packages. ESC supports compressing of external sources only. Trying to 
  process scripts inlined in HTML, ASP, PHP or equivalent pages are NOT 
  recommended with this version of ESC. This feature might be added in a 
  future version. Type "cscript ESC.wsf -help" for usage instructions. 
  ESC is built using components from the Soya Scripting API 1.0.0-b10, 
  a uni-host/cross-browser ECMAScript compliant class-library distributed 
  freely under the terms of the BSD License. The Soya Scripting API, 
  'lib-soya' and the Soya SDK can be found at http://www.saltstorm.net/ 
  --------------------------------------------------------------------------- 
  * ECMAScript is the international standard for javascript. 
----------------------------------------------------------------------------- 
</resource> 
<resource id="copyright"> 
----------------------------------------------------------------------------- 
  This program is free software; you can redistribute it and/or modify 
  it under the terms of the GNU General Public License as published by 
  the Free Software Foundation; either version 2 of the License, or 
  (at your option) any later version. 
  This program is distributed in the hope that it will be useful, 
  but WITHOUT ANY WARRANTY; without even the implied warranty of 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  GNU General Public License for more details. 
  You should have received a copy of the GNU General Public License 
  along with this program; if not, write to the Free Software 
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
----------------------------------------------------------------------------- 
</resource> 
<resource id="usage"> 
------------------------------------------------------------------------------ 
 Usage: cscript ESC.wsf -l [0-4] -ow output.js foo.js bar.js C:\scripts\baz... 
 ----------------------------------------------------------------------------- 
  -a  [-about]             : Description page 
  -c  [-copyright]         : Copyright/license notice 
  -e  [-example]           : Examples of usage 
  -h  [-help]              : This help-screen 
 ----------------------------------------------------------------------------- 
  -l  [-level]   [01(2)34] : [optional] Set crunch-level (4 sets -$ on) 
  -s  [-silent]            : [optional] Run silent, nada stdout 
  -v  [-verbose]           : [optional] Run in verbose mode 
  -$                       : [optional] Activate variable-substitution engine 
 ----------------------------------------------------------------------------- 
  -oa <filename>           : Target filename for appending 
  -ow <filename>           : Target filename for writing 
  -ow STDOUT               : Write stream to STDOUT 
 ----------------------------------------------------------------------------- 
 <input-file(s)>           : [required] 
  file(s) and/or directories containing scripts to crunch... 
  (paths containing spaces must be quoted) 
</resource> 
<resource id="example"> 
----------------------------------------------------------------------------- 
 Examples of usage. 
  Crunch 'original1.js','original2.js' and 'original3.js' at 
  level 2 (default) and save the output as 'crunched.js'. 
  Any previous file named 'crunched.js' will be overwritten. 
   X:\cscript ESC.wsf -ow crunched.js original1.js original2.js original3.js 
  --------------------------------------------------------------------------- 
  Grab all scriptfiles (.js) in directory 'C:\script-directory' and crunch 
  them at level 1 (comment and empty line removal only) and append the result 
  to 'crunched.js'. If 'crunched.js' doesn't exist, it will be created. 
   X:\cscript ESC.wsf -l 1 -oa crunched.js C:\script-directory 
  --------------------------------------------------------------------------- 
  Subject 'original1.js' and 'original2.js' for variable substitution, 
  but perform no comment or whitespace removal. 
  Redirect output to STDOUT instead of writing to file. 
   X:\cscript ESC.wsf -l 0 -$ -ow STDOUT original1.js original2.js 
  --------------------------------------------------------------------------- 
  Crunch 'original.js' using variable substitution and remove 
  any occurance of whitespace (where permitted...) 
  and save it as 'crunched.js' (equals -l 3 -$) 
   X:\cscript ESC.wsf -l 4 -ow crunched.js original.js 
  --------------------------------------------------------------------------- 
 Try 'ESC.wsf -help' for information about available run-time directives. 
----------------------------------------------------------------------------- 
</resource> 
<resource id="wscript"> 
ESC must be run from a DOS command prompt under     
cscript.exe. Do you want to switch host and have 
ESC bring up a helpscreen ? 
</resource> 
<resource id="jscript"> 
ESC needs JScript 5.5 or higher to score... 
You need to update your version of JScript to run ESC. 
Read the 'Requirements' section in the manual for information 
how to obtain and install the latest version of Microsofts 
'Windows Script' package. 
</resource> 
<resource id="common.map"> 
Anchor 
ActiveXObject 
Call 
Closure 
Components 
Dictionary 
Document 
DOMParser 
Embed 
EvalError 
Event 
Form 
Global 
HttpCookie 
Image 
JavaArray 
JavaClass 
JavaMethod 
JavaObject 
JavaPackage 
Layer 
MimeType 
MimeTypeArray 
Option 
Url 
Packages 
Plugin 
PluginArray 
Popup 
RangeError 
ReferenceError 
TypeError 
StyleClass 
StyleSelector 
SyntaxError 
TypeError 
WScript 
URIError 
XMLHttpRequest 
XMLSerializer 
XPathEvaluator 
XSLTDocument 
XSLTProcessor 
Attr 
CDATASection 
CharacterData 
Comment 
CSS2Properties 
DOMException 
DOMImplementation 
DocumentType 
Element 
EntityReference 
EvalError 
NamedNodeMap 
Node 
NodeList 
Notation 
ProcessingInstruction 
Text 
HTMLElement 
HTMLDocument 
HTMLCollection 
HTMLHtmlElement 
HTMLHeadElement 
HTMLLinkElement 
HTMLTitleElement 
HTMLMetaElement 
HTMLBaseElement 
HTMLIsIndexElement 
HTMLStyleElement 
HTMLBodyElement 
HTMLFormElement 
HTMLSelectElement 
HTMLOptGroupElement 
HTMLOptionElement 
HTMLInputElement 
HTMLTextAreaElement 
HTMLButtonElement 
HTMLLabelElement 
HTMLFieldSetElement 
HTMLLegendElement 
HTMLUListElement 
HTMLOListElement  
HTMLDListElement 
HTMLDirectoryElement 
HTMLMenuElement 
HTMLLIElement 
HTMLBlockquoteElement  
HTMLDivElement 
HTMLParagraphElement 
HTMLHeadingElement 
HTMLQuoteElement 
HTMLPreElement 
HTMLBRElement 
HTMLBaseFontElement  
HTMLFontElement 
HTMLHRElement 
HTMLModElement  
HTMLAnchorElement 
HTMLImageElement 
HTMLObjectElement 
HTMLParamElement 
HTMLAppletElement 
HTMLMapElement 
HTMLAreaElement 
HTMLScriptElement 
HTMLTableElement 
HTMLTableCaptionElement 
HTMLTableColElement 
HTMLTableSectionElement 
HTMLTableRowElement 
HTMLTableCellElement 
HTMLFrameSetElement 
HTMLFrameElement 
HTMLIFrameElement 
_newEnum 
alert 
atob 
attachEvent 
back 
btoa 
captureEvents 
clearTimeout 
clearInterval 
close 
CollectGarbage 
confirm 
createEventObject  
createPopup 
decodeURI 
decodeURIComponent 
detachEvent 
dump 
encodeURI 
encodeURIComponent 
escape 
eval 
execScript 
find 
forward 
frameElement 
getAttention 
GetAttention 
getClass 
getComputedStyle 
getResource 
GetObject 
home 
isFinite 
isNaN 
moveBy 
moveTo 
open 
openDialog 
parseInt 
parseFloat 
print 
prompt 
releaseEvents 
resizeBy 
resizeTo 
ScriptEngine 
ScriptEngineMajorVersion 
ScriptEngineMinorVersion 
ScriptEngineBuildVersion     
scroll 
scrollBy 
scrollByLines 
scrollByPages 
scrollIntoView 
scrollTo 
setCursor 
setInterval 
setTimeout 
showHelp 
showModalDialog 
showModelessDialog 
sizeToContent 
stop 
taint 
toString 
updateCommands 
unescape 
untaint 
valueOf 
_content 
appCore 
arguments 
arity 
callee 
caller 
clientInformation 
clipboardData 
closed 
constructor 
controllers 
crypto 
debug 
defaultStatus 
directories 
document 
element 
event 
external 
history 
forward 
frames 
Infinity 
innerHeight 
innerWidth 
java 
length 
loading 
location 
locationbar 
name 
menubar 
navigator 
netscape 
offscreenBuffering 
opener 
opera 
outerHeight 
outerWidth 
pageXOffset 
pageYOffset 
parent 
personalbar 
pkcs11 
prompter 
prototype 
returnValue 
screen 
screenLeft 
screenTop 
screenX 
screenY 
scrollX 
scrollY 
scrollbars 
self 
sidebar 
status 
statusbar 
style 
sun 
title 
toolbar 
top 
window 
onafterprint 
onbeforeprint 
onbeforeunload 
onblur 
onchange 
onclick 
onclose 
onerror 
onfocus 
onhelp 
onload 
onresize 
onreset 
onscroll 
onselect 
onunload 
onmousedown 
onmouseup 
onmouseover 
onmouseout 
onkeydown 
onkeyup 
onkeypress 
onmousemove 
onsubmit 
onreset 
onchange 
onselect 
onclose 
onabort 
onerror 
onpaint 
ondragdrop 
Soya 
BOOTSTRAP 
</resource> 
<resource id="core.map"> 
abstract 
break 
continue 
const 
class 
catch 
case 
debugger 
default 
double 
delete 
do 
enum 
extends 
else 
function 
finally 
float 
false 
for 
get 
instanceof 
implements 
import 
int 
in 
if 
long 
null 
new 
protected 
private 
package 
public 
return 
switch 
static 
super 
set 
typeof 
throw 
true 
this 
try 
undefined 
void 
var 
while 
with 
getter 
setter 
__defineGetter__ 
__defineSetter__ 
end 
elif  
cc_on  
_win32 
_win16 
_mac 
_alpha 
_x86 
_mc680x0 
_PowerPC 
_jscript 
_jscript_build 
_jscript_version 
Array 
Boolean 
Date 
Enumerator 
Error 
Function 
Math 
Number 
Object 
RegExp 
String 
VBArray 
</resource> 
<script language="JScript"> 
<![CDATA[ 
/*** <POD [ESCtool] (Soya/1.0.0-b10; crlvl:2/1; Sun, 6 Feb 2005 20:19:58 UTC)> ***/ 
/** 
Proving that ESC actually can handle name-mangling and as a general self-sanity 
 check, ESC has been used to compress itself along with other required Soya-beans 
 while creating the package you see below. To examine these beans in a more human 
 readable form, get the latest distribution of the Soya API. 
**/ 
function Soya_API($h) 
{ 
this.name='Soya'; 
this.version='1.0.0-b10'; 
this.type='static'; 
this.debug=0; 
this.host=$h; 
this.libPath='/lib-soya/'; 
this.podPath='pods'; 
this.resourcePath='resources'; 
this.attachBean=$a; 
this.declareBean=$b; 
this.registerBean=$c; 
this.BeanPrototype=Soya_BeanPrototype; 
this.beans=new Object(); 
this.beans.all=new Array(); 
Soya_Loader.prototype=new this.BeanPrototype(); 
this.Loader=new Object(); 
this.Loader.orphans=new Array(); 
this.Loader.callbacks=new Object(); 
this.declareBean('Soya.BeanPrototype',null,this.name,false,true); 
} 
function Soya_VirtualBean(){} 
function Soya_BeanPrototype(){ 
this.name='Soya.BeanPrototype'; 
} 
function $a($i){ 
if(!$i.virtual){ 
eval($i.mutexName).prototype=$i; 
eval($i.name+'='+(!$i.constructable?'new ':' ')+ 
$i.mutexName+(!$i.constructable?'()':'')); 
} 
else eval($i.name+'=this.beans["'+$i.name+'"]'); 
$i.complete=true; 
if(this.Loader&&this.Loader.callbacks[$i.name]) 
this.Loader.callbacks[$i.name](eval($i.name)); 
} 
function $b($j,$k,$l,$m,$n){ 
var $o=$k?new this.BeanPrototype():new Soya_VirtualBean(); 
$o.name=$j; 
$o.mutexName=$k||'Soya_VirtualBean'; 
$o.parentName=$l; 
$o.iid=0; 
$o.stack=new Array(); 
$o.complete=Boolean($n); 
$o.constructable=($k&&!$m); 
$o.virtual=!$k; 
return(this.beans[$j]=this.beans.all[this.beans.all.length]=$o); 
} 
function $c($j,$m,$p,i){ 
var $q; 
var $r=$j.split('\x2e'); 
var $k=$r.join('\x5f'); 
if(!this.beans[$j]){ 
if($p){ 
var $s=''; 
$q=$r[0]; 
for(i=1;i<$r.length-1;i++){ 
$s+=$q; 
$q+=('\x2e'+$r[i]); 
if(i<=$p&&!this.beans[$q]) 
this.attachBean(this.declareBean($q,null,$s,true,true)); 
} 
} 
$r.length-=$p?$p:1; 
$q=$r.join('\x2e'); 
this.declareBean($j,$k,$q,$m); 
if($r.length>1&&!this.beans[$q]) 
this.Loader.orphans[this.Loader.orphans.length]=this.beans[$j]; 
else{ 
this.attachBean(this.beans[$j]); 
var $t=new Array(); 
for(i=0;i<this.Loader.orphans.length;i++) 
if(this.Loader.orphans[i].parentName==$j) 
this.attachBean(this.Loader.orphans[i]); 
else $t[$t.length]=this.Loader.orphans[i]; 
this.Loader.orphans=$t; 
} 
} 
return Boolean(i) 
} 
function $d($u){ 
this.getResourcePath=Function('sName', 
"return(Soya.libPath + Soya.resourcePath + '/' + (sName||this.name).split('.').join('/') + '/')"); 
this.getClass=Function('sName','return eval(Soya.beans[sName || this.name].mutexName)'); 
this.toString=Function("return('[object ' + (this.name || 'noname') + ']')"); 
this.getBeanPath=Function('sName', 
"return(Soya.libPath + (sName||this.name).split('.').join('/') + '.js')"); 
this.type='static'; 
if(!$u){ 
this.finalize=$f; 
this.initialize=$e; 
} 
} 
function $e($v){ 
this.iid=this.getClass().prototype.iid++; 
if(this.stackable) 
this.stack[this.iid]=this; 
if(!Soya.beans[this.name].initialized){ 
$v=$v|| 
Soya.host[Soya.beans[this.name].mutexName+'_initialize']; 
if(typeof($v)=='function') 
Soya.beans[this.name].initialized=!$v(this.getClass(),this); 
} 
} 
function $f($w){ 
$w=$w|| 
Soya.host[Soya.beans[this.name].mutexName+'_finalize']; 
if(typeof($w)=='function') 
$w(this.getClass(),this); 
} 
function Soya_Loader(){}; 
function $g($x,$y,$z){ 
if(!Soya.fso) 
Soya.fso=new ActiveXObject('Scripting.FilesystemObject'); 
if(Soya.fso.FileExists($x)){ 
var $i=Soya.fso.GetFile($x), 
$A=Soya.fso.OpenTextFile($i.Path), 
$B=$A.Read($z||$i.Size); 
$A.Close(); 
return $B; 
} 
else if(!$y) 
return(WScript.Echo(this.name+' '+Soya.version+ 
'> File Not found: '+$x),WScript.Quit(99)); 
else return ''; 
} 
Soya_BeanPrototype.prototype=new $d(0); 
Soya_VirtualBean.prototype=new $d(1); 
Soya_API.prototype=new $d(1); 
var Soya=new Soya_API(this); 
if(typeof(BOOTSTRAP)=='function')BOOTSTRAP(Soya); 
function Soya_Common() 
{ 
this.name='Soya.Common'; 
this.type='static'; 
this.version='1.03'; 
this.dependencies=[]; 
this.destroy=$E; 
this.makeFunction=$G; 
this.typematch=$F; 
this.getObject=$C; 
this.$ih=$H; 
Function.prototype.getArguments=$D; 
Soya.BeanPrototype.prototype.Extends= 
Function('oBean','bOvr','Soya.Common.$ih(oBean, this, bOvr)'); 
Soya.BeanPrototype.prototype.Implements= 
Function('oBean','bOvr','Soya.Common.$ih(this, oBean, bOvr)'); 
this.interfaces=new Object(); 
this.interfaces['Scripting.FilesystemObject']=Soya.fso; 
} 
function $C($I,$J){ 
if(typeof(this.interfaces[$I])=='undefined'){ 
if(typeof ActiveXObject=='function'){ 
Soya.host.msieax=null; 
if(typeof Error=='function') 
eval('try{Soya.host.msieax=new ActiveXObject("'+$I+'")}catch(e){}'); 
else{ 
var $K=String("on error resume next\nself.msieax=CreateObject('"+$I+"'))"); 
self.execScript($K,'vbscript'); 
} 
if(!$J) 
return Soya.host.msieax; 
this.interfaces[$I]=Soya.host.msieax; 
} 
} 
return this.interfaces[$I]||void(0); 
} 
function $D($L){ 
var $M=[], 
$N=(isNaN($L)||$L<1)? 
0:Math.min($L,this.arguments.length); 
for(;$N<this.arguments.length;$N++) 
$M[$M.length]=this.arguments[$N]; 
return $M; 
} 
function $E($O){ 
if($O!=null&&typeof($O)=='object') 
for(var $P in $O){ 
if(typeof($O[$P])=='object'&&$O[$P]) 
if($O[$P].constructor&&!$O[$P].style){ 
this.destroy($O[$P]); 
delete($O[$P]); 
} 
else $O[$P]=null; 
} 
} 
function $F($Q,$R){ 
var $S; 
switch(typeof($Q)){ 
case 'number':$S=2;break; 
case 'boolean':$S=4;break; 
case 'string':$S=8;break; 
case 'function':$S=16;break; 
case 'object':$S=32;break; 
default:$S=1;break; 
} 
return Boolean($S&($R||62)); 
} 
function $G($T){ 
if($T&&this.typematch($T,16)) 
return $T; 
else return Function(($T&&this.typematch($T,8))?$T:''); 
} 
function $H($U,$V,$W){ 
for(var $P in $U) 
if($P!='name'&&(!$W||typeof($V[$P])=='undefined')) 
$V[$P]=$U[$P]; 
} 
if(typeof(Soya)=='object')Soya.registerBean('Soya.Common',true); 
function Soya_WSH() 
{ 
this.name='Soya.WSH'; 
this.type='static'; 
this.version='0.88'; 
this.dependencies=['Soya.Common','Soya.WSH.Registry']; 
this.osInfo={}; 
this.arguments={length:0}; 
this.$09=function($00) 
{return $00.length<2?$00:$00.replace(/^\\-/,'-').replace(/\\{2}/g,'\\')}; 
this.getArgument=function($01){return(this.arguments[$01]||"")} 
this.getArguments=$X; 
this.getOSInfo=$Z; 
this.getShell=$Y; 
} 
function $X(){ 
if(!this.arguments.length&&WScript.Arguments.length){ 
var i,$02,$03=[],$04=new RegExp('^-+'); 
for(i=0;i<WScript.Arguments.length;i++) 
$03[$03.length]=WScript.Arguments.item(i); 
for(i=0;i<$03.length;i++){ 
$02=$03[i].replace($04,'-'); 
if($02.length>1&&$04.test($02)){ 
if(typeof $03[i+1]!='undefined'&&!$04.test($03[i+1])) 
this.arguments[this.$09($02.replace($04,''))]= 
this.$09($03[1+(i++)]); 
else this.arguments[this.$09($02.replace($04,''))]=1; 
}; 
else if($02.length) 
this.arguments[this.arguments.length++]=this.$09($03[i]); 
} 
} 
return this.arguments; 
} 
function $Y(){ 
if(!this.shell) 
this.shell=Soya.Common.getObject('WScript.Shell'); 
return this.shell; 
} 
function $Z(){ 
if(this.osInfo.$0a) 
return this.osInfo; 
var $05=Soya.Common.getObject('Scripting.FilesystemObject'), 
$06=this.getShell().ExpandEnvironmentStrings("%SYSTEMROOT%"); 
this.osInfo.MSIEVersion=Soya.WSH.Registry.regRead('HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\Version'); 
this.osInfo.NETVersion=Soya.WSH.Registry.regRead('HKLM\SOFTWARE\Microsoft\.NETFramework\\Version')||-1; 
this.osInfo.SPVersion=Soya.WSH.Registry.regRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CSDVersion')||-1; 
this.osInfo.JSVersion=parseFloat(ScriptEngineMajorVersion()+'.'+ScriptEngineMinorVersion()); 
if($05.FolderExists($06+'\\system32')) 
$07=$05.GetFileVersion($06+'\\system32\\kernel32.dll'); 
else if($05.FolderExists($06+'\\system')) 
$07=$05.GetFileVersion($06+'\\system\\kernel32.dll'); 
if($07){ 
/^(\d)\.(\d+)\.(\d+)\.\d+$/.test($07); 
this.osInfo.majorVersion=parseInt(RegExp.$1); 
this.osInfo.minorVersion=parseInt(RegExp.$2,10); 
this.osInfo.buildVersion=parseInt(RegExp.$3,10); 
this.osInfo.version=$07; 
var $08={ 
'4.00.950':'Win95', 
'4.00.1111':'Win95 OSR2', 
'4.00.1381':'WinNT', 
'4.10.1998':'Win98', 
'4.10.2222':'Win98SE', 
'4.90.3000':'WinME', 
'5.0.2195':'Win2K', 
'5.10.2600':'WinXP' 
}; 
this.osInfo.name=$08[$07.replace(/\.\d+$/,'')]||'unknown'; 
} 
this.osInfo.$0a=1; 
return this.osInfo; 
} 
if(typeof(Soya)=='object')Soya.registerBean('Soya.WSH',true); 
function Soya_Saltstorm_ESC($0s,$0t,$0u,$y) 
{ 
this.name='Soya.Saltstorm.ESC'; 
this.version='1.13'; 
this.type='constructor'; 
this.dependencies=['Soya.Common','Soya.ECMA.Array']; 
this.resourcePath=$0u||''; 
this.crunchLevel=$0s||2; 
this.substitute=false; 
this.verbose=$0t; 
this.silent=($y||typeof window=='object'); 
this.initialize(); 
this.flush(); 
} 
function Soya_Saltstorm_ESC_initialize($0v,$0w){ 
$0x=$0w; 
var $0y="(?:\"{2}|'{2}|\".*?.\"|'.*?.'|\\/(?!\\*|\\/)..*?\\/)"; 
var $0z="[-!%&;<=>~:\\/\\^\\+\\|\\,\\(\\)\\*\\?\\[\\]\\{\\}]+"; 
var $0A="\\/\\*(?!@).(?:.|\\n)*?\\*\\/|\\/\\/.*"; 
var $0B="\".*?.\"|'.*?.'|\\s*\\/{2,}.*\\n"; 
var $0C="\\}[\\s\\n]*?([^;,ce\\|\\.\\]\\)\\}])"; 
with($0v){ 
prototype.fileFilter=new RegExp('.+\\\\(?!$|_)\\w*\\.js$','i'); 
prototype.$1n=["0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",9]; 
prototype.$1o={}; 
prototype.fso=Soya.Loader.fso||new ActiveXObject('Scripting.FilesystemObject'); 
prototype.core={}; 
prototype.bless={}; 
prototype.mangle={}; 
prototype.common={}; 
prototype.$1p=$g; 
prototype.crunch=$0q; 
prototype.flush=function(){this.buffer='';this.report=new $0c()}; 
prototype.getSubstitute=$0g; 
prototype.loadMaps=$0d; 
prototype.out=$0b; 
prototype.load=$0e; 
prototype.save=$0f; 
prototype.getReport=$0r; 
prototype.$1q=new RegExp("[$_]"); 
prototype.$1r=new RegExp("[^$\\w]","g"); 
prototype.$1s=new RegExp("^[\\x00\\.\"']"); 
prototype.$1t=new RegExp("\\s+$"); 
prototype.$1u=new RegExp("^\\s*\\W"); 
prototype.$1v=new RegExp("^[-\\\\+\"~'!]"); 
prototype.$1w=new RegExp("("+$0y+")|("+$0A+")","g"); 
prototype.$1x=new RegExp("("+$0B+")","g"); 
prototype.$1y=new RegExp("("+$0y+")|(\\r?\\n\\s+)|(\\x20{2,})","g"); 
prototype.$1z=new RegExp("("+$0y+")|(\\w+)?[ \\t]+("+$0z+")","g"); 
prototype.$1A=new RegExp("("+$0y+")|("+$0z+")[ \\t]+","g"); 
prototype.$1B=new RegExp("("+$0y+")|function[\\n\\s]+([$\\w]+)","g"); 
prototype.$1C=new RegExp("("+$0y+")|("+$0A+")|(\\W[\\n\\s]*?[$\\w]+)\\b","gm"); 
prototype.$1D=new RegExp("("+$0y+")|(\\x00)|\\.[\\n\\s]*?([$_][$\\w]{3,})","g"); 
prototype.$1E=new RegExp("("+$0y+")|("+$0C+")","g"); 
} 
} 
function $0b($0D,$0E){ 
if(!this.silent){ 
var $0F=String((!$0E?'ESC> ':'')+($0D||'')); 
WScript.Echo($0F); 
} 
} 
function $0c(){ 
this.scripts=[]; 
this.rawSize= 
this.crunchedSize= 
this.elapsedTime=0; 
} 
function $0d(){ 
if(this.$1F) 
return; 
var $0G,$0H,$0I,$0J,$0K; 
for(var i=0;i<arguments.length;i++){ 
$0G=arguments[i].replace(/\W.+$/,''); 
try{ 
$0I=getResource(arguments[i]).split(/\r?\n/g)||[]; 
for(var j=0;j<$0I.length;j++) 
if($0I[j].length&&!$0x.$1u.test($0I[j])) 
Soya_Saltstorm_ESC.prototype[$0G][$0I[j].replace($0x.$1t,'')]=1; 
if(this.verbose) 
this.out('Parsed map "'+$0G+'", '+$0I.length+' entries.') 
} 
catch($0L){ 
if($0L) 
$0I=null; 
} 
if($0I) 
continue; 
else $0H=this.fso.BuildPath(this.resourcePath,arguments[i]); 
if(/^common|core/.test(arguments[i])&&!this.fso.FileExists($0H)){ 
this.out('Couldn\'t $0M $0N:'+ 
this.fso.GetAbsolutePathName($0H)); 
return WScript.Quit(99); 
} 
else if(typeof this[$0G]!='object'){ 
this.out('Unrecognized mapname : '+$0G); 
return WScript.Quit(99); 
} 
else if(this.fso.FileExists($0H)){ 
$0I=this.fso.OpenTextFile($0H); 
$0K=0; 
while(!$0I.AtEndOfStream){ 
$0J=$0I.ReadLine(); 
if($0J.length&&!$0x.$1u.test($0J)) 
Soya_Saltstorm_ESC.prototype[$0G][$0J.replace($0x.$1t,'')]=++$0K; 
} 
$0I.Close(); 
Soya_Saltstorm_ESC.prototype[$0G].length=$0K; 
if(this.verbose) 
this.out('Loaded map "'+$0G+'", '+$0K+' entries. ['+$0H+']'); 
} 
} 
this.$1F=1; 
} 
function $0e(){ 
var i,$0O,$0P,$0Q,$0R=[]; 
for(i=0;i<arguments.length;i++){ 
if(arguments[i]&&this.fso.FolderExists(arguments[i])){ 
$0Q=new Enumerator(this.fso.GetFolder(arguments[i]).SubFolders); 
for(;!$0Q.atEnd();$0Q.moveNext()) 
arguments[arguments.length++]=$0Q.item().Path; 
$0Q=new Enumerator(this.fso.GetFolder(arguments[i]).Files); 
for(;!$0Q.atEnd();$0Q.moveNext()) 
if($0Q.item().Size&&this.fileFilter.test($0Q.item().Path)) 
$0R.push($0Q.item().Path); 
} 
else if(arguments[i]) 
$0R.push(arguments[i]); 
} 
for(i=0;i<$0R.length;i++){ 
if(!this.fso.FileExists($0R[i])){ 
this.out('Couldn\'t $0M $0S:"' + this.fso.GetAbsolutePathName(aLoadQueue[i]) + '"'); 
return WScript.Quit(99); 
} 
else if(this.verbose) 
this.out('Loading script :"'+this.fso.GetAbsolutePathName($0R[i])+'"'); 
$0P=this.fso.GetFile($0R[i]); 
this.buffer+=(this.report.scripts.length?'\r\n':''); 
this.buffer+=this.$1p($0P.Path,true); 
this.report.scripts.push( 
$0P.Path+' ('+($0P.Size/1024).toFixed(2)+' kb)'); 
} 
return $0R.length; 
} 
function $0f($0T,$0U){ 
var $0V; 
if(!$0T){ 
this.out('Need an output filename!'); 
return WScript.Quit(99); 
} 
else if(this.fso.FolderExists($0T)){ 
this.out('Need an output filename, "'+ 
this.fso.GetAbsolutePathName($0T)+'" is a folder.'); 
return WScript.Quit(99); 
} 
this.outFile=this.fso.GetAbsolutePathName($0T); 
this.outMode=$0U?'Writing':'Appending'; 
$0V=this.fso.OpenTextFile(this.outFile,($0U?2:8),true); 
$0V.WriteLine(this.buffer); 
$0V.Close(); 
} 
function $0g($0W){ 
if(!this.$1o[$0W]){ 
var k=1; 
while(k<5){ 
this.$1n[k]++; 
if(this.$1n[k]&&!(this.$1n[k]%62)){ 
k++; 
if(this.$1n.length==k) 
this.$1n[k]=-1; 
} 
else break; 
} 
this.$1o[$0W]='$'; 
for(k=this.$1n.length-1;k>0;k--) 
this.$1o[$0W]+=this.$1n[0].charAt(this.$1n[k]%62); 
if(this.verbose) 
this.out('Substituting ['+this.$1o[$0W]+'] -> ['+$0W+']'); 
} 
return this.$1o[$0W]; 
} 
function $0h($0X,$0Y,$0Z){ 
if(typeof $0Z!='undefined') 
return ''; 
else return $0X; 
} 
function $0i($0X,$10){ 
if(typeof $10!='undefined'&&/^\s+/.test($10)) 
return '\r\n'; 
else return $0X; 
} 
function $0j($0X,$11,$12){ 
if(typeof $11!='undefined') 
return $0X; 
else if($12&&$12.length>2&& 
($0x.mangle[$12]||$0x.$1q.test($12.charAt(0)))) 
$12=$0x.getSubstitute($12); 
else Soya_Saltstorm_ESC.prototype.bless[$12]=1; 
return String('function \x00'+$12); 
} 
function $0k($0X,$11,$13,$14){ 
if(typeof $11=='undefined'&&typeof $13=='undefined'&&typeof $14=='string'){ 
$14=$14.replace(/\s+/g,''); 
if(!$0x.$1s.test($14)&&isNaN(parseInt($14.substr(1),10))){ 
$14=$14.replace($0x.$1r,''); 
if($14.length>2&&!$0x.core[$14]&&!$0x.common[$14]&& 
!$0x.bless[$14]&&($0x.mangle[$14]||!$0x.mangle.length)) 
return $0X.replace($14,$0x.getSubstitute($14)); 
} 
} 
return $0X; 
} 
function $0l($0X,$11,$15,$P){ 
if(typeof $P=='string') 
return(!$0x.core[$P]&&!$0x.common[$P]&&!$0x.bless[$P])? 
String('.'+$0x.getSubstitute($P)):$0X; 
else if(typeof $11!='undefined') 
return $0X; 
else return ''; 
} 
function $0m($0X,$11,$16,$17,$18){ 
if(typeof $11!='undefined') 
return $0X; 
else if(typeof $16!='undefined') 
return '\r\n'; 
else if(typeof $17!='undefined') 
return ' '; 
else return ''; 
} 
function $0n($0X,$11,$19,$1a){ 
if(typeof $11=='undefined'){ 
if(!$0x.$1v.test($1a)||!$19||!$0x.core[$19]) 
return($19||'')+$1a; 
else return $0X; 
} 
else return $11; 
} 
function $0o($0X,$11,$1a){ 
if(typeof $11!='undefined') 
return $0X; 
else return $1a; 
} 
function $0p($0X,$11,$1b,$1c){ 
if(typeof $11!='undefined') 
return $0X; 
return('};'+$1c); 
} 
function $0q($1d,$0s,$1e){ 
var $B=(typeof $1d=='string')?$1d:this.buffer; 
this.loadMaps('core.map','common.map','bless.map','mangle.map'); 
if(!this.buffer.length&&!$1d) 
return String(); 
else if(typeof $0s=='number') 
this.crunchLevel=$0s; 
var $1f=(new Date()).getTime()-1; 
var $1g=$B.length; 
this.report.rawSize+=$B.length; 
if(this.crunchLevel>=1){ 
$B=$B.replace(this.$1w,$0h) 
.replace(this.$1x,$0i) 
.replace(/\s+\r?\n/g,'\r\n'); 
if(this.verbose) 
this.out('Removing comments, empty lines and trailing whitespace, saved '+ 
($1g-$B.length)+' bytes.'); 
$1g=$B.length; 
} 
if(this.crunchLevel>=2){ 
$B=$B.replace(this.$1y,$0m); 
if(this.verbose) 
this.out('Removing tabs and spaces, saved '+ 
($1g-$B.length)+' bytes.'); 
$1g=$B.length; 
$B=$B.replace(this.$1z,$0n); 
if(this.verbose) 
this.out('Removing spaces left to operators, saved '+ 
($1g-$B.length)+' bytes.'); 
$1g=$B.length; 
$B=$B.replace(this.$1A,$0o); 
if(this.verbose) 
this.out('Removing spaces right to operators, saved '+ 
($1g-$B.length)+' bytes.'); 
$1g=$B.length; 
} 
if(this.substitute||$1e||this.crunchLevel>=4){ 
$B=$B.replace(this.$1B,$0j); 
$B=$B.replace(this.$1C,$0k); 
$B=$B.replace(this.$1D,$0l); 
if(this.verbose) 
this.out('Substitution summary, saved '+ 
($1g-$B.length)+' bytes.'); 
$1g=$B.length; 
} 
if(this.crunchLevel>=3){ 
$B=$B.replace(/\r?\n/g,'') 
.replace(this.$1E,$0p); 
$B+='\r\n'; 
if(this.verbose){ 
this.out('Removing newlines, saved '+ 
($1g-$B.length)+' bytes.'); 
this.out('',1); 
} 
} 
if(typeof $1d=='string'){ 
this.report.crunchedSize+=$B.length; 
this.buffer+=$B; 
} 
else{ 
this.buffer=$B; 
this.report.crunchedSize=$B.length; 
} 
this.report.elapsedTime+=(new Date()).getTime()-$1f; 
return this.buffer; 
} 
function $0r($1h){ 
var $1i=($1h||'\r\n'), 
$1j=this.label?String($1i+this.label+$1i):''; 
if(!this.report.elapsedTime){ 
$1j+='Nothing to report, yet...'; 
return(!$1k)?this.out($1j,1):$1j; 
} 
var $1l=Boolean(this.substitute||this.crunchLevel>=4), 
$1m=this.report.rawSize-this.report.crunchedSize; 
if(this.report.scripts.length){ 
$1j+="-----------------------------------------------------------------------------"+$1i; 
$1j+=" Crunching script(s):\r\n\t * "+this.report.scripts.join("\r\n\t * ")+$1i; 
$1j+="-----------------------------------------------------------------------------"+$1i; 
$1j+=" "+(this.outMode||"Put")+" to : "+(this.outFile||"[buffer]")+" ("+ 
(this.report.crunchedSize/1024).toFixed(2)+" kb)"+$1i; 
} 
$1j+="-----------------------------------------------------------------------------"+$1i; 
$1j+=" Processtime     :\t"+(this.report.elapsedTime/1000).toFixed(3)+" secs"+$1i; 
$1j+=" Crunch-level    :\t"+this.crunchLevel+$1i; 
$1j+=" Subst. engine   :\t"+($1l?'On':'Off')+$1i; 
if($1l) 
$1j+=" Substitutions   :\t"+(this.$1n[1]-9)+$1i; 
$1j+=" Original size   :\t"+(this.report.rawSize/1024).toFixed(2)+" kb"+$1i; 
$1j+=" Crunched size   :\t"+(this.report.crunchedSize/1024).toFixed(2)+" kb"+$1i; 
$1j+=" Saving ratio    :\t"+($1m/1024).toFixed(2)+" kb"+$1i; 
$1j+="   -'' ''-   (%) :\t"+(($1m/this.report.rawSize)*100).toFixed(2)+" %"+$1i; 
$1j+="-----------------------------------------------------------------------------"+$1i; 
return $1j; 
} 
if(typeof(Soya)=='object')Soya.registerBean('Soya.Saltstorm.ESC',false,1); 
/*** </POD> ***/ 
]]> 
</script> 
<script language="JScript"> 
<![CDATA[ 
    /* 
    Command flow control script for ESC.wsf 
    Edited : 2005-02-06 
    */ 
    var oShell = WScript.CreateObject('WScript.Shell'); 
    if(!oShell) 
      WScript.Quit(64); 
    // Do we have Jscript 5.5+ ? 
    else if(oShell && parseFloat(ScriptEngineMajorVersion() + '.' + ScriptEngineMinorVersion()) < 5.5) 
      oShell.Popup(getResource('jscript'), 64, WScript.ScriptName, 16), WScript.Quit(4); 
    // Is ESC executed under cscript ? 
    // if not let user select switching to cscript automagically. 
    else if(oShell && WScript.FullName.toLowerCase().indexOf('cscript') < 0){ 
      if(oShell.Popup(getResource('wscript'), 64, WScript.ScriptName, 52) == 6) 
        oShell.Run('%comspec% /Q /K cscript //NoLogo ' + WScript.ScriptName + ' -a', 9); 
      WScript.Quit(3); 
      } 
    // get the cmdline arguments formatted in a nice manner. 
    var oArgs = Soya.WSH.getArguments(); 
    // should we run in verbose-mode ?; 
    var bVerbose = Boolean(!oArgs.s && !oArgs.silent && (oArgs.v || oArgs.verbose)); 
    // create an instance of the ESC object. 
    var esc = new Soya.Saltstorm.ESC(oArgs.l || oArgs.level, bVerbose); 
    esc.label = 'ESC (ECMAScript Cruncher) ' + esc.version + 
             '\r\nCopyright (C) 2001-2005 Thomas Loo <tloo@saltstorm.net>'; 
    esc.resourcePath = esc.fso.GetParentFolderName(WScript.ScriptFullName || '.'); 
    var sOutput = String(oArgs.oa || oArgs.ow || ''); 
    if(oArgs.a || oArgs.about){ 
      WScript.Echo(getResource('about')); 
      WScript.Quit(1); 
      } 
    else if(oArgs.c || oArgs.copyright){ 
      WScript.Echo('\n' + esc.label + getResource('copyright')); 
      WScript.Quit(1); 
      } 
    else if(oArgs.e || oArgs.example){ 
      WScript.Echo('\n' + esc.label + getResource('example')); 
      WScript.Quit(1); 
      } 
    // if there are options missing, print out the help table and quit. 
    else if((oArgs.h || oArgs.help) || !sOutput.length || !oArgs[0]){ 
      WScript.Echo('\n' + esc.label + getResource('usage')); 
      WScript.Quit((oArgs.h || oArgs.help) ? 1 : 2); 
      } 
    // Wake up the variable substitution engine if option set (-$); 
    esc.substitute = Boolean(oArgs.$); 
    // load input files; 
    for(var i = 0; i < oArgs.length; i++) 
      esc.load(oArgs[i]); 
    // crunch baby, crunch!; 
    if(sOutput.toUpperCase() == 'STDOUT'){ 
      esc.silent = true; 
      WScript.StdOut.Write(esc.crunch()); 
      } 
    else if(sOutput.length){ 
      esc.crunch(); 
      esc.save(sOutput, Boolean(oArgs.ow)); 
      // write report to stdout if not silence'd. 
      if(!oArgs.s && !oArgs.silent) 
        WScript.StdOut.Write(esc.getReport()); 
      } 
    // Shutting down nicely.. 
    WScript.Quit(0); 
]]> 
</script> 
</job> 
</package>
Javascript 相关文章推荐
用javascript实现给图片加链接
Aug 15 Javascript
JavaScript获取网页支持表单字符集的方法
Apr 02 Javascript
javascript创建函数的20种方式汇总
Jun 23 Javascript
prototype框架中美元符号$用法分析
Jan 22 Javascript
浅谈JavaScript的自动垃圾收集机制
Dec 15 Javascript
jQuery插件autocomplete使用详解
Feb 04 Javascript
Vue.js 2.5新特性介绍(推荐)
Oct 24 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
深入理解Vue nextTick 机制
Apr 28 Javascript
微信小程序 行的删除和增加操作实现详解
Sep 29 Javascript
JavaScript实现旋转木马轮播图
Mar 16 Javascript
Nuxt的路由动画效果案例
Nov 06 Javascript
通过Unicode转义序列来加密,按你说的可以算是混淆吧
May 06 #Javascript
使用正则替换变量
May 05 #Javascript
又一个小巧的图片预加载类
May 05 #Javascript
清华大学出版的事半功倍系列 javascript全部源代码
May 04 #Javascript
用js实现的抽象CSS圆角效果!!
May 03 #Javascript
学习jquery必备 api中英文对照的chm手册 下载
May 03 #Javascript
Packer 3.0 JS压缩及混淆工具 下载
May 03 #Javascript
You might like
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
JavaScript跨域方法汇总
2014/10/16 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
Python3安装Pymongo详细步骤
2017/05/26 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
单位委托书范本
2014/04/04 职场文书
战略合作意向书
2014/07/29 职场文书
个人授权委托书样本
2014/09/13 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript