Canvas 풀이

2021. 6. 19. 14:29Hack The Box

728x90

문제 제목&문제 정보
웹사이트1
웹사이트2

(function(_0x173c04, _0x4e0b6e) {
    var _0x20fedb = function(_0x2548ec) {
            while (--_0x2548ec) {
                _0x173c04['\x70\x75\x73\x68'](_0x173c04['\x73\x68\x69\x66\x74']());
            }
        },
        _0x544f36 = function() {
            var _0x4c641a = {
                    '\x64\x61\x74\x61': {
                        '\x6b\x65\x79': '\x63\x6f\x6f\x6b\x69\x65',
                        '\x76\x61\x6c\x75\x65': '\x74\x69\x6d\x65\x6f\x75\x74'
                    },
                    '\x73\x65\x74\x43\x6f\x6f\x6b\x69\x65': function(_0x35c856, _0x13e7c5, _0x58186, _0xf5e7a4) {
                        _0xf5e7a4 = _0xf5e7a4 || {};
                        var _0x120843 = _0x13e7c5 + '\x3d' + _0x58186,
                            _0x3f3096 = 0x0;
                        for (var _0x159a78 = 0x0, _0x1307a5 = _0x35c856['\x6c\x65\x6e\x67\x74\x68']; _0x159a78 < _0x1307a5; _0x159a78++) {
                            var _0x2316f9 = _0x35c856[_0x159a78];
                            _0x120843 += '\x3b\x20' + _0x2316f9;
                            var _0x22cb86 = _0x35c856[_0x2316f9];
                            _0x35c856['\x70\x75\x73\x68'](_0x22cb86), _0x1307a5 = _0x35c856['\x6c\x65\x6e\x67\x74\x68'], _0x22cb86 !== !![] && (_0x120843 += '\x3d' + _0x22cb86);
                        }
                        _0xf5e7a4['\x63\x6f\x6f\x6b\x69\x65'] = _0x120843;
                    },
                    '\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65': function() {
                        return '\x64\x65\x76';
                    },
                    '\x67\x65\x74\x43\x6f\x6f\x6b\x69\x65': function(_0x589958, _0x2bfede) {
                        _0x589958 = _0x589958 || function(_0x168695) {
                            return _0x168695;
                        };
                        var _0x4b3aae = _0x589958(new RegExp('\x28\x3f\x3a\x5e\x7c\x3b\x20\x29' + _0x2bfede['\x72\x65\x70\x6c\x61\x63\x65'](/([.$?*|{}()[]\/+^])/g, '\x24\x31') + '\x3d\x28\x5b\x5e\x3b\x5d\x2a\x29')),
                            _0x43e750 = function(_0x387366, _0x8c72e7) {
                                _0x387366(++_0x8c72e7);
                            };
                        return _0x43e750(_0x20fedb, _0x4e0b6e), _0x4b3aae ? decodeURIComponent(_0x4b3aae[0x1]) : undefined;
                    }
                },
                _0x1d30b3 = function() {
                    var _0x23ed4e = new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');
                    return _0x23ed4e['\x74\x65\x73\x74'](_0x4c641a['\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65']['\x74\x6f\x53\x74\x72\x69\x6e\x67']());
                };
            _0x4c641a['\x75\x70\x64\x61\x74\x65\x43\x6f\x6f\x6b\x69\x65'] = _0x1d30b3;
            var _0x488f18 = '';
            var _0x4ac08e = _0x4c641a['\x75\x70\x64\x61\x74\x65\x43\x6f\x6f\x6b\x69\x65']();
            if (!_0x4ac08e) _0x4c641a['\x73\x65\x74\x43\x6f\x6f\x6b\x69\x65'](['\x2a'], '\x63\x6f\x75\x6e\x74\x65\x72', 0x1);
            else _0x4ac08e ? _0x488f18 = _0x4c641a['\x67\x65\x74\x43\x6f\x6f\x6b\x69\x65'](null, '\x63\x6f\x75\x6e\x74\x65\x72') : _0x4c641a['\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65']();
        };
    _0x544f36();
}(_0x4e0b, 0x182));
var _0x20fe = function(_0x173c04, _0x4e0b6e) {
    _0x173c04 = _0x173c04 - 0x0;
    var _0x20fedb = _0x4e0b[_0x173c04];
    return _0x20fedb;
};
var _0x35c856 = function() {
        var _0x58186 = !![];
        return function(_0xf5e7a4, _0x120843) {
            var _0x3f3096 = _0x58186 ? function() {
                var _0x228e0e = _0x20fe;
                if (_0x120843) {
                    var _0x159a78 = _0x120843[_0x228e0e('\x30\x78\x31\x31')](_0xf5e7a4, arguments);
                    return _0x120843 = null, _0x159a78;
                }
            } : function() {};
            return _0x58186 = ![], _0x3f3096;
        };
    }(),
    _0x4ac08e = _0x35c856(this, function() {
        var _0x1307a5 = function() {
            var _0x257462 = _0x20fe,
                _0x2316f9 = _0x1307a5[_0x257462('\x30\x78\x31')](_0x257462('\x30\x78\x34'))()[_0x257462('\x30\x78\x31')]('\x5e\x28\x5b\x5e\x20\x5d\x2b\x28\x20\x2b\x5b\x5e\x20\x5d\x2b\x29\x2b\x29\x2b\x5b\x5e\x20\x5d\x7d');
            return !_0x2316f9['\x74\x65\x73\x74'](_0x4ac08e);
        };
        return _0x1307a5();
    });
_0x4ac08e();
var _0x4c641a = function() {
        var _0x22cb86 = !![];
        return function(_0x589958, _0x2bfede) {
            var _0x4b3aae = _0x22cb86 ? function() {
                var _0x13eb7f = _0x20fe;
                if (_0x2bfede) {
                    var _0x43e750 = _0x2bfede[_0x13eb7f('\x30\x78\x31\x31')](_0x589958, arguments);
                    return _0x2bfede = null, _0x43e750;
                }
            } : function() {};
            return _0x22cb86 = ![], _0x4b3aae;
        };
    }(),
    _0x2548ec = _0x4c641a(this, function() {
        var _0x4cb6ce = _0x20fe,
            _0x168695;
        try {
            var _0x387366 = Function('\x72\x65\x74\x75\x72\x6e\x20\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x28\x29\x20' + _0x4cb6ce('\x30\x78\x31\x34') + '\x29\x3b');
            _0x168695 = _0x387366();
        } catch (_0x57823f) {
            _0x168695 = window;
        }
        var _0x8c72e7 = _0x168695[_0x4cb6ce('\x30\x78\x63')] = _0x168695[_0x4cb6ce('\x30\x78\x63')] || {},
            _0x23ed4e = [_0x4cb6ce('\x30\x78\x65'), '\x77\x61\x72\x6e', '\x69\x6e\x66\x6f', _0x4cb6ce('\x30\x78\x38'), '\x65\x78\x63\x65\x70\x74\x69\x6f\x6e', _0x4cb6ce('\x30\x78\x35'), _0x4cb6ce('\x30\x78\x33')];
        for (var _0x3d84c2 = 0x0; _0x3d84c2 < _0x23ed4e[_0x4cb6ce('\x30\x78\x36')]; _0x3d84c2++) {
            var _0x3aed9e = _0x4c641a[_0x4cb6ce('\x30\x78\x31')][_0x4cb6ce('\x30\x78\x31\x33')]['\x62\x69\x6e\x64'](_0x4c641a),
                _0x57c30b = _0x23ed4e[_0x3d84c2],
                _0x526aea = _0x8c72e7[_0x57c30b] || _0x3aed9e;
            _0x3aed9e[_0x4cb6ce('\x30\x78\x37')] = _0x4c641a[_0x4cb6ce('\x30\x78\x66')](_0x4c641a), _0x3aed9e['\x74\x6f\x53\x74\x72\x69\x6e\x67'] = _0x526aea[_0x4cb6ce('\x30\x78\x61')][_0x4cb6ce('\x30\x78\x66')](_0x526aea), _0x8c72e7[_0x57c30b] = _0x3aed9e;
        }
    });
_0x2548ec();
var attempt = 0x3;

function validate() {
    var _0x4d1a17 = _0x20fe,
        _0x32b344 = document['\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64']('\x75\x73\x65\x72\x6e\x61\x6d\x65')['\x76\x61\x6c\x75\x65'],
        _0x5997a2 = document[_0x4d1a17('\x30\x78\x64')]('\x70\x61\x73\x73\x77\x6f\x72\x64')[_0x4d1a17('\x30\x78\x30')];
    if (_0x32b344 == _0x4d1a17('\x30\x78\x31\x32') && _0x5997a2 == _0x4d1a17('\x30\x78\x31\x32')) return alert(_0x4d1a17('\x30\x78\x39')), window['\x6c\x6f\x63\x61\x74\x69\x6f\x6e'] = '\x64\x61\x73\x68\x62\x6f\x61\x72\x64\x2e\x68\x74\x6d\x6c', ![];
    else {
        attempt--, alert(_0x4d1a17('\x30\x78\x32') + attempt + _0x4d1a17('\x30\x78\x31\x35'));
        if (attempt == 0x0) return document[_0x4d1a17('\x30\x78\x64')](_0x4d1a17('\x30\x78\x62'))['\x64\x69\x73\x61\x62\x6c\x65\x64'] = !![], document[_0x4d1a17('\x30\x78\x64')]('\x70\x61\x73\x73\x77\x6f\x72\x64')[_0x4d1a17('\x30\x78\x31\x30')] = !![], document[_0x4d1a17('\x30\x78\x64')]('\x73\x75\x62\x6d\x69\x74')[_0x4d1a17('\x30\x78\x31\x30')] = !![], ![];
    }
}
var res = String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x48, 0x54, 0x42, 0x7b, 0x57, 0x33, 0x4c, 0x63, 0x30, 0x6d, 0x33, 0x5f, 0x37, 0x30, 0x5f, 0x4a, 0x34, 0x56, 0x34, 0x35, 0x43, 0x52, 0x31, 0x70, 0x37, 0x5f, 0x64, 0x33, 0x30, 0x62, 0x46, 0x75, 0x35, 0x43, 0x34, 0x37, 0x31, 0x30, 0x4e, 0x7d, 0xa);

문제에선 이렇게 어마 무시한 양의 JS 코드, 2개의 웹사이트를 줍니다.

사실 CSS도 주긴 하는데 그건 별로 쓸 필요가 없겠죠?

JS 코드는 일자로 되어있는걸 주길래 정렬 사이트에서 변환해왔습니다.

 

문제를 보면 웹사이트에 로그인을 했을 때 FLAG를 주는 것 같습니다.

HTML 코드를 봤을 때는 그 어디에도 힌트가 없는 것 같으니 JS 코드를 보겠습니다.

 

그런데 전부 다 16진수라서 뭐가 뭔지 구분을 할 수 없습니다.

이것 역시 변환 사이트의 힘을 빌리도록 합시다!

 

16진수를 아스키로 변환해주는 사이트, FLAG 획득 성공

아무래도 16진수만 바꿔주는 사이트다 보니 나머지 정상적인 문자들은 모두 이상한 형태로 깨져버렸습니다.

 

그래도 변환된 코드의 아래쪽을 보면 {} 안에 문자열들이 들어있는 코드가 보입니다.

저게 FLAG인 것 같습니다.

 

문제 풀이 성공

평소에 Dreamhack만 풀다가 다른 사이트로 오니 조금 겁을 먹었는데,

역시나 쉬운 문제들은 있는 것 같습니다.

 

+) 변환, 정렬 등 여러가지 웹 사이트들이 도움이 많이 되네요! 역시 뭐든 장비빨이 조금씩 있는 것 같아요.

728x90

'Hack The Box' 카테고리의 다른 글

The secret of a Queen 풀이  (0) 2021.07.09