
파일은 exe 실행 파일 형식이며
Input로 key를 받고 분기하여 성공 및 실패 문자열을 출력해주는 문제인거 같다.

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

Input으로 입력받은뒤 sub_140001000 함수를 콜 한후
나온 반환값으로 성공 및 실패로 분기하는 코드가 보인다.

해당 함수를 디컴파일러 기능으로 c언어로 변환하면 이렇게 되고
sub_140001000 함수 매개변수에 v4(입력값)이 담기는 코드가 보인다.
sub_140001000 함수로 들어가보면

여기서 연산을 한 결과가 성공 및 실패로 가는 분기를 결정하는거 같다.
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 |