CTF & Wargame(REVERSING)

[dreamhack] level 1 Easy Assembly 문제

KWAKBUMJUN 2025. 3. 9. 05:44

파일 실행 결과

해당 파일을 실행하면 다음과 같은 문구가 출력된다. ./prob을 하고 <key>값을 넣으라고 해서 아무 문자나 넣어봤는데 아래와 같은 문구를 출력해주는걸로 봐선 올바른 key값을 찾아야 하는 것 같다.

 

IDA 분석

start 함수 어셈블리 코드

 

eax : 사용자 입력값

len : 사용자 입력값 길이

esi : 사용자 입력값

edi : enc_flag 값

ecx와 ecx xor 연산

check_pw 함수 실행

eax 와 0 비교

0이면 flag 출력

check_password 함수 디컴파일 코드

a2 변수에 enc_flag++ ^ len ^ v0++ 연산을 한 값을 or 연산하여 저장

len이 0이 될 때까지 반복

a2를 반환

 

exploit 코드

enc_flag = [
    0x74, 0x78, 0x4B, 0x65, 0x77, 0x48, 0x5C, 0x69, 0x68, 0x7E, 0x5C, 0x79, 0x77, 0x62, 0x46, 0x79, 0x77, 0x5, 0x46, 0x54, 0x73, 0x72, 0x59, 0x69, 0x68, 0x7E, 0x5C, 0x7E, 0x5A, 0x61, 0x57, 0x6A, 0x77, 0x66, 0x5A, 0x52, 0x2, 0x62, 0x5C, 0x79, 0x77, 0x5C, 0x0, 0x7C, 0x57, 0x0D, 0x0D, 0x4D
]

result = ''

for i in range(len(enc_flag)):
    result += chr(enc_flag[i] ^ len(enc_flag))

print(result)

 

위와 같이 익스플로잇 코드를 작성하면 

DH{UGxlYXNlIGRvIG5vdCBiYXNlNjQgZGVjb2RlIGl0Lg==}

이와 같은 플래그를 획득할 수 있다.