Basic RCE L010 - 코드 엔진

2020. 11. 30. 19:15문제연습/CodeEngn (REC)

반응형

 

 

본 티스토리 블로그는 PC에 최적화되어 있습니다.

모바일 유저분들은 아래 네이버 블로그를 이용해 주세요.

 

Basic RCE L010 - 코드 엔진

​본 네이버 블로그는 모바일에 최적화되어 있습니다.PC 유저분들은 아래 티스토리 블로그를 이용해 주세...

blog.naver.com

 

 

이번 문제는 덤프 플러그인과 IAT 복구 툴이 필요하므로 첨부 파일을 확인하시길 바랍니다.

OllyDump.zip
0.10MB
ImportREC 1.7c.rar
0.50MB

1. 문제 내용

저번에 풀었던 문제들과 비슷한 유형인 듯합니다.

바로 분석해 보도록 하겠습니다.

 

2. 문제 해설

- 실행 정보

파일을 실행하고 입력하려고 해도 입력이 되지 않습니다.

어떤 인증과정이 추가적으로 있는 것 같습니다.

 

 

- PE 스펙

이번에는 UPX 패킹이 아닌 ASPack을 사용하여 패킹하였습니다.

사용된 패킹을 풀기 위해 언패커를 찾았으나 잘 나오지 않아서 조금 귀찮더라도 언패킹 부분을 찾아 OEP 부분부터 덤프 뜨는 게 좋을 듯합니다.

 

참고)

- ASPack Structure (해당 링크 글을 참조)

 

ASPACK unpacking

문제를 풀다가 Aspack을 처음 접해서 해당 공부 내용을 남기고자 블로깅을 진행한다. 0x00. Packer 패커란 실행 파일 압축기를 의미한다, 정확한 명칭은 Run_Time Packer다. '실행 압축'이란 실행 파일에

duwjdtn11.tistory.com

 

요약하자면 ASPack 패킹이 적용된 실행파일은 Pushad -> 코드 압축해제 -> Popad -> Retn(oep로 점프) 순으로 풀리며 실행된다고 합니다.

 

그럼 우리가 해야 할 부분은 처음 나오는 popad 코드 부분과 retn 부분을 확인하여 OEP 부분을 찾아내는 것입니다.

 

- immunity 분석

CheckPoint - PUSHAD

0x00456001 주소에 pushad가 확인되었습니다.

 

 

CheckPoint - POPAD, RETN

일단 프로그램의 제일 윗부분에 존재하는 명령어를 기준으로 하였기에 정확한 구조는 모르는 상태입니다.

해당 주소 모두 중단점을 걸어 놓은 뒤 RETN까지 실행해 보도록 하겠습니다.

 

 

해당 주소로 들어가니 다음과 같은 압축해제 내용이 출력되므로 OEP는 00445834라는 것을 알 수 있습니다.

압축 해제된 수많은 op code가 보이므로 ctrl + a 단축키를 이용하여 코드 분석을 진행해보면 다음과 같습니다.

 

흠, op코드를 제대로 인식하지 못하는 것 같으므로 이 이 부분을 덤프 뜨도록 하겠습니다.

 

 

immunity 플러그인 ollydump를 사용하여 파일을 만들었습니다. (파이 이름을 unpack으로 변경함.)

그런데 덤프 파일을 실행하니 다음과 같은 오류 메시지가 발생합니다.

 

검색을 해보니 IAT가 제대로 불러오지 못했기 때문에 dll 오류가 발생하는 것입니다.

 

(IAT에 관한 정보는 아래 윈도우 pe 관련 정보를 확인해 주세요.)

 

- IAT (Import Address Table / PE File 관련)

# 이번 포스팅 내용은 "IAT(Import Address Table)" 입니다. 이전에 "RVA to RAW" 라고, PE 파일이 메모리상에  로딩된 주소인 RVA(프로세스 가상 메모리의 절대주소)를 RAW(File Offset)으로 바꾸는 연습을 했습..

yokang90.tistory.com

 

importREC툴을 이용하여 덤프 파일의 iat를 복구해 줄 것입니다.

아래 링크를 이용하여 복구를 진행해 주세요.

 

[Ollydump.dll , importREC] Dump 뜨기 - oep 변경 및 IAT 복구

우선 덤프을 뜨고 IAT 복구하기 위해선 2가지가 필요하다.importREC툴과 Ollydbg에서 덤프를 뜨기위...

blog.naver.com

 

제대로 복구되면 아래와 같이 복구될 것입니다.

이제 패킹이 풀렸으므로 디버거를 통해 등록 성공으로 가는 분기점의 OPcode를 쉽게 찾을 수 있을 겁니다.

 

 

한번 immunity로 string을 찾아보도록 하겠습니다.

등록 성공으로 가는 string 문자열이 보입니다. 해다 주소로 가서 분기점 코드를 찾도록 하겠습니다.

 

 

근처 코드를 확인하니 등록 성공으로 가는 op코드 75 55를 찾았습니다.

따라서 이번 문제의 정답은 004458347555입니다.

 

 

 

이번 문제는 윈도우 PE 구조와 패킹에 관련된 문제였습니다.

한번 더 PE 구조체를 정리해야 할 것 같군요.

 

 

반응형

'문제연습 > CodeEngn (REC)' 카테고리의 다른 글

Basic RCE L014 - 코드 엔진(진행중)  (0) 2021.01.11
Basic RCE L012 - 코드 엔진  (0) 2020.12.05
Basic RCE L09 - 코드 엔진  (0) 2020.11.23
Basic RCE L07 - 코드 엔진  (0) 2020.11.17
Basic RCE L06 - 코드 엔진  (0) 2020.03.19