Data+

[WriteUp] N00bCTF - You Know ALS?

by Qerogram

Audio LSB Steganography를 아냐고 묻는 문제다.

풀이의 핵심은 용어 그대로 Audio 파일의 LSB(최하위 비트를 갖고 와서 반전시켜) SteganoGraphy(유의미한 데이터를 얻는 것)

 

사전 지식

[+] Audio 파일 정의

[+] LSB 정의

-> [-] 최하위 비트를 어떻게 가져오며, 반전을 어떻게 해요? 값 & 1을 연산

[+] 스테가노그래피 정의

 

풀이

1. wav파일이 문제로 나왔는데, 구조 보기가 귀찮은 사람들은 010 Editor로 열어보자.

이를 통해 얻을 수 있는 정보는 다음과 같다.

[+] Header Length = 0x24 => 근데 필요없음. f.seek() 용

[+] ByteChunkSize = 12121532(Decimal)

-> 데이터가 시작하는 부분인 0x2c부터 ChunkSize만큼 각 바이트를 모두 파싱해서 하위 1바이트 값을 가져오고 비트 반전 시키면 된다.

2. 코드로 작성하자.(Python 3.8로 작성됐다)

from struct import unpack

def solve(FileName) :
    with open("problem.wav", "rb") as f :
        ret = ""
        f.seek(0x28)

        chunkSize = unpack("<L", f.read(4))[0]
        
        data = f.read()

        # 각 최하위 1비트씩 가져오면 8바이트당 1바이트를 만들 수 있음. => 8 Bit == 1 Byte
        for i in range(0, int(chunkSize / 8 - 1) * 8, 8) : 
            temp = chr(int("".join(str(data[i + j] & 1) for j in range(8)), 2))
            if temp != "#" : print(temp, end="") 
            # #이 유독 많이 나와서 #이 아닐 때만 출력 시킴.
    

if __name__ == "__main__":
    solve("problem.wav")

결과

'보안' 카테고리의 다른 글

Saitama Malware  (0) 2022.06.26
OLE Decompress  (0) 2022.02.16
letsencrypt SSL 갱신하기  (0) 2018.12.27
라즈비안에서 hostname 설정하기.  (0) 2018.01.24
라즈베리파이 터미널 접속 시 뜨는 문구 제거하기.  (0) 2018.01.24

블로그의 정보

Data+

Qerogram

활동하기