디지털포렌식과 친해지기
  • 디지털포렌식전문가 2급 실기와 친해지기(실기)
    • 1. 디지털 포렌식 실기 준비하기
      • 1. BIT, BYTE, 파일 그리고 Hash
      • 2. 섹터와 사본 이미지 생성
        • 2-1. FTK Imager 활용 물리이미징(Registry 쓰기방지)
        • 2-2. EnCase 활용 물리이미징(EnCase 쓰기방지)
        • (연습용) 가상디스크 만들기
      • 3. 파티션과 파일시스템 복구
        • 3-1) 파티션과 파티션 테이블
          • 3-1.1) GPT 헤더, 파티션 Entry 복구
        • 3-2) 파일시스템과 파일시스템 복구
        • 3-3) 파일시스템 복구 실전 연습
      • 4-1. 무료도구 활용 분석연습
        • 0) 이미지 획득 및 파일시스템 복구
        • 1) 저장매체와 파일시스템 분석
        • 2) 파일과 친해지기
        • 3-1) 파일 관련 분석 1
        • 3-2) 파일 관련 분석 2
        • 4-1) 윈도우 아티팩트1
        • 4-2) 윈도우 아티팩트2
        • 5) 주요 응용 프로그램 아티팩트
          • 5-1) Sqlite 열어보기
        • 6) 키워드 검색 / Base64 Decode
        • 7) bitlocker
        • 8) 가상머신(참고)
        • 무료도구 활용 분석연습 정리
      • 4-2. EnCase 활용 분석연습
        • 0) 이미지 획득 및 파일시스템 복구
        • 1) 저장매체와 파일시스템 분석
        • 2) 파일과 친해지기
        • 3-1) 파일 관련 분석 1
        • 3-2) 파일 관련 분석 2
        • 4-1) 윈도우 아티팩트1
        • 4-2) 윈도우 아티팩트2
        • 5) 주요 응용 프로그램 아티팩트
          • 5-1) Sqlite 열어보기
        • 6) 키워드 검색 / Base64 Decode
        • 7) bitlocker
        • 8) 가상머신(참고)
        • EnCase를 활용한 분석연습 정리
      • 5. 주관식 - 기본 절차 및 증거법 관련
        • (정리 중) 디지털 증거관련 주요 판례
      • 6. 답안 제출 및 보고서 작성
      • 7. 요령 및 주의사항
    • 2. 실력 다지기
      • 1. 문제 저장매체 만들고 풀어보기
        • 기초 연습문제1-분석해보기(무료도구)
        • 기초 연습문제1-분석해보기(EnCase)
      • 2. 파일시스템 복구 연습
      • 3. NTFS 로그 분석 연습
    • 3. 실전 연습 문제
      • 2018 실전 연습 문제
        • 2018 실전 연습 - 분석해보기(무료도구)
        • 2018 실전 연습 - 분석해보기(EnCase)
      • 2019 실전 연습 문제
        • 2019 실전 연습 - 분석해보기(무료도구)
        • 2019 실전 연습 - 분석해보기(EnCase)
      • 2020 실전 연습 문제
        • 2020 실전 연습 - 분석해보기(무료도구)
        • 2020 실전 연습 - 분석해보기(EnCase)
      • 2023 실전 연습 문제(종합유형)
        • 2023 실전 연습 - 분석해보기(무료도구)
        • 2023 실전 연습 - 분석해보기(EnCase)
      • 2024 실전 연습 문제
        • 2024 실전 연습 - 분석해보기(무료도구)
        • 2024 실전 연습 - 분석해보기(EnCase)
    • 4. 기출 유형
  • 디지털포렌식과 친해지기
    • 1. BIT의 저장
      • 0) 준비사항!
        • 0-1) 주요 분석 도구 간단 소개 및 설정
        • 0-2) Python 을 이용한 개발 환경 구성
        • 0-3) Python 소스로 실행파일 만들기
      • 1) BIT, BYTES와 파일 그리고 Hash
        • 1-1) Hex Viewer 만들기
        • 1-2) BIT의 저장(참고)
      • 2) 저장매체와 섹터 그리고 물리이미징
        • 2-1) 가상 디스크 설정
        • 2-2) 물리이미징(raw) 실습
        • 2-3) 물리이미징 수집 도구 만들기(기초)
      • 3) 파티션
        • 3-1) MBR 파티션 테이블 구조
        • 3-2) GPT(GUID Partition Table) 구조
        • 3-3) 파티션 분석 도구 만들기(기초)
      • 4) 파일시스템 기초 분석
        • 4-1) 파일시스템 직접 만들어 보기
        • 4-2) FAT32 분석
          • 4-2.1) FAT32 분석(BR, Directory Entry - 데이터의 접근)
          • 4-2.2) FAT32 분석 2(FAT, LFN, 삭제)
          • 4-2.3) FAT32 분석 3 (특징과 분석 도구)
        • 4-3) NTFS 기초 분석
          • 4-3.1) NTFS 기초 분석(NTFS BR과 DATA 영역)
          • 4-3.2) $MFT와 MFT Entry
          • 4-3.3) MFT Entry의 주요 속성1($SI,$FILE,$DATA)
          • 4-3.4) MFT Entry의 주요 속성2(인덱스1, resident/Nonresident)
          • 4-3.5) MFT Entry 찾기(인덱스2, $ATTRIBUTE_LIST)
          • 4-3.6) NTFS 에서 파일의 접근 정리
          • 4-3.7) NTFS 주요 메타데이터 파일
          • MFT Entry 분석용
      • 5) 파티션과 파일시스템
      • 6) 사본 이미지 생성(논리/물리이미징)
      • 7) 파일과 친해지기
Powered by GitBook
On this page
  • 1. Hex Viewer 만들기
  • 2. 최종 소스 및 결과
  1. 디지털포렌식과 친해지기
  2. 1. BIT의 저장
  3. 1) BIT, BYTES와 파일 그리고 Hash

1-1) Hex Viewer 만들기

Previous1) BIT, BYTES와 파일 그리고 HashNext1-2) BIT의 저장(참고)

Last updated 5 months ago

thon 을 이용한 소스 코드 작성 및 실행 방법

  1. 환경 구성 : 0-2) Python 을 이용한 개발 환경 구성

  2. Python 소스를실행파일로 만들기 : 0-3) Python 소스로 실행파일 만들기

1. Hex Viewer 만들기

우리가 알고 있는것 1. bit 는 0과 1로 저장된다. 다만 8bit(byte)로 표현할때는 주로 16진수(hex) 값2개로 표시한다. ex) 0F (16진수 표현) = 0000(0) 1111(F) (2진수 표현) 2. 문자로 표현할때는 bit들을 이용하여 표현한다. (아스키 코드는 8바이트, 한글은 2바이트) 3. 해시값은 1bit 만 바뀌어도 다른 값을 출력한다.

  • 파일을 읽고 hex 값, cp949 인코딩값 그리고 해시 값계산을 하는 프로그램을 만들어 봅시다.

요구사항

  1. 파일을 읽고 hex 값을 표시

  2. hex 값을 cp949로 표시

  3. 해당 파일을 md5 해시값 획득

  1. ChatGPT 에 해당 내용을 질문하고, 소스를 확인해 봅시다. (꼭 아래와 동일한 소스가 아니더라도 상관 없습니다. 요구사항이 확실하면 잘 만들어 줄 것입니다.)

import hashlib

# 파일 경로
file_path = '테스트.txt'

def read_file_hex_cp949_md5(file_path):
    try:
        with open(file_path, 'rb') as file:
            # 파일 읽기
            data = file.read()
            
            # Hex 값 출력
            hex_data = data.hex()
            print("Hex 값:")
            print(hex_data)
            
            # cp949로 변환하여 출력
            cp949_data = data.decode('cp949')
            print("\ncp949로 변환된 값:")
            print(cp949_data)
            
            # MD5 해시값 출력
            md5_hash = hashlib.md5(data).hexdigest()
            print("\nMD5 해시값:")
            print(md5_hash)
            
    except FileNotFoundError:
        print("파일을 찾을 수 없습니다.")
    except Exception as e:
        print("오류 발생:", e)

# 함수 호출
read_file_hex_cp949_md5(file_path)
  1. 아래와 같이 sublime txt 또는 메모장과 같은 텍스트 에디터로 위 소스를 복사하여 test.py로 저장해 봅시다.

  1. 추가로 테스트할 파일을 생성하고, 우선 메모장으로 테스트 하여봅시다. 다만 메모장에서 저장 시 인코딩 ANSI (cp949 변환용)로 저장 합시다.

  1. 아래와 같이 해당 소스를 실행하면 해당 파일의 hex 값, cp949 값 그리고 md5 해시값을 확인할 수 있습니다. > python test.py

    *만약 No module ~ 에러가 발생한다면 명령어로 pip install hashlib

  2. 조금 더 발전을 시켜서 원하는 파일을 열고, 해당 파일의 hex값, 아스키코드값, 그리고 MD5 값을 GUI로 보여주는 프로그램을 만들어 봅시다. 최대한 구체적으로 출력 형태까지 자세히 질문 할수록 좋은 답변을 받을 수 있습니다. "GUI" 라는 단어를 넣어서 쓸만하게 바꿔보도록 합시다.

  1. 해당 소스를 test-gui.py로 저장하고 실행해보니 아래와 같이 실행후 파일열기 후 "테스트. txt" 를 선택하였더니 에러가 발생하였습니다. > python test-gui.py

  2. 에러가 발생한 부분을 복사한 뒤 chatGPT한테 물어봤습니다.

  3. 위에서 복사한 내역을 chatGPT에 물어보면 해당부분을 수정한 파이썬코드를 알려줍니다.

import tkinter as tk
from tkinter import filedialog
import codecs

class HexViewerApp:
    def __init__(self, master):
        self.master = master
        self.master.title("Hex Viewer")
        
        self.hex_text = tk.Text(self.master, width=80, height=20)
        self.hex_text.pack(pady=10)
        
        self.open_button = tk.Button(self.master, text="파일 열기", command=self.open_file)
        self.open_button.pack(pady=5)
        
    def open_file(self):
        file_path = filedialog.askopenfilename()
        if file_path:
            with open(file_path, "rb") as file:
                data = file.read()
                
                formatted_data = ""
                for i in range(0, len(data), 16):
                    chunk = data[i:i+16]
                    hex_chunk = " ".join([f"{byte:02X}" for byte in chunk])
                    ascii_chunk = "".join([chr(byte) if 32 <= byte <= 126 else "." for byte in chunk])
                    cp949_chunk = chunk.decode('cp949', 'replace')
                    formatted_data += f"{hex_chunk.ljust(47)}| {ascii_chunk.ljust(16)}| {cp949_chunk}\n"
                
                self.hex_text.insert(tk.END, formatted_data)

def main():
    root = tk.Tk()
    app = HexViewerApp(root)
    root.mainloop()

if __name__ == "__main__":
    main()

  1. 위 소스를 복사하여 다시 소스코드를 실행하면 아스키코드, cp949를 해석해주는 hex viewer를 만들 수 있습니다. > python test-gui.py

  1. 음 그런데 ChatGPT가 MD5 해시 계산하는 걸 까먹고 제외하여서 다시 그 부분을 추가한 소스를 만들어 달라고 해봅시다.

2. 최종 소스 및 결과

최종 소스
import tkinter as tk
from tkinter import filedialog
import hashlib
import codecs

class HexViewerApp:
    def __init__(self, master):
        self.master = master
        self.master.title("Hex Viewer")
        
        self.hex_text = tk.Text(self.master, width=80, height=20)
        self.hex_text.pack(pady=10)
        
        self.md5_label = tk.Label(self.master, text="")
        self.md5_label.pack(pady=5)
        
        self.open_button = tk.Button(self.master, text="파일 열기", command=self.open_file)
        self.open_button.pack(pady=5)
        
    def open_file(self):
        file_path = filedialog.askopenfilename()
        if file_path:
            with open(file_path, "rb") as file:
                data = file.read()
                
                formatted_data = ""
                for i in range(0, len(data), 16):
                    chunk = data[i:i+16]
                    hex_chunk = " ".join([f"{byte:02X}" for byte in chunk])
                    ascii_chunk = "".join([chr(byte) if 32 <= byte <= 126 else "." for byte in chunk])
                    cp949_chunk = chunk.decode('cp949', 'replace')
                    formatted_data += f"{hex_chunk.ljust(47)}| {ascii_chunk.ljust(16)}| {cp949_chunk}\n"
                
                self.hex_text.insert(tk.END, formatted_data)
                
                # MD5 해시값 계산
                md5_hash = hashlib.md5(data).hexdigest()
                self.md5_label.config(text=f"MD5 해시값: {md5_hash}")

def main():
    root = tk.Tk()
    app = HexViewerApp(root)
    root.mainloop()

if __name__ == "__main__":
    main()

소스에 대한 상세한 설명은 ChatGPT에게 물어보면 라인별로 설명을 해줍니다. 물론 설명을 본다고 해서 바로 이해는 어려울 수 있습니다. 가능하면 파이썬 공부를 따로 하는 것을 추천하나, 친해지기에서는 파이썬 사용하는 방법 보다는

공부한 내용을 정리하고 원리를 이해한 상태에서 ChatGPT를 이용하면 파이썬 소스를 작성하고, 만들 수 있다는 것에 초점을 두고 있습니다. (chatGPT가 이상하게 만들면 어느 부분이 이상해! 내 생각엔 이렇게 나와야 해! 할 경우 보다 정확하게 수정해 줍니다.)

이러한 과정을 익히고 나면 추후에 개인적으로 분석을 할 때, 기본 원리를 파악하고 있으면 얼마든지 분석용 도구를 만들 수 있게 될 것입니다. 본인이 파이썬 소스 해석에 어려움을 느끼면 해당 부분을 이해하기 위해 하나하나 공부하다보면 어느새 충분히 잘 활용하고 있는 자신을 발견할 수 있을 것입니다.

3줄 요약

  1. 소스 만들어 달라고 질문할 때 완벽히 이해한 것에 대해서만 질문하고 만들고 실습해보자.

  2. 원리만 잘 알면 소스에 대해서 설명해 달라고 하면서 이해 안되는 부분에 대해서 검증을 하면 결국 원하는 대로 만들어 준다. 다만 많이 질문 경험이 필요하기에 처음부터 너무 완성에 목표를 두진 말자.

  3. GUI는 나중 목표!!!