리버싱 선수 지식

리버싱 2019. 11. 7. 13:47

리버싱

  • 역공학 분석 : 실행 파일을 역으로 분석하는 행위

  • 정상적인 리버싱 : 프로그램 분석 , 업데이트 , 패치 , 악성 코드 분석

  • 악의적인 리버싱 : 프로그램 크랙 , 무단 사용 , 시리얼 키 우회 , 악성 코드 제작/유포

  • 실행 파일 (Excutable File)

    • 명령어에 의해서 특정 작업을 수행할 수 있도록 생성된 파일 ( Code , Data 포함되어 있음 )

    • 각각의 운영체제마다 실행 파일 형식은 다음과 같다.

     

  • Windows - PE ( Portable Exectable )

     

     

  • Linux - ELF ( Excutable & Linkable Format )

     

     

  • MAC - Mach-O ( Mach Object File Format )

    프로그램 & 프로세스 & 프로세서 & 쓰레드

 

  - 프로그램 : 작업을 수행하기 위해서 명령어들이 포함되어 있는 실행 파일 

  - 프로세스 : 작업을 수행하기 위해서 메모리에 올라간 프로그램 단위

  - 프로세서 : 메모리에 올라간 프로세스를 처리하는 CPU

  - 쓰레드 : 생성된 프로세스에서 처리 및 흐름 과정을 담당하는 프로세스 안에 또 다른 프로세스

 

 

  PE 파일

  - Windows에서 사용하는 실행 파일 형식

  - 원본 디렉터리 뿐만 아니라 다른 디렉터리로 이동해도 실행이 가능한 특징을 갖고 있다 

  - 별도의 프로그램 설치 및 관계된 파일이 없어도 윈도우에서 실행 가능

  - PE 파일 이해 중요성

    - 프로세스 적재를 위한 정보 분석

    - API 호출을 위한 IAT 분석

    - 코드 사이즈/섹션 위치 분석

    - 패킹/언패킹 유무 분석

    - 악성 코드 분석  

 

  가상 메모리

  - 프로세스와 메모리 공간을 관리하기 위해서 운영체제가 사용하는 논리적인 메모리

  - 모든 프로세스는 자신만의 가상 메모리를 갖고 있다 , 32bit / 64bit 프로세스 각각 4G / 8G 곤간

  - 운영 체제 규칙에 의해서 실제 물리 메모리 주소와 가상 주소를 매핑한 이후 해당 영역 사용

  - 이때, 서로 다른 프로세스 가상 주소가 물리 메모리 주소로 매핑될때 중첩 및 침범되지 않는다

 

 

  상대 주소 & 절대 주소

 

 - 상대 주소

  * 물리 주소  

  * 고유 주소가 아니며, 특정 영역에서 상대적인 주소를 지정한다

 

 - 절대 주소

  * 가상 주소

  * 메모리의 위치를 식별하는 메모리 공유 주소

 

  

RVA & VA

 

  - RVA

    - Relative Virtual Address

    - PE 파일이 가상 주소 공간 내에 로드된 이후, 이미지의 시작 주소에 대한 상대 주소

    - PE 시작 주소에서 어느정도 떨어져 있는지를 측정할 수 있다

    - RVA = VA - ImageBase 주소 

 

  - VA

    - Virtual Address

    - 가상 메모리 주소 공간에 프로세스의 절대 주소

    - VA = RVA + ImageBase 주소

 

ex ) 513호

   - ImageBase  5층

   - RVA          13호

   - VA            513호

 

 

ASRL

  - Win7 부터 지원하는 메모리 보호 기법

  - 프로그램이 메모리에 로드되는 주소를 랜덤으로 변경하는 기능

 

 

API 

  - Application Programming Interface

  - 운영체제 , 프로그램 언어가 응용 프로그램에서 사용할 수 있도록 기능을 제공하는 인터페이스

  - MS MSDN 문서 참조

 

 

컴파일

  - 모든 헤더와 소스 파일 내용을 합쳐서 하나의 기계어 코드를 생성하는 기능

 

 

DLL

  - Dynamic Linked Libray

  - 여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 포함한 라이브러리

  - 디스크 / 메모리에 로드되는 중복된 코드를 최소화 , 리소스 사용 최소화 , 다른 프로그램 성능 향상

 

 

Static Linking & Dynamic Linking

  - Static Linking

    - 컴파일 진행시  함수가 실행 파일에 연결되는 방식

    - 실행 파일에 함수의 코드가 복사되므로 파일 크기가 증가된다

    - 실행 파일에 함수 코드가 포함되기 때문에 완전한 단독 실행 파일로 생성된다

    - 그렇기 때문에 컴파일이 끝나면 라이브러리 파일이 필요 없다

 

  - Dynamic Linking

    - 프로그램 실행시 함수가 연결된다

    - 실행 파일에 호출할 함수의 정보만 포함하고 실제 함수 코드 정보는 포함되지 않는다

    - 그렇기 때문에 파일 크기가 증가되지 않는다

    - 단, 실행 파일에서 사용할 함수를 갖고 있는 DLL 파일이 꼭 있어야 한다

 

 

DLL 로드 방식

  - 명시적 링킹

    - 프로그램에서 필요한 시점에 DLL/함수 정보를 로드하고 사용한 이후 해제한다

    - 다음과 같은 3개의 함수를 이용하여 DLL을 로드한다

 

    LoadLibrary()   - 필요한 DLL을 프로세스 가상 메모리에 매핑 / 로드하는 함수 (DLL 불러옴)

    GetProcAddress()  - DLL 함수의 포인터 / 주소를 획득하는 함수 (DLL로부터 함수를 불러옴) 

    FreeLibrary()  - 프로세스 가상 메모리에서 DLL을 반환 / 언로드하는 함수 (DLL 해제함)

    

    - LoadLibrary 함수를 이용하여 프로세스 메모리 공간에 동적으로 DLL을 로드한다

    - 그리고 GetProcAddress() 함수를 이용하여 DLL에서 사용하고자 하는 함수의 포인터/주소를 획득한다

    - 획득한 함수 포인터/주소로 원하는 함수를 호출하고 , 사용 이후에는 FreeLibrary() 함수를 이용하여 DLL을 언로드한

      다

 

- 암시적 링킹

  - 실행 파일 자체에서 사용할 DLL과 함수 정고를 포함한 이후 프로그램 실행시 로드한다

  - 즉 , 프로그램이 시작되면서 해당 DLL을 바로 로드 하는 방식이다

  - PE 로더가 PE 파일 안에 있는 함수 내용/목록을 확인하여 DLL파일을 메모리에 로드한다

 

OllyDbg

  - 프로그램을 분석할때 사용하는 디버거

  - 선수 지식: 어셈블리어 , PE파일 구조 , 기본개념 , 메모리 주소 관련

 

 

'리버싱' 카테고리의 다른 글

화면 잠금 프로그램 'Lock Workstation' 제작  (0) 2019.11.13
PE 파일 분석 IAT & Pre Binding  (0) 2019.11.11
PE 파일 분석 ( PE 바디 - 섹션 )  (0) 2019.11.11
PE 파일 분석 ( RVA to RAW )  (0) 2019.11.11
PE 파일 분석  (0) 2019.11.07

설정

트랙백

댓글