소개

VBA Pro는 Excel VBA 코드를 보호합니다. (vbaprotect.contact@gmail.com)


1. VBA Protection이 무엇인가요?


VBA Protection은 엑셀에 있는 VBA(Visual Basic for Application) 소스 코드를 다른 이가 볼 수 없게 보호합니다. 이 때, VBA 코드는 이상없이 동작하면서, 단지 소스 코드만 보이지 않게 합니다.

또한, VBA Protection은 VBA 소스 코드를 난독화해서 변경해 버립니다. 이렇게 하면, 만약 소스가 유출되더라도, 코드를 파악하기가 무척 힘들어 집니다.


2. VBA Protection이 필요한 이유


엑셀에는 VBA 소스 코드를 함부로 볼 수 없게 비밀번호를 이용해서 보호하는 방법이 있습니다.


그러나, 이러한 보호 방법은 너무 쉽게 깰 수 있고, 비밀번호를 무력화하는 방법이 널리 퍼져 있어서, 쉽게 소스 코드가 유출됩니다.

가장 널리 알려진 패스워드 무력화 방법은, 바이너리 파일을 편집할 수 있는 에디터로 vbaProject.bin 파일을 편집하는 것입니다.
엑셀 파일은 zip 파일로, 엑셀 파일의 확장자를 zip으로 바꾸고, 일반 zip 파일을 다루는 프로그램(예를 들어 알집)으로 압축 해제하면, 엑셀 파일을 구성하는 여러 개의 파일들을 뽑아낼 수 있고, 그 중에 있는 vbaProject.bin 파일이 VBA 코드를 가지고 있는 파일입니다.
이 파일에서 비밀번호와 관련된 부분의 값을 수동으로 바꾸면, 비밀번호가 무력화 됩니다.


위 방법에 비해 잘 알려지지는 않았으나 아주 강력한 크랙 방법은, VBA 코드 자체를 디코딩해서 원래 소스코드를 알아내는 방법입니다. 이 방법을 사용하면, 사용자가 설정한 VBA에 대한 비밀번호없이 그대로 소스 코드의 추출이 가능합니다.

이처럼 엑셀 자체의 VBA 코드에 대한 비밀번호 설정 방법이 쉽게 무력화 되는 것은, 엑셀에서 VBA 코드를 보호하는 방법이, 비밀보호는 엑셀 Visual Basic Editor에서 그 코드에 접근할 때의 체크 수단으로만 쓰이고, 실제 코드는 단순히 '인코딩'에 의해서 이루어지기 때문입니다.

바이너리 에디터로 vbaProject.bin 파일을 변형하는 방법은, 엑셀에서 비밀번호를 체크하는 부분을 소용없게 만들어 버리는 것이고, 디코딩에 의한 코드 추출은, 인코딩 규칙에 따라서 코드를 그냥 디코딩해서 추출해 버리는 것입니다.

일반적으로, 비밀번호를 넣어서 어떤 데이터를 보호한다는 것은, 그 비밀번호에서 파생된 해시 값을 이용해서 데이터를 '암호화' 를 하는 게 일반적입니다. 이 경우, 비밀번호를 모르면 원 데이트를 알 수 없고, 단순한 바이너리 조작에 의해 무력화되지 않습니다.
반면에 '인코딩'은 비밀번호 없이, 그 인코딩되는 방법만 알면 '디코딩'해서 원래의 코드를 볼 수 있습니다.

즉, 엑셀에서는, 비밀번호는 단지 VBA 에디터에서 그 모듈 코드에 접근할 때의 체크 수단으로만 쓰고, 코드는 비밀번호와 관계없이 인코딩되어 있기에, 이러한 취약점이 발생하는 것입니다.

따라서, VBA 코드를 다른 이가 볼 수 없게 완벽하게 보호한다는 것은, 현재의 엑셀 구조로는 불가능합니다.

이 사이트에서 소개하는 VBA Protection 메카니즘은, 가능한 한 VBA 코드가 노출되지 않게 하는 방법을 고안해서 반영했습니다.
엑셀 프로그램에서 허용하는 범위내에서 엑셀 파일의 구조를 변경해서, 바이너리 에디터를 이용한 vbaProject.bin 파일 수정에 의해 패스워드가 무력화되는 것을 막습니다. 즉, 공격자가 어디를 수정해야할지 모르게하고, 수정하더라도 패스워드가 무력화되지 않게 합니다.
또한, 인코딩된 부분을 디코딩하는 '코드 추출 툴'들에 대해서도, 그 해당 툴이 가지는 약점을 찾아내서, 디코딩이 제대로 되지 않게 엑셀 파일의 구조를 바꿉니다.

이러한 방어 기술로 해서, 단순히 바이너리 에디터를 이용한 파일 수정 공격은 거의 완벽하게 막아내고 있고, 코드 추출 공격에 대해서도 알려진 대부분의 툴을 막아냅니다.
그러나, 향후에도 계속해서 나올 미래의 크랙 툴들을 모두 막아낼 수는 없을 것입니다.

그래서, 코드 자체를 난독화하는 것도 필요한데, VBA Protection은 VBA 코드에 대해서 변수, 문자열, 숫자들을 난독화하고, 주석을 없애고, 들여쓰기를 전부 없애고 하는 등, 코드를 이해하기가 어렵게 만듭니다.
따라서, 만약 어떤 툴이 코드 추출에 성공한다고 해도, 원래의 코드로 완벽하게 복원할 수가 없습니다.

그리고, 만약 Irreversible Protection으로 보호된 파일을 배포한다면, 이 파일은 기존의 어떤 코드 추출로도 원래의 코드를 뽑아낼 수 없습니다. 코드 자체를 비가역적이되게 바꿔 버렸기 때문입니다. 다만, 이 방법은 하나의 엑셀 버전에서만 동작되기에, 만약 여러 버전의 엑셀에서도 동작되도록 배포한다면, 여러 버전의 엑셀 파일을 만들어서 배포해야하는 번접함이 있습니다. 그래도 만약, VBA 코드를 완벽하게 보호하고 싶다면, Excel 2013 32-bit, Excel 2016 32-bit 등 각 버전별로 만들어진 보호 파일을 만들어서 배포하면 됩니다.


3. VBA Protection을 만든 이유


현재 엑셀은 전 세계에서 다방면의 영역에서 사용되고 있으며, 사용하면서 쌓여진 노하우 및 기법이 엑셀에 내장되어 있는 VBA(Visual Basic for Application)으로 프로그래밍되고 있습니다.
이렇게 만들어진 프로그래밍 코드는, 만든 이의 정성과 노하우가 들어가 있는 것으로, 다른 이가 맘대로 오픈해서 코드를 보고 수정하기를 원하지 않을 수 있습니다.

그러나, 엑셀 파일을 공개하면서, 자신의 코드는 보이지 않게 하는 것은, 현재 엑셀에 있는 기능만을 이용해서는 어렵습니다.

우리는 VBA Protection을 통해, 엑셀 파일은 공개해서 그 안에 있는 데이터와 매크로 프로그램은 사용할 수 있게 하면서, 작성된 매크로 코드(=VBA 코드)는 맘대로 볼 수 없게 하려는 사람들의 요구를 만족시키려 합니다.


4. VBA Protection은 어떻게 사용할 수 있나요?


이 사이트의 '보호파일 생성' 메뉴를 선택하고, 그 페이지에서 보호하려는 엑셀 파일을 업로드한 후, 생성된 보호 파일을 다운로드 받으면 됩니다.


5. 보호된 파일의 보호 강도는 어떻게 되나요?


엑셀 VBA 코드를 보지 못하게하는 보호 강도에 대해서, 어떤 곳에서도 보호 강도를 측정한 곳은 찾아 볼 수 없었습니다. 그래서, 자체 기준으로 그 보호강도의 단계를 정의해 봤습니다.

이러한 기준으로 했을 때, 이 사이트에서 제공하는 보호 파일의 '보호 강도'는 레벨 3레벨 4 입니다.
현재, 대부분의 다른 툴들이 제공하는 VBA 코드 보호 수준은 레벨 2 정도로 보입니다.

레벨 보호 메카니즘 보호 강도
0 보호되지 않음 - 누구라도 엑셀 파일을 열어서 VBA 코드를 볼 수 있음
1 비밀번호에 의한 코드 보호 - 일반적으로, 비밀번호를 모르면 VBA 코드를 볼 수 없음
- 그러나, vbaProject.bin 파일 수정을 통해 비교적 쉽게 비밀번호 보호 메카니즘이 무력화 됨.
2 bin 파일 수정에 대한 보호 - vbaProject.bin 파일에서 비밀번호 값에 대한 수정이 어려워짐
- 그러나, 별도 크랙 툴을 통해 vbaProject.bin 파일에서 디코딩 방법에 의해 코드 추출이 가능함.
3 bin 파일 수정 보호 및 난독화 - vbaProject.bin 파일 수정이 어렵고, 코드가 난독화되어 있음
- 일부 코드 추출용 크랙 툴로 코드 추출이 가능할 수 있으나, 난독화에 의해 완벽한 코드 복구 힘듦
4 코드의 비가역적 처리에의한 보호 - 코드를 비가역적으로 변경하여, 어떤한 툴로도 코드에 대한 완벽한 복원이 안됨
- VBA 코드를 보호할 수 있는 현존하는 최선의 방어 방법
5 Code Encryption - 비밀번호를 모르면 누구도 VBA 소스 코드를 볼 수 없음 (이상적인 상태)
- 현 엑셀 프로그램의 구조로는 이러한 보호가 불가능

6. 이 사이트의 보호 방법으로 VBA 코드에 대한 완전방어가 되는가?


'Full Protection'에 의해 생성된 보호 파일에 대해서는, 완전 방어가 된다고 얘기할 수 없습니다.
그러나, 이 보호 방법으로도, Hex Editing에 의한 password 무력화 공격을 막을 수 있고, 현재 VBA 코드 추출 방법으로 가장 많이 사용되는 툴에 대해 공격을 막을 수 있으며, 만약 추출되어도 코드가 난독화 되어 있어, 완벽한 복원 및 이해가 어렵게 할 수 있습니다.

'Irreversible Protection'에 의해 생성된 보호 파일은, 거의 완전방어가 된다고 얘기할 수 있겠습니다. 거의라고 표현한 이유는, 현존하는 코드 추출 방법으로는 이 보호방법을 깰 수 없으나, 미래에 어떤 툴이 나와서 깰 수도 있지 않을까 하는 가능성 때문입니다.
어쨌든, 이 보호 방법에 의해 보호된 파일에 대해, 현재까지 알려진 툴 중에서 보호를 깰 수 있는 툴은 없습니다.


7. 보호파일로 2개 파일이 생성되는데 차이는 어떤 것인가?


'Full Protection' 파일은,


'Irreversible Protection' 파일은,


8. 업로드된 엑셀 파일은 서버에 남아 있는가?


업로드된 엑셀 파일 및 보호파일로 새로 생성된 파일은 모두 서버에 보관하지 않습니다.

업로드된 파일은 보호파일로 변경되면서 자동 삭제되고, 생성된 보호 파일은 다운로드하면 자동 삭제됩니다.

또한, 만약 프로그램 오류 등에 의해 업로드된 파일이 자동 삭제되지 않더라도, 하루마다 자동으로 수행되는 배치 작업에 의해 모든 파일들이 자동 삭제되어, 서버에 파일들이 남아 있지 않게 됩니다.


9. 질문에 대한 연락처는?


만약 궁금한 사항이 있는 경우 vbaprotect.contact@gmail.com 으로 메일을 보내면, Working day 기준 1~3일 이내 답변 드립니다.