Home [리버싱 핵심 원리] 기초 리버싱
Post
Cancel

[리버싱 핵심 원리] 기초 리버싱

💡해당 게시글은 이승원 님의 '리버싱 핵심 원리'를 개인 공부 목적으로 메모하였습니다.


기초 리버싱


리버스 엔지니어링

  • Reverse Engineering(RE, 역공학)
    • 시스템의 구조, 기능, 동작 분석하여 원리 이해하며 단점 보완하고 새로운 아이디어를 추가하는 작업

리버스 코드 엔지니어링

  • Reverse Code Engineering(RCE)
    • 소프트웨어 분야의 리버스 엔지니어링
    • 분석
    • 상세분석
    • 소프트웨어리버싱 관점에서 상세하게 분석

리버싱(분석) 방법

  • 실행 파일의 분석 방법
    1. 정적 분석
      • 파일 실행 없이 파일 겉모습 관찰하여 분석
        • 정보 수집해 해당 프로그램 구조와 동작 원리에 대해 예측 가능
        • 이후 수행될 동적 분석 방법에 대한 아이디어 제공
        • 파일 종류(exe, dll, doc, zip 등), 크기, 헤더(PE) 정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등 다양한 내용 확인
      • 디스어셈블러(Disassembler) 이용내부코드와 구조 확인
        • 디스어셈블러
          • 기계어(컴퓨터 언어)를 어셈블리어(인간 언어)로 변환하는 컴퓨터 프로그램
        • 기계어
          • 컴퓨터가 읽을 수 있는 2진 숫자로 이루어진 언어 (01)
        • 어셈블리어
          • 기계어사람이 보기 쉽게 문자를 기호화해서 나타낸 것
          • 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급언어
          • 컴퓨터와 가까운 언어이기 때문에 컴파일 시 실행 속도가 빠름
    2. 동적 분석
      • 파일을 직접 실행시켜 행위 분석, 디버깅 통해 코드 흐름과 메모리 상태 등을 자세하게 살펴보는 방법
      • 파일, 레지스트리(Registry), 네트워크 등 관찰하며 프로그램 행위 분석
      • 디버거(Debugger) 이용프로그램 내부 구조와 동작 원리 분석 가능
        • 디버깅은 리버싱의 하위 개념

Source Code, Hex Code, Assembly Code

  • 리버싱에서 취급하는 대상 → 보통 실행 파일
    • 소스 코드 없이 실행 파일의 바이너리 자체를 분석 ⇒ 소스 코드와 바이너리 코드 사이 관계 살펴보기 중요
  • Source Code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      #include "windows.h"
      #include "tchar.h"
        
      int _tmain(int argc, TCHAR* argv[])
      {
      	MessageBox(NULL, L"Hello World!", L"www.reversecore.com", MB_OK);
        
      	return 0;
      }
    
    • 개발도구소스 코드 빌드실행 파일 생성
      image
  • Hex Code
    • 생성된 실행 파일 ⇒ 컴퓨터가 이해할 수 있는 2진수(Binary) 형식
      • 해석하기 위해 2진수 → 16진수 형식 변환 필요
    • Hex Editor
      • binary 형식 파일을 hex 형식으로 보여주는 유틸리티
      • _tmain() 소스코드 =빌드과정⇒ Hex Code 변환

        1
        2
        3
        4
        5
        6
        
          int _tmain(int argc, TCHAR* argv[])
          {
          	MessageBox(NULL, L"Hello World!", L"www.reversecore.com", MB_OK);
                    
          	return 0;
          }
        

        image

  • Assembly Code
    • Hex Code도 사람에게 직관적인 형태가 아니기 때문에 사람이 이해하기 쉬운 어셈블리(Assembly) 코드 형태로 변환 필요
    • 디버거를 이용해 helloworld.exe 실행 파일 open
    • OllyDbg
      • 디스어셈블리디버그 두가지 모두 가능한 툴
      • Hex Code디스어셈블 과정을 거쳐 어셈블리 코드로 변환
      • 동적 분석 툴
      • 실행 코드 분석

패치와 크랙

  • 패치(patch)
    • 프로그램 파일 혹은 실행 중인 프로세스 메모리 내용변경하는 작업 image
    • 프로그램의 취약점 수정기능 개선이 목적
      ex) MS의 windows 업데이트
  • 크랙(crack)
    • 패치와 같은 개념이지만 의도가 비합법적이고 비도덕적인 경우
    • 저작권을 침해하는 행위(불법 복제/사용)에 사용



Reference

Docker 명령어

Disk와 Partition