본문 바로가기
Security/Reversing

[Reversing.kr] Easy Crack

by 단월໒꒱ 2022. 6. 25.

 

 

 

 

 

실행시키면 이렇게 뜬다.

 

Exeinfo로 작성된 언어와 패킹 상태를 알아보았다.

 

 

 

 

위의 화면을 보면 C++로 되어있고 패킹되지 않은 상태라는 것을 확인할 수 있다.

 

 

IDA로 돌아와서 문자열을 검색해보았다.

 

 

 

 

그 중에서 Congratulation!! 부분이 키와 관련된 내용이 있을 것 같아 눌러보았다.

 

 

 

 

Incorrect Password와 Congratulation이 있는 걸 볼 수 있는데 각각 참조해봐서 어떤 과정을 거쳐서 오게 되는지 알아보자.

 

 

 

 

 

 

이렇게 004010B5, 004010CD, 0040110B, 00401112에서 여기로 jmp해 오는 것을 확인할 수 있다.

 

 

먼저 첫번째 조건부터 살펴보았다.

 

 

 

 

ESP+5에 저장된 값과 'a'를 비교하고 있다.

 

 

 

 

그런데 ESP+5에는 입력값의 두번째 값이 들어있으므로 구해야하는 비밀번호의 두번째 값이 'a'임을 알 수 있다.

 

 

 

 

두번째 자리에 a를 넣고 프로그램을 돌려보니

 

 

 

 

다음 단계로 잘 넘어가는 걸 확인할 수 있다.

 

그 다음 조건을 살펴보자.

 

그리고 test로 eax의 값을 확인하고 있는데, eax가 0이면 다음 코드를 실행하고, 0이 아니면 401135로 점프한다.

 

eax 값은 4010C3에 있는 sub_401150 함수의 반환값이라고 추정되는데, 해당 함수를 한번 살펴보았다.

 

 

 

 

eax가 반환값이 되고 0이 되어야하므로 ecx가 0이 되어야함을 알 수 있다.

그러기 위해서는 40117B에서 jz가 이루어져야 한다.

그 위의 cmp로 비교하는 al과 edi-1의 값이 같아야 점프를 할 수 있는데, 결국에는 esi-1과 edi-1의 값이 같으면 된다.

 

repe : 같으면 반복, ZF가 0이거나 ecx가 0이면 멈춰라

cmpsb : 바이트 단위로 비교하라

 

뭔가 조금 더 자세하게 써보고 싶었는데 일단 결론적으로 보면 비밀번호의 세번째, 네번째 값이 각각 '5', 'y'이면 된다.

 

 

 

 

저렇게 입력해주니 두번째 조건을 넘어갈 수 있었다.

 

다음 조건을 확인해보자.

 

 

 

 

다음 조건도 위의 조건들과 크게 다를 건 없다.

입력받은 비밀번호의 다섯번째 글자부터 R3versing과 같으면 된다고 한다.

 

 

 

 

이제 마지막 조건을 확인해보자.

 

 

 

 

마지막으로 esp+4의 값이 'E'이면 된다.

결국 첫 글자가 'E'이면 된다는 얘기이다.

 

따라서 답은 Ea5yR3versing이다.

 

 

 

 

....눈물난다....

 

 

댓글