본문 바로가기

WarGAME/N0Named Wargame

xeh_desrev(reverse된 파일 복구 방법 공부)

xeh_desrev => reversed_hex

xxd와 tac 이용해서 reverse된 hex코드를 다시 reverse를 할 수 있다. xxd와 tac을 사용해보며 문제해결법을 찾아보자.

 

xxd

헥사 에디터와 같이 바이너리 파일을 편집할 수 있도록하는 리눅스 명령어로 xxd가 있다. 이를 이용하면 바이너리파일의 헥사코드 확인과 수정을 할 수 있는데, 이때 다양한 명령어들과 조합해서 사용할 수 있어서 hxd를 이용하는 것보다 오히려 간단하게 바이너리 파일을 다룰 수 있다.

 

[xxd와 grep 명령어 사용]

grep으로 파일의 png파일의 헤더 부분의 존재 여부를 확인해보자. p옵션으로 헥사코드만 확인해보니 마지막 부분에서 png파일의 헤더 시그니처가 순서가 뒤집힌 채로 있었다.

 

xxd로 헥사코드를 확인할 파일을 열어주고, 동시에 grep으로 png파일의 헤더시그니처를 reverse한 형태를 찾아보자. 

(png파일의 헤더 시그니처는 '89 50 4E 47 0D 0A 1A 0A'이지만 일단 '89 50'만을 갖고 '50 89'로 검색해주었다.) 

두 명령어를 함께 사용할 땐 '|' 로 구분해 한줄로 적어주면 된다. 

 

png파일의 헤더 시그니처인 '89504E470D0A1A0A'가 뒤집혀서 '0A1A0A0D474E5089'형태의 헥사코드로 파일이 구성되어있다는 것을 확인할 수 있었다. 

 

[tac 명령어]

tac 명령어를 이용하면 내용을 역순으로 출력해주는 것을 확인할 수 있다. 그러나 7월부터 12월까지는 역순으로 출력되니 않은 것에서 tac 명령어가 모든 내용을 역순으로 출력하지 않는다는 것을 확인할 수 있다.

그렇다면 열어준 헥사코드를 reverse하기 위해 tac 명령어를 바로 사용할 때, 행단위로 역순출력되게 되는데, 이는 hex를 reverse한것으로 볼 수 없다.

month를 hex코드로 출력한 뒤 tac명령어로 reverse를 시도해보면 바이트단위로 역순출력하는 것이 아니라 30바이트 단위로 역순출력해준 것을 확인할 수 있다.

 

이를 해결하기 위해 xxd 명령어로 reverse할 파일의 hex코드를 출력할 때, 바이트 단위로 행이 바뀌게끔 출력하는 옵션을 사용해준다. xxd 옵션 중의 -c 는 한 줄에 몇 바이트를 출력할지 지정해주기때문에 -c1옵션을 주면 한 줄에 한 바이트씩만 출력하도록 설정할 수 있다.

 

month 파일의 헥사코드를 한줄에 한바이트씩 출력되게 옵션을 지정해주었다.

month 파일의 헥사코드 초반부
month 파일의 헥사코드 후반부

 

이를 tac명령어와 함께 사용해주니 정확히 바이트단위로 reverse된 것을 확인할 수 있었다.

reverse한 후 month 파일의 헥사코드 초반부(기존 month파일의 헥사코드 마지막부터 역으로 출력되어있다)

 

reverse한 후 month 파일의 헥사코드 후반부(기존 month파일의 헥사코드 초반부까지 역으로 출력되어있다)

 

 

이걸 'xxd -p -r > 수정한 파일명'로 저장해주면 바이트 단위로 reverse된 reversedmonth가 생성된 것을 확인할 수 있다. 

 

당연히 month는 잘 열리지만 reversedmonth는 열리지 않는다. xeh_desrev문제의 파일도 hex코드가 revered되어 있어 열리지 않았으니 이를 다시 reverse해주면 png파일이 열릴 것이다!

 

이를 그대로 적용하면 xeh_desrev문제 파일(manduu23.png)의 hex코드를 reverse 한 파일(manduu23S.png)이 생성된다.

FLAG : NND{reversed_png}

'WarGAME > N0Named Wargame' 카테고리의 다른 글

zip password cracking  (0) 2020.11.24
N0Named wargame [A] 수상한 메일  (0) 2020.11.17
[B] 유출된 자료거래사건  (0) 2020.11.17
[Left Side B]  (0) 2020.10.26
[길에서 주운 만두]  (0) 2020.10.24