반응형

일단, fd를 들어간 후, 어떤 파일들이 설치되어 있는지 ls명령어를 사용하여 확인한다.

위의 화면을 보면, fd 실행파일과, 소스, flag가 있는 것을 알수 있다.

우리가 얻어야 할 것은 이 flag에 저장되어 있는 키값이다.


이 문제는 소스 분석만 잘한다면 쉽게 풀수 있는 문제이다.(물론 나한텐 어렵지만ㅜㅜ)


cat [파일이름] 명령어를 써주면 파일의 속내용을 화면으로 뿌려주는데, cat fd.c를 하면 fd의 소스를 볼수 있다.

우리가 어떤 값을 입력했을 때, 입력한 개수는 argc에 저장되고 그 값은 배열 argv[]에 저장된다는 것을 알고 있을 것이다.


위에서 부터 천천히 분석해보면 입력하는 값이 2개 이하면 "pass argv[1] a number"가 출력되고 프로그램이 종료된다. 입력하는 값이 두개 이상이되어야 된다는 것을 알 수 있다.


변수 fd에는 atoi(argv[1])-0x1234를 연산한 값이 저장되고, len에는 read(fd, buf, 32)가 저장된다. 여기서 read() 함수를 잘 살펴보아야 한다.

read함수의 첫번째 인자에는 파일 디스크립터가 들어간다.

- 0 : stdin // 1 : stdout // 2 : stderr

두번째인자에는 파일을 읽어드리는 버퍼가 들어가고, 세번째엔 버퍼의 크기가 들어간다.


>>파일 디스크립터에는 파일이 입력되야하므로 fd값은 0이 되어야한다. 어떤 값에서 16진수 0x1234를 뺀 값이 0이 되어야 하므로, 0x1234 즉 십진수로 변환한다면 4660값이 들어가야 한다. (첫번째 입력값은 4660!!!!)

>>두번째 입력값과 문자열 "LETMEWIN"을 비교하였을 때 같아야 하므로!!!답은??ㅋㅋㅋㅋ


소스를 천천히 분석하고 답을 알았으니 fd를 실행시켜 값을 입력하면~~~

flag에 들어있는 키값을 볼 수 있다.


반응형

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

PE헤더-NT Header  (0) 2014.08.03
PE헤더-Dos header/Dos stub  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07
반응형

NT Header에는 IMAGE_NT_HEADERS 구조체가 있는데, 3개의 멤버로 구성되어 있다.

그 중 Signature은 50450000h("PE 00")값을 가진다. 또한 File Header와 Optional Header 구조체가 있다.


File Header


IMAGE_FILE_HEADER 구조체는 파일의 개략적인 속성을 나타내는데, 옆의 그림에서 보이는 4가지 멤버가 있지 않으면 파일의 정상적 실행이 불가능하다.





1. Machine

머신 넘버는 CPU별로 고유한 값이다.


2. Number Of Sections

코드, 데이터, 리소스 등이 각각의 섹션에 나뉘어 저장되는데 그 섹션의 개수를 나타낸다.


3. Size Of Optional Header

IMAGE_NT_HEADERS 구조체의 마지막 멤버인 IMAGE_OPTIONAL_HEADER32 구조체의 크기를 나타낸다. 


4. Characteristics

파일의 속성을 나타내는 값이다. 실행 가능한지 DLL파일인지 등을 bit OR형식으로 조합한다.


참고로 IMAGE_FILE_HEADER의 TimeDataStamp 멤버는 파일의 실행에 영향을 미치지 않지만, 해당 파일의 빌드 시간을 알려준다.

위는 IMAGE_FILE_HEADER 구조체를 나타낸 것이다.


Optional Header

PE헤더의 구조체 중 가장 크기가 큰 구조체가 IMAGE_OPTIONAL_HEADER32이다.

1. Magic : IMAGE_OPTIONAL_HEADER32인 경우 10B, IMAGE_OPTIONAL_HEADER64(64bit)는 20B값을 가진다.


2. Address Of Entry Point

EP의 RVA값을 가진다. 프로그램 최초 시작 주소이다.


3. ImageBase

프로세스 가상 메모리는 0~FFFFFFFF까지 광범위한데 이 광활한 메모리에서 PE파일이 로딩되는 시작주소를 나타낸다. 일반적으로 EXE 파일의 ImageBase값은 00400000, DLL은 10000000이다. PE로더는 PE파일을 실행시키기 위해 프로세스를 생성하고 메모리에 로딩한 후 EIP 레지스터 값을 ImageBase+AddressOfEntryPoint 값으로 세팅한다.


4. SectionAlignment, FileAlignment

PE바디는 섹션으로 나뉘어 있는데 파일에 섹션의 최소단위를 나타내는 것이 FileAlignment이고, 메모리에서 섹션의 최소단위를 나타내는 것이 SectionAlignment이다. 섹션 크기는 반드시 FileAlignment/SectionAlignment의 배수가 되어야한다.


5. Size Of Image

PE파일이 메모리에 로딩되었을때 가상 메모리에서 PE Image가 차지하는 크기를 나타낸다. 


6. Size Of Header

PE헤더의 전체 크기이다. FileAlignment의 배수가 되어야 한다. 


7. Subsystem

Subsystem값을 보고 파일의 종류를 구분할 수 있다.

 값

 의             미

 1

 드라이버 파일 - 시스템 드라이버

 2

GUI 파일 - 창 기반 어플리케이션 

 3

CUI 파일 - 콘솔 기반 어플리케이션 


8. Number Of Rva And Sizes

IMAGE_OPTIONAL_HEADER32 구조체의 마지막 멤버 DataDirectory 배열 갯수를 나타낸다. 


9. DataDirectory

IMAGE_DATA_DIRECTORY 구조체 배열로 각 항목마다 정의된 값을 가진다.


위는 notepad의 IMAGE_OPTIONAL_HEADER 구조체 영역을 가져온 것이다.











반응형

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

"pwnable.kr" fd 문제풀이  (0) 2014.11.04
PE헤더-Dos header/Dos stub  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07
반응형

PE파일 구조를 자세히 들여다보자.


Dos Header

도스헤더는 PE file format을 만들 당시 Dos파일에 대한 호환성을 위해 만들어졌다. PE파일의 첫 부분에는 DOS EXE Header를 확장시킨 IMAGE_DOS_HEADER 구조체가 존재한다. 이 구조체에서 중요한 멤버는 e_magic과 e_lfanew가 있다.

e_magic 에는 dos signature("MZ")가 존재하고, e_lfanew 에는 NT HEADER 구조체가 존재한다.











notepad를 열어 Dos header 부분을 보면 4D5A(MZ), e_lfanew값은 000000E0을 알 수 있다.


Dos Stub

Dos stub는 옵션으로 존재하고 크기도 일정하지 않다. 코드와 데이터의 혼합으로 이루어져 있으며, Windows에서는 dos stub부분이 실행되지 않는다.

만약, Dos 환경에서 notepad가 실행되면 MS-DOS 호환모드를 가지고 있어 This program cannot be run in DOS mode를 출력하고 종료해버린다.

반응형

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

"pwnable.kr" fd 문제풀이  (0) 2014.11.04
PE헤더-NT Header  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07
반응형

PE(Portable Executable) File 이란?

PE파일은 Windows 운영체제에서 사용되는 실행파일들을 말한다. 리버싱은 어떤 프로그램의 구조와 실행원리 등을 분석하는 것이므로 PE파일 구조를 상세히 알아보는 것이 중요하다.




PE File 종류




PE File의 대략적 구조



PE 파일의 구조에서 Dos header에서 Section header까지를 PE헤더라 하고, 나머지 부분을 PE바디라고 한다. 파일의 내용은 코드(.text), 데이터(.data), 리소스(.rsrc)로 나뉘어져 섹션에 저장된다.  섹션 헤더에는 각 섹션에 대한 크기, 위치, 속성 등이 정의되어 있고, PE헤더의 끝과 섹션의 끝부분에는 NULL padding 영역이 존재한다. 컴퓨터에서 패킷을 처리할 때 효율을 높이기 위해 최소 기본 단위 개념이 사용된 것이다. 파일/메모리에서 섹션의 시작은 최소 기본 단위의 배수에 해당되는 위치고 나머지는 NULL로 채워진다.




VA?? RVA??

PE파일과 메모리는 구조는 같으나, 파일은 offset, 메모리는 VA로 위치를 표시한다. (위의 그림에서는 offset이다.) 

VA프로세스의 가상 메모리의 절대주를 뜻하고, RVA어느 기준위치에서부터 상대위치를 뜻한다. 관계식은 아래와 같다.



PE 헤더 내의 정보는 RVA 형태로 되어있는게 많은데, 그 이유는 PE파일이 프로세스 가상 메모리의 특정 위치에 로딩될 때, 다른 PE파일이 이미 로딩되어 있을 수 있기 때문이다. 그럴 경우 다른 위치로 로딩을 다시 해주어야 하는데(재배치) VA로 되어있으면, 정상적인 엑세스가 이루어지지 않을 수도 있기 때문이다. RVA는 재배치가 발생해도 기준위치에 대한 상대위치가 바뀌지 않기 때문에 원할한 로딩이 이루어진다.



반응형

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

"pwnable.kr" fd 문제풀이  (0) 2014.11.04
PE헤더-NT Header  (0) 2014.08.03
PE헤더-Dos header/Dos stub  (0) 2014.08.03
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07
반응형

실행 파일을 분석하는 방법은 크게 두 가지로 나눌 수 있다. 

1. 정적분석

파일을 실행하지 않고, 파일의 겉모습만을 관찰하여 분석하는 방법이다. 파일의 종류라던가, 압축 정보, 크기, 헤더등의 다야한 내용을 확인한다. 예를 들어, 악성코드 같은 경우는 실행하면서 분석하기엔 큰 리스크가 따를 수 있으므로, 정적분석 방법을 이용하여 분석한다.  

대표적인 툴로는 디스어셈블러의 IDA가 있다. 디스어셈블러를 이용하여 내부 코드와 구조를 확인하는 방법도 정적분석의 범위에 포함되기 때문이다.

IDA의 장점으로는 거의 모든 CPU에서 지원되고, 각종 플러그인 역시 지원된다. 기계어 코드로 부터 컴파일러 특유의 라이브러리 함수를 산출해낼 수 있는 기능이 있으며, 파라미터 사용을 철회할 수 있는 기능도 보유하고 있다. 무엇보다. 4.9버전은 무료로 지원되고 있다.

2. 동적분석

동적 분석은 파일을 직접 한줄씩 실행시켜 분석하고, 디버깅하여 자세하게 살펴보는 방법이다. 파일, 레지스트리 등을 관찰하면서 프로그램의 실행원리를 분석한다. 디버거를 통해 프로그램 내부 구조와 동작원리를 분석 가능하다.

대표적인 툴로는 디버거인 올리디버거가 있다.


리버서들이 가장 많이 사용하는 디버거로서, 여러 플러그인도 많이 존재한다.


 

반응형

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

"pwnable.kr" fd 문제풀이  (0) 2014.11.04
PE헤더-NT Header  (0) 2014.08.03
PE헤더-Dos header/Dos stub  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31

+ Recent posts

반응형
반응형