Notice: Undefined index: HTTP_ACCEPT_ENCODING in C:\server\web\www.showyounger.com\s-system.php on line 2
T4nk JS混淆工具 | 小样儿(ShowYounger)
小样儿,顶呱呱!!![http://www.showyounger.com]
- <HTML><HEAD><TITLE>T4nk JS混淆工具</TITLE>
- <BODY>
- <SCRIPT language=JavaScript>
- <!--
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- function CLASS_CONFUSION(code){
-
- function Hashtable(){
- this._hash = new Object();
- this.add = function(key,value){
- if(typeof(key)!="undefined"){
- if(this.contains(key)==false){
- this._hash[key]=typeof(value)=="undefined"?null:value;
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- this.remove = function(key){delete this._hash[key];}
- this.count = function(){var i=0;for(var k in this._hash){i++;} return i;}
- this.items = function(key){return this._hash[key];}
- this.contains = function(key){return typeof(this._hash[key])!="undefined";}
- this.clear = function(){for(var k in this._hash){delete this._hash[k];}}
-
- }
-
- function VariableMap(parent){
- this.table = new Hashtable();
- this.level = parent?parent.level+1:0;
- this.parent= parent;
- this.add = function(key,value){this.table.add(key,value)};
- this.items = function(key){return this.table.items(key)};
- this.count = function(){return this.table.count()};
- this.contains = function(key){return this.table.contains(key);}
- this.isParameter = false;
- }
-
- this._caseSensitive = true;
-
-
- this.str2hashtable = function(key,cs){
-
- var _key = key.split(/,/g);
- var _hash = new Hashtable();
- var _cs = true;
-
-
- if(typeof(cs)=="undefined"||cs==null){
- _cs = this._caseSensitive;
- } else {
- _cs = cs;
- }
-
- for(var i in _key){
- if(_cs){
- _hash.add(_key[i]);
- } else {
- _hash.add((_key[i]+"").toLowerCase());
- }
-
- }
- return _hash;
- }
-
-
- this._codetxt = code;
-
- if(typeof(syntax)=="undefined"){
- syntax = "";
- }
-
- this._deleteComment = false;
-
- this._caseSensitive = true;
-
- this._keywords =
- this.str2hashtable("switch,case,delete,default,typeof,for,in,function,void,this,boolean,"
- + "while,if,return,new,true,false,try,catch,throw,null,else,do,var");
- this._function = this.str2hashtable("function");
- this._var = "var";
- this._beginBlock = "{";
- this._endBlock = "}";
-
- this._window = this.str2hashtable("alert,escape,unescape,document,parseInt,parseFloat");
-
- this._commonObjects = this.str2hashtable("String,Number,Boolean,RegExp,Error,Math,Date,Object,Array,Global");
-
- this._wordDelimiters= " ,.?!;:\\/<>(){}[]\"'\r\n\t=+-|*%@#$^&";
-
- this._quotation = this.str2hashtable("\",'");
-
- this._lineComment = "//";
-
- this._escape = "\\";
- //多行引用开始
- this._commentOn = "
-
- ";
- this._execute = "eval";
- //引用调用字符
- this._call = ".";
- this._varPause = "=";
- this._varContinue = ",";
- //变量个数
- this._varNum = 0;
-
- this.confusion = function() {
- var codeArr = new Array();
- var word_index = 0;
- var htmlTxt = new Array();
-
-
- //得到分割字符数组(分词)
- for (var i = 0; i < this._codetxt.length; i++) {
-
- if (this._wordDelimiters.indexOf(this._codetxt.charAt(i)) == -1) { //找不到关键字
- if (codeArr[word_index] == null || typeof(codeArr[word_index]) == 'undefined') {
- codeArr[word_index] = "";
- }
- codeArr[word_index] += this._codetxt.charAt(i);
- } else {
- if (typeof(codeArr[word_index]) != 'undefined' && codeArr[word_index].length > 0)
- word_index++;
- codeArr[word_index++] = this._codetxt.charAt(i);
- }
- }
-
-
- var quote_opened = false; //引用标记
- var slash_star_comment_opened = false; //多行注释标记
- var slash_slash_comment_opened = false; //单行注释标记
- var line_num = 1; //行号
- var quote_char = ""; //引用标记类型
- var call_opened = false;
- var call_string = "";
- var var_opened = false;
- var var_pause = false;
- var function_opened = false;
- var parameter_opened = false;
-
- var var_map = new VariableMap();
- var cur_var_map = var_map;
- var execute_opened = false;
-
- //按分割字,分块显示
- for (var i=0; i <=word_index; i++){
-
- //单独处理指针引用
- if(call_opened&&typeof(codeArr[i])!="undefined"){
- if(call_string.length==0){
- if(this.isVar(codeArr[i])){
- call_string +=codeArr[i];
- }else{
- htmlTxt[htmlTxt.length] = "[\"" + this.toHex(call_string) + "\"]";
- if(codeArr[i]!=this._call){
- htmlTxt[htmlTxt.length] = codeArr[i];
- call_opened = false;
- }
- call_string = "";
- }
- } else {
- if(!this.isVar(codeArr[i])){
- htmlTxt[htmlTxt.length] = "[\"" + this.toHex(call_string) + "\"]";
- if(codeArr[i]!=this._call){
- htmlTxt[htmlTxt.length] = codeArr[i];
- call_opened = false;
- }
- call_string = "";
- }else{
- htmlTxt[htmlTxt.length] = "[\"" + this.toHex(call_string) + "\"]";
- }
- }
- continue;
- }
-
-
- if(typeof(codeArr[i])=="undefined"||codeArr[i].length==0){
- continue;
- } else if(codeArr[i]==" "){
- htmlTxt[htmlTxt.length] = " ";
- } else if(codeArr[i]=="\n"){
-
- } else if (codeArr[i] == "\r"){
- slash_slash_comment_opened = false;
- quote_opened = false;
- var_opened = false;
- htmlTxt[htmlTxt.length] = "\r\n";
- line_num++;
-
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&this.isFunction(codeArr[i])){
- htmlTxt[htmlTxt.length] = codeArr[i];
- function_opened = true;
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]=="("){
- htmlTxt[htmlTxt.length] = codeArr[i];
- if(function_opened == true){
- function_opened =false;
- var_opened = true;
- cur_var_map = new VariableMap(cur_var_map);
- cur_var_map.isParameter = true;
- }
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==")"){
- htmlTxt[htmlTxt.length] = codeArr[i];
-
- if(cur_var_map.isParameter){
- var_opened = false;
- var_pause = false;
- }
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==";"){
- htmlTxt[htmlTxt.length] = codeArr[i];
- var_opened = false;
- var_pause = false;
- if(execute_opened){
- execute_opened = false;
- }
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._var){
- htmlTxt[htmlTxt.length] = codeArr[i];
- var_opened = true;
- var_pause = false;
- } else if(!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._varPause){
- htmlTxt[htmlTxt.length] = codeArr[i];
- var_pause = true;
- } else if(!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._varContinue){
- htmlTxt[htmlTxt.length] = codeArr[i];
- var_pause = false;
- } else if(!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._beginBlock){
- cur_var_map = new VariableMap(cur_var_map);
- var_opened = false;
- htmlTxt[htmlTxt.length] = codeArr[i];
- } else if(!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._endBlock){
- cur_var_map = cur_var_map.parent;
- if(cur_var_map.isParameter){
- cur_var_map = cur_var_map.parent;
- }
- htmlTxt[htmlTxt.length] = codeArr[i];
-
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._call){
-
- if(i<word_index-1){
- if(this.isVar(codeArr[i+1])){
- if(call_opened){
- htmlTxt[htmlTxt.length] = this.toHex(call_string);
- }
- call_opened = true;
- }else{
- htmlTxt[htmlTxt.length] = this._call;
- }
- }else{
- htmlTxt[htmlTxt.length] = this._call;
- }
-
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened && this.isKeyword(codeArr[i])){
- htmlTxt[htmlTxt.length] = codeArr[i];
-
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened && codeArr[i]==this._execute){
- htmlTxt[htmlTxt.length] = "window[\"" + this.toHex(codeArr[i]) + "\"]";
- execute_opened = true;
-
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened && this.isWindow(codeArr[i])){
- htmlTxt[htmlTxt.length] = "window[\"" + this.toHex(codeArr[i]) + "\"]";
-
- } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened && this.isCommonObject(codeArr[i])){
- htmlTxt[htmlTxt.length] = "window[\"" + this.toHex(codeArr[i]) + "\"]";
-
- } else if (!slash_star_comment_opened&&!slash_slash_comment_opened&&this._quotation.contains(codeArr[i])){
- if (quote_opened){
-
- if(quote_char==codeArr[i]){
- htmlTxt[htmlTxt.length] = codeArr[i];
- quote_opened = false;
- quote_char = "";
- } else {
- htmlTxt[htmlTxt.length] = this.toHex(codeArr[i]);
- }
- } else {
- htmlTxt[htmlTxt.length] = codeArr[i];
- quote_opened = true;
- quote_char = codeArr[i];
- }
-
- } else if(codeArr[i] == this._escape){
- htmlTxt[htmlTxt.length] = codeArr[i];
- if(i<word_index-1){
- if(codeArr[i+1].charCodeAt(0)>=32&&codeArr[i+1].charCodeAt(0)<=127){
- htmlTxt[htmlTxt.length] = codeArr[i+1].substr(0,1);
- htmlTxt[htmlTxt.length] = this.toHex(codeArr[i+1].substr(1));
- i=i+1;
- }
- }
-
- } else if (!slash_slash_comment_opened && !slash_star_comment_opened&&!quote_opened&&this.isStartWith(this._commentOn,codeArr,i)){
- slash_star_comment_opened = true;
- htmlTxt[htmlTxt.length] = this._commentOn;
- i = i + this.getSkipLength(this._commentOn);
-
- } else if (!slash_slash_comment_opened && !slash_star_comment_opened&&!quote_opened&&this.isStartWith(this._lineComment,codeArr,i)){
- slash_slash_comment_opened = true;
- if(!this._deleteComment){
- htmlTxt[htmlTxt.length] = this._lineComment;
- }
- i = i + this.getSkipLength(this._lineComment);
-
- } else if (!slash_slash_comment_opened && !slash_star_comment_opened&&!quote_opened&&this.isStartWith(this._ignore,codeArr,i)){
- slash_slash_comment_opened = true;
- htmlTxt[htmlTxt.length] = this._ignore;
- i = i + this.getSkipLength(this._ignore);
-
- } else if (!quote_opened&&!slash_slash_comment_opened&&this.isStartWith(this._commentOff,codeArr,i)){
- if (slash_star_comment_opened) {
- slash_star_comment_opened = false;
- if(!this._deleteComment){
- htmlTxt[htmlTxt.length] = this._commentOff;
- }
- i = i + this.getSkipLength(this._commentOff);
- }
- } else {
-
- if(!quote_opened){
-
- if(!slash_slash_comment_opened && !slash_star_comment_opened){
-
- if(!var_opened){
- if(this.translateVar(cur_var_map,codeArr[i])==""){
- htmlTxt[htmlTxt.length] = codeArr[i];
- }else{
- htmlTxt[htmlTxt.length] = this.translateVar(cur_var_map,codeArr[i]);
- }
- }else{
-
- if(var_pause){
- if(this.translateVar(cur_var_map,codeArr[i])==""){
- htmlTxt[htmlTxt.length] = codeArr[i];
- }else{
- htmlTxt[htmlTxt.length] = this.translateVar(cur_var_map,codeArr[i]);
- }
- }else{
-
- if(this.isVar(codeArr[i])&&(i>0&&codeArr[i-1]==" "
- ||codeArr[i-1]=="\t"||codeArr[i-1]==this._varContinue
- ||cur_var_map.isParameter)){
- var name = this.getRandName();
- cur_var_map.add(codeArr[i],name);
- htmlTxt[htmlTxt.length] = this.translateVar(cur_var_map,codeArr[i]);
- }else{
- htmlTxt[htmlTxt.length] = codeArr[i];
- }
- }
- }
-
- }else{
- if(!this._deleteComment){
- htmlTxt[htmlTxt.length] = codeArr[i];
- }
- }
- }else{
- if(execute_opened){
- if(this.translateVar(cur_var_map,codeArr[i])==""){
- htmlTxt[htmlTxt.length] = codeArr[i];
- }else{
- htmlTxt[htmlTxt.length] = this.translateVar(cur_var_map,codeArr[i]);
- }
- }else{
- htmlTxt[htmlTxt.length] = this.toHex(codeArr[i]);
- }
- }
- }
-
- }
-
- return htmlTxt.join("");
- }
-
- this.isStartWith = function(str,code,index){
-
- if(typeof(str)!="undefined"&&str.length>0){
- var cc = new Array();
- for(var i=index;i<index+str.length;i++){
- cc[cc.length] = code[i];
- }
- var c = cc.join("");
- if(this._caseSensitive){
- if(str.length>=code[index].length&&c.indexOf(str)==0){
- return true;
- }
- }else{
- if(str.length>=code[index].length&&c.toLowerCase().indexOf(str.toLowerCase())==0){
- return true;
- }
- }
- return false;
-
- } else {
- return false;
- }
- }
-
- this.isFunction = function(val){
- return this._function.contains(this._caseSensitive?val:val.toLowerCase());
- }
-
- this.isKeyword = function(val) {
- return this._keywords.contains(this._caseSensitive?val:val.toLowerCase());
- }
-
- this.isWindow = function(val) {
- return this._window.contains(this._caseSensitive?val:val.toLowerCase());
- }
-
- this.isCommonObject = function(val) {
- return this._commonObjects.contains(this._caseSensitive?val:val.toLowerCase());
- }
-
- this.getSkipLength = function(val){
- var count = 0;
- for(var i=0;i<val.length;i++){
- if(this._wordDelimiters.indexOf(val.charAt(i))>=0){
- count++;
- }
- }
- if(count>0){
- count=count-1;
- }
- return count;
- }
-
-
- this.toHex = function(val){
- var str = new Array();
- for(var i=0;i<val.length;i++){
- var c = val.charCodeAt(i);
- if(c>=0&&c<256){
- str[str.length] = "\\x" + val.charCodeAt(i).toString(16);
- }else{
- str[str.length] = "\\u" + val.charCodeAt(i).toString(16);
- }
- }
- return str.join("");
- }
-
-
- this.getRandName = function(){
- var style = parseInt(Math.random()*4);
- var len = parseInt(Math.random()*9)+1;
- var n = [];
-
- this._varNum++;
- var c = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$";
-
- for(var i=0;i<len;i++){
- n[n.length] = c.charAt(parseInt(Math.random()*54));
- }
-
- return n.join("")+this._varNum;
-
- }
-
-
- this.isVar = function(val){
- return /^[a-zA-Z_\$].*$/.test(val);
- }
-
-
- this.translateVar = function(node,key){
- if(node.contains(key)){
- return node.items(key);
- }
-
- var cn = node.parent;
- while(cn!=null){
- if(cn.contains(key)){
- return cn.items(key);
- }
- cn = cn.parent;
- }
- return "";
- }
-
-
- }
-
- function doConfusion(o){
- var htmltxt = "";
-
- if (o == null){
- alert("domNode is null!");
- return;
- }
-
- var _codetxt = "";
-
- if(typeof(o)=="object"){
- switch(o.tagName){
- case "TEXTAREA":
- case "INPUT":
- _codetxt = o.value;
- break;
- case "DIV":
- case "SPAN":
- _codetxt = o.innerText;
- break;
- default:
- _codetxt = o.innerHTML;
- break;
- }
- }else{
- _codetxt = o;
- }
-
- var _syn = new CLASS_CONFUSION(_codetxt);
- htmltxt = _syn.confusion();
- return htmltxt;
- }
-
-
- function go()
- {
- var code = document.getElementById("code").value;
- var xx = new CLASS_CONFUSION(code);
- var a = new Date();
- document.getElementById("display").value = xx.confusion();
- alert("共花:" + (new Date().getTime()-a.getTime()) + "ms");
- }
-
- </SCRIPT>
- <TEXTAREA id=code rows=12 cols=100>
-
-
-
- function xx(num,str)
- {
-
- var a = num;
- this.aa = a;
- this.bb = function(){alert(str);}
- this.cc = function(){for(var i=0;i<10;i++){document.title=i;}}
- }
-
- xx.prototype.dd= function(){
- alert("dd");
- }
-
- var a = new xx(100,"hello"),b=new xx(0,"ttyp");
- eval("a.aa=20");
- a.bb();
- b.dd();
- alert(a.aa);
-
- </TEXTAREA> <BR><INPUT onclick=go() type=button value=go><br>
- <textarea id=display rows=12 cols=100>
- </textarea>
- </BODY></HTML>