VBA 암호 파괴 가이드
VB.NET으로 엑셀 VBA 암호 파괴 및 소스 추출 자동화
엑셀 파일(xls, xlsm, xlsb, xlam)에 포함된 VBA 프로젝트의 암호를 제거하거나, 소스를 자동 추출하는 방법. VB.NET 과 Python 을 연동한 자동화 솔루션입니다.
1 필요성
VBA 암호는 코드 보호 목적으로 설정되지만 분실 시 접근 불가. VB.NET 으로 바이너리 레벨에서 암호 정보를 제거/복원할 수 있습니다.
2 사용 기술
언어
VB.NET (.NET Framework 4.8)
라이브러리
OpenMcdf
대상 파일
xls, xlsm, xlsb, xlam
기능
암호 파괴 · 복원 · 소스 추출
3 주요 코드
VBA 암호 파괴 (Office Open XML)
Public Sub RemoveVBAProjectPassword_OfficeOpenXml(filePath As String)
' 압축된 VBA 프로젝트(bin)에서 암호 정보 삭제
End Sub
VBA 암호 복원
Public Sub RestoreDPBInBin(binFile As String, Optional dpbLine As String = Nothing)
' DPB 값 복원
End Sub
VBA 소스 자동 추출
Public Sub ExtractVBASources(binFilePath As String, outputFolder As String)
' 압축된 VBA 스트림을 자동 해제하여 소스코드를 .bas 파일로 저장
End Sub
4 Python 활용 (oletools)
VB.NET 만으로 완벽 추출이 어려울 때 oletools 의 olevba 와 연동.
# extract_vba.py
import sys, os
from oletools.olevba import VBA_Parser
input_file = sys.argv[1]
output_dir = sys.argv[2]
vbaparser = VBA_Parser(input_file)
for (filename, stream_path, vba_filename, vba_code) in vbaparser.extract_macros():
with open(os.path.join(output_dir, vba_filename), 'w', encoding='utf-8') as f:
f.write(vba_code)
vbaparser.close()
5 VB.NET 에서 Python 호출
Private Sub ExtractVbaWithPython(inputFile As String, outputDir As String)
Dim psi As New ProcessStartInfo()
psi.FileName = "python"
psi.Arguments = $"extract_vba.py ""{inputFile}"" ""{outputDir}"""
psi.UseShellExecute = False
psi.RedirectStandardOutput = True
psi.CreateNoWindow = True
Dim process As Process = Process.Start(psi)
process.WaitForExit()
MessageBox.Show("VBA 소스 추출 완료!")
End Sub
주의사항
• 원본 파일 백업 필수
• 암호 파괴 후 복구는 원본 DPB 값을 별도 보관해야 가능
• Python 환경:
pip install oletools• 교육 및 합법적 복구 목적으로만 사용해주세요