실행파일 또는 바이너리파일에서 문자열 검색하기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,161 조회
- 0 추천
- 목록
본문
실행파일 또는 바이너리파일에서 문자열 검색하기
리눅스 시스템관리작업에서 우리가 접하는 파일들은 여러가지 종류가 있지만 대부분 텍스트파일이거나 바이너리파일이다.
텍스트파일일 경우는 vi 또는 cat, more등과 같은 명령어로 그 내용을 확인할 수 있지만 바이너리의 경우에는 그 내용을 어떻게 확인할까? 아니 확인하는 것은 가능할까? 답은 간단하다.
바이너리 파일은 그 내용을 확인하는 것은 불가능하다.
하지만, 바이너리파일에서도 영문자로 된 파일이 있을 것이므로 부분적이지만 문자 또는 숫자로 저장된 것은 확인이 가능하다.
즉, ASCII문자들은 확인이 가능하다는 것이다.
정리하면 strings라는 명령어는 지정한 파일내에 존재하는 문자들 가운데 읽을 수 있는 문자들을 출력해주는 명령어이다.
즉, 지정한 파일에 존재하는 모든 숫자 또는 문자들 가운데 ASCII문자들을 표시해준다.
특히 이 명령어는 BINARY형태로 되어있는 파일의 내용 중 특정 내용의 문자들을 확인하고자 할 때에 주로 사용한다.
자, 그럼 strings가 리눅스에서 가장 흔하게 사용되는 예를 보자. /etc/mail/access.db파일은 바이너리파일이기 때문에 vi나 cat명령어로 그 내용을 확인할 수 없다.
이 경우 strings라는 명령어를 사용하면 아래와 같이 이 파일의 내용 중 ASCII문자들을 확인할 수 있다.
[root@sulinux ~]#file /etc/mail/access.db /etc/mail/access.db: Berkeley DB (Hash, version 8, native byte-order) [root@sulinux ~]# [root@sulinux ~]#strings /etc/mail/access.db RELAY connect:localhost.localdomain RELAY connect:127.0.0.1 RELAY connect:localhost [root@sulinux ~]# |
참고로 위의 예에서 file명령어는 지정한 파일의 종류를 확인하는 것이다.
즉, access.db파일은 Hash함수에 의해 Berkeley DB타입으로 저장된 Binary파일임을 알 수 있다.
그리고 다음은 /etc/mail/virtusertable.db라는 바이너리 파일의 내용가운데 “.co.kr” 그리고 “.net”이라는 문자가 들어있는 행들만을 확인한 예이다.
[root@sulinux mail]#file /etc/mail/virtusertable.db /etc/mail/virtusertable.db: Berkeley DB (Hash, version 8, native byte-order) [root@sulinux mail]# [root@sulinux mail]#strings /etc/mail/virtusertable.db | grep .co.kr admin@picasso.co.kr webmaster@linux.co.kr [root@sulinux mail]# [root@sulinux mail]#strings /etc/mail/virtusertable.db | grep .net master@sulinux.net [root@sulinux mail]# |
virtusertable.db파일은 바이너리 파일이기 때문에 vi나 cat등과 같은 명령어로는 확인할 수 없다.
따라서 이 파일에 실제로 저장된 내용을 일부라도 확인할 때 사용하는 방법이다.
그리고 /var/log/wtmp파일은 다음 예와 같이 바이너리 파일이기 때문에 그 내용을 vi나 more등으로 확인 불가능하다.
따라서 strings를 이용하여 /var/log/wtmp 바이너리 파일에 대하여 다음과 같은 방법으로 특정 IP주소만을 확인해 볼 수도 있다.
[root@sulinux mail]#file /var/log/wtmp /var/log/wtmp: data [root@sulinux mail]# [root@sulinux mail]#strings /var/log/wtmp | grep 192.168.0.251 192.168.0.251 192.168.0.251 [root@sulinux mail]# |
이상과 같이 strings를 활용하는 방법에 대해서 알아보았다.
바이너리 파일에서도 뭔가 읽어낼 필요가 있다면 확인해 보시라.
관련자료
-
이전
-
다음