1. Home
  2. 보안 강좌/CodeEngn
  3. [CodeEngn] Basic RCE L08 풀이

[CodeEngn] Basic RCE L08 풀이

안녕하세요 파일입니다. 요새 제가 병원에 다니느라 건강 상태나 멘탈 상태가 많이 악화되어서 한동안 글을 많이 못썼네요 ㅎㅎ 오랜만에 다시 돌아온 코드엔진 리버싱 문제 풀이입니다.

 

문제

OEP를 구하시오 Ex) 00400000

 

다운로드

08.exe
0.05MB

 

실행

켜면 또 시리얼키를 물어볼 줄 알았는데 매우 신기하게도 이번 프로그램은 계산기입니다 ㅋㅋ

사실 문제에서 묻는게 OEP를 찾는것이기 때문에 그냥 이번엔 프로그램 생긴거만 구경하면 됩니다.

 

풀이

이미지 출처 : https://koharinn.tistory.com/487

문제에서 찾으라고 한 것은 바로 OEP(Original Entry Point) 입니다. OEP를 찾는 문제는 바로 패킹에 관한 문제라고도 볼 수 있는데요. OEP는 앞전 문제에서도 찾아봤지만 패킹되기 이전의 본래 Entry Point 위치입니다.

 

프로그램을 패킹하면, 실행 코드 앞부분에 Unpacking 코드가 삽입되어 EP 위치가 바뀌게 됩니다.

패킹된 프로그램을 실행시키면 EP위치부터 언패킹 코드를 실행시켜서 패킹된 코드를 실시간으로 언패킹하고, 언패킹된 코드를 RAM위로 올려서 실행시키게 됩니다. 언패킹된 코드는 당연하지만 패킹되기 이전 프로그램의 본래 코드이며, 이 언패킹된 코드가 실행되는 주소 위치를 Original Entry Point 라고 합니다.

 

패킹되기 이전의 오리지널 코드 실행위치, 바로 Original Entry Point인 것이죠.

 

die로 확인해보면 실제로 이 프로그램은 UPX로 패킹되어 있음을 확인할 수 있습니다.

 

그러니깐 우리는 이 UPX로 패킹된 프로그램의 언패킹 코드를 따라가면서 패킹된 코드를 푸는 과정을 지켜보다가, 언패킹이 완료된 코드를 실행시키는 주소 위치, OEP를 찾아내야 합니다.

 

다만 위처럼 패킹된 프로그램의 본래 코드(언패킹된 코드)를 수동으로 찾는 과정을 매뉴얼 언패킹이라고 하는데, 이런 매뉴얼 언패킹은 초보자가 하기에 매우 어렵습니다. 그리고 패커 종류마다 패킹을 통해 코드를 꼬아놓는 과정이 조금식 달라서 언패킹하는 것에 대한 일반적인 방법이란것도 없습니다 ㅋㅋ..

 

리버싱의 어려운 문제가 패킹인 이유죠..

그래도 다행인건 UPX로 패킹된 프로그램은 제가 확인해본 결과 UPX툴로 언패킹된 코드의 EP가 바로 Original Entry Point 입니다. UPX 프로그램 자체에서 패킹 & 언패킹 기능을 동시에 지원하기 때문에, UPX로 언패킹을 한 다음에 언패킹된 프로그램의 EP위치를 찾으면 그게 OEP를 찾는거랑 똑같습니다.

 

그러니까 우리는 UPX로 언패킹만 하고 EP 위치가 어딘지만 확인하면 끝입니다.

 

upx -d 명령어를 이용해서 언패킹 합니다.

 

언패킹된 프로그램을 디버거로 열어보니 Entry Point위치가 01012475라고 나오네요. 이게 UPX가 언패킹 후 실행시키는 본래의 Entry Point 위치입니다.

 

OEP는 01012475이네요. 

매우 쉽게 찾았습니다..!

 

다음 문제는 Stolen Byte에 관한 내용이 나오는데 이제는 UPX를 수동 언패킹 하는 과정을 보여드려야 할 거 같습니다 -.- 벌써부터 글쓰기가 귀찮네요..

'보안 강좌 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L07 풀이  (0) 2023.01.16
[CodeEngn] Basic RCE L06 풀이  (0) 2023.01.12
[CodeEngn] Basic RCE L05 풀이  (0) 2023.01.11
[CodeEngn] Basic RCE L04 풀이  (0) 2023.01.09
[CodeEngn] Basic RCE L03 풀이  (0) 2023.01.06
SNS 공유하기
네이버밴드
카카오톡
페이스북
X(트위터)

최근 글 파일의 IT 블로그
추천하는 글 파일의 IT 블로그
최근글
인기글
이모티콘창 닫기
울음
안녕
감사
당황
피폐