CodeEngn Advance RCE L07 Write-Up
파일 링크: https://codeengn.com/challenges/
CodeEngn.com [코드엔진] - Challenges
코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.
codeengn.com

풀어보자.

파일에 Name, Serial을 입력하고 Check 버튼을 클릭하면 아무 반응이 없다. Serial이 올바를 때만 반응하는 것 같다.

die로 확인해보면 .NET 파일이기 때문에 리플렉터로 코드를 디컴파일하면 된다.

위와 같이 .NET Reflector 도구로 디컴파일하면 C# 코드를 확인할 수 있다.

파일을 까보면 Name, Serial을 비교하고 있다. Name 값의 경우 길이가 0x5~0x1b이고, Serial 값의 경우 길이는 0x1a이다. 그리고 Serial 값의 9번째 값과 18번째 값은 '-' 문자여야 한다. 코드엔진 문제에서 제시한 Name이 "CodeEngn" 값이고 Serial이 "28BF522F-A5BE61D1-XXXXXXXX" 값이므로 X 값들을 찾으면 된다.

Name과 Serial 값을 검사후 Name과 Serial의 "28BF522F-A5BE61D1" 부분을 이용하여 X 값들을 만든다. 그리고 X 값을 비교하고 맞으면 성공한다. 따라서 str3(X값 부분)을 무작위 대입하여 때려 맞추면 된다. 위 빨간색 박스는 내가 임의로 추가한 코드이고 다른 방법으로 무작위 대입해도 된다.
이 문제는 다른 문제보다 주의해야할 점이 있는데 위 사진에서 보이는 GetHashCode() 함수는 32bit, 64bit 컴퓨터 환경에서 각각 다른 값을 반환한다. 코드엔진 Auth Key 값은 32bit 환경의 값이므로 32bit 환경에서 실행해야 한다.

나는 윈도우7 32bit 가상환경에서 진행했다.
Auth Key 값은 32bit 환경에서 무작위 대입 후 나오는 값이다.
'Wargame > CodeEngn Advance RCE' 카테고리의 다른 글
| CodeEngn Advance RCE L09 Write-Up (0) | 2019.09.09 |
|---|---|
| CodeEngn Advance RCE L08 Write-Up (0) | 2019.09.09 |
| CodeEngn Advance RCE L06 Write-Up (0) | 2019.09.06 |
| CodeEngn Advance RCE L05 Write-Up (0) | 2019.09.06 |
| CodeEngn Advance RCE L04 Write-Up (0) | 2019.09.06 |