시스템 해킹 03주차

준필·2022년 1월 26일
0

시스템 해킹

목록 보기
3/4
post-thumbnail

바이너리 파일(Binary File)

  • 파일 중 텍스트 파일이 아닌 파일, 즉 데이터의 저장과 처리를 목적으로 0과 1로 나타나는 파일이며 jpg, gif, pdf 등이 여기에 해당한다.
  • 바이너리 파일을 읽거나 쓸 때는 프로그램이나 하드웨어 프로세서를 통한 변환 과정이 필요하다. 이 과정을 복호화(decoding)이라고 한다. 0과 1로만 구성되어 있어 원본 그대로는 의미를 파악할 수 없기 때문이다.

파일 헤더(File Header)

  • 바이너리 파일에 포함되는 정보로 이 바이너리 파일에 대한 정보를 담는다.

파일 시그니쳐(File Signature)

  • 파일에 대한 정보를 주는 파일 헤더 또는 파일 헤더와 파일 푸터에 모두 존재하는 숫자 식별자이다.
  • magic number라고도 불리는데 모든 파일 형식은 고유의 파일 시그니쳐를 가지며 이는 다른 형식의 파일 시그니쳐와 중복되지 않는다.

파일 시그니쳐는 파일의 위/변조를 찾는 등의 보안 목적에서 사용된다.

PE & ELF

PE(Portable Exacutable)

  • 윈도우 OS에서 표준 바이너리 파일 형식이다.

ELF(Exacutable and Linkable Format)

  • UNIX 기반 OS에서 표준 바이너리 파일 형식이다.

Mac OS에서는 Mach-O 파일 형식이 사용된다.


컴파일(Compile)

  • 아래의 예시는 C 프로그램의 컴파일 과정이다.

1. 전처리(Preprocessing phase)

  • #include, #define 등과 같은 전처리기를 토대로 원래 C 프로그램을 변경한다.
  • .c 파일에서 .i 파일이 된다.

2. 컴파일(Compilation phase)

  • C 프로그램을 어셈블리어 프로그램으로 번역한다.
  • 구문 오류(syntax error)가 발생하는 시점이다.
  • .i 파일에서 .s 파일이 된다.

3. 어셈블(Assembly phase)

  • 어셈블리어 프로그램(text)을 기계어 프로그램(binary)으로 변환한다.
  • .s 파일에서 .o파일이 된다.

4. 링킹(Linking phase)

  • .o 목적 파일들을 모두 합쳐 실행 가능한 파일을 생성한다.
  • 작성된 코드가 라이브러리들과 연결된다.

디스어셈블러

  • 기계어를 어셈블리어로 변환하는 프로그램을 의미한다.

IDA

  • 가장 많은 기능을 가지고 있으나 유료인 디버거이다.

Ghidra

  • 미국 국가 안보국에서 만든 리버스 엔지니어링을 위한 프레임워크이다.

gdb

  • C, C++ 등 여러 언어를 지원하는 디버거이다.

x64dbg

  • DLL, EXE 파일을 어셈블러 코드로 볼 수 있다.(윈도우 전용이라는 뜻)

Ollydbg

  • 소스 코드가 없을 때 유용하게 사용되는 바이너리 코드 분석 디버거이다.
profile
공부할 게 너무 많잖아?

0개의 댓글