EYEN
펌웨어 파일 시스템 추출(2) 본문
펌웨어에서 보통 binwalk를 통해 추출하는데, 이 경우 모든 파일이 추출되지 않는 경우가 꽤 있는 듯 하다.
1. 일단 binwalk로 펌웨어 추출

2. 310000.squashfs를 010 editor에 드래그드롭.

3. 오른쪽 아래 Variables에 compression 보면 value가 4인데 저게 xz라는 뜻이다.

4. xs compression 파일 시그니처는 FD 37 7A 58 5A 00이다. 'Find in Files'를 통해 해당 시그니처를 310000.squashfs에서 찾아보면

5. 이 부분을 추출한다.
31000.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("310000.squashfs", "output_segment")
6. python3 extract_xz.py 결과

7. xz -d output_segment_*.xz 결과

8. file output_segment_* 결과

'대외활동 및 팀플 > 네뷸라 콘테스트' 카테고리의 다른 글
BISC 세미나 정리! (0) | 2024.11.23 |
---|---|
파일 시스템 추출(3) (0) | 2024.11.06 |
커널 이미지 만들기 (0) | 2024.11.06 |
stellarflare (5)참고자료 내용 정리 (0) | 2024.11.06 |
stellarflare (2) 펌웨어 내용 알기 (0) | 2024.11.06 |