문제

Bandit Level 11->12

풀이 및 정답

이번 password도 data.txt에 있는데, 모든 소문자와 대문자들이 13만큼의 위치가 변화되어 있다고 한다.

cat data.txt

데이터의 대소문자의 위치를 13씩 변화를 주려면 tr 명령어를 사용해야 한다.

cat data.txt | tr 'a-m' 'n-z' 

해당 명령어는 a-m 까지의 문자를 n-z 까지로 변환하는 일을 한다.

a -> n 까지의 위치 증가량이 13이기에 위와 같은 명령어로 테스트 해본다.

결과로 알 수 있다시피 c->p로 변하는 a-m 사이의 문자들이 n-z로 변한것을 확인할 수 있다.
그런데, n-z까지의 문자는 당연히 아직 a-m으로 변하지 않았다.

cat data.txt | tr 'a-m' 'n-z' | tr 'n-z' 'a-m'

예상과는 다른 문자열을 내뱉었을 것이다.
a-m 문자들이 n-z 문자들로 대체되었지만 파이프라인 특성으로 변경된 문자들이 다시 tr 'n-z' 'a-m' 명령어를 만나게 되면서 cat data.txt를 했을때의 결과로 돌아오게 되었다.

즉, 파이프라인을 나눠서 실행하게 되면 첫 tr명령어를 만나서 변화된 문자들이 두번째 tr명령어를 만나게 되면서 돌아오는 상황이 되니 하나의 tr명령어에서 두가지 일을 동작할 수 있게 만들어야 한다.

여러 방식 시도

다음 순서를 통해서 얻은 결과와 피드백으로 많은 시도를 직접 해봤다.
1) 두개의 파이프라인 명령으로 나뉘어져 있을때 논리식을 통해 한번에 동작할 수 없는지
2) am-nz > nz-am 을 사용해 am이 nz로 nz가 am으로 변화될 수 있는지
3) 2)의 동작이 정상적이지 않아 a-z의 문자들이 알아서 nz-am으로 변화될 수 없는지
4) 3)의 출력을 통해 z-a, z-m이라는 순서는 tr명령에서 정상적이지 못하는 것을 확인하고 ‘am-nz’로 명령 인자 변경
5) 4) 출력을 통해 ‘am-nz’ 명령 인자 동작 가능 확인으로 여러 방식 시도
6) 대문자에도 적용

결과적으로 다음 명령어를 작성하면 된다.

cat data.txt | tr 'a-mn-z' 'n-za-m' | tr 'A-MN-Z' 'N-ZA-M'

passwd : 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4

이번 문제는 tr 명령어에 대한 사용 경험이 별로 없었어서 여러 시도 끝에 답을 얻을 수 있었다.
그럼 다음으로!!