返回

在猿人学 第二题 JS 混淆逆向之旅

后端

【引言】

欢迎来到猿人学逆向系列的第二篇:JS混淆之动态cookie。在本文中,我们将一起探索JS混淆的奥秘,并深入剖析猿人学平台上第二题的挑战。我们将从混淆代码入手,逐步揭开它的工作原理,最终找到解决方案。如果您对JS逆向感兴趣,或者想在这个领域有所突破,那么这篇指南正是为您量身定制的。

【猿人学第二题:JS混淆】

猿人学第二题是一个JS混淆挑战。您将看到一段混淆过的JS代码,任务是逆向该代码并找到解决方案。混淆后的代码如下:

var _0x55b0 = ['260746iqpygO', '102068qqzsuc', 'cookie', 'match', '128528qVRkrX', 'fromCharCode', '633003EkBaIJ', '39065zDkQNT', '413663CyGNvI', 'location', '1173038NbQxms', 'apply', '780927QXpHMO', '321099NwCdDP', '408264YrGnvE', 'substring', '813248STWWUm', 'DOMParser', '287236jwmjap', '1642873jhqlWZ', '1351914HJHdZu', 'replace', '353658TGzITC', 'parseFromString'];
(function(_0x2e6e8f, _0x364f8c) {
    var _0x153504 = function(_0x5c3a1c) {
        while (--_0x5c3a1c) {
            _0x2e6e8f['push'](_0x2e6e8f['shift']());
        }
    };
    _0x153504(++_0x364f8c);
}(_0x55b0, 0x13d));
var _0x4d7a = function(_0x13659c, _0x3914d8) {
    _0x13659c = _0x13659c - 0x0;
    var _0x599a4f = _0x55b0[_0x13659c];
    if (_0x4d7a['gNBXTA'] === undefined) {
        (function() {
            var _0x58b7d6 = function() {
                var _0x1031c7;
                try {
                    _0x1031c7 = Function('return\x20(function()\x20' + '{}.constructor(\x22return\x20this\x22)(\x20)' + ');')();
                } catch (_0x4c6bb7) {
                    _0x1031c7 = window;
                }
                return _0x1031c7;
            };
            var _0x504210 = _0x58b7d6();
            var _0x34d835 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
            _0x504210['atob'] || (_0x504210['atob'] = function(_0x4199c1) {
                var _0x5563a3 = String(_0x4199c1)['replace'](/=+$/, '');
                for (var _0x421c80 = 0x0, _0x335330, _0x155bb9, _0x407b38 = 0x0, _0x429ac0 = ''; _0x155bb9 = _0x5563a3['charAt'](_0x407b38++); ~_0x155bb9 && (_0x335330 = _0x421c80 % 0x4 ? _0x335330 * 0x40 + _0x155bb9 : _0x155bb9,
                _0x421c80++ % 0x4) ? _0x429ac0 += String['fromCharCode'](0xff & _0x335330 >> (-0x2 * _0x421c80 & 0x6)) : 0x0) {
                    _0x155bb9 = _0x34d835['indexOf'](_0x155bb9);
                }
                return _0x429ac0;
            }
            );
        }());
        _0x4d7a['hlsfRB'] = function(_0x472c1a) {
            var _0x37212a = atob(_0x472c1a);
            var _0x37c61e = [];
            for (var _0x58711a = 0x0, _0x4928b5 = _0x37212a['length']; _0x58711a < _0x4928b5; _0x58711a++) {
                _0x37c61e += '%' + ('00' + _0x37212a['charCodeAt'](_0x58711a)['toString'](0x10))['slice'](-0x2);
            }
            return decodeURIComponent(_0x37c61e);
        }
        ;
        _0x4d7a['eCzgFO'] = {};
        _0x4d7a['gNBXTA'] = !![];
    }
    var _0x3799f5 = _0x4d7a['eCzgFO'][_0x13659c];
    if (_0x3799f5 === undefined) {
        _0x599a4f = _0x4d7a['hlsfRB'](_0x599a4f);
        _0x4d7a['eCzgFO'][_0x13659c] = _0x599a4f;
    } else {
        _0x599a4f = _0x3799f5;
    }
    return _0x599a4f;
};
var _0x21c5b8 = function() {
    var _0x13212f = !![];
    return function(_0x19715a, _0x5b37a3) {
        var _0x223433 = _0x13212f ? function() {
            if (_0x5b37a3) {
                var _0x55db94 = _0x5b37a3['apply'](_0x19715a, arguments);
                _0x5b37a3 = null;
                return _0x55db94;
            }
        }
        : function() {}
        ;
        _0x13212f = ![];
        return _0x223433;
    }
    ;
}();
var _0x31f15a = _0x21c5b8(this, function() {
    var _0x2984d9 = function() {};
    var _0x34d279 = typeof _0x2984d9 === 'function';
    if (_0x34d279) {
        return;
    } else {
        _0x2984d9 = 'nognaeif';
    }
    var _0x