본문 바로가기

프로그램/소개/다운로드/메뉴얼

FCIV - 명령형 해시값 체크 프로그램, 마이크로소프트


직접 다운로드 1 fciv.exe
직접 다운로드 2 Windows-KB841290-x86-ENU.exe
공식 사이트 http://support.microsoft.com/kb/841290


다운로드 2 는 마이크로스프트에서 제공하는 자동 풀림 실행 파일이고, 다운로드 1 은 그냥 제가 압축 해제해서 올린 겁니다. 파일이 딸랑 저거 하나랑 안내 텍스트 파일만 들어 있거든요. 다운로드 받으신 후 \Windows\System32 폴더에 넣어두시면 아무 경로에서나 곧바로 사용하실 수 있습니다.

아무튼 FCIVFile Checksum Integrity Verifier Utility 로 파일에 대한 MD5 또는 SHA1 해시값을 체크할 수 있는 명령형 도구입니다. 일전에 소개해드린 적이 있는 HashTab 과 같은 프로그램이라고 보시면 됩니다. 간단하게 명령 프롬프트에서 파일에 대한 해시값을 확인하고, 이를 비교할 때 사용하는 프로그램입니다.

HashTab 과 같은 프로그램이 단일 파일에 대한 해시값의 확인에 특화되어 있다면 이 FCIV 는 다수의 파일에 대한 해시값을 한 번에 확인하고 저장하는 것에 특화되어 있습니다.






FCIV 를 통해 파일의 해시값 확인하기

예제 파일들


1. MD5 해시값 확인하기

가장 먼저 특정한 파일에 대한 해시값을 확인하는 것은 다음과 같습니다.

fciv -add T:\Test\001.png -md5



폴더를 지정하면 해당 폴더에 포함된 모든 파일에 대한 해시값을 확인할 수 있습니다. 이 때 FCIV 는 해당 폴더에 위치한 파일들만 확인하며 하위의 서브 폴더들은 확인하지 않습니다.

fciv -add T:\Test\001.png -md5



참고로 -add 와 -md5 스위치는 생략하면 기본으로 적용되는 스위치인지라 아래와 같이 생략하여 간단하게 확인할 수도 있습니다. [MD5 해시값 확인에 한해] 하지만 이번 글에선 이러한 스위치들을 생략하지 않고 모두 온전히 사용하는 것을 기준으로 하도록 하겠습니다.

fciv T:\Test





2. SHA1 해시값 또는 둘 모두 확인하기

-sha1 스위치를 적용하면 MD5 대신 SHA1 해시값을 확인합니다.

fciv -add T:\Test\001.png -sha1



만약에 MD5 와 SHA1 해시값을 모두 확인하고 싶다면 -md5 -sha1 스위치를 동시에 적용하거나 -both 스위치를 적용하면 됩니다.

fciv -add T:\Test\001.png -both








FCIV 를 통해 파일의 해시값을 XML 로 저장하고 검사하기 - 전체 경로 방식

예제 파일들


1. XML 저장하기

특정 파일 또는 폴더에 대한 해시값을 XML 파일로 저장할 수 있습니다.

fciv -add T:\Test -md5 -xml T:\Hash.xml



이 때 에러 메시지는 해당 XML 파일을 처음 만들 때 출력되는 것으로 신경쓰지 않으셔도 됩니다. 아무튼 그러면 아래와 같이 지정한 파일(폴더의 파일들)에 대한 해시값을 담은 XML 파일이 생성됩니다. [원래는 한 줄로 되어 있는데 보기가 지랄 맞아서 제가 임의로 정리를 좀 했습니다.]




FCIV 는 기본적으로 서브 폴더들은 작업에 포함시키지 않습니다. 그래서 보신 것과 같이 폴더를 지정했을 때 해당 폴더에 포함된 파일들만 XML 로 저장된 것을 확인할 수 있습니다. 만약에 하위의 서브 폴더도 포함하고 싶다면 서브 폴더에 대한 XML 생성을 동일 XML 파일로 한 번 더 하시면 됩니다.

fciv -add T:\Test\Picture -md5 -xml T:\Hash.xml




그러면 보시는 것과 같이 이전의 XML 파일 내용 뒤에 새로운 해시값들이 새롭게 추가가 됩니다. 이런 식으로 작업을 진행하면 다수의 폴더에 대한 해시값을 하나의 XML 파일에 저장할 수 있습니다. 참고하세요.



2. XML 파일을 통해 파일 검사하기

이렇게 XML 파일에 저장된 해시값과 실제 파일을 비교하여 파일이 누락되거나 변조되진 않았는지 확인하는 것이 가능합니다.

fciv -v -xml T:\Hash.xml



아무런 문제가 없다면 위와 같이 나오며 만약에 파일이 누락되었거나 다르다면(해시값이 다른, 변조되었거나 다른 파일이거나) 아래와 같이 곧바로 확인이 가능합니다.




3. XML 파일에 저장된 해시값 출력하기

XML 파일에 저장되어 있는 해시값은 그대로가 아닌 변조할 수 없게 저장되어 있기 때문에 에디터를 통해서는 곧바로 확인이 불가능합니다. 만약에 XML 에 저장되어 있는 해시값을 따로 확인할 필요가 있다면 아래와 같이 확인 가능합니다.

fciv -list -xml T:\Hash.xml




4. 전체 경로 방식의 문제

지금까지 알아본 XML 저장은 파일 엔트리에 해당 파일들에 대한 전체 경로가 저장되고, 검사 또한 이러한 이러한 전체 경로를 토대로 검사를 진행하게 됩니다. 파일을 검사하는 입장에서 해당 파일들이 정확한 경로에 위치해야 한다면 이 방식을 사용해야 합니다. 아무튼 이러한 전체 경로 방식은 해당 파일들에 대한 경로가 바뀌면 아무런 소용이 없게 되죠. [물론 나 혼자 사용할 거라면 에디터로 파일 엔트리의 경로를 일괄적으로 바꿔주고 검사하면 되지만...]

경로와 상관없이 해당 파일들이 온전한지만 확인할 때는 전체 경로 방식은 문제가 있습니다. 예를 들어 XML 파일을 만들 땐 T:\Test 였지만 해당 파일들을 D:\Temp 에 저장했고, 여기에서 검사를 해야 한다면?

XML 을 만들 땐 T:\Test 였지만 검사할 땐 아니란다.


이와 같이 파일의 경로가 바뀔 때를 대비하기 위해선 경로를 제거하거나 상대 경로를 사용해야 합니다.






FCIV 를 통해 파일의 해시값을 XML 로 저장하고 검사하기 - 경로 제거 방식

이 방식은 아예 파일에 대한 전체 경로를 제거하고 파일의 이름만 저장하는 것입니다. 이 때는 -wp 스위치를 추가하면 됩니다. [스위치의 순서를 주의하세요.]

fciv -add T:\Test\Picture -md5 -wp -xml T:\Hash-R1.xml




그러면 보시는 것과 같이 XML 파일의 파일 엔트리에 전체 경로가 제거된 채 파일의 이름만 저장된 것을 확인할 수 있습니다. 이러한 파일을 통해 검사를 진행할 때는 -bp 스위치를 통해 상대 경로로 XML 파일을 통해 검사하는 것임을 알려주어야 하며, 검사를 수행하려는 파일들의 경로를 입력해줘야 합니다. [스위치의 순서를 주의하세요.]

fciv -v -bp D:\Temp -xml T:\Hash-R1.xml



이러한 경로 전체를 제거하는 것은 단일 폴더에 대한 파일들을 처리할 때 사용하기에 좋습니다. 근데 다수의 폴더로 구성된 내용을 검사할 땐 이게 좀 그렇겠죠? 전체 경로를 제거해버리니까요. 검사할 목록이 다수의 폴더로 구성되어 있다면 상대 경로 방식을 사용하여야 합니다.






FCIV 를 통해 파일의 해시값을 XML 로 저장하고 검사하기 - 상대 경로 방식

이 방식은 제외 시킬 경로를 지정하여 해당 경로를 제거하고 상대 경로로 파일 엔트리를 저장하는 것입니다. 이 때는 -bp 스위치를 통해 컷해낼 경로를 지정해주면 됩니다. [스위치의 순서를 주의하세요.]

fciv -add T:\Test -md5 -bp T:\Test -xml T:\Hash-R2.xml
fciv -add T:\Test\Picture -md5 -bp T:\Test -xml T:\Hash-R2.xml




그럼 보시는 것과 같이 지정한 경로 부분을 제외한 나머지 경로로 파일 엔트리가 저장됩니다. 간단하죠? 이제 검사할 땐 위와 동일하게 -bp 를 통해 상대 경로임을 알려주고 확인하려는 파일들의 경로를 입력하시면 됩니다.

fciv -v -bp D:\Temp -xml T:\Hash-R2.xml




설명은 여기까지입니다. 어디에서 활용할 것인지는... 언젠간 써먹을 곳이 있겠죠. ^^; 그건 여러분이 알아서 잘 생각하시면 되는 것이고요. 저는 인터넷에 업로드한 파일들을 다운로드하는 wget 배치 파일 기반 SFX 자동 다운로드 도구 만들기 글에서 제공해드린 배치 파일 내에서 다운로드 받은 파일이 온전한 파일인지 확인하는 용도로 간단하게 사용했었습니다. [그것만 아니었으면 파일을 다운로드 받는 부분을 그냥 For 로 돌릴 수 있었을텐데...] 사실 굳이 그렇게까지 할 필요는 없었다고 생각은 들지만, 아무튼 해당 글에서처럼 배치 파일에서 해시값 체크를 자동으로 처리하는데에 유용하게 사용할 수 있습니다. ^^;;


참고로 여러분이 인터넷에서 다운로드 받는 파일들은 언제나 온전한 것이 아닙니다. (수많은 검증 과정을 통과한 채) 파일이 잘못다운로드 되는 경우도 많죠. 그런 일이 실제로 많이 일어 납니다. 그래서 파일을 제공하는 측에선 파일과 함께 해시값을 제공하죠. 일례로 마이크로소프트가 MSDN 다운로드에서 괜히 SHA1 값을 제공하는게 아니라는 거죠.

이런 걸 그냥 심심해서 제공하는 게 아닙니다.



아예 SFV 체크 파일을 함께 제공하는 경우도 있고요. 과거 유즈넷에서 배포되는 자료들은 SFV 를 포함하는 경우가 대부분이었죠. 다 파일이 정상적으로 다운로드 된 것인지 확인해보라고 제공하는 겁니다. 저도 블로그에서 중요한 파일을 올릴 땐 MD5 해시값을 제공하잖아요.

사실 소수의 파일들의 확인엔 FCIV 보다는 HashTab 같은 프로그램이 좋죠. 이제 FCIV 는 배치 파일 내에서 이를 자동으로 처리시킨다거나, 다량의 데이터를 이전할 때 검증하는 용도로 간단하게 사용할 수 있을 듯 합니다. 이상입니다. ^^