자료를 다운로드 받은면 다음과 같은 빈 사진을 얻을 수 있다.
사진을 HxD로 얻으면 다음과 같이 여러개의 사진이 합쳐져있음을 알 수 있다..
사진속에 숨겨진건 bmp, gif, png, jpg 4가지 종류이다. 시그니처와 푸터를 이용해서 다음의 코드로 추출했다.
def search_next(value:list) -> tuple :
res = float('inf')
for v in value:
if(v==-1) :
continue
elif(v<res) :
res=v
return (res,value.index(res))
def search_bmp_next(value:list) -> tuple :
res = value[3]
new_value = value[:3]
end,t = search_next(new_value)
return (res,end,t)
if __name__=="__main__" :
target_file = "MrFusion.gif"
ext = [".jpg",".png",".gif",".bmp"]
start = [b"\xff\xd8",b'\x89PNG',b'GIF89',b'\x42\x4D']
end = [b"\xff\xd9",b'IEND\xaeB`\x82',b'\x00;']
target_list = list()
with open(target_file,"rb") as f:
data = f.read()
s_index=0
cnt=1
new_data = data
while(True) :
new_data = new_data[s_index:]
tar_start = [-1]*len(ext)
for i in range(len(start)) :
tar_start[i] = new_data.find(start[i])
if(max(tar_start)==-1) :
break
start_index,tar_type = search_next(tar_start)
if(tar_type==3) :
tmp_data=new_data
tmp_start = [-1]*len(ext)
for i in range(len(start)) :
tmp_start[i] = tmp_data.find(start[i])
tmp_start_index,end_index,tmp_tar_type = search_bmp_next(tmp_start)
else :
end_index=new_data.find(end[tar_type])+len(end[tar_type])
print(start_index,end_index)
with open("./target/"+str(cnt)+ext[tar_type],"wb") as f:
f.write(new_data[start_index:end_index])
cnt+=1
s_index=end_index
print(str(cnt-1)+" extracted")
다만 중간에 5번째 gif가 시그니처를 2번만났는지 직접 추출했다.
Key를 얻을 수 있었다.
'WarGame > DigitalForensic with CTF' 카테고리의 다른 글
[DigitalForensic] with CTF 우리는 바탕화면 캡처 본을 얻었다.… (0) | 2022.10.08 |
---|---|
[DigitalForensic] with CTF 답을 찾고 제출해라!… (0) | 2022.10.08 |
[DigitalForensic] with CTF black-hole… (0) | 2022.10.08 |
[DigitalForensic] with CTF broken… (0) | 2022.10.08 |
[DigitalForensic] with CTF Find Key(Image)… (0) | 2022.10.08 |