/ 도구 / VBA 암호 파괴 가이드

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 만으로 완벽 추출이 어려울 때 oletoolsolevba 와 연동.

# 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
• 교육 및 합법적 복구 목적으로만 사용해주세요