본문 바로가기

Reversing/CTF

DreamHack - rev-basic-3 풀이

문제 내용

 

파일은 exe 실행 파일 형식이며

Input로 key를 받고 분기하여 성공 및 실패 문자열을 출력해주는 문제인거 같다.

 

 

우선 IDA 로 열어 String을 추출해서 해당 함수로 이동해본다.

 

 

 

Input으로 입력받은뒤 sub_140001000 함수를 콜 한후

나온 반환값으로 성공 및 실패로 분기하는 코드가 보인다.

 

 

sub_140001000

 

해당 함수를 디컴파일러 기능으로 c언어로 변환하면 이렇게 되고

sub_140001000 함수 매개변수에 v4(입력값)이 담기는 코드가 보인다.

sub_140001000 함수로 들어가보면

 

 

sub_140001000

 

여기서 연산을 한 결과가 성공 및 실패로 가는 분기를 결정하는거 같다.

 

byte_140003000 를 비교하는걸 봐서 해당 주소로 이동해보니

 

byte_140003000

 

이런 data 가 나온다. i 값이 for문을 돌면서 연산 후에 나온값을 여기에 있는 data와 비교하는 듯하다.

 

식을 정리 해보면 byte_140003000[i] != (i ^ *(unsigned __int8 *)(a1+i))+2*i)

(i ^ (input))+2*i) 식이 되고

 

xor 연산은

a ^ b = c

c ^ b = a

와 같다.

 

즉 식을 역연산하면 (i ^ (input)) - 2*i) 가 되겠다. 

0x18은 10진수로 24이니 for문을 24번 반복하게 한다.

 

역연산 코드

 

해당 식을 C 언어로 프로그래밍 해서 돌려보면

 

 

flag 값이 나온다.

'Reversing > CTF' 카테고리의 다른 글

Practical Malware Analysis [Lab 1-2]  (1) 2024.10.25
Practical Malware Analysis [Lab 1-1]  (0) 2024.10.24
CodeEngn Basic RCE 12 문제 풀이  (0) 2022.05.10
CodeEngn Basic RCE 11 문제 풀이  (0) 2022.05.08
CodeEngn Basic RCE 10 문제 풀이  (0) 2022.05.08