ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 01 - 리버싱
    해킹/리버싱 이론 2024. 10. 6. 18:34

    리버싱(Reversing) - 만들어진 프로그램을 역으로 해체하여 코드 단에서 분석

    Binary

    Compiler : 고급언어를 목적 코드(Object Code)로 번역하는 프로그램 - GCC, Clang, MSCV

    Compile : 소스코드를 목적 코드(Object Code) 형식으로 번역하는 동작

    Assembler : Assembly Language를 기계어로 번역하는 프로그램

    Binary : 프로그램과 동의어 (Stored-Program Computer에서 프로그램이 저장장치에 이진 형태로 저장되기 때문)

    Interpreting : 사용자의 입력, 스크립트를 바로바로 번역하여 CPU에 전달하는 동작 - Python, Javascript

    Interpreter : 인터프리팅을 하는 프로그램

     

    더보기

    컴파일
    장점:
    1. 속도: 실행 속도가 빠름.
    2. 오류 발견: 컴파일 시 문법 오류를 찾음.
    3. 배포 용이성: 실행 파일 형태로 배포 가능.
    단점:
    1. 개발 속도 느림: 수정 후 다시 컴파일해야 함.
    2. 환경 의존성: 특정 플랫폼에 종속적.
    3. 디버깅 어려움: 최적화로 인해 복잡해질 수 있음.
    인터프리팅
    장점:
    1. 개발 속도: 즉시 실행 가능.
    2. 플랫폼 독립성: 모든 환경에서 실행 가능.
    3. 디버깅 용이성: 실시간 오류 수정 가능.
    단점:
    1. 속도 느림: 한 줄씩 해석하므로 느림.
    2. 런타임 오류: 실행 중에만 오류 발견.
    3. 자원 소모: 더 많은 메모리와 CPU 사용.

    컴파일  과정 (Linux / GCC)

    1. 전처리
      1. 주석 제거
      2. 매크로 치환 (#define 으로 정의된 값들을 전부 치환)
      3. 파일 병합
    2. 컴파일
      1. 소스 코드를 어셈블리어로 번역
      2. 문법 오류가 있다면 컴파일을 멈추고 에러 출력
    3. 어셈블
      1. 컴파일로 생성된 어셈블리어 코드를 ELF형식의 목적 파일(Object file)로 변환
      2. ELF는 리눅스의 실행 파일 형식 (윈도우라면 PE)
      3. 어셈블 후에는 기계어로 번역되며 해석하기 어려워짐
    4. 링크
      1. 여러 목적파일들을 연결하여 실행 가능한 바이너리로 만드는 과정
      2. 다른 라이브러리에 있는 함수들을 호출할 때 필요한 파일들을 링크함
      3. 링크 후에 실행 할 수 있는 프로그램이 완성됨

    Disassemble

    기계어를 다시 어셈블리어로 번역 - 거의 일대일로 대응되어 오차가 없음

    Decompile

    어셈블리어를 고급 언어로 번역 - 대응 관계가 없어 변수,함수명은 전부 사라지고 일부 코드는 변형됨

    '해킹 > 리버싱 이론' 카테고리의 다른 글

    IDA 사용법 및 문법  (0) 2024.10.07
    03 - x86 Assembly  (1) 2024.10.06
    02 - 컴퓨터 구조 / Window memory layout  (2) 2024.10.06

    댓글

Designed by Tistory.