본문 바로가기

Computer Security/CTF

[Secuinside 2013] PE time

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