对一段毫无人性的js代码解密过程

2018-05-01  本文已影响1131人  追梦3000

今天看到一个比较感兴趣的网站,js代码是加密的,大概长这样:

K0A@PFU162Z0FVUXLJJ1@K4.png

乍一看好像很乱的,格式化一下:
工具:
http://tool.oschina.net/codeformat/js/

结果:

var _0x2e4f = ['top', '#admui-navTabs', 'outerHeight', 'site-menu-sub-up', 'css', 'menubar', 'foldAlt', 'site', '$siteMenubar', '#admui-navTabs\x20.site-menu', 'length', '_bind', 'mouseenter.site.menu', '.site-menu-item', 'site-menubar-fold', '.has-sub', 'parent', '.site-menu', 'position', 'children', '.site-menu-sub', 'addClass', 'hover', 'mouseleave.site.menu', 'hasClass', 'max-height', 'removeClass', 'active', 'active.site.menu', '_expand', 'open', 'accordion', 'siblings', '.open', 'trigger', 'close.site.menu', '.site-menu-item.open', '_collapse', 'stopPropagation', 'click.site.menu\x20', '.site-menu-item\x20>\x20a', 'li.has-sub', 'parents', 'div.tab-pane', 'find', 'deactive.site.menu', '>\x20.site-menu-item\x20>\x20a', '.hover', 'scroll.site.menu', 'slideUp', 'collapsed.site.menu', 'slideDown', 'expanded.site.menu', 'li.open'];



(function(_0x55192b, _0x498c2e) {
    var _0x102467 = function(_0x331426) {
        while (--_0x331426) {
            _0x55192b['push'](_0x55192b['shift']());
        }
    };
    _0x102467(++_0x498c2e);
} (_0x2e4f, 0x181));




var _0xf2e4 = function(_0x26efac, _0x21ab8a) {
    _0x26efac = _0x26efac - 0x0;
    var _0x8482e4 = _0x2e4f[_0x26efac];
    return _0x8482e4;
}; 


(function(_0x402af8, _0xf196dc, _0x381d3f) {
    'use strict';
    _0x381d3f[_0xf2e4('0x0')]['menu'] = {
        'speed': 0xfa,
        'accordion': !![],
        'init': function() {
            var _0x2be77a = this[_0xf2e4('0x1')] = _0x381d3f(_0xf2e4('0x2'));
            if (!_0x2be77a[_0xf2e4('0x3')]) {
                return;
            }
            this[_0xf2e4('0x4')]();
        },
        '_bind': function() {
            var _0x166c7f = this,
            _0x450e8c = _0x381d3f('body'),
            _0x5e02eb = this['$siteMenubar'];
            _0x5e02eb['on'](_0xf2e4('0x5'), _0xf2e4('0x6'),
            function() {
                var _0xfcf980 = _0x381d3f(this),
                _0x5f483f = _0x450e8c['hasClass'](_0xf2e4('0x7'));
                if (_0x5f483f === !![] && _0xfcf980['is'](_0xf2e4('0x8')) && _0xfcf980[_0xf2e4('0x9')](_0xf2e4('0xa'))['length']) {
                    _0x166c7f[_0xf2e4('0xb')](_0xfcf980, _0xfcf980[_0xf2e4('0xc')](_0xf2e4('0xd')));
                }
                _0xfcf980[_0xf2e4('0xe')](_0xf2e4('0xf'));
            })['on'](_0xf2e4('0x10'), _0xf2e4('0x6'),
            function() {
                var _0x49f58c = _0x381d3f(this),
                _0x79d3da = _0x450e8c[_0xf2e4('0x11')](_0xf2e4('0x7'));
                if (_0x79d3da === !![] && _0x49f58c['is']('.has-sub') && _0x49f58c[_0xf2e4('0x9')](_0xf2e4('0xa'))[_0xf2e4('0x3')]) {
                    _0x49f58c[_0xf2e4('0xc')](_0xf2e4('0xd'))['css'](_0xf2e4('0x12'), '');
                }
                _0x49f58c[_0xf2e4('0x13')](_0xf2e4('0xf'));
            })['on']('deactive.site.menu', '.site-menu-item.active',
            function() {
                _0x381d3f(this)[_0xf2e4('0x13')](_0xf2e4('0x14'));
            })['on'](_0xf2e4('0x15'), _0xf2e4('0x6'),
            function() {
                _0x381d3f(this)[_0xf2e4('0xe')](_0xf2e4('0x14'));
            })['on']('open.site.menu', '.site-menu-item',
            function(_0x3a9d7b) {
                var _0x527737 = _0x381d3f(this);
                _0x166c7f[_0xf2e4('0x16')](_0x527737,
                function() {
                    _0x527737[_0xf2e4('0xe')](_0xf2e4('0x17'));
                });
                if (_0x166c7f[_0xf2e4('0x18')] && _0x527737['closest']('li.has-sub')['length'] <= 0x1) {
                    _0x527737[_0xf2e4('0x19')](_0xf2e4('0x1a'))[_0xf2e4('0x1b')](_0xf2e4('0x1c'));
                }
                _0x3a9d7b['stopPropagation']();
            })['on']('close.site.menu', _0xf2e4('0x1d'),
            function(_0x2f3f43) {
                var _0x340f25 = _0x381d3f(this);
                _0x166c7f[_0xf2e4('0x1e')](_0x340f25,
                function() {
                    _0x340f25['removeClass'](_0xf2e4('0x17'));
                });
                _0x2f3f43[_0xf2e4('0x1f')]();
            })['on'](_0xf2e4('0x20'), _0xf2e4('0x21'),
            function() {
                var _0x5a49c6 = _0x381d3f(this),
                _0x5ad640 = _0x5a49c6[_0xf2e4('0x9')]();
                if (_0x5ad640['is'](_0xf2e4('0x8'))) {
                    if (_0x5ad640['is'](_0xf2e4('0x1a'))) {
                        _0x5ad640[_0xf2e4('0x1b')](_0xf2e4('0x1c'));
                    } else {
                        _0x5ad640[_0xf2e4('0x1b')]('open.site.menu');
                    }
                } else {
                    _0x5a49c6['closest']('li')[_0xf2e4('0x19')](_0xf2e4('0x1a'))['trigger']('close.site.menu');
                    _0x5a49c6['closest'](_0xf2e4('0x22'))[_0xf2e4('0x19')](_0xf2e4('0x1a'))[_0xf2e4('0x1b')](_0xf2e4('0x1c'));
                    _0x5a49c6[_0xf2e4('0x23')](_0xf2e4('0x24'))[_0xf2e4('0x19')]()[_0xf2e4('0x25')]('li.open')[_0xf2e4('0x1b')](_0xf2e4('0x1c'));
                    _0x5e02eb['find']('li.active')[_0xf2e4('0x1b')](_0xf2e4('0x26'));
                    _0x5ad640['trigger'](_0xf2e4('0x15'));
                }
            })['on']('touchend.site.menu', _0xf2e4('0x27'),
            function() {
                var _0x272b8 = _0x381d3f(this)[_0xf2e4('0x9')](_0xf2e4('0x6')),
                _0x5b7d6a = _0x450e8c['hasClass'](_0xf2e4('0x7'));
                if (!_0x5b7d6a) {
                    return;
                }
                if (_0x272b8['is'](_0xf2e4('0x8')) && _0x272b8['parent'](_0xf2e4('0xa'))[_0xf2e4('0x3')]) {
                    _0x272b8[_0xf2e4('0x19')](_0xf2e4('0x28'))[_0xf2e4('0x13')](_0xf2e4('0xf'));
                    if (_0x272b8['is'](_0xf2e4('0x28'))) {
                        _0x272b8[_0xf2e4('0x13')]('hover');
                    } else {
                        _0x272b8[_0xf2e4('0xe')](_0xf2e4('0xf'));
                    }
                }
            })['on'](_0xf2e4('0x29'), '.site-menu-sub',
            function(_0x2ad0a2) {
                _0x2ad0a2['stopPropagation']();
            });
        },
        '_collapse': function(_0x5cff61, _0x416b52) {
            var _0x4a67bb = this;
            _0x5cff61[_0xf2e4('0xc')](_0xf2e4('0xd'))[_0xf2e4('0x2a')](_0x4a67bb['speed'],
            function() {
                if (_0x416b52) {
                    _0x416b52();
                }
                _0x4a67bb[_0xf2e4('0x1')][_0xf2e4('0x1b')](_0xf2e4('0x2b'));
            });
        },
        '_expand': function(_0x571b9e, _0x2089da) {
            var _0x2e5484 = this;
            _0x571b9e['children']('.site-menu-sub')[_0xf2e4('0x2c')](_0x2e5484['speed'],
            function() {
                if (_0x2089da) {
                    _0x2089da();
                }
                _0x2e5484[_0xf2e4('0x1')][_0xf2e4('0x1b')](_0xf2e4('0x2d'));
            });
        },
        'refresh': function() {
            var _0x145e12 = this[_0xf2e4('0x1')];
            _0x145e12[_0xf2e4('0x25')](_0xf2e4('0x2e'))[_0xf2e4('0x1b')](_0xf2e4('0x1c'));
            _0x145e12[_0xf2e4('0x25')]('li.active')['trigger']('deactive.site.menu');
        },
        'position': function(_0xe05021, _0x19970c) {
            var _0x392c8f = _0xe05021[_0xf2e4('0xb')]()[_0xf2e4('0x2f')],
            _0x2146e8 = _0x381d3f(_0xf2e4('0x30'))[_0xf2e4('0x31')](),
            _0x4083fa = _0xe05021[_0xf2e4('0x25')]('>\x20a')['outerHeight']();
            _0x19970c[_0xf2e4('0x13')](_0xf2e4('0x32'))[_0xf2e4('0x33')](_0xf2e4('0x12'), '');
            if (_0x392c8f > _0x2146e8 / 0x2) {
                _0x19970c[_0xf2e4('0xe')](_0xf2e4('0x32'));
                if (_0x381d3f[_0xf2e4('0x0')][_0xf2e4('0x34')]['foldAlt']) {
                    _0x392c8f = _0x392c8f - _0x4083fa;
                }
                _0x19970c['css'](_0xf2e4('0x12'), _0x392c8f + _0x4083fa);
            } else {
                if (_0x381d3f['site']['menubar'][_0xf2e4('0x35')]) {
                    _0x392c8f = _0x392c8f + _0x4083fa;
                }
                _0x19970c[_0xf2e4('0x13')](_0xf2e4('0x32'));
                _0x19970c[_0xf2e4('0x33')](_0xf2e4('0x12'), _0x2146e8 - _0x392c8f);
            }
        }
    };
} (window, document, jQuery));

静态分析下:

显然这个文件分成4部分,

那么先拿人类可以识别的标识符给替换一下这里的变量:

var symboTable = ['top', '#admui-navTabs', 'outerHeight', 'site-menu-sub-up', 'css', 'menubar', 'foldAlt', 'site', '$siteMenubar', '#admui-navTabs\x20.site-menu', 'length', '_bind', 'mouseenter.site.menu', '.site-menu-item', 'site-menubar-fold', '.has-sub', 'parent', '.site-menu', 'position', 'children', '.site-menu-sub', 'addClass', 'hover', 'mouseleave.site.menu', 'hasClass', 'max-height', 'removeClass', 'active', 'active.site.menu', '_expand', 'open', 'accordion', 'siblings', '.open', 'trigger', 'close.site.menu', '.site-menu-item.open', '_collapse', 'stopPropagation', 'click.site.menu\x20', '.site-menu-item\x20>\x20a', 'li.has-sub', 'parents', 'div.tab-pane', 'find', 'deactive.site.menu', '>\x20.site-menu-item\x20>\x20a', '.hover', 'scroll.site.menu', 'slideUp', 'collapsed.site.menu', 'slideDown', 'expanded.site.menu', 'li.open'];

 (function(symboTable, index) {
    var convert = function(index) {
        while (--index) {
            symboTable['push'](symboTable['shift']());
        }
    };
    convert(++index);
} (symboTable, 0x181));



var getSymbo = function(index, _0x21ab8a) {
    index = index - 0x0;
    var result = symboTable[index];
    return result;
};



 (function(document, window, jQuery) {
    'use strict';
    jQuery[getSymbo('0x0')]['menu'] = {
        'speed': 0xfa,
        'accordion': !![],
        'init': function() {
            var _0x2be77a = this[getSymbo('0x1')] = jQuery(getSymbo('0x2'));
            if (!_0x2be77a[getSymbo('0x3')]) {
                return;
            }
            this[getSymbo('0x4')]();
        },
        '_bind': function() {
            var _0x166c7f = this,
            _0x450e8c = jQuery('body'),
            _0x5e02eb = this['$siteMenubar'];
            _0x5e02eb['on'](getSymbo('0x5'), getSymbo('0x6'),
            function() {
                var _0xfcf980 = jQuery(this),
                _0x5f483f = _0x450e8c['hasClass'](getSymbo('0x7'));
                if (_0x5f483f === !![] && _0xfcf980['is'](getSymbo('0x8')) && _0xfcf980[getSymbo('0x9')](getSymbo('0xa'))['length']) {
                    _0x166c7f[getSymbo('0xb')](_0xfcf980, _0xfcf980[getSymbo('0xc')](getSymbo('0xd')));
                }
                _0xfcf980[getSymbo('0xe')](getSymbo('0xf'));
            })['on'](getSymbo('0x10'), getSymbo('0x6'),
            function() {
                var _0x49f58c = jQuery(this),
                _0x79d3da = _0x450e8c[getSymbo('0x11')](getSymbo('0x7'));
                if (_0x79d3da === !![] && _0x49f58c['is']('.has-sub') && _0x49f58c[getSymbo('0x9')](getSymbo('0xa'))[getSymbo('0x3')]) {
                    _0x49f58c[getSymbo('0xc')](getSymbo('0xd'))['css'](getSymbo('0x12'), '');
                }
                _0x49f58c[getSymbo('0x13')](getSymbo('0xf'));
            })['on']('deactive.site.menu', '.site-menu-item.active',
            function() {
                jQuery(this)[getSymbo('0x13')](getSymbo('0x14'));
            })['on'](getSymbo('0x15'), getSymbo('0x6'),
            function() {
                jQuery(this)[getSymbo('0xe')](getSymbo('0x14'));
            })['on']('open.site.menu', '.site-menu-item',
            function(_0x3a9d7b) {
                var _0x527737 = jQuery(this);
                _0x166c7f[getSymbo('0x16')](_0x527737,
                function() {
                    _0x527737[getSymbo('0xe')](getSymbo('0x17'));
                });
                if (_0x166c7f[getSymbo('0x18')] && _0x527737['closest']('li.has-sub')['length'] <= 0x1) {
                    _0x527737[getSymbo('0x19')](getSymbo('0x1a'))[getSymbo('0x1b')](getSymbo('0x1c'));
                }
                _0x3a9d7b['stopPropagation']();
            })['on']('close.site.menu', getSymbo('0x1d'),
            function(_0x2f3f43) {
                var _0x340f25 = jQuery(this);
                _0x166c7f[getSymbo('0x1e')](_0x340f25,
                function() {
                    _0x340f25['removeClass'](getSymbo('0x17'));
                });
                _0x2f3f43[getSymbo('0x1f')]();
            })['on'](getSymbo('0x20'), getSymbo('0x21'),
            function() {
                var _0x5a49c6 = jQuery(this),
                _0x5ad640 = _0x5a49c6[getSymbo('0x9')]();
                if (_0x5ad640['is'](getSymbo('0x8'))) {
                    if (_0x5ad640['is'](getSymbo('0x1a'))) {
                        _0x5ad640[getSymbo('0x1b')](getSymbo('0x1c'));
                    } else {
                        _0x5ad640[getSymbo('0x1b')]('open.site.menu');
                    }
                } else {
                    _0x5a49c6['closest']('li')[getSymbo('0x19')](getSymbo('0x1a'))['trigger']('close.site.menu');
                    _0x5a49c6['closest'](getSymbo('0x22'))[getSymbo('0x19')](getSymbo('0x1a'))[getSymbo('0x1b')](getSymbo('0x1c'));
                    _0x5a49c6[getSymbo('0x23')](getSymbo('0x24'))[getSymbo('0x19')]()[getSymbo('0x25')]('li.open')[getSymbo('0x1b')](getSymbo('0x1c'));
                    _0x5e02eb['find']('li.active')[getSymbo('0x1b')](getSymbo('0x26'));
                    _0x5ad640['trigger'](getSymbo('0x15'));
                }
            })['on']('touchend.site.menu', getSymbo('0x27'),
            function() {
                var _0x272b8 = jQuery(this)[getSymbo('0x9')](getSymbo('0x6')),
                _0x5b7d6a = _0x450e8c['hasClass'](getSymbo('0x7'));
                if (!_0x5b7d6a) {
                    return;
                }
                if (_0x272b8['is'](getSymbo('0x8')) && _0x272b8['parent'](getSymbo('0xa'))[getSymbo('0x3')]) {
                    _0x272b8[getSymbo('0x19')](getSymbo('0x28'))[getSymbo('0x13')](getSymbo('0xf'));
                    if (_0x272b8['is'](getSymbo('0x28'))) {
                        _0x272b8[getSymbo('0x13')]('hover');
                    } else {
                        _0x272b8[getSymbo('0xe')](getSymbo('0xf'));
                    }
                }
            })['on'](getSymbo('0x29'), '.site-menu-sub',
            function(_0x2ad0a2) {
                _0x2ad0a2['stopPropagation']();
            });
        },
        '_collapse': function(_0x5cff61, _0x416b52) {
            var _0x4a67bb = this;
            _0x5cff61[getSymbo('0xc')](getSymbo('0xd'))[getSymbo('0x2a')](_0x4a67bb['speed'],
            function() {
                if (_0x416b52) {
                    _0x416b52();
                }
                _0x4a67bb[getSymbo('0x1')][getSymbo('0x1b')](getSymbo('0x2b'));
            });
        },
        '_expand': function(_0x571b9e, _0x2089da) {
            var _0x2e5484 = this;
            _0x571b9e['children']('.site-menu-sub')[getSymbo('0x2c')](_0x2e5484['speed'],
            function() {
                if (_0x2089da) {
                    _0x2089da();
                }
                _0x2e5484[getSymbo('0x1')][getSymbo('0x1b')](getSymbo('0x2d'));
            });
        },
        'refresh': function() {
            var _0x145e12 = this[getSymbo('0x1')];
            _0x145e12[getSymbo('0x25')](getSymbo('0x2e'))[getSymbo('0x1b')](getSymbo('0x1c'));
            _0x145e12[getSymbo('0x25')]('li.active')['trigger']('deactive.site.menu');
        },
        'position': function(_0xe05021, _0x19970c) {
            var _0x392c8f = _0xe05021[getSymbo('0xb')]()[getSymbo('0x2f')],
            _0x2146e8 = jQuery(getSymbo('0x30'))[getSymbo('0x31')](),
            _0x4083fa = _0xe05021[getSymbo('0x25')]('>\x20a')['outerHeight']();
            _0x19970c[getSymbo('0x13')](getSymbo('0x32'))[getSymbo('0x33')](getSymbo('0x12'), '');
            if (_0x392c8f > _0x2146e8 / 0x2) {
                _0x19970c[getSymbo('0xe')](getSymbo('0x32'));
                if (jQuery[getSymbo('0x0')][getSymbo('0x34')]['foldAlt']) {
                    _0x392c8f = _0x392c8f - _0x4083fa;
                }
                _0x19970c['css'](getSymbo('0x12'), _0x392c8f + _0x4083fa);
            } else {
                if (jQuery['site']['menubar'][getSymbo('0x35')]) {
                    _0x392c8f = _0x392c8f + _0x4083fa;
                }
                _0x19970c[getSymbo('0x13')](getSymbo('0x32'));
                _0x19970c[getSymbo('0x33')](getSymbo('0x12'), _0x2146e8 - _0x392c8f);
            }
        }
    };
} (window, document, jQuery));

那么到这里实际上已经很清晰了,首先定义一个符号表,把所有符号保存起来,然后打乱符号表的顺序,在逻辑中使用函数获取实际符号。
在做一次替换:

这里得写个程序了:
工具:
http://google.github.io/traceur-compiler/demo/repl.html

代码:

var symboTable = ['top', '#admui-navTabs', 'outerHeight', 'site-menu-sub-up', 'css', 'menubar', 'foldAlt', 'site', '$siteMenubar', '#admui-navTabs\x20.site-menu', 'length', '_bind', 'mouseenter.site.menu', '.site-menu-item', 'site-menubar-fold', '.has-sub', 'parent', '.site-menu', 'position', 'children', '.site-menu-sub', 'addClass', 'hover', 'mouseleave.site.menu', 'hasClass', 'max-height', 'removeClass', 'active', 'active.site.menu', '_expand', 'open', 'accordion', 'siblings', '.open', 'trigger', 'close.site.menu', '.site-menu-item.open', '_collapse', 'stopPropagation', 'click.site.menu\x20', '.site-menu-item\x20>\x20a', 'li.has-sub', 'parents', 'div.tab-pane', 'find', 'deactive.site.menu', '>\x20.site-menu-item\x20>\x20a', '.hover', 'scroll.site.menu', 'slideUp', 'collapsed.site.menu', 'slideDown', 'expanded.site.menu', 'li.open'];

 (function(symboTable, index) {
    var convert = function(index) {
        while (--index) {
            symboTable['push'](symboTable['shift']());
        }
    };
    convert(++index);
} (symboTable, 0x181));



var getSymbo = function(index, _0x21ab8a) {
    index = index - 0x0;
    var result = symboTable[index];
    return result;
};

var str = `

 
 (function(document, window, jQuery) {
    'use strict';
    jQuery[getSymbo('0x0')]['menu'] = {
        'speed': 0xfa,
        'accordion': !![],
        'init': function() {
            var _0x2be77a = this[getSymbo('0x1')] = jQuery(getSymbo('0x2'));
            if (!_0x2be77a[getSymbo('0x3')]) {
                return;
            }
            this[getSymbo('0x4')]();
        },
        '_bind': function() {
            var _0x166c7f = this,
            _0x450e8c = jQuery('body'),
            _0x5e02eb = this['$siteMenubar'];
            _0x5e02eb['on'](getSymbo('0x5'), getSymbo('0x6'),
            function() {
                var _0xfcf980 = jQuery(this),
                _0x5f483f = _0x450e8c['hasClass'](getSymbo('0x7'));
                if (_0x5f483f === !![] && _0xfcf980['is'](getSymbo('0x8')) && _0xfcf980[getSymbo('0x9')](getSymbo('0xa'))['length']) {
                    _0x166c7f[getSymbo('0xb')](_0xfcf980, _0xfcf980[getSymbo('0xc')](getSymbo('0xd')));
                }
                _0xfcf980[getSymbo('0xe')](getSymbo('0xf'));
            })['on'](getSymbo('0x10'), getSymbo('0x6'),
            function() {
                var _0x49f58c = jQuery(this),
                _0x79d3da = _0x450e8c[getSymbo('0x11')](getSymbo('0x7'));
                if (_0x79d3da === !![] && _0x49f58c['is']('.has-sub') && _0x49f58c[getSymbo('0x9')](getSymbo('0xa'))[getSymbo('0x3')]) {
                    _0x49f58c[getSymbo('0xc')](getSymbo('0xd'))['css'](getSymbo('0x12'), '');
                }
                _0x49f58c[getSymbo('0x13')](getSymbo('0xf'));
            })['on']('deactive.site.menu', '.site-menu-item.active',
            function() {
                jQuery(this)[getSymbo('0x13')](getSymbo('0x14'));
            })['on'](getSymbo('0x15'), getSymbo('0x6'),
            function() {
                jQuery(this)[getSymbo('0xe')](getSymbo('0x14'));
            })['on']('open.site.menu', '.site-menu-item',
            function(_0x3a9d7b) {
                var _0x527737 = jQuery(this);
                _0x166c7f[getSymbo('0x16')](_0x527737,
                function() {
                    _0x527737[getSymbo('0xe')](getSymbo('0x17'));
                });
                if (_0x166c7f[getSymbo('0x18')] && _0x527737['closest']('li.has-sub')['length'] <= 0x1) {
                    _0x527737[getSymbo('0x19')](getSymbo('0x1a'))[getSymbo('0x1b')](getSymbo('0x1c'));
                }
                _0x3a9d7b['stopPropagation']();
            })['on']('close.site.menu', getSymbo('0x1d'),
            function(_0x2f3f43) {
                var _0x340f25 = jQuery(this);
                _0x166c7f[getSymbo('0x1e')](_0x340f25,
                function() {
                    _0x340f25['removeClass'](getSymbo('0x17'));
                });
                _0x2f3f43[getSymbo('0x1f')]();
            })['on'](getSymbo('0x20'), getSymbo('0x21'),
            function() {
                var _0x5a49c6 = jQuery(this),
                _0x5ad640 = _0x5a49c6[getSymbo('0x9')]();
                if (_0x5ad640['is'](getSymbo('0x8'))) {
                    if (_0x5ad640['is'](getSymbo('0x1a'))) {
                        _0x5ad640[getSymbo('0x1b')](getSymbo('0x1c'));
                    } else {
                        _0x5ad640[getSymbo('0x1b')]('open.site.menu');
                    }
                } else {
                    _0x5a49c6['closest']('li')[getSymbo('0x19')](getSymbo('0x1a'))['trigger']('close.site.menu');
                    _0x5a49c6['closest'](getSymbo('0x22'))[getSymbo('0x19')](getSymbo('0x1a'))[getSymbo('0x1b')](getSymbo('0x1c'));
                    _0x5a49c6[getSymbo('0x23')](getSymbo('0x24'))[getSymbo('0x19')]()[getSymbo('0x25')]('li.open')[getSymbo('0x1b')](getSymbo('0x1c'));
                    _0x5e02eb['find']('li.active')[getSymbo('0x1b')](getSymbo('0x26'));
                    _0x5ad640['trigger'](getSymbo('0x15'));
                }
            })['on']('touchend.site.menu', getSymbo('0x27'),
            function() {
                var _0x272b8 = jQuery(this)[getSymbo('0x9')](getSymbo('0x6')),
                _0x5b7d6a = _0x450e8c['hasClass'](getSymbo('0x7'));
                if (!_0x5b7d6a) {
                    return;
                }
                if (_0x272b8['is'](getSymbo('0x8')) && _0x272b8['parent'](getSymbo('0xa'))[getSymbo('0x3')]) {
                    _0x272b8[getSymbo('0x19')](getSymbo('0x28'))[getSymbo('0x13')](getSymbo('0xf'));
                    if (_0x272b8['is'](getSymbo('0x28'))) {
                        _0x272b8[getSymbo('0x13')]('hover');
                    } else {
                        _0x272b8[getSymbo('0xe')](getSymbo('0xf'));
                    }
                }
            })['on'](getSymbo('0x29'), '.site-menu-sub',
            function(_0x2ad0a2) {
                _0x2ad0a2['stopPropagation']();
            });
        },
        '_collapse': function(_0x5cff61, _0x416b52) {
            var _0x4a67bb = this;
            _0x5cff61[getSymbo('0xc')](getSymbo('0xd'))[getSymbo('0x2a')](_0x4a67bb['speed'],
            function() {
                if (_0x416b52) {
                    _0x416b52();
                }
                _0x4a67bb[getSymbo('0x1')][getSymbo('0x1b')](getSymbo('0x2b'));
            });
        },
        '_expand': function(_0x571b9e, _0x2089da) {
            var _0x2e5484 = this;
            _0x571b9e['children']('.site-menu-sub')[getSymbo('0x2c')](_0x2e5484['speed'],
            function() {
                if (_0x2089da) {
                    _0x2089da();
                }
                _0x2e5484[getSymbo('0x1')][getSymbo('0x1b')](getSymbo('0x2d'));
            });
        },
        'refresh': function() {
            var _0x145e12 = this[getSymbo('0x1')];
            _0x145e12[getSymbo('0x25')](getSymbo('0x2e'))[getSymbo('0x1b')](getSymbo('0x1c'));
            _0x145e12[getSymbo('0x25')]('li.active')['trigger']('deactive.site.menu');
        },
        'position': function(_0xe05021, _0x19970c) {
            var _0x392c8f = _0xe05021[getSymbo('0xb')]()[getSymbo('0x2f')],
            _0x2146e8 = jQuery(getSymbo('0x30'))[getSymbo('0x31')](),
            _0x4083fa = _0xe05021[getSymbo('0x25')]('>\x20a')['outerHeight']();
            _0x19970c[getSymbo('0x13')](getSymbo('0x32'))[getSymbo('0x33')](getSymbo('0x12'), '');
            if (_0x392c8f > _0x2146e8 / 0x2) {
                _0x19970c[getSymbo('0xe')](getSymbo('0x32'));
                if (jQuery[getSymbo('0x0')][getSymbo('0x34')]['foldAlt']) {
                    _0x392c8f = _0x392c8f - _0x4083fa;
                }
                _0x19970c['css'](getSymbo('0x12'), _0x392c8f + _0x4083fa);
            } else {
                if (jQuery['site']['menubar'][getSymbo('0x35')]) {
                    _0x392c8f = _0x392c8f + _0x4083fa;
                }
                _0x19970c[getSymbo('0x13')](getSymbo('0x32'));
                _0x19970c[getSymbo('0x33')](getSymbo('0x12'), _0x2146e8 - _0x392c8f);
            }
        }
    };
} (window, document, jQuery));
`;




for(var i=0; i < symboTable.length; ++i){
  var replace = `getSymbo\\('0x${i.toString(16)}'\\)`;
 str = str.replace(new RegExp(replace,"g"),`'${symboTable[i]}'`);
}
                    
console.log(str);
                  

其实就是做了一个替换

最后结果:


 (function(document, window, jQuery) {
    'use strict';
    jQuery['site']['menu'] = {
        'speed': 0xfa,
        'accordion': !![],
        'init': function() {
            var _0x2be77a = this['$siteMenubar'] = jQuery('#admui-navTabs .site-menu');
            if (!_0x2be77a['length']) {
                return;
            }
            this['_bind']();
        },
        '_bind': function() {
            var _0x166c7f = this,
            _0x450e8c = jQuery('body'),
            _0x5e02eb = this['$siteMenubar'];
            _0x5e02eb['on']('mouseenter.site.menu', '.site-menu-item',
            function() {
                var _0xfcf980 = jQuery(this),
                _0x5f483f = _0x450e8c['hasClass']('site-menubar-fold');
                if (_0x5f483f === !![] && _0xfcf980['is']('.has-sub') && _0xfcf980['parent']('.site-menu')['length']) {
                    _0x166c7f['position'](_0xfcf980, _0xfcf980['children']('.site-menu-sub'));
                }
                _0xfcf980['addClass']('hover');
            })['on']('mouseleave.site.menu', '.site-menu-item',
            function() {
                var _0x49f58c = jQuery(this),
                _0x79d3da = _0x450e8c['hasClass']('site-menubar-fold');
                if (_0x79d3da === !![] && _0x49f58c['is']('.has-sub') && _0x49f58c['parent']('.site-menu')['length']) {
                    _0x49f58c['children']('.site-menu-sub')['css']('max-height', '');
                }
                _0x49f58c['removeClass']('hover');
            })['on']('deactive.site.menu', '.site-menu-item.active',
            function() {
                jQuery(this)['removeClass']('active');
            })['on']('active.site.menu', '.site-menu-item',
            function() {
                jQuery(this)['addClass']('active');
            })['on']('open.site.menu', '.site-menu-item',
            function(_0x3a9d7b) {
                var _0x527737 = jQuery(this);
                _0x166c7f['_expand'](_0x527737,
                function() {
                    _0x527737['addClass']('open');
                });
                if (_0x166c7f['accordion'] && _0x527737['closest']('li.has-sub')['length'] <= 0x1) {
                    _0x527737['siblings']('.open')['trigger']('close.site.menu');
                }
                _0x3a9d7b['stopPropagation']();
            })['on']('close.site.menu', '.site-menu-item.open',
            function(_0x2f3f43) {
                var _0x340f25 = jQuery(this);
                _0x166c7f['_collapse'](_0x340f25,
                function() {
                    _0x340f25['removeClass']('open');
                });
                _0x2f3f43['stopPropagation']();
            })['on']('click.site.menu ', '.site-menu-item > a',
            function() {
                var _0x5a49c6 = jQuery(this),
                _0x5ad640 = _0x5a49c6['parent']();
                if (_0x5ad640['is']('.has-sub')) {
                    if (_0x5ad640['is']('.open')) {
                        _0x5ad640['trigger']('close.site.menu');
                    } else {
                        _0x5ad640['trigger']('open.site.menu');
                    }
                } else {
                    _0x5a49c6['closest']('li')['siblings']('.open')['trigger']('close.site.menu');
                    _0x5a49c6['closest']('li.has-sub')['siblings']('.open')['trigger']('close.site.menu');
                    _0x5a49c6['parents']('div.tab-pane')['siblings']()['find']('li.open')['trigger']('close.site.menu');
                    _0x5e02eb['find']('li.active')['trigger']('deactive.site.menu');
                    _0x5ad640['trigger']('active.site.menu');
                }
            })['on']('touchend.site.menu', '> .site-menu-item > a',
            function() {
                var _0x272b8 = jQuery(this)['parent']('.site-menu-item'),
                _0x5b7d6a = _0x450e8c['hasClass']('site-menubar-fold');
                if (!_0x5b7d6a) {
                    return;
                }
                if (_0x272b8['is']('.has-sub') && _0x272b8['parent']('.site-menu')['length']) {
                    _0x272b8['siblings']('.hover')['removeClass']('hover');
                    if (_0x272b8['is']('.hover')) {
                        _0x272b8['removeClass']('hover');
                    } else {
                        _0x272b8['addClass']('hover');
                    }
                }
            })['on']('scroll.site.menu', '.site-menu-sub',
            function(_0x2ad0a2) {
                _0x2ad0a2['stopPropagation']();
            });
        },
        '_collapse': function(_0x5cff61, _0x416b52) {
            var _0x4a67bb = this;
            _0x5cff61['children']('.site-menu-sub')['slideUp'](_0x4a67bb['speed'],
            function() {
                if (_0x416b52) {
                    _0x416b52();
                }
                _0x4a67bb['$siteMenubar']['trigger']('collapsed.site.menu');
            });
        },
        '_expand': function(_0x571b9e, _0x2089da) {
            var _0x2e5484 = this;
            _0x571b9e['children']('.site-menu-sub')['slideDown'](_0x2e5484['speed'],
            function() {
                if (_0x2089da) {
                    _0x2089da();
                }
                _0x2e5484['$siteMenubar']['trigger']('expanded.site.menu');
            });
        },
        'refresh': function() {
            var _0x145e12 = this['$siteMenubar'];
            _0x145e12['find']('li.open')['trigger']('close.site.menu');
            _0x145e12['find']('li.active')['trigger']('deactive.site.menu');
        },
        'position': function(_0xe05021, _0x19970c) {
            var _0x392c8f = _0xe05021['position']()['top'],
            _0x2146e8 = jQuery('#admui-navTabs')['outerHeight'](),
            _0x4083fa = _0xe05021['find']('> a')['outerHeight']();
            _0x19970c['removeClass']('site-menu-sub-up')['css']('max-height', '');
            if (_0x392c8f > _0x2146e8 / 0x2) {
                _0x19970c['addClass']('site-menu-sub-up');
                if (jQuery['site']['menubar']['foldAlt']) {
                    _0x392c8f = _0x392c8f - _0x4083fa;
                }
                _0x19970c['css']('max-height', _0x392c8f + _0x4083fa);
            } else {
                if (jQuery['site']['menubar']['foldAlt']) {
                    _0x392c8f = _0x392c8f + _0x4083fa;
                }
                _0x19970c['removeClass']('site-menu-sub-up');
                _0x19970c['css']('max-height', _0x2146e8 - _0x392c8f);
            }
        }
    };
} (window, document, jQuery));

当然这里可以在做一次替换,将 xxx'func'的形式替换为 xxx.func(),这里可以使用正则表达式替换:
在sublime中打开正则表达式替换:
要替换的:([a-zA-Z0-9_()]+)['([a-zA-Z0-9_]+)'](
替换为:$1.$2(

(function(document, window, jQuery) {
    'use strict';
    jQuery['site']['menu'] = {
        'speed': 0xfa,
        'accordion': !![],
        'init': function() {
            var _0x2be77a = this['$siteMenubar'] = jQuery('#admui-navTabs .site-menu');
            if (!_0x2be77a['length']) {
                return;
            }
            this._bind();
        },
        '_bind': function() {
            var _0x166c7f = this,
            _0x450e8c = jQuery('body'),
            _0x5e02eb = this['$siteMenubar'];
            _0x5e02eb.on('mouseenter.site.menu', '.site-menu-item',
            function() {
                var _0xfcf980 = jQuery(this),
                _0x5f483f = _0x450e8c.hasClass('site-menubar-fold');
                if (_0x5f483f === !![] && _0xfcf980.is('.has-sub') && _0xfcf980.parent('.site-menu')['length']) {
                    _0x166c7f.position(_0xfcf980, _0xfcf980.children('.site-menu-sub'));
                }
                _0xfcf980.addClass('hover');
            }).on('mouseleave.site.menu', '.site-menu-item',
            function() {
                var _0x49f58c = jQuery(this),
                _0x79d3da = _0x450e8c.hasClass('site-menubar-fold');
                if (_0x79d3da === !![] && _0x49f58c.is('.has-sub') && _0x49f58c.parent('.site-menu')['length']) {
                    _0x49f58c.children('.site-menu-sub').css('max-height', '');
                }
                _0x49f58c.removeClass('hover');
            }).on('deactive.site.menu', '.site-menu-item.active',
            function() {
                jQuery(this).removeClass('active');
            }).on('active.site.menu', '.site-menu-item',
            function() {
                jQuery(this).addClass('active');
            }).on('open.site.menu', '.site-menu-item',
            function(_0x3a9d7b) {
                var _0x527737 = jQuery(this);
                _0x166c7f._expand(_0x527737,
                function() {
                    _0x527737.addClass('open');
                });
                if (_0x166c7f['accordion'] && _0x527737.closest('li.has-sub')['length'] <= 0x1) {
                    _0x527737.siblings('.open').trigger('close.site.menu');
                }
                _0x3a9d7b.stopPropagation();
            }).on('close.site.menu', '.site-menu-item.open',
            function(_0x2f3f43) {
                var _0x340f25 = jQuery(this);
                _0x166c7f._collapse(_0x340f25,
                function() {
                    _0x340f25.removeClass('open');
                });
                _0x2f3f43.stopPropagation();
            }).on('click.site.menu ', '.site-menu-item > a',
            function() {
                var _0x5a49c6 = jQuery(this),
                _0x5ad640 = _0x5a49c6.parent();
                if (_0x5ad640.is('.has-sub')) {
                    if (_0x5ad640.is('.open')) {
                        _0x5ad640.trigger('close.site.menu');
                    } else {
                        _0x5ad640.trigger('open.site.menu');
                    }
                } else {
                    _0x5a49c6.closest('li').siblings('.open').trigger('close.site.menu');
                    _0x5a49c6.closest('li.has-sub').siblings('.open').trigger('close.site.menu');
                    _0x5a49c6.parents('div.tab-pane').siblings().find('li.open').trigger('close.site.menu');
                    _0x5e02eb.find('li.active').trigger('deactive.site.menu');
                    _0x5ad640.trigger('active.site.menu');
                }
            }).on('touchend.site.menu', '> .site-menu-item > a',
            function() {
                var _0x272b8 = jQuery(this).parent('.site-menu-item'),
                _0x5b7d6a = _0x450e8c.hasClass('site-menubar-fold');
                if (!_0x5b7d6a) {
                    return;
                }
                if (_0x272b8.is('.has-sub') && _0x272b8.parent('.site-menu')['length']) {
                    _0x272b8.siblings('.hover').removeClass('hover');
                    if (_0x272b8.is('.hover')) {
                        _0x272b8.removeClass('hover');
                    } else {
                        _0x272b8.addClass('hover');
                    }
                }
            }).on('scroll.site.menu', '.site-menu-sub',
            function(_0x2ad0a2) {
                _0x2ad0a2.stopPropagation();
            });
        },
        '_collapse': function(_0x5cff61, _0x416b52) {
            var _0x4a67bb = this;
            _0x5cff61.children('.site-menu-sub').slideUp(_0x4a67bb['speed'],
            function() {
                if (_0x416b52) {
                    _0x416b52();
                }
                _0x4a67bb['$siteMenubar']['trigger']('collapsed.site.menu');
            });
        },
        '_expand': function(_0x571b9e, _0x2089da) {
            var _0x2e5484 = this;
            _0x571b9e.children('.site-menu-sub').slideDown(_0x2e5484['speed'],
            function() {
                if (_0x2089da) {
                    _0x2089da();
                }
                _0x2e5484['$siteMenubar']['trigger']('expanded.site.menu');
            });
        },
        'refresh': function() {
            var _0x145e12 = this['$siteMenubar'];
            _0x145e12.find('li.open').trigger('close.site.menu');
            _0x145e12.find('li.active').trigger('deactive.site.menu');
        },
        'position': function(_0xe05021, _0x19970c) {
            var _0x392c8f = _0xe05021.position()['top'],
            _0x2146e8 = jQuery('#admui-navTabs').outerHeight(),
            _0x4083fa = _0xe05021.find('> a').outerHeight();
            _0x19970c.removeClass('site-menu-sub-up').css('max-height', '');
            if (_0x392c8f > _0x2146e8 / 0x2) {
                _0x19970c.addClass('site-menu-sub-up');
                if (jQuery['site']['menubar']['foldAlt']) {
                    _0x392c8f = _0x392c8f - _0x4083fa;
                }
                _0x19970c.css('max-height', _0x392c8f + _0x4083fa);
            } else {
                if (jQuery['site']['menubar']['foldAlt']) {
                    _0x392c8f = _0x392c8f + _0x4083fa;
                }
                _0x19970c.removeClass('site-menu-sub-up');
                _0x19970c.css('max-height', _0x2146e8 - _0x392c8f);
            }
        }
    };
} (window, document, jQuery));

这样是不是好多了?如果要再进一步翻译的话,就需要看懂源码,然后将所有的_0x 形式替换为有意义的名字了,相信也不会太困难。

好了本文就到这里了。

上一篇下一篇

猜你喜欢

热点阅读