전쟁/codeengn

[codeengn] Basic RCE 16

Sean(slay) 2022. 7. 31. 00:13
반응형

16.exe
1.23MB

 


 

x32dbg로 문제 파일을 열면 바로 EP를 확인할 수 있다.

 

 

문자열 찾기 기능을 이용하면 위와 같이 문자열이 뜨는데, "Good Job!\n" 문자열을 더블 클릭하여 이동한다.

 

 

"Good Job" 문자열이 출력되는 부분에서 스크롤을 조금 위로 올리면 40159F 주소에 cmp 명령어가 있다.

 

이 cmp 명령어의 결과에 따라 일치했을 때와 일치하지 않을 때의 문자열을 띄우는 부분으로 점프한다.

 

 

이 부분이 암호화 알고리즘 부분이다.

 

 

ebp-3C 주소에는 D8017이라는 값이 들어있는데, 이 값을 eax에 저장하고 D8017과 ACE80을 곱한 값인 E4B88D80를 edx에 저장한다.

 

그리고 ebp-3C의 주소가 70FEEC 인데 이 주소를 eax에 담고, D8017과 위에서 곱한 값이 들어있는 edx의 값을 더한 값인 E4C60D97을 70FEEC 주소에 저장한다.

 

그리고 ebp-40에 있는 값인 70FFCC를 eax에 담고 eax와 ebp-3C의 값을 비교한다.

 

그렇다면 eax에는 내가 입력한 값이 들어가고, ebp-3C 주소에 들어간 E4C60D97은 Serial 값이 16진수로 변환된 값이다.

 

 

실제로 CodeEngn / 10을 입력하고 cmp 문에서 멈추게 되면 eax에는 10이 16진수로 변환된 A가 저장되어 있다.

 


풀이

 

 

위에서 분석한대로 E4C60D97의 값을 10진수로 표현한 3838184855 값을 Serial 값으로 입력하면

 

 

그러므로 문제의 답은 3838184855이다.

반응형