swuforce 심화팀/워게임 스터디

[드림핵] rev-basic-3

ran831 2025. 9. 22. 17:37

rev-basic-3 | 워게임 | Dreamhack

 

rev-basic-3

Reversing Basic Challenge #3이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.해당 바이너리를 분석하여 correct를 출력

dreamhack.io


 

문제 설명

이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.

해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!

획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요.

예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}

 

 

풀이

.exe 실행 파일 한 개가 들어있음

실행파일 열면 이런 input 값을 입력하게 하는데, 아무 숫자 집어 넣어보니 Wrong이라는 값이 뜸

 

코드를 확인하기 위해서 IDA로 열어보았음

main 부분

input 부분이 보여서 decompile 해봄

main  함수 코드.. sub_140001000 이 부분 찾아봐야겠어요

sub_140001000 부분 따라가보니 for문이 있음

 

일단 코드 해석을 해보자면

주어진 for문은 0부터 x18가지의 값을 돌고 있는듯

코드를 확인하면 i<0x18이므로 총 24 바이트를 돈다고 보면 된다!

 

if ( byte_140003000[i] != (i ^ *(unsigned __int8 *)(a1 + i)) + 2 * i )

이부분 살펴보면

확인할 주소에 있는 값이 (i XOR 입력값) + 2*1을 만족하는지를 확인하는 것임을 알 수 있음

 

byte_14003000 주소로 들어가보니

 

49, 60, 67, 74, 63, 67, 42, 66, 80, 78, 69, 69, 7B, 99, 6D, 88, 68, 96, 9F, 8D, 4D, A5, 9D, 45, 00, 00, 00, 00, 00, 00, 00, 00

이런 16진수 값을 확인할 수 있었다

 

이제 XOR 연산 이용해서 correct 값을 찾아야하는데..

 

일단 XOR 에 대한 공부를 좀 해보려고 한다..

 

기본적으로 XOR 연산은 같으면 0 다르면 1 << 이 개념으로 공부를 했었는데

XOR의 성질로는 "역원 성질" 이라는게 있다

한 번 xor하여 암호화된 수를 같은 값으로 다시 xor하면 복호화가 된다는 뜻

a ^ b = c  →  b = a ^ c

 

이제 이 성질을 활용해서 코드를 만들어 보자

 

str='49','60','67','74','63','67','42','66','80','78','69','69','7B','99','6D','88','68','94','9F','8D','4D','A5','9D','45'
res=''

for i in range(24): #총24바이트
    #str[i]는 16진수 문자열이니까 int(str[i],16)으로 10진수 정수로 변환
    #2*i를 빼고, 그 결과를 다시 xor 연산하여 원래 문자값 복원
    res+=chr((int(str[i],16)-(i*2))^i)

print(res)

 

 

풀이 완료 !!

'swuforce 심화팀 > 워게임 스터디' 카테고리의 다른 글

[드림핵] image-storage  (0) 2025.10.28
Web Goat를 통한 XSS 실습  (0) 2025.09.30
[드림핵] xss-1  (0) 2025.09.30
[드림핵] BISC Safe  (2) 2025.09.23
rev-basic-3 공부 내용 정리  (0) 2025.09.23