본문 바로가기

CTF

[리버싱] angstromctf 2018 리버싱 3번문제

https://2019.angstromctf.com/

 

2019.angstromctf.com

2019.angstromctf.com

풀어볼 문제

끄덕

먼저 경로를 알려줬으니 경로로들어가서 실행시켜보자.

일단 그냥 실행하니 <inputString> 라고하니 인자를 하나 넘겨서 진행한다는걸 알수있다.

(왜 rev3 실행시켰는데 rev1 이라고뜨지)

인자로 testabcd 를 넘겨보니 Oops, !!

문제 다운

암호화나 컴파일 상태 확인 = gcc...

일단 지금 저 프로그램안에는 Oops, 라는 실패문자열이있다는걸 알았으니 그 기준으로

IDA을 통해 분석

내가 알고있는 문자열이 있으니 찾아가보자.

위의 이미지들을 보면 "egzloxi|ixw]dkSe]dzSzccShejSi^3q" 이 문자열이 엄청 신경쓰인다.

먼저 위에서 천천히 봐보면 내가 입력한 문자열의 길이를 구하고

encode 라는 곳에다가 내가 입력한 문자열을 인자로 넘겨주는데 저 곳이 중요한 역활을 하는듯보인다.

내가 입력한 문자열을 문자열 길이만큼 반복시키는 반복문이고 문자열 하나하나마다 연산을 통해 값을 변경시키고있다.

내가 입력한문자에 XOR 9 를연산하고 나온값에 -3 을하는 반복문인데

XOR의 큰 특징은 연산한값과 같은 값으로 다시 XOR연산하면 원래의 값이나온다는것이다.

즉 위와같이 암호화된것을 반대로 연산시키면 원래의값이 나온다는것.

 

#include<stdio.h>

void main() {

	char arr[] = {"egzloxi|ixw]dkSe]dzSzccShejSi^3q"};
	
	for (char i = 0; i <= sizeof(arr); i++) {
		
		arr[i] = (arr[i]+3) ^ 9;
	}
	arr[sizeof(arr) - 1] = 0;
	printf("복호화 %s\n", arr);
	
}

 }

위에서 얻어낸 연산방법을 반대로 해보자.

 

'CTF' 카테고리의 다른 글

[HackCTF/Web] Authorized  (0) 2019.05.20
[써니나타스] BINARY 9번 문제 풀이  (0) 2019.05.20
[reversing.kr] Easy Unpack 풀이  (0) 2019.05.12
[reversing.kr] Easy Keygen 풀이  (0) 2019.05.12
[reversing.kr] Easy Crack 풀이  (0) 2019.05.12