전체 글

Research Engineer
Information Technology/File Format

IMAGE_NT_HEADERS

IMAGE_NT_HEADERS는 DWORD 타입인 Signature와 구조체인 FileHeader, OptionalHeader를 가지고 있다. Signature는 IMAGE_NT_HEADERS의 시작을 부분이며 이 구조체의 총 크기는 0xF8h이다. (Signature 0x4h, FileHeader 0x14h, OptionalHeader 0x0h) 2664 typedef struct _IMAGE_NT_HEADERS { 2665 DWORD Signature; /* "PE"\0\0 */ /* 0x00 */ 2666 IMAGE_FILE_HEADER FileHeader; /* 0x04 */ 2667 IMAGE_OPTIONAL_HEADER32 OptionalHeader; /* 0x18 */ 2668 }IMAGE_..

Information Technology/File Format

MS-DOS Stub Program

시작점에서부터 IMAGE_DOS_HEADER의 사이즈인 64Bytes 만큼 떨어진 곳에서 찾을 수 있다. 이 부분은 IMAGE_DOS_HEADER와 같은 구조체가 아닌 이름 그대로 프로그램이다. 일반적인 실행파일처럼 실행한다. 이 프로그램에는 "This program cannot be run in DOS mode."라는 문자열을 볼 수 있다. 32bit 프로그램을 도스(16bit)에서 실행할 때 위의 문자열을 출력(16bit 환경에서 실행 하는 것을 방지하는 역할) 해주는데 쓰인다. 그래서 현재는 사용하지 않는 부분이다. 이 부분은 개발 환경 등에 따라 크기가 가변적이다. (MS-DOS Stub Program의 크기가 가변적이기 때문에 IMAGE_DOS_HEADER의 e_lfanew의 값이 가변적이게 되..

Information Technology/File Format

IMAGE_DOS_HEADER

64byte(0x40)의 고정된 크기를 가지며, 디스크상의 첫 부분과 메모리상 ImageBase에 위치하고 있다. ImageBase는 프로세스의 가상 메모리 0 ~ FFFFFFFFh 범위(32bit의 경우)에서 PE파일이 로딩(매핑)되는 시작 주소를 나타내는 부분이다. DOD Header의 처음 2byte는 DOS Header 구조체의 e_magic 인자로 MZ로 시작한다. 이는 DOS 개발자 가운데 한명인 Mark Zbikowski의 이니셜로 DOS Header의 시그니쳐로 사용하고 있다. e_magic은 MZ를 나타내는 첫 2bytes 로 DOS Header 의 식별자이고, 마지막의 e_lfanew는 가변적인 값을 가지는 것으로 PE Header(NT header)의 주소를 알아볼 수 있다. e_lf..

Information Technology/File Format

Runtime Data Areas의 구조

Runtime Data Areas는 Process로서의 JVM이 프로그램을 수행하기 위해 OS로부터 할당 받는 메모리 영역이다. Runtime Data Areas는 각각의 목적에 따라 5 개의 영역으로 나뉜다. PC Registers Java Virtual Machine Stacks Native Method Stacks Method Area Heap 이 중에서 앞의 세가지 메모리 영역, 즉 PC Register와 두 개의 Stack 영역은 각 Thread 별로 생성이 되고 Method Area 와 Heap은 모든 Thread에게 공유된다.

Information Technology/Programming

The Java Virtual Machine(JVM)

Java Virtual Machine을 풀어서 해석하면 다음과 같다. Java : Java언어를 사용한다. Virtual : 가상화, 즉 Hardware 적인 형태가 아닌 Software 적인 형태이다. Machine : 독자적으로 작동할 수 있는 메커니즘과 구조를 가지고 있어 하나의 축약된 컴퓨터이다. JVM은 표준화된 정의가 나오면 JVM벤더들은 이에 맞도록 자신들의 JVM을 구현하기 때문에 정통 JVM이라는 것이 없다. 그래서 자세한 설계도를 만들어 제공하지 않는다. 단지 JVM은 이렇게 저렇게 해야 한다는 식의 정의만으로 존재할 뿐이다. JVM은 Class Loader System을 통해 Class 파일들을 JVM으로 로딩한다. 로딩된 Class 파일들은 Execution Engine을 통해 해석..

Information Technology/Programming

The Java Application Interface

JRE는 Java 실행 환경인데 여기에는 Java Virtual Machine과 Java API, 그리고 Native Method 등이 포함되어 있다. 이중 Java Application interface, 즉 Java API는 한마디로 Runtime Library의 집합이다. Java API는 OS 시스템과 Java 프로그램의 사이를 이어주는 역할(Interface)을 한다. Java API는 Native Method를 통해 OS 자원과 연계되어 있고 다른 한 편으로는 Java 프로그램과 맞닥뜨리고 있다. 만약 java.io.InputStream 이라는 클래스를 사용하여 특정 파일 시스템의 정보를 읽어 온다고 가정하면 Java는 Class 파일 내에 있는 java.io.InputStream의 Symbo..

Information Technology/Programming

The Java Class File Format

Class 파일은 다음의 네 가지 특징을 가지게 됩니다. Compack 한 형태 Bytecode는 Source Code를 단순히 JVM의 언어로 번역해 놓은 것이기 때문에 Source Code와 비슷한 크기를 가지고 있습니다. Compiler를 통해 실행파일로 변경되는 과정에서 Library들을 포함하는 C++, Delphi와 같은 언어보다 작은 크기입니다. 이렇게 작은 크기를 유지할 수 있는 이유는 Class파일에는 실제로 참조하는 라이브러리를 포함하고 있지 않고, 단지 Symbolic Reference 만을 가지고 있기 때문입니다. 이 Symbolic Reference는 참조하는 객체의 특정 메모리 번지로 참조관계를 구성한 것이 아닌 참조하는 대상의 이름만을 지칭한 것입니다. Class 파일이 JVM..

Information Technology/Programming

The Java Language and JVM

보통 Java 라는 언어를 언급할 때 가장 자주 등장하는 것이 바로 객체지향이라는 단어입니다. 이것은 Java라는 언어의 중요한 software 기술 중의 하나입니다. Java라는 언어는 그리 오래 되지 않은 프로그래밍 언어입니다. 그렇기 때문에 비교적 최신의 Software 기술이 적용되어 있습니다. 그 중 하나가 객체지향인 것입니다. 그 밖에도 Multi-Threading, SEH(Structured Exception Handler), Garbage Collection, Dynamic Linking, Dynamic Extension 등의 기술들이 접목되어 있습니다. Java의 Class 파일은 JVM 위에서 다시 실행 가능한 형태로 변형되는데 이 때 Linking 작업이 발생하게 됩니다. 그래서 Cl..

hakawati
Hakawati Security Lab