rev-basic-3 풀이 정리

Evie·2023년 9월 25일
0

시스템

목록 보기
19/22

사용 툴 : IDA Freeware


1. 👾디컴파일

익숙한 구조!
sub_140001000로 답이 갈리네,,, 이 함수를 봐야겠군!

2. 🔎내부 함수 분석

for 문을 18번 돌리면서 값을 비교하고 있군!
저 함수가 관건인듯 하다
어떻게 원문을 알아내지??

3. ⚙️역계산

^ 기호로 XOR 연산을 하고 있는데 위 식이 참이 되려면?어떻게 바꿔야할까ㅏㅏㅏ

byte_140003000[i] == (i ^ (unsigend __int8 )(a1 + 1)) + 2 * i 가
Correct가 나오도록 바꾸려면?
여기서 a1+1을 인자로 받고 있는 함수기 때문에 a1+1부분이 우리가 입력한 값이고
byte 부분은 프로그램 내 데이터 구나 ! 라는 것을 알아내는데 꽤 걸렸다..
여기서 좀 헤맸음
당연히 byte부분이 내가 입력한 값인줄 알았지!

XOR 의 특징

a^b=c
이면
b^c = a
a^c = b

위 식을 간단하게 보면
byte[i] == i^(a1+i)+2i
인데 위 특성을 적용하면
a1+i = i^(byte[i]-2
i)
이걸로 a1+i값을 알 수 있다!

byte의 데이터의 값은 더블클릭하면 딱 나온다!

아래 코드에 넣어주면 플래그가 딱!

#include <stdio.h>

int main(){
	unsigned chars[] = { ... };
    
    for(int i=0; i<24; i++){
    	printf("%c", ((chars[i] - (2*i))^i));
    }
    
    return 0;
}
profile
공부합시다

0개의 댓글