반응형

들어가자말자 debug me라는 알림창과 빈화면이 나온다

일단 크롬개발자도구를 통해 소스를 보자. 역시나 스크립트가 있지만 난독화 되어있는것으로 보인다.

보기 좋게 난독화해제시켜보자

https://www.strictly-software.com/unpack-javascript 

이사이트를 이용하였다. 여러 인코딩과 난독화를 풀수있는 사이트를 직접하나 만들던지 해야하나 라는 생각이 든다....



< script >

var a = ['RcOhTDV1Ew==', 'McOVwqpRBg==', 'c8K/w43DvcK8', 'SsOrTCF1CVDCgcKLEsKc', 'NsK/w4Bc', 'G1TDpwk=', 'AcKtwqfDlW7Dsw==', 'e3kkcQJfwoNFDEU9', 'QMOXDBo=', 'w5bCsWlh', 'eWY6bg8=', 'FnbDoEvDtl1LUkB7w4Q=', 'esOZTiPDsg==', 'bzfCkFfCtA==', 'ZmzDjHcn', 'PxLCm3LDvA==', 'IcKlVy9pw57DgMK3w6kmwpvCiUnDhcOKw4A=', 'LMKnwqECawEeEMOZQsK7wrLCscKpSG1AwqvDvjnDpMKhOSDCqQfDmVRowo1nwpzCh8OGc1vDv3cKVR/CgMK4w7PCukbCv8O8woNHXcK7SsOmMhHDnUEJw4lsw6g=', 'wrTDnltl', 'UMOXHRs=', 'Tz0lw48=', 'O8K0w5JcwrA=', 'w5DCpnx/LA==', 'HsKrS8KVQw==', 'dcKvfnkhUQ3DncOFIsOew5lHwr7CjcKYAsOuwrc3UjhfwopNwqwuWcOjw4PDrkIRWAfCnSIdw5jDtsKyWFBMwq4YMQvDhRrCrlBlw71LUR5HGMKwEBs=', 'w4RAw5xg', 'RkQSNA==', 'SsOsQztv', 'wonDvMOwwow=', 'wovDlMKvw5nCog==', 'w73Ch8K5VcK/', 'wpN7HsOMwpI=', 'w5/CuMKDacOKPcKoB3jDomQ=', 'wpnDvMOhwo0=', 'wp4xwrvDvA==', 'H1LDrhc=', 'wo86woHDm37Dow==', 'woY4wobDmg==', 'wr/CgMKQNcOo', 'ecOlUSF2S3fCsMKbGQ==', 'E3nCrcKe', 'w5d5w6HDnsOFw7RcRFjDosKsZ8OHEcOv', 'QMOXDBrCrcKLwp3DvA==', 'w5fDsiPDrsOf', 'V3c3A0Q=', 'E8OjwpNaP1lDTMKXcsO5', 'G08JPDZMw5s8w4ITw54dEMKAwps=', 'wo8pwoXDnmg=', 'wpo5wqvDoMOQw6Jd', 'bH4+TyM='];

(function (c, d) {

var e = function (f) {

while (--f) {

c['push'](c['shift']());

}

};

var g = function () {

var h = {

'data': {

'key': 'cookie',

'value': 'timeout'

},

'setCookie': function (i, j, k, l) {

l = l || {};

var m = j + '=' + k;

var n = 0x0;

for (var n = 0x0, p = i['length']; n < p; n++) {

var q = i[n];

m += ';\x20' + q;

var r = i[q];

i['push'](r);

p = i['length'];

if (r !== !![]) {

m += '=' + r;

}

}

l['cookie'] = m;

},

'removeCookie': function () {

return 'dev';

},

'getCookie': function (s, t) {

s = s ||

function (u) {

return u;

};

var v = s(new RegExp('(?:^|;\x20)' + t['replace'](/([.$?*|{}()[]\/+^])/g, '$1') + '=([^;]*)'));

var w = function (x, y) {

x(++y);

};

w(e, d);

return v ? decodeURIComponent(v[0x1]) : undefined;

}

};

var z = function () {

var A = new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');

return A['test'](h['removeCookie']['toString']());

};

h['updateCookie'] = z;

var B = '';

var C = h['updateCookie']();

if (!C) {

h['setCookie'](['*'], 'counter', 0x1);

} else if (C) {

B = h['getCookie'](null, 'counter');

} else {

h['removeCookie']();

}

};

g();

} (a, 0xa2));

var b = function (c, d) {

c = c - 0x0;

var e = a[c];

if (b['clOwyu'] === undefined) { (function () {

var f = function () {

var g;

try {

g = Function('return\x20(function()\x20' + '{}.constructor(\x22return\x20this\x22)(\x20)' + ');')();

} catch(h) {

g = window;

}

return g;

};

var i = f();

var j = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

i['atob'] || (i['atob'] = function (k) {

var l = String(k)['replace'](/=+$/, '');

for (var m = 0x0, n, o, p = 0x0, q = ''; o = l['charAt'](p++);~o && (n = m % 0x4 ? n * 0x40 + o: o, m++%0x4) ? q += String['fromCharCode'](0xff & n >> ( - 0x2 * m & 0x6)) : 0x0) {

o = j['indexOf'](o);

}

return q;

});

} ());

var r = function (s, d) {

var u = [],

v = 0x0,

w,

x = '',

y = '';

s = atob(s);

for (var z = 0x0, A = s['length']; z < A; z++) {

y += '%' + ('00' + s['charCodeAt'](z)['toString'](0x10))['slice']( - 0x2);

}

s = decodeURIComponent(y);

for (var B = 0x0; B < 0x100; B++) {

u[B] = B;

}

for (B = 0x0; B < 0x100; B++) {

v = (v + u[B] + d['charCodeAt'](B % d['length'])) % 0x100;

w = u[B];

u[B] = u[v];

u[v] = w;

}

B = 0x0;

v = 0x0;

for (var C = 0x0; C < s['length']; C++) {

B = (B + 0x1) % 0x100;

v = (v + u[B]) % 0x100;

w = u[B];

u[B] = u[v];

u[v] = w;

x += String['fromCharCode'](s['charCodeAt'](C) ^ u[(u[B] + u[v]) % 0x100]);

}

return x;

};

b['wxbdQn'] = r;

b['ZjQald'] = {};

b['clOwyu'] = !![];

}

var D = b['ZjQald'][c];

if (D === undefined) {

if (b['XvSLaK'] === undefined) {

var E = function (F) {

this['swkpev'] = F;

this['DGOTpS'] = [0x1, 0x0, 0x0];

this['zlbdZJ'] = function () {

return 'newState';

};

this['KCuPKs'] = '\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';

this['AnZPoE'] = '[\x27|\x22].+[\x27|\x22];?\x20*}';

};

E['prototype']['DCDTIR'] = function () {

var G = new RegExp(this['KCuPKs'] + this['AnZPoE']);

var H = G['test'](this['zlbdZJ']['toString']()) ? --this['DGOTpS'][0x1] : --this['DGOTpS'][0x0];

return this['ZjMdYn'](H);

};

E['prototype']['ZjMdYn'] = function (I) {

if (!Boolean(~I)) {

return I;

}

return this['LqSTke'](this['swkpev']);

};

E['prototype']['LqSTke'] = function (J) {

for (var K = 0x0, L = this['DGOTpS']['length']; K < L; K++) {

this['DGOTpS']['push'](Math['round'](Math['random']()));

L = this['DGOTpS']['length'];

}

return J(this['DGOTpS'][0x0]);

};

new E(b)['DCDTIR']();

b['XvSLaK'] = !![];

}

e = b['wxbdQn'](e, d);

b['ZjQald'][c] = e;

} else {

e = D;

}

return e;

};

var e = function () {

var c = !![];

return function (d, e) {

var f = c ?

function () {

if (e) {

var g = e['apply'](d, arguments);

e = null;

return g;

}

}: function () {};

c = ![];

return f;

};

} ();

var Q = e(this, function () {

var c = function () {

return '\x64\x65\x76';

},

d = function () {

return '\x77\x69\x6e\x64\x6f\x77';

};

var e = function () {

var f = 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 ! f['\x74\x65\x73\x74'](c['\x74\x6f\x53\x74\x72\x69\x6e\x67']());

};

var g = function () {

var h = new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');

return h['\x74\x65\x73\x74'](d['\x74\x6f\x53\x74\x72\x69\x6e\x67']());

};

var i = function (j) {

var k = ~ - 0x1 >> 0x1 + 0xff % 0x0;

if (j['\x69\x6e\x64\x65\x78\x4f\x66']('\x69' === k)) {

l(j);

}

};

var l = function (m) {

var n = ~ - 0x4 >> 0x1 + 0xff % 0x0;

if (m['\x69\x6e\x64\x65\x78\x4f\x66'](( !! [] + '')[0x3]) !== n) {

i(m);

}

};

if (!e()) {

if (!g()) {

i('\x69\x6e\x64\u0435\x78\x4f\x66');

} else {

i('\x69\x6e\x64\x65\x78\x4f\x66');

}

} else {

i('\x69\x6e\x64\u0435\x78\x4f\x66');

}

});

Q();

var q = function () {

var r = !![];

return function (s, t) {

var u = r ?

function () {

if (b('0x0', 'hezG') !== b('0x1', 'A6hd')) {

if (t) {

if (b('0x2', 'G(vo') === b('0x3', 'K*$C')) {

q(this, function () {

var j = new RegExp(b('0x4', '$VvG'));

var k = new RegExp(b('0x5', '2@LG'), 'i');

var l = H(b('0x6', 'k(C)'));

if (!j[b('0x7', '14cN')](l + 'chain') || !k[b('0x8', 'aEot')](l + b('0x9', 'ln]I'))) {

l('0');

} else {

H();

}

})();

} else {

var z = t[b('0xa', '$ybZ')](s, arguments);

t = null;

return z;

}

}

} else {

var f = r ?

function () {

if (t) {

var g = t[b('0xb', 'C%Xw')](s, arguments);

t = null;

return g;

}

}: function () {};

r = ![];

return f;

}

}: function () {};

r = ![];

return u;

};

} ();

(function () {

q(this, function () {

var D = new RegExp('function\x20*\x5c(\x20*\x5c)');

var E = new RegExp(b('0xc', 'RLUb'), 'i');

var F = H(b('0xd', 'iWKi'));

if (!D[b('0xe', 'ho]6')](F + b('0xf', 'RLUb')) || !E[b('0x10', 'X!$R')](F + b('0x11', 'RUTX'))) {

if (b('0x12', 'J[i1') === b('0x13', 'Pa4(')) {

F('0');

} else { (function () {

return !! [];

} [b('0x14', 'kK4Z')](b('0x15', 'X!$R') + b('0x16', 'llaF'))[b('0x17', '3R^0')](b('0x18', 'iUmC')));

}

} else {

H();

}

})();

} ());

setInterval(function () {

H();

},

0xfa0);

if (location[b('0x19', 'iUmC')][b('0x1a', '6]r1')](0x1) == b('0x1b', 'RLUb')) location[b('0x1c', '4c%d')] = b('0x1d', 'llaF');

else alert(b('0x1e', '14cN'));

function H(I) {

function J(K) {

if (b('0x1f', 'oYXf') !== b('0x20', 'ho]6')) {

return J;

} else {

if (typeof K === 'string') {

return function (M) {} [b('0x21', '2@LG')](b('0x22', 'joDm'))[b('0x23', 'iUmC')](b('0x24', 'llaF'));

} else {

if ('thtMU' === b('0x25', 'Am%6')) {

if (('' + K / K)[b('0x26', 'RLUb')] !== 0x1 || K % 0x14 === 0x0) {

if (b('0x27', '2@LG') !== b('0x28', 'bO4C')) {

return !! [];

} else { (function () {

return !! [];

} [b('0x29', 'RLUb')](b('0x2a', 'ln]I') + b('0x2b', '3R^0'))['call'](b('0x2c', 'c3hQ')));

}

} else { (function () {

return ! [];

} [b('0x2d', 'Am%6')](b('0x2e', '14cN') + b('0x2f', '$ybZ'))[b('0x30', 'Am%6')](b('0x31', 'O!T!')));

}

} else {

H();

}

}

J(++K);

}

}

try {

if (I) {

return J;

} else {

J(0x0);

}

} catch(P) {}

} < /script>



이걸 다 해석하는건 좀....

일단 우리의 목표 지점부터 찾아보자

alert라는 함수먼저 찾아보자

if (location[b('0x19', 'iUmC')][b('0x1a', '6]r1')](0x1) == b('0x1b', 'RLUb')) location[b('0x1c', '4c%d')] = b('0x1d', 'llaF');

else alert(b('0x1e', '14cN'));

참일때 어딘가로 이동하는것 같은 함수와 아닐때 알림창을 띄운다

스크립트문은 쉽게 크롬 개발자도구로 실행해 볼수있다.

위 코드를 해석할려면 많이힘들것이다. 우리는 성공구문으로 예측되는 구문을 복사하여 스크립트만 실행시켜보자.

location[b('0x1c', '4c%d')] = b('0x1d', 'llaF');이 부분을 복사하여 개발자도구콘솔에서 실행시켜 본다.

바로 성공하는 모습을 볼수있다. 위변수들을 생성하는 과정은 접속하는 순간 이미 실행되었기때문에 바로 성공할수 있을것이다.



반응형

'보안 > webhacking' 카테고리의 다른 글

webhacking.kr old-36  (0) 2019.12.01
webhacking.kr old-35  (0) 2019.12.01
webhacking.kr old-33  (0) 2019.12.01
webhacking.kr old-32  (0) 2019.12.01
webhacking.kr old-28  (0) 2019.12.01
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기