-榮-

[CodeEngn] Basic RCE L10 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L10

xii.xxv 2021. 3. 24. 00:36

 

● CodeEngn Basic RCE L10 문제

 

CodeEngn Basic RCE L10

 

 

◎ 파일 실행 화면

 

[그림 1] 파일 실행 화면

 

 

패킹 및 난독화 여부 확인

 

[그림 2] PEiD - ASPack 패킹 확인

 

 


 

● CodeEngn Basic RCE L10 풀이 및 답

 

 

[그림 3] 디버거 - OllyDbg / 디버기 - 10.exe (Basic RCE L10 실행파일)

 

PUSHAD가 보이므로 POPAD를 검색해 봅니다.

 

[그림 4] POPAD 검색

 

PUSHAD 바로 아래의 POPAD로 이동합니다.

POPAD 아래에 OEP로 가는 JMP 명령어가 없는 것으로 보아 PUSHAD와 POPAD로 둘러싸여 있는 특징을 가지고 있는 패커는 아닌 것 같습니다.

 

[그림 5] 00456335 POPAD

 

방법을 바꿔 PUSHAD 명령어를 실행하고 Hardware BP를 설치하여 OEP를 찾습니다.

 

[그림 6] Hardware BP

 

실행[F9]을 하고 멈춘 곳을 보면 OEP(00445834)로 가는 코드가 JMP 명령어가 아닌 PUSH 명령어와 RETN을 사용하는 것을 볼 수 있습니다.

 

[그림 7] Hardware BP가 access되는 코드

 

[그림 8] PUSH OEP(00445834)

 

OEP로 이동하면 OPCODE를 제대로 인식하지 못하는 것을 확인할 수 있습니다.

 

[그림 9] OEP

 

OPCODE를 제대로 인식하지 못할 때, Dump를 뜨면 정상적으로 인식합니다.

 

[※참고]

Dump 파일 만들기는 CodeEngn Basic RCE L09의 "StolenByte를 제자리로 옮기고 덤프 파일 만들기"

 

[그림 10] Dump

 

Dump 뜬 파일을 OllyDbg에 올려 제대로 인식 됬는지 확인합니다.

 

[그림 11] 디버거 - OllyDbg / 디버기 - 10_dump.exe

 

 

'등록 성공'으로 가기 위한 분기점을 찾기위해 성공 문자열을 검색하여 찾습니다.

 

[그림 12] 성공 문자열 탐색

 

성공 문자열 위의 JNZ 명령어가 '등록 성공'으로 가는 분기점임을 확인할 수 있습니다.

 

[그림 13] 성공 문자열과 분기점 확인

 

CodeEngn Basic RCE L10의 답은 OEP + 분기점의 OPCODE : 004458347555