본문 바로가기

보안/리버싱

#1 리버싱이란?

dreamhack ReversingCource #1

프로그램: 컴퓨터가 실행해야 할 명령어의 집합. 바이너리라고도 불린다.

기본 코드

전처리: 소스코드가 컴파일에 필요한 형식으로 가공되는 과정이다.

  • 주석 제거, 매크로 치환, 파일 병합의 과정을 거침.
  • -E 옵션을 사용하여 소스 코드의 전처리 결과를 확인 가능.

opt.c를 전처리한 결과 -> opt.i

 

컴파일: 소스 코드를 어셈블리어로 번역하는 과정이다.

  • -S 옵션을 이용하여 소스코드를 어셈블리 코드로 컴파일 가능

opt.c를 컴파일

 

어셈블: 어셈블리 코드를 기계어로 번역하고, 실행 가능한 형식으로 변환하는 과정

  • 컴파일로 생성된 어셈블리어 코드를 ELF 형식의 목적파일로 변환.
  • -c 옵션을 통해 opt.S를 목적파일로 변환.
  • file 명령어 통해 파일 형식을 확인
  • 해당 결과를 hexdump 통해 16진수로 출력


링크: 여러 개의 목적 파일을 하나로 묶고, 필요한 라이브러리와 연결해주는 과정

  • 링크는 함수가 잘 실행될 수 있도록 라이브러리와 함수를 연결해주는 것.
  • 링크를 거치고 나면 실행할 수 있는 프로그램이 완성됨
  • 링크 과정에서 링커는 main()함수를 찾는데, opt 소스에는 main함수 없음. 에러 방지하기 위해 --unresolved-sumbols 옵션 추가.

 

디스어셈블: 바이너리를 어셈블리어로 번역하는 과정

  • objdump -d 파일명 -M intel 명령어 통해 디스어셈블된 결과 확인 가능

 

디컴파일: 바이너리를 고급 언어로 번역하는 과정

  • 고급언어로 바이너리를 번역하여 코드를 이해하기 쉽도록.

'보안 > 리버싱' 카테고리의 다른 글

reversing.kr - Easy ELF  (0) 2024.08.26
x64 assembly basic  (0) 2022.07.10
Dreamhack Quiz: x86 Assembly 2  (0) 2022.07.10
86 Assembly: Essential Part(1) quiz  (0) 2022.07.08
#2 동적분석과 정적분석  (0) 2022.07.01