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 |