SteffenLee

[CodeEngn]basic 05 본문

Reversing/CodeEngn

[CodeEngn]basic 05

SteffenLee 2018. 1. 5. 22:14

코드엔진 basic 05번 풀이입니다.

 

 

이번 문제는 프로그램에 등록키를 알아내는 문제인가 봅니다.

 

풀이에 앞서 이 프로그램은 패킹이 되어있습니다.

패킹에 관한 내용은 나중에 따로 다루겠습니다.

 

그래서 PEiD라는 프로그램으로 패커의 종류를 알아보겠습니다.

 

UPX 0.89.6 - 1.02라는 패커로 패킹 되어있군요.

이 패커의 특징은 시작 부분에서 PUSHAD를 하고 OEP(Original Entry Point)로 들어가기 전에 POPAD를 한다.

POPAD이후에 나오는 JMP의 주소 부분이 OEP 주소이다.

 

PUSHAD : PUSHAD는 EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI의 레지스터 값을 스택으로 PUSH 합니다.

POPAD : POPAD는 반대로 스택 값에 있는 EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI의 값을 레지스터로 POP 합니다.

 

이렇게만 알면 이 문제는 풀 수 있습니다.

 

올리디버거로 열어보겠습니다.

아까 말씀드렸던 것처럼 도입 부분에서 PUSHAD를 하고 있군요. 그럼 POPAD를 찾으러 가봅시다.

쭉 내리시다 보면 이렇게

 

POPAD가 있고 바로 밑에 JMP로 00441270으로 점프합니다.

저 주소가 바로 OEP입니다.

 

POPAD 밑에 있는 JMP문에 BP를 걸어주시고 F9로 실행시킵니다.

그러면 JMP문에서 멈추게 되고 F7로 따라가면,

본래 코드가 나오게 됩니다.

 

그럼 저장해보겠습니다.

올리덤프로 덤프를 해줍니다.

덤프를 하시고 원하는 이름과 원하는 위치에 저장한 후 저장한 파일을 올리디 버거로 다시 엽니다.

열으신 후에 분석을 진행하시면 됩니다.

 

저 저 같은 경우는 검색으로 찾으려 했는데 잘 나오지 않아서 좀 뒤적거리면서 찾았습니다.

좀 위로 올리시다 보면

이런 식으로 돼있는 부분을 찾을 수 있는데 저 부분에서 정답처럼 보이는 걸 적으시면 됩니다.

 

그럼 5번 문제는 시리얼 키를 묻는 문제였으니 저 시리얼 키를 인증해봅시다.

 

성공입니다.

감사합니다.

 

'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn]basic 07  (0) 2018.01.10
[CodeEngn]basic 06  (0) 2018.01.07
[CodeEngn]basic 04  (0) 2018.01.03
[CodeEngn]basic 03  (0) 2018.01.01
[CodeEngn]basic 02  (0) 2017.12.29
Comments