관리 메뉴

HeeJ's

[03] LENA reversing tutorial 본문

<CTF>/<LENA tutorials>

[03] LENA reversing tutorial

meow00 2021. 11. 10. 13:11

레나 3번

 

문제를 풀기 위해서는 nags를 제거하라는 문자열을 확인했다.

nag를 제거하기 전에, PE 구조를 먼저 살펴본다.

 

레나 튜토리얼 3번 문제 RegisterMe.exe를 PEView를 이용해 열어주었다.

 

PEView는 왼쪽에 PE 파일의 구조와 오른쪽에 파일들을 Byte로 표시한 것을 확인할 수 있다.

 

레지스터의 헤더 먼저 살펴보았다.

가장 위에는 윈도우 exe 파일의 헤더 시그니쳐인 MZ를 확인할 수 있다.

 

MS-DOS Stub Program은 이 프로그램을 DOS 모드에서도 사용할 수 있는지 알려준다.

문자열을 보면 This program cannot be run in DOS mode 라고 적혀있다.

즉, 이 파일은 도스 모드에서 실행되지 않는다.

 

다시 IMAGE_DOS_HEADER에서 마지막 오프셋을 보면

새로운 헤더의 위치를 알려준다.

 

저 위치로 가서 값을 보면

PE라는 헤더를 가지고 있다는걸 확인할 수 있다.

OPTIONAL_HEADER를 보게 되면,

어떤 컴파일 환경에서 제작되었는지 알 수 있다.

 

 

그리고 그 아래 SECTION_HEADER를 보면 이름, 가상 메모리 사이즈, 실제 사이즈 등을 확인할 수 있고

마지막으로 권한을 확인할 수 있다.

 

이렇게 레지스터의 PE 구조를 확인해주었고, 이제 nag를 제거하면 된다.

 

ollydbg로 열어주었다.

 

2번째 함수를 보면, 핸들을 가져온다.

결과 값은 00400000이 나오게 되고, 이를 MOV를 통해 EAX에 저장한다.

 

하지만 그 아래에서 CMP로 EAX와 0을 비교하고 점프를 진행하는데,

점프를 수행하지 못한다면, nag를 제거하라는 메시지를 출력한다.

 

핸들을 불러오기 때문에 이 JE는 절대로 실행할 수 없기 때문에, 시작 포인트를

00401024로 바꾸어주려고 한다.

 

그 전, 화면에서, 맨 아래에 있는 MessageBoxA도 NAG에 해당하기 때문에 NOP으로 채워준다.

 

그 후, 상단바에 있는 M을 클릭해 메모리 창으로 들어간다.

 

엔트리 포인트였던 00400000을 찾아 더블클릭 해준다.

 

그 후, 덤프 창에서 아래로 내리다보면 exe의 헤더 시그니쳐인 PE를 확인할 수 있다.

 

그리고 그 아래에선 EntryPoint를 확인할 수 있다.

 

그리고 다시 CPU 창으로 가서 004000E8을 덤프에서 검색해준다.

리틀 엔디안 방식으로 00 00 10 00 으로 읽으면 된다.

 

그리고 이 부분을 변조해줄 것이다.

시작 포인트를 00401024로 바꿔주려 했기 때문에 24라는 값을 입력해준다.

 

실행을 시켜보면, nag가 뜨지 않는 것을 확인할 수 있다.

 

'<CTF> > <LENA tutorials>' 카테고리의 다른 글

[08] LENA reversing tutorial  (0) 2021.11.23
[02] LENA reversing tutorial  (0) 2021.11.07
[01] LENA reversing tutorial  (0) 2021.10.05