배치파일(.bat) 또는 power shell(.ps1)을 이용하여 해시 값 구하는 법을 알려드리겠습니다.

요즘 1일 1포스팅을 하고 있는 잇고입니다 🙂
해시값을 구하려면 해시값 추출하는 프로그램을 이용하여 추출하곤 하는데, 폐쇄망에서는 해당 파일을 옮기지 못해서 난감할 때 가 있습니다. 오늘은 명령 프롬프트(cmd)로 해시값 추출하는 방법과 드래그를 이용한 배치파일, 여러 파일을 한 번에 해시값을 구할 수 있는 스크립트 파일을 만들어보려고 합니다.

명령 프롬프트(cmd)를 이용해 hash 값 추출 방법

추출 가능한 해시값
추출 가능한 해시값

윈도우에서 제공하는 해쉬값은 MD2, MD4, MD5, SHA1, SHA256, SHA384, SHA512가 있습니다.

md5 해쉬값 추출
md5 해쉬값 추출
certutil -hashfile "파일명.확장자" md5

상단 명령어를 작성하면 해시값이 나오게 됩니다.

배치파일을 이용한 여러 파일의 해시값 가지고 오기

여러 파일이 있을 경우 명령 프롬프트를 실행하여 hash값을 추출하려면 힘든 일이기에 배치파일을 이용해 보다 쉽게 여러 파일에 대한 해시값을 받아볼 수 있습니다.

@echo off

certutil -hashfile %1 md5 | findstr /I /V "certutil">> md5.txt
echo. >> md5.txt

스크립트를 이용하여 만든 후 드래그 앤 드롭으로 추출하고자 하는 파일을 배치파일로 드래그해서 놓으면 md5.txt 파일이 생성되면서 해시 파일이 생성된 것을 볼 수 있습니다.

배치파일을 이용한 생성된 해시값
배치파일을 이용한 생성된 해시값

md5.txt 삭제하지 않으면 해당 파일에 계속 누적되어 추출이 되니 좀 더 능동적인 업무가 될 것 같네요

program file 내에는 관리자 권한이 없으면 추출되지 않는데, cmd를 관리자 권한으로 실행을 해줘야 하나 program file내에서 해시값 추출할 파일이 정상적으로 실행이 되지 않을 경우가 있습니다. 그런 경우에는 아래의 코드를 사용하여 실행하시면 됩니다. 아래 코드는 배치파일을 관리자 권한으로 실행하는 코드입니다.

:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"

REM --> If error flag set, we do not have admin.
 if '%errorlevel%' NEQ '0' (
	echo Requesting administrative privileges...
	goto UACPrompt
 ) else ( goto gotAdmin )

:UACPrompt
	echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
	echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"

	"%temp%getadmin.vbs"
	exit /B

:gotAdmin
	if exist "%temp%getadmin.vbs" ( del "%temp%getadmin.vbs" )
	pushd "%CD%"
	CD /D "%~dp0"
:--------------------------------------
@echo off

certutil -hashfile %1 md5 | findstr /I /V "certutil">> md5.txt
echo. >> md5.txt

처음부터 관리자 권한을 가진 채로 실행하면 바로 실행되고 아닐 경우 관리자 권한을 묻는 코드는 혁이네님 블로그에서 참조하였습니다.
상단 코드로 배치파일 만들어서 하시면 관리자 권한이 필요한 경로에도 쉽게 해시값을 가지고 올 수 있습니다.

PowerShell을 이용하여 원하는 확장명에 대한 해시값 전부 가지고 오기

명령 프롬프트를 이용한 hash 값은 하나씩 드래그해서 가지고 와야 하는 번거로움이 있습니다. powershell은 그런 번거로움을 해결할 수 있고, 원하는 경로에 모든 파일의 해시값을 가지고 올 수도 있고, 원하는 해시값을 가지고 올 수도 있습니다. 스크립트를 만들어 보겠습니다 🙂

Get-FileHash *.* -Algorithm MD5 | Format-List > MD5_1.txt

powershell 스크립트 확장명은 “test.ps1“로 만들면 되고, 상단 명령어는 스크립트 있는 파일 내 모든 파일에 대한 md5값을 추출합니다.

스크립트 실행
스크립트 실행

실행은 원하는 경로에 파워쉘 스크립트를 붙여 넣은 후 마우스 오른쪽 키를 눌러 “PowerShell에서 실행”을 누르면 됩니다.

Get-FileHash *.txt -Algorithm MD5 | Format-List > MD5_1.txt

상단 명령어는 확장명 중 exe 실행파일 한해서 md5 값을 추출하겠다는 명령어입니다 🙂 실행하면 아래와 같이 추출이 됩니다

power shell 스크립트를 이용한 해시값 추출
power shell 스크립트를 이용한 해시값 추출

잘 나오죠? 이렇게 오늘은 별도 프로그램 없이 윈도우에서 기본으로 제공해주는 방법으로 쉽게 해시값 추출하는 방법에 대해 알려드렸습니다

Leave a Comment