일단 주어진 파일을 Immunity Debugger로 열어보면 위와 같은 코드를 확인할 수 있다.

제일 먼저 메인함수를 찾아서 어떻게 실행되는지 확인해봐야겠다고 생각해서 의심되는 CALL 함수 부분에서 F7키를 눌러 하나씩 찾아보았다.

 

 

이 부분에서 F8키를 누르면 실행창에 ID를 입력하라는 메세지가 뜨길래 메인함수일 것을 예상하고 breakpoint를 걸어주었다.

 

 

다시 단축키를 이용해 위에서 breakpoint를 걸어준 주소값으로 이동했더니 위와 같이 메인함수임을 확인할 수 있었다.

 

이제 F8키를 이용하여 코드를 한줄씩 실행시켜보았다.

 

 

일단 위처럼 ID에 aa를 입력한 후 EBP-34=001AFD04-34=001AFCD0이므로 해당 스택창을 확인해봤더니 aa가 들어간 것을 확인할 수 있었다.

 

 

또한 위처럼 PW에 bb를 입력한 후 EBP-24=001AFD04-24=001AFCE0이므로 해당 스택창을 확인해봤더니 bb가 들어간 것을 확인할 수 있었다.

 

그 후에 아이디와 비밀번호를 입력한 후 레지스터 창을 확인해보라는 힌트를 봤다.

 

 

일단 코드를 더 진행시켜봤더니 위와 같은 부분이 있었다.

먼저 MOV 명령어를 이용하여 DL 레지스터에 EAX값을 넣고 DL과 ECX 값을 CMP 하여 같지 않다면 00CD10F0으로 넘어가도록 하는 것이였다.

 

 

위의 두 주석 부분을 보면 알 수 있듯이 00CD112C로 넘어가면 원하는 메세지가 출력된다고 예상할 수 있었다. 

 

 

위에서 JNZ 명령어를 만나 00CD10F0으로 넘어가게 된다면 00CD1181로 넘어가기 때문에 이렇게 되도록 놔두면 안된다는 것을 예상할 수 있다.

 

 

그렇기 때문에 애초에 EAX와 ECX의 값이 같도록 만들어 주어야하고 이때 레지스터 창을 확인해보면 ECX에 "XCZ"라는 문자열이 있는 것으로 보아 이것이 ID라는 것을 예측할 수 있다.

 

 

다시 파일을 restart 해준 후 위와 같이 ID에 XCZ를 입력하고 PW에 bb를 입력하여 코드를 실행시켜보면

 

 

위와 같이 EAX 레지스터와 ECX 레지스터에 같은 값이 들어가므로 JNZ 명령어를 만나도 점프하지 않고 다음코드로 실행된다.

 

 

다음 코드를 계속 실행시키다 보면 위와 같은 부분이 나온다. 이는 PW를 입력한 부분에 대한 비교이다.

 

 

앞에서 ID를 찾았던 것과 마찬가지의 방법과 이유로 UNL1M1T가 PW라는 것을 예측할 수 있다.

 

 

이렇게 알아낸 ID와 PW를 cmd창에서 파일을 실행시켜 입력해보면 위와 같이 인증키를 얻어낼 수 있다.

'2020 WINTER STUDY > CTF Study' 카테고리의 다른 글

[Reversing] Day 4_abex' crackme #2  (0) 2021.02.18
[Reversing] Day 3_suninatas 9  (0) 2021.02.18
[Reversing] Day 2_abex' crackme #3  (0) 2021.02.16
[Reversing] Day 2_abex' crackme #1  (0) 2021.02.16
[Reversing] Day 1  (0) 2021.02.15

+ Recent posts