
squashFS란?
squashFS : 리눅스 운영체제 전용 압축 파일 시스템 // https://github.com/plougher/squashfs-tools
GitHub - plougher/squashfs-tools: tools to create and extract Squashfs filesystems
tools to create and extract Squashfs filesystems. Contribute to plougher/squashfs-tools development by creating an account on GitHub.
github.com
→ squashFS는 읽기 전용 파일 시스템이며, 다양한 압축 알고리즘을 지원합니다. 이는 블록 단위로 압축을 수행하기 때문에 작은 파일도 효율적으로 저장되며, 압축된 상태로 데이터를 저장하기에 메모리에서 데이터를 읽는 속도가 상대적으로 빠릅니다. 따라서 임베디드 시스템에서 효율적으로 사용할 수 있습니다.
squashFS 구조
squashFS의 구조를 분석하기 위해 squashFS 확장자를 지원하는 hex editor 프로그램 010 Editor를 사용하였습니다.

squashFS의 구조는 superblock과 data table로 나눌 수 있습니다.
Superblock

squashFS의 superblock은 파일 시스템 시작 부분에 위치하며, 파일 시스템에 대한 전체적인 정보를 갖고 있습니다.
주요 정보들을 나열해 보았습니다.
● s_magic : squashFS 파일의 magic number. hsqs 문자열이 세팅되어 있습니다.

● inodes : 파일 시스템에 포함된 파일, 디렉토리의 개수
● compression : 압축 방식
- 1 : gzip
- 2 : lzma
- 3 : lzo
- 4 : xz
- 5 : lz4
- 6 : zstd
Data tables
● file_table : 실제 파일의 data가 포함됩니다.
● inode_table : metadata가 포함됩니다.
● directory_table : 디렉토리 data가 포함됩니다.
● fragment_table : fragment 위치 정보가 포함됩니다.
● export_table : inode에 매핑되는 값이 포함됩니다.
● id_table : UID/GID 정보가 포함됩니다.
squashFS 파일 추출
def extract_xz_segments(input_file, output_prefix):
header = b"\xFD\x37\x7A\x58\x5A\x00"
footer = b"\x00\x01\x59\x5A"
with open(input_file, "rb") as f:
data = f.read()
start = 0
segment_count = 0
while True:
start = data.find(header, start)
if start == -1:
break
end = data.find(footer, start)
if end == -1:
print("No matching footer found for a segment starting at", start)
break
end += len(footer)
segment = data[start:end]
output_file = f"{output_prefix}_{segment_count:03}.xz"
with open(output_file, "wb") as out_f:
out_f.write(segment)
print(f"Segment {segment_count} extracted to {output_file}")
segment_count += 1
start = end
if segment_count == 0:
print("No segments found.")
else:
print(f"Extraction complete. {segment_count} segments extracted.")
extract_xz_segments([SquashFS 파일시스템], "output_segment")
'석정원' 카테고리의 다른 글
| 공유기 파괴일지 (0) | 2025.01.29 |
|---|---|
| Debugging with MIPSel + Musl Env (0) | 2025.01.29 |
| 펌웨어 취약점 분석 with EMBA (0) | 2024.11.11 |

stellarflare 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!