티스토리 뷰
블로그 이전 이후 첫 게시글이네요.
제가 Bandit wargame 포스팅하는 유형을 간단하게 설명드릴게요.
우선 문제를 살펴보고, 해설을 작성한 후 사용된 개념에 대해 타사이트에서 사진을 따와 올리는 방식입니다.
그에 따라 퍼온 사진 밑에 출처를 남겨두니 참고해주세요!
Problem
The password for the next level is stored in the file data.txt, where all lowercase(a-z) and
uppercase (A-Z) letters have been rotated by 13 positions.
==> 대강 해석해보면, "data.txt"에 비번이 저장되어 있으며, data.txt에는 소문자와 대문자 각각의 글자가
13자리씩 움직여져있다.
솔직히, 문제 자체만으로는 잘 이해가 가지 않는다.
그런데, 밑에 Helpful Reading Material - Rot13 on Wikipeda라고 적혀있다.
이를 보고 구글에 Rot13을 검색했고
출처 : ROT13 - Wikipedia
위 그림만으로도 충분히 이해가 됐다.
A는 N으로, B는 O로 등 역방향 역시 허용하면서 암호화를 한 것임을 나는 알 수 있었다.
어느 정도 문제를 이해했으니 본격적으로 문제를 풀어보자.
Solution
내가 풀어나간 방식은 data.txt 파일은 암호화돼있음을 알고 있으니,
ROT13 방식을 이해해서 반대로 구현해서 원문으로 돌리는 방식을 생각했다.
이에 필요한 명령어는 tr 명령어이다.
이런 생각을 바탕으로 이런 결과를 도출했다.
사용방법에 대해서는 다음 카테고리에서 세세히 설명하겠다.
Concept & Option
tr명령에 대한 자료 : [Linux] tr - 리눅스 명령어 tr에 대해서 (tistory.com)
tr A B 형식에서 A 문자열을 B로 변경한다는 사실이 중요하다.
내가 위에서 'A-Za-z'라고 입력한 것은
대문자 A부터 Z까지 와 소문자 a부터 z까지의 모든 알파벳을 지정하기 위함이다.
그리고 이제 변경할 알파벳은 지정했으니 어떻게 변경할 것인지를 지정해야 한다.
그런데 우리는 ROT13을 봐서 알파벳이 어떤 순서로 뒤섞였는지 알 수 있다.
그래서 A-Z를 지정한 것을 조금 분해해서 생각해보자.
N-Z라고 적힌 부분이 뒤에 있다.
그럼 천천히 생각해보면 A-M까지 와 N-Z까지의 개수가 맞으므로, 잘 치환되었음을 알 수 있다.
이제 A-Z까지 중 A-M은 N-Z로 변환을 완료했다.
그럼 남은 것이 N-Z이지 않은가?
그래서 뒤 따옴표에 보면 'N-ZA-M'이라고 해서 A-M이라는 부분이 존재하는 것이다.
대문자끼리 보면 이해하기 쉽다.
A부터 Z까지의 개수는 양쪽 모두 같아야 한다.
그래야 치환이 비어있는 값 없이 완료될 테니 말이다.
그런데 A는 N으로 치환되고 이후 알파벳들도 13자리 후의 알파벳으로 변경되는 것이니
알파벳이 끝나는 부분인 Z까지만 먼저 비교해주고, 남은 부분을 따로 처리해준 것이다.
그다음은 바로 이어서 소문자를 진행해줬을 뿐인 것이다.
나름 쉽게 풀어쓰려고 노력했는데 잘 전달이 되었는지 모르겠습니다.
잘 이해가 안 되는 부분은 댓글로 바로바로 물어보시면 답변을 달겠습니다.
감사합니다!