2008년 5월 1일 목요일

FCIV.exe와 MD5, SHA1


FCIV같은 프로그램을 찾은 목적은 실행파일의 SHA1값을 알려주는 프로그램을
찾다가 검색한 것인데,

FCIV는 아래 사이트에서 받을 수 있었다.
http://support.microsoft.com/kb/841290

프로그램 설명사이트가

영어 기본표시에, 일본어나, 중국어로는 번역을 지원하는데
한글을 지원하지 않았다. (나 영어 모르는데 orz...)


다운로드 파일명은 Windows-KB841290-x86-ENU.exe이고

실행시키면 사용자가 지정한 폴더에 FCIV.exe와 Readme.txt
를 설치하는데,

나는 C:\FCIV>에 설치하였다.


실행파일의 MD5나 SHA1 값을 알아보기 위해서는
명령프롬프트에서..(fciv.exe는 명령 프롬프트에서만 작동되는 프로그램)

"fciv 경로\파일명"을 입력해주면 결과가 나왔다.(기본설정 MD5)

위의 그림은 kbench에서 받은 윈도우 서비스팩3 설치파일의 md5 값을 알아 보았다

위와같이 별다른 옵션이없을때는 MD5값이 출력되지만,
별도로 -sha1 옵션을 주면 sha1으로도 출력되었다.

명령 : fciv -sha1 c:\fciv\WindowsXP-KB936929-SP3-KOR.EXE

-both명령을 입력했을때는 md5, sha1값 모두 출력되었다.

명령 : fciv -both c:\fciv\WindowsXP-KB936929-SP3-KOR.EXE

그외에도 FCIV에 대한 몇가지 옵션이과 설명이 더있어서...
아래와 같은 것을 하고 싶어졌다.

* WindowsXP-KB936929-SP3-KOR.EXE의 압축을 임시폴더(C:\temp)에 푼다음

하위폴더의 파일을 포함한 모든 파일 각각의 MD5, SHA1값을 xml파일로 저장한다.

* 위에서 압축을 푼 파일을 그대로 C:\temp2에 복사한다.

* temp2에 복사된 일부파일들을 수정, 삭제해본다.

* fciv가 저장한 xml 파일을 읽어서 temp2의 변경되거나, 삭제된 파일을
찾아 낼수 있는지 알아본다.

1) 명령프롬프트에서

WindowsXP-KB936929-SP3-KOR.EXE /x

명령을 실행한 후 압축을 풀어놓을 폴더를 c:\temp로 지정해서 풀었다.

Temp폴더 하단에 i386폴더가 만들어졌고. 그안에도 많은 파일과 폴더가 있다.

2) temp에 풀은 파일들의 MD5, SHA1 정보를 xml파일로 저장하기 위해

명령 : fciv -add c:\temp -r -both -bp c:\temp -xml C:\xp_sp3.xml

-r 옵션을 줘야 하위폴더의 파일까지 적용.

-bp

(이 옵션 없이 실행하면 항상 각 파일의 전체 경로가 xml에 저장됩니다.

-bp c:\temp의 의미는,

c:\temp\test1\a.exe라는 파일 경로가 있을 때, 이 경로 그대로 저장하지 않고,

c:\temp를 기준으로 해서. test\1\a.exe로 경로를 저장하라는 의미 입니다.)

-xml c:\xp_xp3.xml 옵션으로 c:\xp_sp3.xml이란 파일로 저장하였다.

처리된 파일수는 위의 i386등록정보 파일 수와 같지만, 폴더는 2개가 추가되어있는데,

Temp입장에서 볼때 i386도 포함하고 Temp자신도 포함되었기 때문인듯하다.

그러나 bp옵션으로 Temp경로를 제거 했기떄문에 문제는 없었다.

↓ c:\xp_sp3.xml 파일의 내용 ↓

폴더구조 포함해서 모든 파일들의 MD5와 SHA1 정보가 저장되었다.

[xml 파일에 hash값이 그대로 저장되는 줄 알았는데,

그 hash값을 이끌어내기위한 다른 값이 저장되는 것 같다.]

3) Temp 폴더 안의 i386폴더를 Temp2로 그대로 복사하고, 몇가지 파일을 변경시켰다.

변경시킨 파일 :

C:\Temp2\i386의 _networkingperfcounters.ini

C:\Temp2\i386\asms\10\msft\windows\gdiplus의 gdiplus.cat

삭제한 파일 :

C:\Temp2\i386\drw의 dwwin.exe

C:\Temp2\i386\lang의 chajei.im_

4) 변경되거나 삭제된파일이 무엇인지 FCIV를 통해 알아보기 위해.

명령 : fciv -v -bp c:\temp2\ -r -xml c:\xp_sp3.xml

xp_sp3.xml을 불러와서

temp2폴더 경로를 기준으로 잡아 (-bp c:\temp2\)

temp2 하위 폴더의 모든 파일들을 (-v)옵션으로 검증했다.

["-bp 경로"옵션이 없는 상태에서 검증을 실행하면

FCIV를 실행한 경로에서 검증할 파일을 찾습니다.

검증할때는 -r옵션없이도 하위폴더의 파일들을 검증 할 수 있습니다.

아마도.. 이미 xml에 하위 폴더 파일의 경로정보가 저장되서 사용할 필요가 없는 것 같네요.]

예상대로 미리 변경하거나 삭제한 파일들을 잘 찾아냈다.

[만약 xml을 저장할 때 -sha1옵션을 써서 저장을 했다면,

검증할때도 -sha1옵션을 붙혀 주어야 합니다.

아무 옵션이 없을때 md5값만 검사하므로.. sha1만저장되어있는 xml파일을 읽으면,

그냥 처리하지도 않고 성공했다고 나오네요..]


그냥 두서없이 적은 것 같습니다.

저는 md5값이나, sha1값이 그대로 xml에 저장되는 줄 잘못 알고 있었습니다.

It shoud be 값을 복사해서 Xml파일 열어서 검색 했을때 왜 안나오지?하며 삽질한 것 같은..ㅠㅠ

(xml에 저장된 값은 뭘의미하는지 모르겠네요...

명령프롬프트에 출력되는 값은 hash값인데, xml에 기록된 값은 무엇인지?)

md5나 sha1에대해서, 잘 모르고

그냥 무작정 해시값만 같게 나오면 파일 변경이 없었다는 것만 알고 있었거든요..^^

변화되어선 안될 파일들이 있을때 xml에다 해시값을 비교해낼 정보?를 저장해두고,

어떤 파일이 변화 되었는지 감지할 때, 유용할 것 같습니다.

댓글 없음:

댓글 쓰기