[WriteUp] N00bCTF - You Know ALS?
by QerogramAudio 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