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' 카테고리의 다른 글
[써니나타스] BINARY 10번 문제 풀이 (0) | 2019.05.12 |
---|---|
[써니나타스] BINARY 9번 문제 풀이 (0) | 2019.05.12 |
[코드엔진] basic 7 풀이 (0) | 2019.05.12 |
[코드엔진] basic 6 풀이 (0) | 2019.05.10 |
[코드엔진] basic 5 풀이 (0) | 2019.05.10 |