네 번째 프로텍트 유형으로 디자인 타임과 런타임 버전이 따로 분리되어 있는
VBX를 알아보자.
'ImageKnife/VBX'는 개발 시에는 KNIFE.VBX, IMK.DLL의 두 가지 파일이 필요하다. 하지만 응용 프로그램의 배포 시에는 IMK.DLL과 KNIFERUN.VBX만을 배포한다. KNIFE.VBX는 프로그램 디자인에만 사용하고, KNIFERUN.VBX은 단지 런타임 배포에만 가능한 것이다.
VBX중에는 'ImageKnife/VBX'처럼 런타임 버전이 따로 있는 것은 여럿 되는데, VideoSoft사의 VSVBX.VBX에도 VSRUN.VBX라는 런타임 버전이 있으며, 게임 스테이지와 스크린 세이버를 제작하는데 사용하는 CANIMATE.VBX도 이름은 같은 런타임 버전이 따로 있다. 이 파일들은 오로지 런타임용이라서 디자인이 불가능하다.
다섯 번째 프로텍트 유형으로 "볼랜드 솔루션 팩"에 번들 되어 있는 'Integra VDB 1.20'을 살펴보자.
'Integra VDB'는 Coromandel사의 Database를 다루는 11개의 ODBC지원 VBX 모음인데 여기에는 사용자들을 헛갈리게 만드는 방법이 숨어 있다.
[리스트5 ]를 보게 되면 같은 이름의 VBX들이 다른 압축 파일에 담겨 있고, 그 옆에는 용도가 적혀 있을 것이다. 'Integra VDB 1.20' 은 C:\BVSP와
C:\WINDOWS\SYSTEM의 두개의 다른 디렉토리에 파일의 이름은 같은데,
다른 내용과 크기를 가지는 서로 다른 VBX들을 설치해 준다.
분명 같은 이름이지만 디자인할 때는 디자인 디렉토리의 VBX로 디자인하고,
실행할 때는 실행용 VBX로 배포한다는 방식으로, 디자인 타임 때 'Can't Load Custom DLL' 메시지가 나면서도 같이 배포하는 .DLL이나 .LIC가 없어 'Integra VDB 1.20'가 RUN-TIME ONLY라는 착각을 하도록 만든다.
[리스트 5]
볼랜드 솔루션 팩 디스크 안의 UNPAK.EXE로 PAK압축을 풀 수 있다.
CORVBX.PAK (Disk1) - 압축 파일 내용은 아래와 같다.
EVL DLL - Coromandel expression evaluation routines
SQCLIB DLL - Coromandel integra vdb call interface
CIQBE DLL - Coromandel visual query builder
CITABLE DLL - Coromandel visual query builder
CORRUN.PAK (Disk2) - 압축 파일 내용은 아래와 같다.
EVL DLL - Coromandel runtime version of evl.dll
SQC VBX - Coromandel runtime version of sqc.vbx
SQCLIB DLL - Coromandel runtime version of sqclib.dll
CIQBE DLL - Coromandel runtime version of ciqbe.dll
CITABLE DLL - Coromandel runtime version of citable.dll
CORSQC.PAK (Disk2) - 압축 파일 내용은 아래와 같다.
SQC VBX - coromandel integra vdb vbx controls
CORLIB.PAK (Disk3) - 압축 파일 내용은 아래와 같다.
SQCLIB LIB - coromandel integra vdb library
BWCC.DLL이 해킹용으로 사용된다(?)
유틸리티 가운데 훅킹이나 서브 클래싱(SubClassing)기법 등으로 파일 매니저에
툴바가 저절로 추가된다거나 아니면 비베에서 VBX 파일을 포함시키자마자
대화상자나 윈도우가 저절로 3D 스타일로 바뀐다거나, '윈도 95'의 인터페이스로
바꾸어 주는 것들은 간혹 볼 수 있다.
VBCTL3D.VBX 나 ALL3D, CTL3Dxx.DLL 등이 그것이다.
그런데, 3D 인터페이스는 많이 만들어 내면서 BWCC로 불리는 볼랜드 스타일을
비베에 서브 클래싱으로 추가시켜 주는 방법을 아직까지 어디서도 찾아 볼 수가 없었다.
필자가 아무리 찾아보아도 이 글을 쓰는 시점에서 볼랜드 스타일을 VB 프로젝트에 추가시키는 유일한 방법으로는 볼랜드 파스칼로 제작한 OXButton.VBX라는 것밖에는 보지 못했다
볼랜드 C++ 3.1 내에 들어 있는 리소스 워크샵을 동원하여 BWCC.DLL을 읽어본 결과 이러한 볼랜드 스타일이 비트맵이나 아이콘, 다이얼로그 형태로 만들어져 있는 것을 확인 할 수는 있었지만, 비베에서 이용하는 것이 큰 문제였다.
볼랜드 스타일로 처리하기 위해서는 "BorBtn"이나 "BorShade" 같은 클래스를 윈도 3.1에게 등록시켜야 하고, LoadLibrary() API를 써서 미리 메모리에 BWCC.DLL을 적재시켜 두어야만 가능하다는 것까지는 프로그래밍 잡지들의 여러 볼랜드 C++ 관련
기사를 통해서도 분석이 되어 있을 것이다.
필자는 이 BWCC.DLL을 일레스틱 (Elastic) 컨트롤로 유명한 VSVBX 4.x 컨트롤의 프로텍트를 공략하는데 사용했다.
VSVBX 컨트롤은 버전 5.0부터 .LIC 파일이 사라졌기 때문에 배포용 라이선스가 있는 4.x버전을 사용하기로 하겠다.
프로그램세계 96년 12월호 "송년특별부록 CD-ROM"의 \VBAPP\VISDEV 디렉토리에서 VSVBX 4.x를, \VBAPP\ICONEXTR, \VBAPP\SEEA디렉토리, \VBAPP\ZIPMAN등에서 도 VSVBX를 얻을 수 있다.
-- 필요한 파일들은 자료실에 올려드리겠다. --
먼저 Nag-Window란 무엇인가 살펴보자.
공개 SW에서 사용된 VBX에는 이 VBX를 사용해 만든 프로그램들이 실행될 때마다 등록하라는 메시지를 담은 About 박스가 나타나게 한다.
통칭 Nag-Window라고 불리는 것들로 며칠남았다 라든가 몇 달러를 어디로 내라든가 하는 것을 보여주는 윈도우이다.
예를 들어 'Early Morning1.6' VBX를 사용하려고 하면 30일 내에 등록하라는 메시지가 실행할 때마다 계속 뜨기 때문에 매우 귀찮다.
이것이 여섯 번째 유형이다.
등록을 하라는 메시지를 About 박스를 이용해 계속 내보내는 방법이다.필자는 이 About박스를 볼랜드C++ 3.1의 리소스 워크샵에서 불러내 'Delete'시켜 영원히 없애 버리고, 재저장을 하는 방법을 썼는데 효과가 만점이었다.
(리소스 워크샵에서 VBX나 OCX를 불러들일 때는 리소스 타입에 VBX가 없기 때문에 DLL로 설정해 주도록 한다)
쉐어웨어 VBX로 유명한 ASP의 VBX라면 이 방법이 100% 가능했기 때문에 VSVBX 4.x에도 통할 것으로 믿었다.
About 박스가 없어지면 당연히 실행시킬 때마다 등록 메시지를 볼 필요가 없을 것으로 생각했던 것이다.
그런데, 문제가 생겼다.
누군가 이미 이 해킹 방법을 사용했던지 개발사인 VideoSoft사는 VSVBX에 About박스가 있는지 없는지 VSVBX 컨트롤 자체에서 체크하도록 만들어 둔 것이다.