본문 바로가기

Reversing/CodeEngn

[CodeEngn] Basic RCE L14풀이

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com


그림 1

문제에서 Name이 CodeEngn 일 때의 Serial을 구하라고 한다.

 

Exeinfo로 확인부터 해주었다.

 

그림 2

 

Upx 패킹이 되어 있어서 언패킹부터 진행해주었다.

 

그림 3

실행파일을 시켜보면 name과 serial을 입력하는 부분이 나온다.

문제에서 name이 CodeEngn 일 때의 serial을 구하라고 했으니, CodeEngn을 입력하고 아무 숫자나 입력해보았다.

 

그림 4

역시 아니라고 한다.

 

X32 디버거로 분석해주었다.

 

항상 분석하면 문자열 찾기부터 보는 게 습관이라서 확인해보니 성공 문자열로 예상되는 부분이 있어서, 해당 부분으로 이동해주었다.

 

그림 5

 

그림 6

전체적인 흐름을 확인해보니

위의 그림에서 2번째 BP에서 eax와 esi가 같으면 성공문이 출력되고 같지 않다면 실패문이 출력되는 것 같다.

 

123456이라는 값을 serial로 주고 디버깅으로 한 줄씩 확인해서 cmp에서 eax와 esi에 각각 어떤 값이 들어가는지 확인해주었다.

 

그림 7

 

확인해보니 eax에는 1e240이라는 값이 들어가고, esi에는 129a1이라는 값이 들어간다.

 

1e240은 10진수로 123456이고, 즉 우리가 입력한 값이 eax에 들어간다.

 

그렇다면 esi에 들어가는 값이 CodeEngn에 해당하는 serial 값이라고 예측할 수 있고, 10진수로 변환해보면 76193이라는 값이 나온다.

 

파일에 입력해보면 성공문이 출력되는 것을 확인할 수 있다.

 

그림 8
그림 9

 

똑같이 codeengn사이트의 auth란에 입력하면 인증이 완료된다.

 


문제에서 bruteforce 해야 한다라고 했는데, 출제 의도랑 다르게 푼 것 같긴 하다.

문제에서는 esi 값이 나오는 연산 과정을 분석해서 코드 작성으로 푸는 걸 의도한 것 같은데,, 

다음에 함 해봐야겠다! 

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

[CodeEngn] Basic RCE L16풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L15풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L12풀이  (0) 2021.08.18
[CodeEngn] Basic RCE L11풀이  (0) 2021.08.18
[CodeEngn] Basic RCE L10풀이  (0) 2021.08.18