[고등해커] santa’s elf


이 문제는 솔직히 말하자면 모든 팀이 풀 거라고 예상하고 낸 문제였지만 어째서인지 그렇지 않았습니다 ㅠㅠ;

description

일단 문제의 description과 문제 title만 봐도 elf를 찾는게 의도인 것을 알 수 있습니다.

주어진 사이트에 접속하면 사진 한 개를 줍니다.

이런 사진인데 딱 보면 티가 나겠지만 그냥 산타 사진에 엘프 사진을 pixabay에서 찾은 다음 그림판으로 갖다 붙였습니다.

한 번 hxd로 열어봅시다.

이렇게 png파일의 end부분 (45 4E 44 AE 42 60 82) 뒤에 이상한 값들이 들어있는 것을 알 수 있는데, 문제 이름과 description으로 잘 생각해보면 어떠한 방식으로 암호화된 elf파일임을 유추할 수 있습니다.

그렇게 밑으로 조금 쭉 내려보면 모두 찾으셨으리라 예상되는 문자열 하나가 나옵니다.

I_REALLY_WISH_YOU_HAVE_A_MERRY_CHRISTMAS.

바로 이 문자열인데, 파일 내부에서 이 문자열이 완성 된 상태로 계속 반복돼서 나타나기 때문에 한 가지 알 수 있는 점이 있습니다.

  1. 위의 문자열이 encryption key이다.

  2. 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..}