본문 바로가기
개발자 커뮤니티에 오신 것을 환영합니다!

VBA 암호 파괴 가이드

VB.NET으로 엑셀 VBA 암호 파괴 및 소스 추출 자동화

엑셀 파일(xls, xlsm, xlsb, xlam 등)에 포함된 VBA 프로젝트의 암호를 제거하거나, 소스를 자동으로 추출하는 방법을 소개합니다. VB.NET과 Python 스크립트를 활용한 강력한 자동화 솔루션입니다.

1 엑셀 VBA 프로젝트 암호 파괴의 필요성

VBA 암호는 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을 활용한 VBA 소스 완벽 추출

VB.NET만으로는 완벽한 소스 추출이 어려울 때, Python의 oletools(olevba) 라이브러리를 연동하면 간단히 해결됩니다.

extract_vba.py
# extract_vba.py
import sys
import 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 자동 연동

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

6 사용 시 주의사항

  • 파일 백업 필수: 원본 파일은 항상 백업하세요.
  • 암호 파괴 후 복구는 원본 DPB 값을 반드시 별도로 보관해야 가능합니다.
  • Python 환경 설정 및 oletools 설치 필요 (pip install oletools)

7 결론 및 활용도

위 방법을 통해 VBA 프로젝트 관리 및 복구 작업을 크게 간소화할 수 있습니다. 특히 다수의 VBA 프로젝트를 관리하는 환경에서는 효율성 향상 및 작업 자동화에 큰 도움이 됩니다.


Copyright © program1472 | IT HUB. All rights reserved.