usrbin
컴퓨터 일기
usrbin
전체 방문자
오늘
어제

공지사항

  • whoami
  • 분류 전체보기 (127)
    • 깔짝할짝 (61)
    • 잡지식 (30)
    • Network (7)
      • Programming (3)
      • Study (4)
    • Mobile (13)
    • Reversing (5)
      • Win API (2)
      • 분석 (0)
    • Kernel (4)
      • linux (1)
      • Windows (3)
    • Programming (5)

블로그 메뉴

  • 홈
  • 방명록

인기 글

태그

  • Android
  • monitor mode
  • Follina
  • Digital Forensics
  • PWN
  • forensics
  • xcz.kr
  • qt
  • Reversing
  • Network Programming
  • Pwnable
  • HEVD
  • x64dbg
  • pwnable.kr
  • Hive Ransomware
  • BOF
  • HackCTF
  • pcapng
  • Packet
  • suninatas
  • ftz
  • libpcap
  • network
  • System Hacking
  • Scapy
  • nethunter
  • sql injection
  • System
  • pwntools
  • pcap

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
usrbin

컴퓨터 일기

OLE Structure - Header 편
잡지식

OLE Structure - Header 편

2021. 8. 5. 22:32

OLE > Header & Data

  • Sector 단위(한 섹터 당 512 byte)
  • 헤더 영역이 고정 512 byte, 데이터 영역은 파일크기-512
  • 데이터 영역에 Sector ID로 접근을 할 때는 헤더크기 빼고 계산
  • 결론: 파일시스템이랑 유사함 아니 거의 똑같은거같음(?)
  • Storage & Stream 으로 구성
    • Storage: 폴더 개념
    • Stream: 파일 개념

Header

  1. Magic ID
    • OLE Signature
    • 8 byte(0x00~0x07)
    • \xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1
  2. CLSID
    • OLE Class Identifier
    • 16 byte(0x08~0x17)
  3. Minor Version
    • 2 byte
  4. Major Version
    • 2 byte
  5. Byte Order
    • 2 byte
    • \xFE\xFF : Little Endian
    • \xFF\xFE : Big Endian
  6. Sector Shift (BBAT)
    • 2 byte
    • \x09\x00 ( 일반적으로 )
    • 1 Sector의 크기 (2의 제곱수로 나타냄. 9면 2^9 = 512 - 일반적인 크기)
  7. Small Sector Shift (SBAT)
    • 2 byte
    • \x06\x00 ( 일반적으로)
    • SBAT Sector 1개 크기 ( 2^6 = 64 )
  8. Reserved1
    • 2 byte
  9. Reserved2
    • 4 byte
  10. Reserved3
    • 4 byte
  11. Number of Big Block Allocation Table Depot
    • 4 byte
    • BBAT Depot 개수. 109 이상일 경우 Extra BBAT 참조
  12. Root Storage Sector ID
    • 4 byte
    • Root Entry 시작 섹터 번호
    • 헤더 다음으로 먼저 읽어야 할 부분
    • 헤더 다음 섹터부터가 0번 (헤더 0번 아님) → 이값*Sector Size + Header Size가 시작 섹터 index
    • 0x02 > 2*512+512 = 1536(0x0600)
    • 0x0600이 루트 엔트리 시작이 됨
  13. Reserved4
    • 4 byte
  14. Max Small Stream Size
    • 4 byte
    • \x00\x10\x00\x00 (일반적으로)
    • 해당 값의 사이즈보다 작은 스트림을 읽을 땐 SBAT 참조(Small Stream)
  15. SBAT Depot Start Sector ID
    • 4 byte
    • Small Block Allocation Table Depot 시작 섹터 번호. SBAT Depot을 찾을 수 있는 값
  16. SBAT Sector Count
    • 4 byte
    • Small Block Allocation Table 크기 값
    • 몇 개의 섹터를 차지하는 지에 대한 값(1 이면 1*512 = 512)
  17. Start Block of Extra Big Block Allocation Table
    • 4 byte
    • \xFE\xFF\xFF\xFF (BBAT 개수 109개 이하)
    • Extra BBAT 시작 섹터 번호. Number of Big Block Allocation Table 값이 109개가 넘으면 여기 참조
    • Extra BBAT 인덱스 확인 가능
  18. Number of Extra Big Block Allocation Table
    • 4 byte
    • \x00\x00\x00\x00 (BBAT 개수 109개 이하인 경우)
    • Extra BBAT 개수
    • BBAT가 120개면 이 값이 11이 됨(BBAT 기본이 109)
  19. BBAT Depot
    • 436 byte
    • 시작 인덱스부터 헤더 인덱스 끝(0x1FF)까지 BBAT 엔트리 저장
    • 4 byte씩 Sector ID 가지고 있으며 BBAT 109개 이상이면 Start Block of Extra Big Bloc Allocation Table 참조
    • FF는 없는거

BBAT(Big Block Allocation Table)

OLE는 한 Sector에 512 byte밖에 저장 못함 → 512 byte가 넘는 크기의 데이터를 저장하기 위해서 나눠서 저장을 해야하고, 이 저장된 데이터들을 연결(?)하는 인덱스들을 저장하는 테이블이 BBAT

OLE 내부 스트림 위치 정보 저장.

파일의 크기가 커질수록 BBAT의 크기도 커짐

BBAT Depot = BBAT가 저장된 저장소

  • BBAT를 읽기 위해서 BBAT Depot을 모두 읽어야함. BBAT가 어디 저장되어있는지 알아야함
    • 현재 BBAT Depot에 0x3밖에 없음. 그러면 그 위치의 한개 섹터만 읽으면 BBAT를 모두 읽는것임
    • (0x3+0x1)*0x200 = 0x800 (1 더한 이유는 섹터 ID로 접근할때는 헤더를 빼야해서)
    • 0x800~0xA00까지가 BBAT 영역
    • 0xFFFFFFFD: 특수블록
    • 0xFFFFFFFE: End of Chain
    • 0xFFFFFFFF: 의미 x
    • 그 외의 값: next, 연결된 다음 섹터 ID(4 byte)
    • Root Storage Sector ID가 0x2 였음
      • 시작 BBAT는 0x800+(0x2*0x4) = 0x808
      • 0x4를 곱하는 이유는 BBAT에 저장된 값이 다음 섹터를 가리키는 4 byte이기 때문
    • 주소 0x808 >> 0x4
      • 0x800+(0x4*0x4) = 0x810
    • 주소 0x810 >> 0x5
      • c0x800+(0x5*0x4) = 0x814
    • 주소 0x814 >> 0x13
      • 0x800+(0x13*0x4) = 0x84C
    • 주소 0x84C >> 0xFEFFFFFF (현재 리틀엔디언 표기형식임)
      • End of Chain

SBAT(Small Block Allocation Table)

Max Small Stream Size 보다 작은 스트림을 읽을 때 참조하는 테이블. 기본 섹터는 512 byte인데 작은 섹터는 한개에 64 byte. 이 작은 스트림의 연속된 인덱스(?)를 가지고 있는 테이블이 SBAT

Small Sector의 정보는 Root Storage에 있으므로 Small Stream을 읽으려면 Root Storage를 통해 확인함

저작자표시 비영리 변경금지 (새창열림)

'잡지식' 카테고리의 다른 글

windows 7 x64에서 vmware tools 설치 오류  (0) 2021.09.04
centOS 7에서 wireshark 빌드(tshark 최신 버전 사용하기)  (2) 2021.08.11
맨날천날 까먹는 윈도우 보내기 추가(?)  (0) 2021.07.17
[PyShark] FileCapture(only_summaries=True) 첫번째 패킷 먹히는 경우  (0) 2021.02.23
거지같은 dpkg/lock 오류  (0) 2020.09.03
    usrbin
    usrbin
    컴퓨터 할거야

    티스토리툴바