play/분석

[reversing.kr] challenge Easy_CrackMe.exe

카고형 2023. 6. 18. 03:20
728x90

문제는 회원가입 후 로그인 하면 받을 수 있다
http://reversing.kr/challenge.php

Reversing.Kr

Copyright © 2012-2023 Gogil All Right Reserved.

reversing.kr

 

 1번 문제 Easy_CrackMe.exe

 

1. 정보 확인

일단 파일  정보 확인은 툴(Detect It Easy)을 사용해서 패킹 여부, 어떤 언어인지 확인  툴은 DIE 말고 exeinfope로 확인해도 됨

파일 정보 확인

 
확인되는 패킹은 없고, 언어는 C/C++로 제작되었고 32비트라는 정보를 알 수 있습니다.

2. 문제 확인

  • 파일 실행시 사용자가 입력할 수 있는 창이 출력된다
  • 임의의 값을 입력하고 확인 버튼을 누르니, 부정확한  패스워드라는 문구가 출력된다.

출제자가 정해놓은 패스워드를 우회해보자!!

파일 실행

문자열 확인 하기 우클릭 - Search for - All referenced text string  

문자열 확인

확인된 문자열을 보면 "Congratulation!! " 과 "Incorrect Password"를 확인할 수 있다 해당 부분은 성공과 실패했을 때 메시지 박스에 나오는 문자열로 추정된다
 
이번에는 Ctrl + n을 눌러서 해당 프로그램에서 사용한 라이브러리 확인

라이브러리 확인

MessagBoxA 우클릭 - Find references to import를 눌러 MessageBoxA 라이브러리를 사용하는 부분을 확인

라이브러리 확인2
라이브러리 확인3

해당 파일은 두 번에 메시지 박스를 호출하는 것을 확인할 수 있다. 

라이브러리 확인4

실제로 확인해 보면 00401121 주소에서 호 풀한 메시지 바스는 성공했을 경우고 00401142 주소는 실패했을 때 출력되는 걸 확인할 수 있다
이제 패스워드가 틀렸을 때를 메시지 박스로 들어 오는 부분을 찾아야 하는데...

실패시 메세지 박스

메세지 박스 부분을 눌러보면 041135 주소 값을 눌러 보면 4개의 분기에서 점프로 넘어온 것을 확인할 수 있다
[ Jumps from 004010B5, 004010CD, 0040110B, 00401112 ]


[방법  1]  분기점 그냥 넘어가기

Jumps from 004010B5, 004010CD, 0040110B, 00401112 각각의 분기 점을 확인해보면 JNZ로 넘어가게 되는데 디버그 하면서는 JNZ부분에서  z flag가 1이 되게 바꿔주면 해당 부분을 넘어가게 된다~

zflag를 1로 바꾸는 방법 아니면 JNZ를 JE로 바꿔주면  성공 ~~!!


[방법  2]  암호 풀기?

 

첫번째는 패스워드 입력을 일단 qwer로 하고 진행함

004010B5 분기문을 확인해 보면 ESP+5 와 61(ascii : a)를 비교 하는 것을 확인할 수 있다.  [ESP+5]는 w가 나왔는데 두번쨰 자리가 ascii : a와 같아야 다음으로 넘어 간다.
 
이번에는 두번째에 a를 넣고(qawerty) 실행 해 보겠습니다.

비교할 값이랑 입력한 값에서 "werty"를 저장 한 다음 0041150주소에 함수를 호출해 넘겨준다.

코드를 보면 2번 반복 하면서 5y 값이랑 we 값을 비교한다

이번에는 "R3versing" 문자와 반복적으로 비교한다.

마지막으로 ESP+4 와 45를 비교하는데 첫번째 문자와 45(ascii : E) 를 비교 한다
답은 E + a + 5y + R3versing

728x90