극히 개인적이고 극히 대단하지 않은

vi 에디터로 hex모드로 에디팅 시 컬럼 수 늘이기 본문

20년차 개발자

vi 에디터로 hex모드로 에디팅 시 컬럼 수 늘이기

회색싼타 2020. 4. 22. 17:52

워낙 밑바닥 코딩을 하다보니, 생성된 바이너리를 정말 맨땅에 부딪히는 느낌으로 까봐야할 때가 종종 있다.

이 경우 유용하게 쓰이는 것이 xxd 명령이다.

xxd 매뉴얼

제일 간단한 사용방법으로 'xxd 파일이름' 을 입력하면 그 파일을 hexa모드로 덤프해서 출력한다.

xxd test10 을 입력한 결과

폭이 좁아 보기 불편한 경우에는 -c 컬럼수 옵션을 추가하여 컬럼 수를 변경할 수 있다. (입력하지 않으면 default 16)

xxd -c 32 test10 을 입력한 결과

xxd명령은 vi에디터에서도 연결하여 사용할 수 있다.

 

우선 편집하고 싶은 바이너리 파일을 vi로 연다.

vi test10 으로 파일을 연 결과

파일을 열면 알수없는 암호코드같은 문자열로 인하여 알아볼 수 없는 화면이 나타난다. 다른 자료에는 hexadump모드로 열기 위해 vi에 -b (binary)옵션을 줘야하는 것으로 설명하는데 굳이 -b 옵션을 주지 않아도 무방하다.

vi 에디터 상에서 %!xxd 명령을 주면 hexa 모드로 변경이 된다.

hexa mode로 편집

이 때 부터는 일반적인 vi 기능을 이용하여 문서를 navigate 및 편집을 할 수 있다. 조심해야 할 것은 이 상태에서 :wq를 입력하여 저장하면, 애초의 바이너리와는 다른 화면에 보이는 텍스트를 저장하게되어 애초의 바이너리는 사라진다. 왠만하면 복사를 해 놓고 수행하는 것이 안전하다. 

그러면 바이너리의 일부를 변경후 저장할려면 어떻게 해야할까?

vi 에디터의 편집기능을 이용하여 원하는 자리의 값을 바꾸면된다. 예를 들어 맨 첫째 줄의 7f45 4c460000 0000으로 편집한 후, %!xxd -r 명령으로 다시 바이너리 모드로 바꾼 후 :wq 명령으로 저장하면 변경사항이 바이너리에 적용된다.

 

맨앞 7f46 4c46을 0000 0000으로 바꿨더니 바이너리 앞부분이 바뀌었다.

vi 에서도 hexa모드로 볼 때, 컬럼 수를 늘여서 볼 수 있을까? 

있다.

 

%!xxd -c 36

 

이런 식으로 변환시 -c 옵션을 주면된다.

%!xxd -c 36으로 컬럼을 조정한 결과

컬럼을 키우면 임의의 스트링을 찾을 때에 줄바꿈으로 인하여 찾지 못할 확률이 줄어들고 가독성이 높아져서 좋다.

Comments