Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가
힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고..
정답인증은 Name의 MD5 해쉬값(대문자)
성공 문자열이 있는 부분을 따라가서 해당 부분을 보았다.
한 문자만 입력하니 자꾸 0x45BB24에서 통과를 못해 한번 3문자를 입력하니 정상적으로 통과되었다.
정답은 1문자라고 했는데 뭔가 이상해서 다른 사람이 풀이를 한 번 참고하니 해당 코드부분을 패치하는 것이 옳은 풀이였다.
입력한 name을 이용해서 key를 만들어내는 부분은 다음이다.
따라서 맨 처음 부분만 확인하면 어떤 문자가 해당 key에 맞는 name인지 알 수 있다.
앞의 4자리만 가져오니 key의 첫부분 연산을 구현해 확인해보도록 하자
#key = BEDA
import hashlib
answer = ""
for i in range(0x30,0x7a+1):
esi = i * 0x772
edx = esi * esi
esi += edx
esi |= esi
esi *= 0x474
esi += esi
edx = esi
if (edx&0xFFFFFFFF)>>16 == 0xBEDA:
print(f"Name :{chr(i)}")
answer = chr(i)
result = hashlib.md5(answer.encode()).hexdigest()
print(result)
c:>python 017.py
Name :F
800618943025315f869e4e1f09471012