리버싱/리버싱 문제 코드엔진

코드엔진 Basic RCE L09

상세 2021. 7. 27. 00:01

문제 : StolenByte를 구하시오 Ex) 75156A0068352040

답 : " 6A0068002040006812204000 " <- 드래그

 

1. 프로그램 살펴보기

프로그램을 실행하면 이런 창이 뜨고 OK버튼을 누르면 2번 사진과 같이 파일을 못 찾겠다는 오류가 뜬다.

패킹 여부등을 알아보기 위해 Detect It Easy를 사용했다.

1번 사진
2번 사진

Detect It Easy를 통해 UPX로 패킹되었음을 알 수 있었다. 이제 디버거로 프로그램을 분석해보자.

 

2. 프로그램 분석하기

UPX로 패킹되었듯이 PUSHAD로 시작하였고, POPAD를 찾아 OEP를 찾았다. 

일단 여기가 OEP라는건 알았는데, 난 StolenByte가 무엇인지 알지 못해서, 구글링을 해보았다.

그러던 중 https://honorlog.tistory.com/9 이 분의 글이 개념 정리가 잘되어있어 참고했다. 

내용을 요약하면 MessageBox 함수를 호출할 때 인자가 4개 필요한데, 현재는 1개만 입력되어 있으며, 

나머지 3번의 PUSH는 UPX의 특성상 POPAD와 OEP로 점프하는 명령어 사이에 있을것이라고 한다.

그리하여 조건에 맞는 명령어들(StolenByte)을 찾아보았다.

 

형광펜으로 칠해져 있는 부분이 옮겨진 명령어들이다.

그 후 이 명령어들을 OEP위에 입력해주어야 한다고 하여, 00401000에 입력했다.

이를 통해 StolenByte의 OPcode를 입력하면 되니 OPcode는 주소값 오른쪽의 6A00 ~~~~이다.

 

따라서 답은 6A0068002040006812204000이다.

 

이번 문제는 좀 어려웠다.

'리버싱 > 리버싱 문제 코드엔진' 카테고리의 다른 글

코드엔진 Basic RCE L10  (0) 2021.08.03
코드엔진 Basic RCE L08  (0) 2021.07.21
코드엔진 Basic RCE L07  (0) 2021.07.21
코드엔진 Basic RCE L06  (0) 2021.07.13
코드엔진 Basic RCE L05  (0) 2021.05.25