[고등해커] santa’s elf
[고등해커] santa’s elf
이 문제는 솔직히 말하자면 모든 팀이 풀 거라고 예상하고 낸 문제였지만 어째서인지 그렇지 않았습니다 ㅠㅠ;
일단 문제의 description과 문제 title만 봐도 elf를 찾는게 의도인 것을 알 수 있습니다.
주어진 사이트에 접속하면 사진 한 개를 줍니다.
이런 사진인데 딱 보면 티가 나겠지만 그냥 산타 사진에 엘프 사진을 pixabay에서 찾은 다음 그림판으로 갖다 붙였습니다.
한 번 hxd로 열어봅시다.
이렇게 png파일의 end부분 (45 4E 44 AE 42 60 82
) 뒤에 이상한 값들이 들어있는 것을 알 수 있는데, 문제 이름과 description으로 잘 생각해보면 어떠한 방식으로 암호화된 elf파일임을 유추할 수 있습니다.
그렇게 밑으로 조금 쭉 내려보면 모두 찾으셨으리라 예상되는 문자열 하나가 나옵니다.
I_REALLY_WISH_YOU_HAVE_A_MERRY_CHRISTMAS.
바로 이 문자열인데, 파일 내부에서 이 문자열이 완성 된 상태로 계속 반복돼서 나타나기 때문에 한 가지 알 수 있는 점이 있습니다.
- 위의 문자열이
encryption key
이다. -
ELF
file은 내부에 null padding이 굉장히 많이 존재하기 때문에 문자열이 반복된다는 점을 생각해보면 이ELF
file은 xor로 암호화 되어있다.
그럼 이제 위 문자열을 갖고 뒤에 이어붙여진 값들만 가져와서 xor을 해주면 정상적인 elf file을 뱉어주고 elf file 내부에 string을 확인해주면 flag
가 있습니다.
짠~
solve.py
offset = 0x336227
with open('where_is_the_my_elf_T_T.png', 'rb') as f :
buf = f.read()
enc = buf[offset:]
with open('enc', 'wb') as f :
f.write(enc)
with open('enc', 'rb') as f:
buf = f.read()
key = 'I_REALLY_WISH_YOU_HAVE_A_MERRY_CHRISTMAS.'
elf = ''
for i in range(len(buf)) :
elf += chr(ord(key[i % len(key)]) ^ ord(buf[i]))
with open('flag', 'wb') as f:
f.write(elf)
FLAG : FLAG{All_I_w@nt_f0r_m3rry_chr1stm@s_1s_y0u..}