워게임/CodeEngn

[CodeEngn] Basic RCE L10

name2965 2022. 7. 2. 22:21
728x90

 

 

 

이번 문제는 다음과 같습니다

 

먼저 주어진 실행파일을 exeinfope로 열어보겠습니다.

 

 

 

 

32비트 기반 실행파일에 aspack 이라는 패킹이 되어있다는것을 알수 있습니다.

 

우선 프로그램을 한번 실행해보면

 

 

다음과 같은 화면이 나옵니다.

이름과 시리얼값을 입력할수 있는 텍스트박스가 보이는데

문제는 이 텍스트박스에 아무것도 입력되지 않습니다.

이것이 왜이런지, 그리고 어떻게 등록성공으로 가는 분기를 찾을수 있을지는

분석을 해봐야 할것 같습니다.

 

이제 x32dbg를 통해서 분석해보겠습니다.

 

먼저 F9를 통해서 한번 실행해주면

 

 

 

 

다음과 같이 pushad로 시작하는 부분이있습니다.

 

한번 F8을 눌러준뒤 esp주소를 덤프따라가기한뒤에

하드웨어 중단점을 설정해줍니다.

 

 

그리고 나서 F9를 눌러서 실행해주면 

 

 

 

 

다음과 같이 popad 아래에 jne 분기문에서 멈췄습니다.

이제 여기서 456501 주소에 있는 ret 전에 스택에 푸쉬하는 445834 라는 주소가 있는데

이 주소가 바로 이 프로그램의 진짜 OEP입니다.

 

그러므로 이제 저 ret로 진입해보겠습니다.

 

 

 

 

그러면 진짜로 제대로된 형식의 어셈블리가 나옵니다.

그러므로 이 프로그램의 OEP는 00445834 입니다.

 

이제 등록성공 으로 가는 분기점을 찾아야 하는데

우선 아까전에 프로그램을 실행했을때를 보면

Not registered 로 시작하는 문자열이 있었습니다.

 

만약 등록을 성공한다면 이 문자열이 등록성공과 관련된 어떤 문자열로 바뀌어야 할것입니다.

그러므로 이와 관련된 문자열을 찾아보면 뭔가 실마리를 찾을수도 있습니다.

 

 

 

 

문자열 구역을 보면 굉장히 많은 문자열이 있는것을 볼수 있습니다.

 

이중에서 뭔가 관련된 문자열을 열심히 찾다보면

 

 

 

 

다음과 같이 뭔가 관련된 문자열이 보입니다.

Registerd ... well done! 이라는 문자열이 유력해 보이므로 이 문자열이 쓰인 어셈블리로 진입해보겠습니다.

 

 

 

 

그러면 다음과 같이 적절한 문자열이 쓰인 부분을 확인해볼수 있습니다.

이제 위로 올려서 여기로 오기 위한 분기문을 찾아보면

 

 

 

 

다음과 같은 분기문이 있다는것을 확인해볼수 있습니다.

이 분기문에서 등록성공과 실패가 갈리므로 이 부분이 올바른 분기점입니다.

 

이 분기점의 opcode는 7555 입니다.

 

아까전에  찾은 OEP는 00445834 이고 opcode는 7555 이므로

이 문제의 정답은 004458347555 입니다.

 

 

728x90

'워게임 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L12  (0) 2022.07.03
[CodeEngn] Basic RCE L11  (0) 2022.07.03
[CodeEngn] Basic RCE L09  (0) 2022.05.19
[CodeEngn] Basic RCE L08  (0) 2022.05.19
[CodeEngn] Basic RCE L07  (0) 2022.05.12