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

eax : 사용자 입력값
len : 사용자 입력값 길이
esi : 사용자 입력값
edi : enc_flag 값
ecx와 ecx xor 연산
check_pw 함수 실행
eax 와 0 비교
0이면 flag 출력

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==}
이와 같은 플래그를 획득할 수 있다.
'CTF & Wargame(REVERSING)' 카테고리의 다른 글
| [dreamhack] level 1 Stop before stops! (0) | 2025.03.09 |
|---|---|
| [dreamhack] level1 Small Counter (0) | 2025.03.09 |
| [dreamhack] level1 legacyopt 문제 (0) | 2025.03.09 |
| [dreamhack] level1 Recover (0) | 2025.03.06 |
| [dreamhack] please, please, please 문제 (0) | 2025.03.06 |