Try Attack/Reverse Engineering[basic]

역공학 기초

D4tai1 2018. 8. 25.

1. cpu의 호환성
 1) cpu(intel, 모바일)가 다르면 같은 mov ax, 10이라도 다르게 실행된다.
  - cpu가 해석하는 방법이 다르다.

 

2. os의 호환성
 1) 자원관리를 쉽게하기 위해 os마다 같은 명령어지만 다른 운영하는 방식을 가지고 있다.
 2) 규격(format) - 컴파일러로 만든다.
  - PE = Windows
  - ELF = Linux
  - OSX = Mach-O
  - APK = Android
 3) 그래서 같은 프로그램이지만 설치하는 파일이 Windows용, Linux용, Android용, IOS용 등으로 나뉜다.
 4) Loader
  - 메모리에 올리는 것[ex, 더블클릭 시 실행, 메모리의 주소가 재배치(relocation)]

- Hz는 1초에 전기신호가 전달된 횟수를 의미[요즘 CPU의 3.5GHz는 1초에 (3.5* 10의 9승) 번 동작]

- 스마트카의 경우도 TCP/IP 기반 통신을 사용하는 것도 있지만 CAN통신을 사용하는 것도 있음

- 아래 그림은 CAN통신을 하는 스마트카의 CPU와 라즈베리파이 및 바나나파이 등을 연결하여

 스크립트를 작성하여 해커가 원하는 기능을 수행할 수도 있다.

 

 

 

3. 스택과 스택프레임
 1) 스택프레임
  - 서브루틴(함수)이 가지는 자신만의 스택영역
 2) BP(base pointer)
  - 스택 내 데이터를 접근 시 프레임포인터를 사용하는 이유는 ESP레지스터는 프로그램이 실행되면서 계속 변하기 때문에 기준주소 사용

 

4. PE(Portable Executable) 파일
 - 윈도우 운영체제에서 사용하는 실행파일 형식

 

 

 1) 구성
  - PE파일은 헤더와 바디로 구성


 2) 헤더(동적크기)
  - PE파일이 어떻게 동작해야하는지에 대한 규칙
 3) 바디
  - 헤더에 적혀 있는 규칙에 따라 실행되는 기계어들이 저장
 4) 파일구조

 [1] IMAGE_DOS_HEADER

  - 실제 윈도우 용 PE헤더 위치를 가리키는 역활

  - DOS 운영체제가 윈도우용 PE파일을 실행했을 때 적절한 오류메세지를 보여줌

 [2] MS-DOS Stub Program

  - DOS 운영체제에서 윈도우용 PE파일을 실행했을 때 보여줄 오류메세지를 저장

 [3] IMAGE_NT_HEADERS

  - 4byte짜리 Signature와 IMAGE_FILE_HEADER, IMAGE_OPTIONAL_HEADER 구조체로 구성

  - IMAGE_OPTIONAL_HEADER

   + Image Base는 메모리에 PE파일이 저장되는 시작주소

   + PE파일에서 확인할 수 있는 RVA는 메모리에 로딩되면서 Image Base 값과 합산된 주소 VA에 저장

   + Address of Entry Point는 프로그램 실행에 대한 제어권이 커널영역에서 코드영역으로

   처음 넘어오는 주소인 entry point를 가리킴

   + Base of Code는 코드 영역이 시작되는 주소 (RVA)를 가리킴, debugger로 오픈 시 코드영역의 맨 윗부분 주소

 

 5) 주소지정방식
  [1] VA(절대주소방식,virtual address)

   - 가상 메모리 상에 저장되는 실제 주소(메모리)

   - PE파일이 메모리에 로드 됬을 때 의미있는 값

 

  [2] RVA(상대주소방식, relative virtual address)

   - 메모리에 로드 시 기준값에서 얼마나 떨어져 있는지를 나타내는 상대 위치

   - PE파일이 메모리에 로드 됬을 때 의미있는 값

  [3] pFile(파일)

   - PE파일 내부에서의 오프셋

   - 물리적으로 하드디스크에 저장되었을 때 의미있는 값

  [+] IAT(Import Address Table)

   - 실행파일(PE파일) 안에 어떤 라이브러리의 어떤 함수를 가져다 쓰는지 기록해놓은 정보

 

  [+] 로더

   - PE파일을 메모리로 로딩할 때 IAT에 기록된 API이름을 참조해서

    실제 주소를 찾아 IAT 안에 API를 가리키는 주소를 적어놓음

   - 코드에서 라이브러리를 참조하는 부분은 IAT 내부에 있는 함수주소를 사

 

  [+] c언어

 

 

'Try Attack > Reverse Engineering[basic]' 카테고리의 다른 글

[crackme1] abex' 1th crackme 풀이 및 복원  (0) 2018.11.07
악성코드와 리버싱  (0) 2018.10.09
전략  (0) 2018.09.16
올리디버거  (0) 2018.09.16
리버싱에 필요한 도구  (0) 2018.09.09

댓글