본문 바로가기
  • 개발 삽질 블로그
해킹 및 보안/리버싱

리버싱 입문

by 갹둥 2022. 10. 2.

교내 보안 동아리 활동으로 2학기~겨울방학까지 리버싱 스터디를 진행하였습니다.

벌써 어지럽지만 리버싱 개념을 잡고 어셈블리부터 차근차근 공부하기로

리버싱 입문 chapter01 읽고 정리한 내용입니다

 

 

리버싱 엔지니어링(Reverse Engineering)

소프트웨어 공학의 한 분야로, 이미 만들어진 시스템을 역으로 추척하여 시스템의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 처음의 문서나 설계 기법 등의 자료를 얻어내는 것, 역공학이라고도 함

 

*필요한 지식: 레지스터, 메모리, 스택, 어셈블러, PE 구조, 디버깅 등

 

 

정적 분석(static analysis)

- 파일을 실행하지 않고, 파일을 관찰하여 분석하는 방법

- 주로 악성코드와 같이 실행하면서 분석하기 어려운 시스템을 정적 분석을 통해 분석



동적 분석(dynamic analysis)

- 실제 또는 가상 프로세서에서 프로그램을 실행하며 분석하는 방법

- 프로그램의 동작 과정, 기능, 메모리/CPU 사용량, 스택값, 전체 성능 등의 정보를 확인할 수 있음

 

 

 

1. 프로그램 실행 구조

 

 

 

2. 레지스터

: CPU에서 사용하는 고속의 기억장치, 연산을 수행하기 위해 메모리에 있는 데이터를 가져옴

  • EAX: 곱셈과 나눗셈 명령에서 사용되며, 함수의 반환값을 저장
  • EBX: 인덱스에 사용
  • ECX: 반복 카운터 저장
  • EDX: EAX와 같이 사용되며 부호 확장 명령 등에 활용
  • ESI: 데이터 복사 및 조작 시 소스 데이터 주소 저장
  • EDI: 복사 작업을 할 때 목적지 주소 저장
  • EBP: 하나의스택 프레임의 시작 주소 저장
  • ESP: 하나의 스택 프레임의 끝 지점 주소 저장, PUSH, POP 명령어에 따라서 4바이트씩 변함
  • EIP: 다음에 실행할 명령어가 저장된 메모리 주소 저장

 

3. 스택

  • LIFO 방식으로 동작, PUSH, POP
  • 스택은 시작 주소에서 주소가 작아지는 방향으로 데이터가 쌓인다.
  • PUSH: ESP-4 POP: ESP+4
  • ESP(스택 포인터): 현재 프로그램이 사용하는 스택의 위치
  • 스택 프레임: 서브루틴(함수)이 가지는 자신만의 스택 영역, 함수가 호출될 때 생성, 종료될 때 소멸, 복귀 주소를 POP

4. PE 파일

  • 윈도우에서는 실행파일을 PE(Portable Executable) 파일이라고 부른다.
  • PE 파일은 헤더와 바디로 구성된다.
    *header: 프로그램을 실행하는데 필요한 기본 정보, 규칙
    *body: 기계어(코드 및 데이터)
  • 엔트리 포인트가 PE 파일 실행이 시작되는 주소임
  • PE 포맷
    * 실행 계열: exe, scr
    *라이브러리 계열: dll, ocx, cpl, drv
    *드라이버 계열: sys, vxd
    *오브젝트 계열: dbj
  • 주소 지정 방법
    *pFile: PE 파일 내부에서의 오프셋
    *RVA: 메모리에 로드됐을 때, 기준값에서 얼마나 떨어져 있는지를 나타내는 상대위치
    *VA: 가상 메모리상에 저장되는 실제 주소
    ->pFile은 하드디스크에 저장되었을 때, VA와 RVA는 메모리에 로드됐을 때 의미가 있는 값임

 

 

5. 어셈블러

  • 컴퓨터가 이해할 수 있는 연속적인 비트로 구성된 기계어를 사람이 알아볼 수 있도록 만든 일종의 매크로 모음
  • 기계어와 1:1로 매칭됨
  • 최대 3개까지 인자를 받아들일 수 있음, 오른쪽에서 왼쪽으로 로직이 흘러감
    ex) ADD EAX, EBX -> EAX 레지스터 값에 EBX 레지스터 값을 더해 EAX 레지스터에 저장
    ->01D8

 

 

 

6. OllyDbg

  • 윈도우용 어셈블러를 분석할 수 있는 디버거(http://www.ollydbg.de/)

    --------------------------------------------------------------------------------------------------------------------
    리버싱 기초 예제 abex crackme
    Lena 강의 등 참고하면 좋음