CodeEngn Basic 17

문제: Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일 때 Name은 무엇인가 힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자)

그냥 brute force하면 풀리긴 하지만 일단 분석을 해봤다. String Reference를 통해 진행되는 코드부분을 확인해서 브레이크포인트를 걸고 시작했다.

17-1

Name값엔 9를를 임의로 입력하고 실행해서 진행하다 보면 그림 13 처럼 Name값을 3글자이상 제한하는 분기점과 최대 1E = 30글자 미만으로 제한하는 부분이 보인다.

17-2 17-3

문제에서 Name값은 한자리라고 했기 때문에, 3자리 이상으로 설정한 부분을 1로 수정했다. 일단 여러 함수를 진행하면 0045BBA0에서 MOV한 EDX값이 9의 코드다. 그래서 0045BB9B함수로 들어가서 코드가 어떻게 생성되는지 확인해봤다.

17-4

진행하면 그림 16처럼 EDX에 키값의 앞부분인 C542가 보인다. 그 밑으로도 이런 식으로 키값을 생성하는 연산이 3번 더 나오지만, 앞부분만 확인해도 답을 판단 할 수 있을 꺼라 생각하고 C542가 어떻게 만들어 졌는지 확인하면 문제가 해결될 것 같다.

17-5 17-6

다시 처음부터 실행해서 연산을 보면 결국 EDX의 값은 ESI값에의해 결정되는데, ESI는 45B8A0에서 9(39)를 입력받고 ESI에 EDX(0)를 더한뒤, 772곱하기ESI 그리고 그값을 EDX에 복사한다. 그리고 ESI를 EDX에 곱하고 그 값을 다시 ESI에 더한다. 그후 다시 474를 곱하고 그후 자기자신을 더한다. 그리고 그 값을 EDX에 보낸다. 그러면 앞4비트가 키의 앞자리가 된다. 정리하면,

  1. ESI에 772를 곱한다.
  2. ESI의 제곱값을 EDX에 넣는다.
  3. ESI에 EDX를 곱한다.
  4. ESI에 474를 곱한다
  5. ESI+ESI를한다.

문제 키값인 BEDA-2F56-BC4F4368-8A71-870B 의 앞부분인 BEDA를 찾으면 된다. 뒷부분도 찾을 수는 있지만 굳이 찾을 필요는 없어서 생략했다. 45B8A0에서 받는 값이, 0~9는 30~39/ A~I는 41~49 / a~I는 61~69다. 아스키 코드값 같다 하나하나 17번 파일로 확인하면 오래 걸리기 때문에 위에 ESI와 EDX를 기준으로 연산하는 코드를 자바로 짜서 0x30~0x7A(0~z)까지 돌려봤다.

17-7

답은 70 16진수 46이다. 아스키코드 표를 찾아보니 영어 “F”다. 글자수를 수정한 17번 파일로 실행해서 확인해보니 맞다.

17-8

끝으로 R의 MD5 해쉬값은 ”e1e1d3d40573127e9ee0480caf1283d6” 다

박준영

박준영
아아 BOB되고싶다

2019년 CISA 합격 후기 및 공부 방법

CISA 합격 후기 및 공부방법

OpenVAS 사용 가이드/사용법 v.2018

Published on April 13, 2018

vsftpd 2.3.4 취약점 공격

Published on November 24, 2017