Basic RCE L17

hoon·2023년 6월 6일
0

CodeEngn

목록 보기
17/21

문제

Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가
힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고..
정답인증은 Name의 MD5 해쉬값(대문자)

실행화면

PEiD

IDA 분석

성공 문자열이 있는 부분을 따라가서 해당 부분을 보았다.

x86dbg

한 문자만 입력하니 자꾸 0x45BB24에서 통과를 못해 한번 3문자를 입력하니 정상적으로 통과되었다.
정답은 1문자라고 했는데 뭔가 이상해서 다른 사람이 풀이를 한 번 참고하니 해당 코드부분을 패치하는 것이 옳은 풀이였다.

입력한 name을 이용해서 key를 만들어내는 부분은 다음이다.

0045B89D ~ 0045B8BE

key의 첫부분

0045B8D5 ~ 0045B8F1

key의 두번째

0045B904

key의 세번째

0045B929 ~ 0045B94F

key의 네번째

0045B96F ~ 0045B9A7

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

0개의 댓글