SWUFORCE/Write-up

hidden

amy06s 2026. 4. 29. 00:21

이미지는 평범해 보이지만 숨겨진 무언가가 있는 것 같습니다

=> 스테가노그래피? 파일 은닉? 예상하면서 가져왔다..

ftk부터 가보자

 

ftk imager로 열어보면 png와 파이썬이 있고 png는 보이는 게 없고, 파이썬은 코드가 적혀 있다

코드 해석를 해보면 

1. 데이터 암호화 및 압축

XOR 연산을 통해 1차 암호화

Base 64 인코딩: 암호화된 데이터를 텍스트로 변환

zlib 압축: 데이터 크기 줄이기 위해 압축

=> 이미지에 숨겨진 진짜 데이터는 c

 

2. LSB 스테가노그래피

:각 픽셀의 RGB 색상 끝에서 1비트만 살짝 변환

 

3. 파일 결합

이미지 푸터(IEND): IEND 청크 위치를 탐색

데이터 결합: 정상 이미지에 데이터를 숨김 flag.png의 바이너리 내용을 이어붙임

 

=> 코드 순서를 역으로

1. 파일 뒷부분 추출 -> 2. LSB 비트 추출 -> 3. 압축 해제 -> 4. Base64 디코딩 -> 5. XOR 연산 해야 함

제미나이를 이용해 코드를 만들었다

import zlib as z
import base64 as b
from PIL import Image as I

try:
    # 1. 이미지 로드
    im = I.open("flag.png")
    px = im.load()
    width, height = im.size

    # 2. LSB 비트 추출
    bit_list = []
    for y in range(height):
        for x in range(width):
            r, g, b_val = px[x, y]
            # 각 채널의 LSB를 리스트에 추가
            bit_list.append(str(r & 1))
            bit_list.append(str(g & 1))
            bit_list.append(str(b_val & 1))
    
    bits = "".join(bit_list)

    # 3. 비트를 바이트 객체로 변환
    byte_arr = bytearray()
    for i in range(0, len(bits), 8):
        byte_str = bits[i:i+8]
        if len(byte_str) < 8: break
        byte_arr.append(int(byte_str, 2))
    
    extracted_bytes = bytes(byte_arr)

    # 4. zlib 데이터 찾기 (PNG 내부에 숨겨진 압축 데이터 시작점)
    # zlib 헤더는 보통 0x78 0x9C로 시작합니다.
    idx = extracted_bytes.find(b'\x78\x9c')
    
    if idx != -1:
        # 압축 해제
        decompressed = z.decompress(extracted_bytes[idx:])
        # Base64 디코딩
        decoded_b64 = b.b64decode(decompressed)
        
        # 5. XOR 복호화 (Key: 0x55)
        k = 0x55
        flag = "".join([chr(x ^ k) for x in decoded_b64])
        
        print("-" * 30)
        print("찾은 플래그: " + flag)
        print("-" * 30)
    else:
        print("이미지에서 유효한 zlib 데이터를 찾을 수 없습니다.")

except Exception as e:
    print(f"오류 발생: {e}")

 

플래그: DH{Supe3r _Dupe3r _H0td0g}

'SWUFORCE > Write-up' 카테고리의 다른 글

VBR(파일시스템 실습)  (0) 2026.05.05
Helfy image  (0) 2026.04.29
Windows Search  (1) 2026.04.01
FFFFAAAATTTT  (0) 2026.03.30
Steg-Pack  (0) 2026.03.25