본문 바로가기

Reversing/CodeEngn

[CodeEngn] Basic RCE L15풀이

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다.

ch.codeengn.com


그림 1

Name이 CodeEngn일 때의 Serial 값을 구하는 것이 문제이다.

 

일단 EXE INFO를 통해 패킹 여부를 확인해보았는데, 패킹이 되어있지 않았다.

 

그림 2

이제 파일을 실행시켜보니 Name과 Serial값을 입력해야 했다.

 

그림 3

아무 값이나 입력하면 Try Again!이라는이라는 문구가 출력된다.

 

 

X32 디버거를 사용해서 분석하였다.

 

문자열 찾기를 통해 Try Again! 부분으로 이동해주었다.

 

그림 4

흐름을 살펴보니, 위의 그림에서 클릭되어 있는 부분에서 eax와 45B884가 같지 않으면 Try Again으로 이동하는 것을 알 수 있다.

 

그래서 위의 call 함수에 bp를 걸고 eax와 45B884에 어떤 값이 들어가는지 확인하였다.

 

그림 5

처음에 Serial 값에 무작위로 1을 입력하였더니 EAX값에 1이 저장되었다.

Eax에 serial 값이 저장되는 것을 알 수 있었다.

 

이제 45b884 위치로 덤프해서 이동해보니 아래와 같이 0x60, 0x61이라는 값이 들어있는 것을 볼 수 있다.

 

그림 6

해당 부분에서 검색해보니 데이터는 리틀 엔티언 방식으로 저장되기 때문에 원래의 값을 보고 싶다면 0x61 0x60 순서로 봐야한다고 한다.

 

따라서 계산기에 16진수 6160을 넣어주었더니 24,928이라는 값을 얻을 수 있었다.

 

그림 7

문제 실행파일에 직접 넣어주면 문제가 해결되었음을 알 수 있다!

 

그림 8

 

'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L17풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L16풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L14풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L12풀이  (0) 2021.08.18
[CodeEngn] Basic RCE L11풀이  (0) 2021.08.18