SoFunction
Updated on 2025-04-06

CLASS_CONFUSION JS obfuscation Full source code


<SCRIPT language=JavaScript>
<!--
/**//**//**//**
**    
==============================================================
====================================
**   Class name: CLASS_CONFUSION
**    Function: JS obfuscation
**   Example:
    ---------------------------------------------------------
------------------------------------------

            var xx        = new CLASS_CONFUSION(code);

            ("display").innerHTML = 
();

    ---------------------------------------------------------
------------------------------------------
**     Author: ttyp
**   Email: ttyp@
**   Date: 2006-3-20
**     Version: 0.12
**    
==============================================================
====================================
**/

function CLASS_CONFUSION(code){
//Hash table class
    function Hashtable(){
        this._hash        = new Object();
                = function(key,value){
                            if(typeof(key)!="undefined"){
                                if((key)==false){
                                    this._hash[key]=typeof
(value)=="undefined"?null:value;
                                    return true;
                                } else {
                                    return false;
                                }
                            } else {
                                return false;
                            }
                        }
                = function(key){delete this._hash
[key];}
                = function(){var i=0;for(var k in 
this._hash){i++;} return i;}
                = function(key){return this._hash
[key];}
            = function(key){return typeof
(this._hash[key])!="undefined";}
                = function(){for(var k in 
this._hash){delete this._hash[k];}}

    }

    function VariableMap(parent){
         = new Hashtable();
         = parent?+1:0;
        = parent;
         = function(key,value){
(key,value)};
         = function(key){return 
(key)};
         = function(){return ()};
         = function(key){return 
(key);}
            = false;
    }

    this._caseSensitive = true;

//Convert string to hash table
    this.str2hashtable = function(key,cs){

        var _key    = (/,/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;
    }

//Get the code that needs to be converted
    this._codetxt        = code;

    if(typeof(syntax)=="undefined"){
        syntax = "";
    }

    this._deleteComment = false;
//Is it case sensitive
    this._caseSensitive    = true;
//Get keyword hash table
    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,el
se,do,var");
    this._function        = this.str2hashtable("function");
    this._var            = "var";
    this._beginBlock    = "{";
    this._endBlock        = "}";

    this._window        = this.str2hashtable
("alert,escape,unescape,document,parseInt,parseFloat");
//Get the built-in object hash table
    this._commonObjects = this.str2hashtable
("String,Number,Boolean,RegExp,Error,Math,Date,Object,Array,Gl
obal");
//Get split characters
    this._wordDelimiters= "  ,.?!;:\\/<>(){}[]\"'\r\n\t=+-
|*%@#$^&";
//Quoted characters
    this._quotation        = this.str2hashtable("\",'");
//Line comment characters
    this._lineComment    = "//";
//Escape characters
    this._escape        = "\\";
//Multi-line reference starts
    this._commentOn        = "/*";
// End of multi-line reference
    this._commentOff    = "*/";
    this._execute        = "eval";
//Quotation call characters
    this._call            = ".";
    this._varPause        = "=";
    this._varContinue    = ",";
//Number of variables
    this._varNum = 0;

        = function() {
        var codeArr = new Array();
        var word_index = 0;
        var htmlTxt = new Array();


//Get split character array (word participle)
        for (var i = 0; i < this._codetxt.length; i++) {

            if (this._wordDelimiters.indexOf
(this._codetxt.charAt(i)) ==-1) {        //The keyword cannot be found
                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                                                                                                                            �
var slash_star_comment_opened    = false;    //Multiple line notes
Release mark
var slash_slash_comment_opened   = false;    //Single-line note
Release mark
var line_num                                                           �
var quote_char
Tag type
        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;

//Display by split words and chunks
        for (var i=0; i <=word_index; i++){

//handle pointer reference separately
            if(call_opened&&typeof(codeArr[i])!="undefined"){
                if(call_string.length==0){
                    if((codeArr[i])){
                        call_string +=codeArr[i];
                    }else{
                        htmlTxt[] = "[\"" + 
(call_string) + "\"]";
                        if(codeArr[i]!=this._call){
                            htmlTxt[] = codeArr
[i];
                            call_opened = false;
                        }
                        call_string = "";
                    }
                } else {
                    if(!(codeArr[i])){
                        htmlTxt[] = "[\"" + 
(call_string) + "\"]";
                        if(codeArr[i]!=this._call){
                            htmlTxt[] = codeArr
[i];
                            call_opened = false;
                        }
                        call_string = "";
                    }else{
                        htmlTxt[] = "[\"" + 
(call_string) + "\"]";
                    }
                }
                continue;
            }

// Handle blank lines (due to escape)
            if(typeof(codeArr[i])=="undefined"||codeArr
[i].length==0){
                continue;
            } else if(codeArr[i]==" "){
                htmlTxt[] = " ";
            } else if(codeArr[i]=="\n"){
// Handle line breaks
            } else if (codeArr[i] == "\r"){
                slash_slash_comment_opened = false;
                quote_opened = false;
                var_opened = false;
                htmlTxt[] = "\r\n";
                line_num++;
//Processing parameter marks in function
            } else if (!slash_slash_comment_opened&&!
slash_star_comment_opened && !quote_opened &&
(codeArr[i])){
                htmlTxt[] = codeArr[i];
                function_opened = true;
            } else if (!slash_slash_comment_opened&&!
slash_star_comment_opened && !quote_opened &&codeArr[i]=="("){
                htmlTxt[] = 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[] = codeArr[i];
//Processing var a = new Class(),b=new Date(); Similar
question
                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[] = 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[] = 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[] = codeArr[i];
                var_pause = true;
            } else if(!slash_slash_comment_opened&&!
slash_star_comment_opened && !quote_opened &&codeArr[i]
==this._varContinue){
                htmlTxt[] = 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[] = 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[] = codeArr[i];
//Processing reference calls
            } else if (!slash_slash_comment_opened&&!
slash_star_comment_opened && !quote_opened &&codeArr[i]
==this._call){
//Document whether the first one after the quote (.) is a letter_$
                if(i<word_index-1){
                    if((codeArr[i+1])){
                        if(call_opened){
                            htmlTxt[] = 
(call_string);
                        }
                        call_opened = true;
                    }else{
                        htmlTxt[] = this._call;
                    }
                }else{
                    htmlTxt[] = this._call;
                }
//Processing keywords
            } else if (!slash_slash_comment_opened&&!
slash_star_comment_opened && !quote_opened && 
(codeArr[i])){
              htmlTxt[] = codeArr[i];
// Process the string after eval
            } else if (!slash_slash_comment_opened&&!
slash_star_comment_opened && !quote_opened && codeArr[i]
==this._execute){
              htmlTxt[] = "window[\"" + 
(codeArr[i]) + "\"]";
              execute_opened = true;
//Window built-in objects
            } else if (!slash_slash_comment_opened&&!
slash_star_comment_opened && !quote_opened && 
(codeArr[i])){
              htmlTxt[] = "window[\"" + 
(codeArr[i]) + "\"]";
// Handle ordinary objects
            } else if (!slash_slash_comment_opened&&!
slash_star_comment_opened && !quote_opened && 
(codeArr[i])){
                htmlTxt[] =  "window[\"" + 
(codeArr[i]) + "\"]";
//Processing double quotes (the quotation marks cannot be escaped characters)
            } else if (!slash_star_comment_opened&&!
slash_slash_comment_opened&&this._quotation.contains(codeArr
[i])){
                if (quote_opened){
//is the corresponding quotes
                    if(quote_char==codeArr[i]){
                        htmlTxt[] = codeArr[i];
                        quote_opened    = false;
                        quote_char        = "";
                    } else {
                        htmlTxt[] = 
(codeArr[i]);
                    }
                } else {
                    htmlTxt[] =  codeArr[i];
                    quote_opened    = true;
                    quote_char        = codeArr[i];
                }
//Processing escaped characters
            } else if(codeArr[i] == this._escape){
                htmlTxt[] = codeArr[i];
                if(i<word_index-1){
                    if(codeArr[i+1].charCodeAt(0)
>=32&&codeArr[i+1].charCodeAt(0)<=127){
                        htmlTxt[] = codeArr
[i+1].substr(0,1);
                        htmlTxt[] = 
(codeArr[i+1].substr(1));
                        i=i+1;
                    }
                }
//The beginning of processing multi-line comments
            } else if (!slash_slash_comment_opened && !
slash_star_comment_opened&&!quote_opened&&
(this._commentOn,codeArr,i)){
                slash_star_comment_opened = true;
                htmlTxt[] = this._commentOn;
                i = i + (this._commentOn);
//Processing single line comments
            } else if (!slash_slash_comment_opened && !
slash_star_comment_opened&&!quote_opened&&
(this._lineComment,codeArr,i)){
                slash_slash_comment_opened = true;
                if(!this._deleteComment){
                    htmlTxt[] =  
this._lineComment;
                }
                i = i + (this._lineComment);
//Processing ignorant words
            } else if (!slash_slash_comment_opened && !
slash_star_comment_opened&&!quote_opened&&
(this._ignore,codeArr,i)){
                slash_slash_comment_opened = true;
                htmlTxt[] = this._ignore;
                i = i + (this._ignore);
//The process of multi-line comments ends
            } else if (!quote_opened&&!
slash_slash_comment_opened&&
(this._commentOff,codeArr,i)){
                if (slash_star_comment_opened) {
                    slash_star_comment_opened = false;
                    if(!this._deleteComment){
                        htmlTxt[] =  
this._commentOff;
                    }
                    i = i + 
(this._commentOff);
                }
            } else {
//Not in the string
                if(!quote_opened){
//If it is not a comment
                    if(!slash_slash_comment_opened && !
slash_star_comment_opened){
//Not when defining variables
                        if(!var_opened){
                            if(
(cur_var_map,codeArr[i])==""){
                                htmlTxt[] = 
codeArr[i];
                            }else{
                                htmlTxt[] = 
(cur_var_map,codeArr[i]);
                            }
                        }else{
//Not when pausing the variable definition
                            if(var_pause){
                                if(
(cur_var_map,codeArr[i])==""){
                                    htmlTxt[] = 
codeArr[i];
                                }else{
                                    htmlTxt[] = 
(cur_var_map,codeArr[i]);
                                }
                            }else{
//Variables comply with the naming rules and (variables)
Before it is a space or tab character or comma such as: var a;var    a;var a,b; and if so
Function parameters, such as: function(a,b,c)
                                if((codeArr[i])&&
(i>0&&codeArr[i-1]==" "||codeArr[i-1]=="\t"||codeArr[i-1]
==this._varContinue||cur_var_map.isParameter)){
                                    var name = 
();
                                    cur_var_map.add(codeArr
[i],name);
                                    htmlTxt[] = 
(cur_var_map,codeArr[i]);
                                }else{
                                    htmlTxt[] = 
codeArr[i];
                                }
                            }
                        }
//In the comments
                    }else{
                        if(!this._deleteComment){
                            htmlTxt[] = codeArr
[i];
                        }
                    }
                }else{
                    if(execute_opened){
                        if(
(cur_var_map,codeArr[i])==""){
                            htmlTxt[] = codeArr
[i];
                        }else{
                            htmlTxt[] = 
(cur_var_map,codeArr[i]);
                        }
                    }else{
                        htmlTxt[] = 
(codeArr[i]);
                    }
                }
            }

        }

        return ("");
    }
 = function(str,code,index){

        if(typeof(str)!="undefined"&&>0){
            var cc = new Array();
            for(var i=index;i<index+;i++){
                cc[] = code[i];
            }
            var c = ("");
            if(this._caseSensitive){
                if(>=code[index].length&&
(str)==0){
                    return true;
                }
            }else{
                if(>=code
[index].length&&().indexOf(())
==0){
                    return true;
                }
            }
            return false;

        } else {
            return false;
        }
    }

     = function(val){
        return this._function.contains(this._caseSensitive?
val:());
    }

     = function(val) {
        return this._keywords.contains(this._caseSensitive?
val:());
    }

     = function(val) {
        return this._window.contains(this._caseSensitive?
val:());
    }

     = function(val) {
        return this._commonObjects.contains
(this._caseSensitive?val:());
    }

     = function(val){
        var count = 0;
        for(var i=0;i<;i++){
            if(this._wordDelimiters.indexOf((i))
>=0){
                count++;
            }
        }
        if(count>0){
            count=count-1;
        }
        return count;
    }

//Convert string to hexadecimal form
     = function(val){
        var str = new Array();
        for(var i=0;i<;i++){
            var c = (i);
            if(c>=0&&c<256){
                str[] = "\\x" + 
(i).toString(16);
            }else{
                str[] = "\\u" + 
(i).toString(16);
            }
        }
        return ("");
    }

//Get the random name of the variable
     = function(){
        var style = parseInt(()*4);
        var len = parseInt(()*9)+1;
        var n = [];

        this._varNum++;
        var c = 
"abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$";

        for(var i=0;i<len;i++){
            n[] = (parseInt(()
*54));
        }

        return ("")+this._varNum;

    }

//Does it comply with the first rule of variable naming
     = function(val){
        return /^[a-zA-Z_\$].*$/.test(val);
    }

//Translation variable, if the return is empty, this variable does not exist
     = function(node,key){
        if((key)){
            return (key);
        }

        var cn = ;
        while(cn!=null){
            if((key)){
                return (key);
            }
            cn = ;
        }
        return "";
    }


}

function doConfusion(o){
    var htmltxt = "";

    if (o == null){
        alert("domNode is null!");
        return;
    }

    var _codetxt = "";

    if(typeof(o)=="object"){
        switch(){
            case "TEXTAREA":
            case "INPUT":
                _codetxt = ;
                break;
            case "DIV":
            case "SPAN":
                _codetxt = ;
                break;
            default:
                _codetxt = ;
                break;
        }
    }else{
        _codetxt = o;
    }

    var _syn = new CLASS_CONFUSION(_codetxt);
    htmltxt = _syn.confusion();
    return  htmltxt;
}


function go()
{
    var code    = ("code").value;
    var xx      = new CLASS_CONFUSION(code);
    var a       = new Date();
    ("display").value = ();
alert("Total flowers:"+ (new Date().getTime()-())+
"ms");
}
//-->
</SCRIPT>