VBA 보호는 어떻게 작동하나요?
이 서비스가 무엇을 지키고, 어디까지 지키는지 설명합니다.
1. 왜 필요한가
Excel 매크로(VBA) 코드는 기본적으로 누구나 편집기에서 열어볼 수 있어, 공들여 작성한 로직·수식이 그대로 노출됩니다. Excel VBA 편집기의 '프로젝트 잠금' 암호를 걸어도, 그 암호를 우회하는 도구가 인터넷에 널려 있어 비교적 쉽게 풀립니다.
VBA Protection은 이런 우회 도구로도 사용자의 매크로 코드가 쉽게 노출되지 않도록 보호합니다.
2. 두 겹의 방어
① 숨기고, 차단하고, 교란합니다
- 편집기 잠금 — 변환된 파일은 Excel VBA 편집기에서 프로젝트가 잠겨 코드가 보이지 않습니다.
- 우회 도구 교란 — 자동 우회 도구가 노리는 잠금 정보에 다량의 교란용 값을 심어, 일반 사용자와 대다수 자동화 도구가 코드를 열지 못하게 합니다.
- 코드 정보 제거 — 엑셀 내부에 있는 코드 정보를 무효화합니다. 그래서 디컴파일 공격이 힘듭니다.
② 난독화 — 최후의 안전망
Excel은 VBA 코드를 '암호화'가 아니라 '인코딩'만 하기 때문에, 전용 도구로 파일에서 소스를 추출하는 공격을 100% 막을 수는 없습니다. 그래서 VBA Protection은 소스 자체를 난독화해 보관합니다. 설령 ①이 뚫려 코드가 추출되더라도, 원래의 온전한 소스로 복원하기 어렵고 의미 파악이 힘들게 만듭니다.
아래는 난독화된 코드의 예시입니다.
Option Explicit
Sub RenameFilenames()
Dim I As String
Dim l As Object
Dim II As Object
Dim Il As Long
I = ActiveSheet.Cells(1, 1).Value
Set l = CreateObject((ChrW(&H53) & ChrW(&H63) & ChrW(&H72) & ChrW(&H69) & ChrW(&H70) & ChrW(&H74) & ChrW(&H69) & ChrW(&H6E) & ChrW(&H67) & ChrW(&H2E) & ChrW(&H46) & ChrW(&H69) & ChrW(&H6C) & ChrW(&H65) & ChrW(&H53) & ChrW(&H79) & ChrW(&H73) & ChrW(&H74) & ChrW(&H65) & ChrW(&H6D) & ChrW(&H4F) & ChrW(&H62) & ChrW(&H6A) & ChrW(&H65) & ChrW(&H63) & ChrW(&H74)))
If Not l.FolderExists(I) Then
Exit Sub
End If
Set II = l.GetFolder(I)
Il = 1
Call RenameFilesInFolder(II, l, Il)
End Sub
3. 한계
VBA Protection으로 보호된 파일은 일반 사용자나 자동 우회 도구로는 쉽게 뚫리지 않습니다. 그러나 소스는 (난독화된 형태로) 파일에 남아 있으므로, 전문 공격자의 수동 분석으로는 난독화된 소스가 노출될 수 있습니다.
따라서 이 서비스는 ▲일반 사용자·자동 도구의 손쉬운 코드 열람을 차단하고 ▲최악의 경우에도 온전한 원본 대신 난독화된 코드만 남게 하는 것을 목적으로 합니다.
4. 보호 가능한 파일
- 매크로(VBA)가 포함된 .xlsm / .xlam / .xlsb 파일
- 엑셀 파일 자체 암호는 제거하고 업로드하세요. VBA '프로젝트 속성 보기 암호'는 걸려 있어도 됩니다.
- Excel 버전: VBA를 지원하는 대부분의 버전에서 동작하나 모든 버전을 테스트하지는 못했습니다. 문제가 있으면 알려주세요 → vbaprotect.contact@gmail.com
- 파일 크기: 서버 성능상 25MB 이하만 처리합니다.
5. 사용 시 주의
보호 과정에서 원본의 주석·줄바꿈 등이 사라지고 코드가 난독화됩니다. 많은 파일로 정상 동작을 확인했지만, 변환된 파일이 제대로 동작하는지 반드시 직접 확인하시고, 변환 전 원본 파일을 따로 백업해 두시기 바랍니다.
6. 개인정보 보호
- 업로드한 파일은 서버에 저장되지 않습니다. 메모리에서 변환한 즉시 사용자에게 반환하고 메모리에서도 바로 사라지므로, 파일에 대한 어떤 정보도 서버에 남지 않습니다.
- 로그인 없이 이용하므로, 사용자 정보도 서버에 남지 않습니다.
7. 참고
이 서비스는 Rust로 개발되었습니다.