IDA로 열어본다.
... GetWindowTextA(::hWnd, &String, 128); SetWindowTextA(hWnd, &String); v16 = 5; do { String -= v16; String ^= 3u; --v16; } while ( v16 ); v17 = 4; do { v23 -= v17; v23 ^= 4u; --v17; } while ( v17 ); v18 = 3; do { v24 -= v18; v24 ^= 5u; --v18; } while ( v18 ); v19 = 2; do { v25 -= v19; v25 ^= 6u; --v19; } while ( v19 ); v20 = strcmp(&String, "C;@R"); if ( v20 ) v20 = -(v20 < 0) | 1; if ( v20 ) { MessageBoxA(hWnd, ";;", "ohtahacker", 0); exit(0); } MessageBoxA(hWnd, "congratulation", "ohtahacker", 0); ...
어디선가 받은 문자를, 이상한 조작을 한 후, C;@R과 비교한다.
그러면, C;@R에 역조작을 해서 원래 문자를 알아낸다.
>>> chr((((((((((ord('C')^3)+1)^3)+2)^3)+3)^3)+4)^3)+5)
'S'
>>> chr((((((((ord(';')^4)+1)^4)+2)^4)+3)^4)+4)
'E'
>>> chr((((((ord('@')^5)+1)^5)+2)^5)+3)
'C'
>>> chr((((ord('R')^6)+1)^6)+2)
'U'
정답은 SECU
'Computer Security > CTF' 카테고리의 다른 글
[CodeGate 2013] Vuln 200, exploit (0) | 2013.06.04 |
---|---|
[Secuinside 2013] 127.0.0.1, write up (0) | 2013.05.26 |
[Secuinside 2013] Secure Web, write up (8) | 2013.05.26 |
[Secuinside 2013] banking, write up (1) | 2013.05.26 |
[Secuinside 2013] givemeshell, write up (2) | 2013.05.26 |