KR0124548B1 - 퍼스널컴퓨터 응용프로그램 프로텍션 방법 및 장치 - Google Patents

퍼스널컴퓨터 응용프로그램 프로텍션 방법 및 장치

Info

Publication number
KR0124548B1
KR0124548B1 KR1019940030134A KR19940030134A KR0124548B1 KR 0124548 B1 KR0124548 B1 KR 0124548B1 KR 1019940030134 A KR1019940030134 A KR 1019940030134A KR 19940030134 A KR19940030134 A KR 19940030134A KR 0124548 B1 KR0124548 B1 KR 0124548B1
Authority
KR
South Korea
Prior art keywords
key
card
program
application program
application
Prior art date
Application number
KR1019940030134A
Other languages
English (en)
Other versions
KR960018912A (ko
Inventor
황삼용
Original Assignee
황삼용
인애전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 황삼용, 인애전자주식회사 filed Critical 황삼용
Priority to KR1019940030134A priority Critical patent/KR0124548B1/ko
Publication of KR960018912A publication Critical patent/KR960018912A/ko
Application granted granted Critical
Publication of KR0124548B1 publication Critical patent/KR0124548B1/ko

Links

Landscapes

  • Storage Device Security (AREA)

Abstract

이 발명은 범용 퍼스널컴퓨터에서 실행되는 응용프로그램의 프로텍션 방법 및 장치를 제안하려는 것으로, 퍼스널컴퓨터의 확장슬롯에 꽂아 설치하는 ID 카드는 고유 카드 ID를 퍼스널컴퓨터에 제공하고, 응용프로그램 제공자는 프로그램 사용자의 카드 ID를 출발수로 하고 키 ID 산출 알고리즘을 적용하여 산출한 키 ID를 응용프로그램과 함께 제공하고, 응용프로그램의 설치프로그램은 설치시 키 ID를 설치자로부터 받아 디스크의 키 ID 파일을 생성하며, 응용프로그램은 실행초기에 컴퓨터의 ID 카드에서 카드 ID를 독취하고 응용프로그램 제공자의 키 ID 산출 알고리즘을 적용하여 내부 키 ID를 산출하여 보유하며, 다시 디스크에 수록한 키 ID를 읽어들여 내부 키 ID와 비교함에 의하여 응용프로그램의 원본여부와 실행여부를 결정하며, 카드 ID를 제공하는 ID 카드는, 응용프로그램에서 I/O 채널을 읽기위한 어드레스 데코더(DE)와 데이터버스 카드 ID를 실을 수 있게 하는 버스트랜시버(B)를 메모리(ROM)에 접속하였고, 데코더(DE)는 낸드게이트(N1)와 디멀티플렉서(M)로 구성하였고, I/O장치의 IOR 핀과 AEN 핀의 제어신호로 디멀티플렉서(M)를 제어하고, 데코더(DE)의 제어신호로 메모리(ROM)와 버스트랜시버(B)를 제어하게 한 것을 특징으로 하는 퍼스널컴퓨터 응용프로그램 프로텍션 장치.

Description

퍼스널컴퓨터 응용프로그램 프로텍션 방법 및 장치
제1도는 ID 카드의 장착상태 회로도.
제2도는 ID 카드의 회로도.
* 도면의 주요부분에 대한 부호의 설명
DE : 어드레스 데코더 B : 버스트랜시버
ROM : 비휘발성 메모리 N1, N2 : 낸드게이트
I/O : 입출력장치
이 발명은 범용 퍼스널컴퓨터에서 실행되는 응용프로그램의 프로텍션 방법 및 장치를 제안하려는 것이다.
퍼스널컴퓨터의 응용프로그램은 CPU에서 실행할 수 있는 명령코드의 집단과 필요한 데이터로 되어 있다. 프로그램의 규모가 커지면서 명령코드나 데이터는 패키지내의 분리된 파일로 구성되며 프로그램이 실행되면서 필요한 코드나 데이터를 참조하게 된다. 앨빈토플러가 관찰했듯이 프로그램에 포함된 정보는 정보화 물결의 핵심을 이루고 있는 것이다. 어떤 프로그램은 수백만 바이트 또는 수천만 바이트의 데이터와 명령코드로서 이루어져 있다. 데이터는 프로그램에 대응된 구조로 분류하고 배열하여 프로그램에 포함시킨다.
또 다른 프로그램들은 응용프로그램이 사용자 또는 관리자로부터 데이터를 받아들이며, 입력된 데이터는 나날이 누적되어 전문적인 데이터베이스를 구축하게 되는 것이다.
상기와 같은 프로그램들은 규모가 작은 간단한 프로그램이 있는가 하면 대부분의 프로그램들은 많은 정보량을 갖는 것으로서, 이러한 프로그램을 제작하자면 비용, 기술력, 시일 등이 대단히 많이 요구되고 있는 것이다.
상기 퍼스널컴퓨터에서 실행되는 응용프로그램은 확작명이 .COM 또는 .EXE 파일로서 DOS 등의 운영체제 프롬프트에서 프로그램명을 타이프하고 엔터키를 침으로써 실행시킨다.
이러한 응용프로그램은 DOS에서 제공되는 copy, xcopy, diskcopy 명령을 사용하거나 PCTOOLS, COPYIIPC, NC등 복사 유틸리티를 사용하여 다른 디스크에 쉽게 복사되므로 프로그램 저작권 보호의 기술적 문제가 되고 있다.
상기와 같은 응용프로그램들을 보호하기 위하여 우리나라도 1987. 7. 1부터 프로그램 보호법을 시행하여 개발된 프로그램의 소스프로그램(Source program)을 마이크로필름에 수록하여 과학기술처 산하 기관에 등록하도록 하고 있다.
그러나 프로그램의 등록은 프로그램 저작권 침해를 받았을 때 구제를 위한 절차와 불법 복제에 따른 제재를 규정하고 있으나, 응용프로그램의 복제가 컴퓨터 상에서 운영체제의 간단한 명령의 실행으로 이루어지므로 응용프로그램의 불법 복제를 근원적으로 차단할 수 없는 문제점을 가지는 것이었다.
이와 같은 응용 프로그램의 불법 복제를 방지하기 위하여 많은 프로그램들은 스스로 불법 복제를 방지하기 위한 프로텍션을 프로그램속에 포함시키고 있다.
이러한 프로텍션은 아래와 같이 여러 가지 종류가 알려져 있다.
오버포맷기법은 원본디스크를 포맷할때 표준트랙보다 많은수로 포맷하고 그곳에 식별정보를 수록한 후 응용프로그램이 오버포맷 정보를 읽을 수 있게 한다. 운영체제에 의하여 이 프로그램을 복사하면 오버포맷이 포함되지 못하므로 불법 복사프로그램을 식별하여 실행을 중지시킨다.
언포맷기법은 원본디스크의 일정한 트랙을 포맷하지 않고 남겨둔다. 이 경우 운영체제는 프로그램의 복제시 타케트 디스크에는 언포맷부분까지도 포맷하여 복사를 행하므로 불법 복제 디스크와 식별하여 프로그램의 실행을 중지시킨다.
오버섹터기법은 원본디스크에 디스크 트랙의 갭에 정규 트랙에 없는 오버섹터를 포맷하고 이를 읽어 식별하는 것이다.
언섹터기법은 정규트랙내의 일정한 섹터를 포맷하지 않고 남겨두고 이를 식별표지로 하는 것이다.
가짜 섹터기법은 원본디스크 한 트랙에 비정상의 많은 섹터헤드를 만들어 놓는다. 이 경우 운영체제는 복사시 비정상 섹터헤드에 대해서도 대응된 버퍼를 할당하는데 이와 같이 되면 메모리 부족현상을 일으켜 복사가 불가능해진다.
이외에도 디스크 트랙을 이용하는 기법으로 나선트랙기법, 수퍼섹터기법 등 다수가 있으며, 물리적인 기법으로 레이저 핑거나 약품으로 디스크면에 인위적인 손상을 가하고 이것을 식별표지로 삼는 것이다.
위와 같은 프로텍트 기법들은 원본디스크의 포맷을 비정상적으로 운용하거나 물리적인 흠을 주어 원본 디스크와 불법 복사 디스크를 식별하는 것으로서 프로그램의 성능을 저하시키고 장애를 일으키며, 심한 경우 디스크 드라이브의 고장을 유발하는등 문제점이 있어 서서히 그 퇴조를 보이고 있는 것이다.
본 발명은 이와 같은 문제점을 해소하는 응용프로그램 불법 복사 방지방법 및 장치를 제안하려는 것으로, 퍼스널컴퓨터의 확장슬롯에 꽂아 설치하여 응용프로그램의 요구에 고유 ID를 제공하게 하는 ID 발생카드와, 카드 ID를 출발수로 하여 키 ID를 생성하는 알고리즘을 응용프로그램에서 보유하고, 응용프로그램의 설치프로그램은 프로그램 공급자가 카드 ID를 출발수로 키 ID 생성 알고리즘에 따라 산출하여 제공는 키 ID에 의해서만 프로그램을 실행파일에 설치한 후 키 ID를 파일을 생성하고, 응용프로그램은 실행시 카드 ID를 읽고 키 ID 생성 알고리즘에 따라 산출한 내부 키 ID와, 키 ID와 설치프로그램이 파일로 수록한 키 ID를 읽어 비교하여 프로그램의 실행여부를 결정하게 하는 것을 특징으로 하는 것이다.
본 발명을 실시예에 따라 더욱 상세하게 설명하면 다음과 같다.
본 발명은 퍼스널컴퓨터 마다 고유한 ID를 부여하기 위한 ID 카드를 포함한다. 이 ID 카드는 퍼스널컴퓨터의 확장슬롯에 꽂아 설치한다.
응용프로그램 패키지에는 카드 ID를 읽어 사용자 컴퓨터 화면에 ID를 디지트로 표시해주는 유틸리티를 포함한다. 또한 ID 카드에 ID 번호가 인쇄되어 사용자가 읽을 수 있게 되어 있다.
응용프로그램은 인스톨전에 카드 ID를 출발수로 하여 키 ID 생성 알고리즘에 의하여 생성된 키 ID를 프로그램 공급자로부터 제공받는다. 키 ID는 프로그램 공급업자와 대외비로 관리한다.
응용프로그램의 설치프로그램은 인스톨시 컴퓨터의 슬롯에 꽂힌 ID 카드에서 카드 ID를 읽어 상기와 동일한 키 ID 생성 알고리즘에 의해 산출한 내부 키 ID를 보유한 후, 프로그램 설치자에게 키 ID를 요구하여 동일한 값이면 키 ID를 디스크에 수록하여 키 ID 파일을 만든다.
응용프로그램은 실행시 키 ID 파일로부터 키 ID를 읽어 기억하고, ID 카드로부터 카드 ID를 읽어 키 ID 생성 설치프로그램과 동일한 알고리즘에 따라 산출한 내부 키 ID를 보유한 후, 두 값을 비교하여 동일한 값이면 프로그램을 실행하고 아니면 불법 복제의 메시지를 화면에 출력한 후 프로그램의 실행을 종료한다.
본 발명은 실시예에 따라서 상세하게 설명하면 다음과 같다.
IBM 호환 기종 컴퓨터의 인텔 80xxx 시리즈 CPU, 메모리 및 입출력장치(I/O)의 세 요소는 제어버스, 어드레스버스, 데이터버스에 의하여 서로 연결되어 있다. 제어버스는 어드레스버스에 의하여 지정되는 메모리에서 데이터버스를 통하여 데이터를 읽어들이고, 메모리에 데이터를 적어 넣는다. 또는 입출력장치(I/O)를 통하여 외부장치로부터 데이터를 CPU에 읽어들이고 CPU의 데이터를 외부장치에 적는다.
어드레스버스 A19-A0의 20비트는 다이렉트 메모리의 억세스 동작에서 메모리 어드레스를 지정할 때 사용되며, 어드레스버스 A9-A0의 10비트는 I/O 채널을 통하여 어드레스를 지정할때 사용된다. 20비트의 어드레스버스는 1M Byte 메모리 영역을 호출할 수 있다.
정논리(positive true) 20비트 어드레스의 하위 10비트가 시스템유닛에 의해 I/O 입출력이 수행될때 3E0H에서 3E7H까지의 8Byte영역내에 I/O 어드레스가 지정된다.
I/O 채널의 IOR 핀은 로우신호일때 입출력장치(I/O)가 데이터버스를 통해 데이터를 읽어들이도록 동작한다.
I/O 채널의 AEN 핀은 하이신호일때 DMA 전송이 이루어지도록 다른 소자를 동작시키며, 이 핀이 로우 I/O 읽기를 수행하면 된다.
본 발명 실시예 ID 카드(C)는 인텔 80xxx CPU를 장착한 범용 퍼스널컴퓨터의 슬롯(S)에 꽂아 CPU의 입출력장치(I/O)에 접속하였다.
본 발명 ID 카드(C)에 비휘발성 메모리(ROM)를 설치하여 카드마다 상이한 카드 ID(8비트, 필요하다면 그 이상의 사이즈)를 수록하였다.
메모리(ROM)에 수록한 카드 ID의 어드레스는 시스템의 미사용 영역 예컨데 03E0H부터 03E7H까지 8바이트로 하였다.
응용프로그램에서 메모리 3E0H에서 3E7H까지의 8Byte 영역을 통하여 지정되는 데이터 어드레스가 03E0H(A15-A0비트까지의 바이너리 비트는 0000 0011 1110 0000)일 때 I/O 채널을 읽기위한 A9에서 A0까지의 상위 10비트 11 1110 0000를 디코딩하기 위한 데코더(DE)와 데이터버스 D7-D0 비트에 카드 ID를 실을 수 있게 하는 버스트랜시버(B)를 메모리(ROM)에 접속하였다.
실시예에서 메모리(ROM) 어드레스 핀의 상위 3비트 A0-A2를 I/O 어드레스 A0-A2에 접속하여 메모리(ROM) 8바이트를 어드레싱할 수 있게 하고, 메모리(ROM)의 나머지 A3-A12비트를 항상 로우가 되게 접지하였으며, I/O 어드레스 A9-A3는 데코더(DE)에서 상태 “11 1110 0”으로 입력할 수 있도록 낸드게이트(N1)와 디멀티플렉서(M)를 접속하여 구성하였고, I/O장치의 IOR 핀과 AEN 핀을 디멀티플렉서(M)의 1G 핀과 2G 핀에 각각 접속하였다. 디멀티플렉서(M) 부출력 12를 메모리(ROM)의 OE단자에 인가하고, 부출력 6과 12를 낸드게이트(N2)에 입력하고 낸드게이트(N2)의 부출력을 버스트랜시버(B)의 단자 G에 입력하였다.
위 실시예와 같이 제공되는 ID 카드는 프로그램에서 03E0H에서 03E7번지의 8바이트 데이터를 순차 읽어들이면 CPU가 제어하는 입출력장치(I/O)는 이네이블(하이)신호를 AEN 단자에 출력하고, 또한 읽기명령 로우신호를 IOR 단자에 출력하며, 어드레스 데코더(ED)는 메모리(ROM)와 데이터 버스트랜시버(B)를 제어하여 데이터 버스에 8바이트의 카드 ID를 실어 CPU에 전달한다.
상기 읽기동작에서 데코더(DE)는 디멀티플렉서(M) 단자 12의 부출력이 메모리(ROM)의 OE단자에 인가되어 메모리를 읽기 상태로 하고 낸드게이트(N2)의 부출력이 데이터 버스트랜시버(B)를 구동시키므로 데이터버스 D0-D7에 8비트 카드 ID가 실리고 이러한 동작을 반복하여 응용프로그램에서 카드 ID를 독취하게 되는 것이다.
Microsoft사의 QuickC에 의한 상기 설치프로그램의 불법 복제 프로그램 식별과정은 다음과 같다.
1 /*
2 ** 설치프로그램(Set_up program)
3 */
4 #includestdio.h
5 #includectype.h
6 #includeconio.h
7 #includedos.h
8
9 #define TURE 1
10 #define FALSE 0
11 #define NULL 0
12
13 int comp_key_id(void);
14 double calculation_key_id(char *card_id_str)
15
16 FILE *fp;
17
18 /* 키 ID와 내부 ID가 같으면 프로그램을 설치한다. */
19 main( )
20 {
21 if(comp_key_id( )==TRUE) {
22 /*프로그램 설치*/
23 ....
24 }
25 else {
26 printf(/n이 프로그램은 복제품이므로 설치할 수 없습니다/n);
27 exit(1);
28 }
29 }
30
31 /* 내부 ID와 키 ID를 비교하는 프로그램 */
32 int comp_key_id( )
33 { int i,j;
34 double key_id, double inside_id;
35 int card_id[9];
36
37 /* 카드 ID 읽기 */
38 for(i=0, j=0x3e0; i8; i++,j++)
39 card_id[i]=inp(j);
40 card_id[8]=NULL;
41
42 inside_id=calculation_key_id(card_id)
43
44 /* 키 ID의 키입력받기 */
45 scanf(key_id, “%d”);
46
47 if(inside_id==key_id) {
48
49 fp=fopen(“KEYID.COD”, “w+”);
50 if(fp=NULL) {
51 /*파일열기 에러처리*/
52 ....
53 exit(1);
54 }
55 fprintf(fp, “%d%c”, key_id, 0x1a);
56 fclose(fp);
57 return TRUE;
58 }
59 else
60 return FALSE;
61 }
62
63 /* 키 ID를 산출하는 알고리즘의 예 */
64 double calculation_key_id(char *card_id_str)
65 {
66 double inside_id;
67 int i,j;
68
69 for(i=0,j=2; i8; 1++,j++)
70 inside_id+=cade_id_str[i] * j-j;
71
72 return inside_id *=inside_id;
73 }
설치프로그램의 4-7행에서 Microsoft사 QuickC의 헤더 파일을 선언했다. 9-11행에서 프로그램에서 사용할 상수를 선언했다. 13-14행에서 비교함수와 알고리즘 산출함수의 형식을 선언했다. 16행에서 키 ID를 수록하기 위한 파일 포인터를 선언했다.
18-29행은 main 함수로서 21행에서 ID 비교함수를 호출하여 반환값이 진(TRUE)이면 원본프로그램으로 파악하여 22-24행에서 프로그램을 설치한 후 29에서 실행을 종료한다.
24-27행은 21행의 비교결과 반환값이 진이 아닌 경우 즉, 위(FALSE)인 경우 26행에서 경고 메시지를 화면에 출력하고 27행에서 실행을 종료한다.
31-61행은 비교의 결과 값을 반환하는 ID 비교함수로서, 33-35행에서 필요한 변수 및 변수형을 선언하고, 38-39행의 8회 반복 루프에서 컴퓨터 시스템 메모리 0x3e0부터 0x3e7까지의 메모리에 수록된 카드 IC ASCII 값을 배열변수 card_id[0]부터 card_id[7]까지 8바이트 영역에 순차로 읽어들이고 40행에서 card_id[8]에 널(NULL)을 대입하여 문자열로 만든다.
42행에서 호출함수에 카드 ID를 수록한 ASCII 문자열을 ID 산출함수에 전해주고 산출결과를 돌려받아 변수 inside_id에 보유한다.
45행에서 키보드로부터 키 ID를 입력받아 변수 key_id에 보유한다.
47행에서 카드 ID를 출발로 하여 임의의 알고리즘에 따라 계산한 내부 ID(inside_id)와 키보드를 통하여 설치자가 제공한 키 ID(key_id)를 비교하여 같은 값이면 49-54행에서 파일을 열고, 55행에서 키 ID를 파일스트림(fp)에 수록한 후 56행에서 파일을 닫고 57행에서 진(TRUE)을 리턴한다.
58행에서 47행의 비교결과가 같지 않으면 60행에서 위(FALSE)를 반환한다.
63행부터 73행은 산출값을 반환하고 카드 ID를 문자열로 포인터로 전달받는 알고리즘 산출예의 함수로서 66-67행에서 변수와 변수형을 선언하고, 69행에서 8회의 루프를 구성하여 문자열로 아래예와 같이 문자열로 받은 카드 ID 값을 알고리즘에 따라 키 ID로 연산한다.
카드 ID의 예 :
카드 ID를 읽어들인 문자열(card_id[8]/*card_id_str)의 예 :
70행에서 알고리즘에 따른 키 ID를 계산한다.
키 ID 계산의 결과는 다음과 같다.
응용프로그램은 실행시 키 ID 파일로부터 키 ID를 읽어 기억하고, ID 카드로부터 카드 ID를 읽어 설치 프로그램과 동일한 키 ID 생성 알고리즘에 따라 산출한 내부 키 ID를 보유한 후 두 값을 비교하여 동일한 값이면 프로그램을 실행하고 아니면 불법 복제의 메시지를 화면에 출력한 후 프로그램의 실행을 종료한다.
응용프로그램에 포함되는 카드 ID 독취와 프로그램의 원본 판단과정의 프로그램 예는 다음과 같다.
1 /*
2 ** 응용프로그램의 원본판독 프로그램
3 */
4 #includestdio.h
5 #includectype.h
6 #includeconio.h
7 #includedos.h
8
9 #define TURE 1
10 #define FALSE 0
11 #define NULL 0
12
13 int comp_key_id(void);
14 double calculation_key_id(char *card_id_str)
15
16 FILE *fp;
17
18 /* 키 ID와 내부 ID가 같으면 프로그램을 실행한다. */
19 main( )
20 {
21 if(comp_key_id( )==TRUE)
22 ;
24 else {
26 printf(“/n이 프로그램은 복제품이므로 설치할 수 없습니다/n”);
27 exit(1);
28 }
29 }
30
31 /* 내부 ID와 키 ID를 비교하는 프로그램 */
32 int comp_key_id( )
33 { int i,j;
34 double key_id, double inside_id;
35 int card_id[9];
36
37 /* 카드 ID 읽기 */
38 for(i=0, j=0x3e0; i8; i++,j++)
39 card_id[i]=inp(j);
40 card_id[8]=NULL;
41
42 inside_id=calculation_key_id(card_id)
43
44 /* 키 ID 파일 읽기 */
45 fp=fopen(“KEYID.COD”, “r+”);
46 if(fp=NULL) {
47 /*파일열기 에러처리*/
48 ....
49 exit(1);
50 }
51 fscanf(fp, “%d”, key_id);
52 fclose(fp);
53
55 if(inside_id==key_id) {
57 return TRUE;
58 }
59 else
60 return FALSE;
61 }
62
63 /* 키 ID를 산출하는 알고리즘의 예 */
64 double calculation_key_id(char *card_id_str)
65 {
66 double inside_id;
67 int i,j;
68
69 for(i=0,j=2; i8; 1++,j++)
70 inside_id+=cade_id_str[i] * j-j;
71
72 return inside_id *=inside_id;
73 }
원본 판독 프로그램의 4-7행에서 Microsoft사 QuickC의 헤더 파일을 선언했다. 9-11행에서 프로그램에서 사용할 상수를 선언했다. 13-14행에서 비교함수와 알고리즘 산출함수의 형식을 선언했다. 16행에서 키 ID를 수록하기 위한 파일 포인터를 선언했다.
19-29행은 main 함수로서 21행에서 ID 비교함수를 호출하여 반환값이 진(TRUE)이면 22행에서 그대로 프로그램을 진행하여 원본 프로그램으로 파악하며, 21행의 비교결과가 위(FALSE)이면 복제프로그램으로 판정하여 24-28행에서 프로그램의 실행을 종료한다.
31-61행은 비교의 결과 값을 반환하는 ID 비교함수로서, 33-35행에서 필요한 변수 및 변수형을 선언하고, 38-39행의 8회 반복 루프에서 컴퓨터 시스템 메모리 0x3e0부터 0x3e7까지의 메모리에 수록된 카드 ID ASCII 값을 배열변수 card_id[0]부터 card_id[7]까지 8바이트 영역에 순차로 읽어 들이고 40행에서 card_id[8]에 널(NULL)을 대입하여 문자열로 만든다.
42행에서 호출함수에 카드 ID를 수록한 ASCII 문자열을 ID 산출함수에 전해주고 산출결과를 돌려받아 변수 inside_id에 보유한다.
45-52행에서 디스크 키 ID 파일(KEYID.COD)로부터 키 ID를 읽어들여 변수 key_id에 보유한다.
55행에서 카드 ID를 출발로 하여 임의의 알고리즘에 따라 계산한 내부 ID(inside_id)와 키보드를 통하여 설치자가 제공한 키 ID(key_id)를 비교하여 같은 값이면 57진(TRUE)을 리턴하고 아니면 60행에서 위(FALSE)를 리턴한다.
63행부터 73행은 산출값을 반환하고 카드 ID를 문자열 포인터로 전달받는 알고리즘 산출예의 함수로서 66-67행에서 변수와 변수형을 선언하고, 69행에서 8회의 루프를 구성하여 문자열로 아래예와 같이 문자열로 받은 카드 ID 값을 알고리즘에 따라 키 ID로 연산한다.
연산과정은 상기 계산예와 동일하다.
상기와 같이 본 발명은 퍼스널컴퓨터의 확장슬롯에 ID 카드를 장착하고 ID 카드를 출발수로 하는 실행 ID를 산출하며, 실행 ID 산출 알고리즘은 응용프로그램 작성자가 임의로 정하여 설치프로그램과 응용프로그램에 포함시킬 수 있어, 응용프로그램이나 디스크 드라이브에 장애를 발생하지 아니하고 원본프로그램과 복제프로그램을 식별하여 그 실행여부를 결정하여 처리할 수 있어 응용프로그램의 복제를 효과적으로 방지할 수 있는 효과가 있는 것이다.

Claims (3)

  1. 퍼스널컴퓨터의 확장슬롯에 꽂아 설치하는 ID 카드는 고유 카드 ID를 퍼스널컴퓨터에 제공하고, 응용프로그램 제공자는 프로그램 사용자의 카드 ID를 출발수로 하고 키 ID 산출 알고리즘을 적용하여 산출한 키 ID를 응용프로그램과 함께 제공하고, 응용프로그램의 설치프로그램은 설치시 키 ID를 설치자로부터 받아 디스크의 키 ID 파일을 생성하며, 응용프로그램은 실행초기에 컴퓨터의 ID 카드에서 카드 ID를 독취하고 응용프로그램 제공자의 키 ID 산출 알고리즘을 적용하여 내부 키 ID를 산출하여 보유하며, 다시 디스크에 수록한 키 ID를 읽어들여 내부 키 ID와 비교함에 의하여 응용프로그램의 원본여부와 응용프로그램의 실행여부를 결정하는 것을 특징으로 하는 퍼스널컴퓨터의 응용프로그램 프로텍션 방법.
  2. 퍼스널컴퓨터의 확장슬롯에 꽂아 설치하며 고유 카드 ID를 퍼스널컴퓨터에 제공하기 위한 ID 카드와, 응용프로그램 제공자가 응용프로그램과 함께 키 ID 산출 알고리즘에 따라 산출하여 제공하는 키 ID와, 응용프로그램의 설치프로그램이 키 ID를 설치자에게 요구하고 디스크에 수록하여 생성하는 키 ID 파일과, 실행초기에 컴퓨터의 ID 카드로부터 카드 ID를 독취하고 응용프로그램 제공자의 키 ID 산출 알고리즘으로 내부 키 ID를 산출하여 보유하며, 실행장소의 디스크파일에서 키 ID를 읽어 내부 키 ID와 비교하여 원본여부를 판정하고, 또한 실행여부를 결정하는 원본프로그램으로 구성한 것을 특징으로 하는 퍼스널컴퓨터 응용프로그램 프로텍션 장치.
  3. 제2항에 있어서, 카드 ID를 제공하느 ID 카드는, 응용프로그램에서 I/O 채널을 읽기위한 어드레스 데코더(DE)와 데이터버스 카드 ID를 실을 수 있게 하는 버스트랜시버(B)를 메모리(ROM)에 접속하였고, 데코더(DE)는 낸드게이트(N1)와 디멀티플렉서(M)로 구성하였고, I/O장치의 IOR 핀과 AEN 핀의 제어신호로 디멀티플렉서(M)를 제어하고, 데코더(DE)의 제어신호로 메모리(ROM)와 버스트랜시버(B)를 제어하게 한 것을 특징으로 하는 퍼스널컴퓨터 응용프로그램 프로텍션 장치.
KR1019940030134A 1994-11-17 1994-11-17 퍼스널컴퓨터 응용프로그램 프로텍션 방법 및 장치 KR0124548B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019940030134A KR0124548B1 (ko) 1994-11-17 1994-11-17 퍼스널컴퓨터 응용프로그램 프로텍션 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019940030134A KR0124548B1 (ko) 1994-11-17 1994-11-17 퍼스널컴퓨터 응용프로그램 프로텍션 방법 및 장치

Publications (2)

Publication Number Publication Date
KR960018912A KR960018912A (ko) 1996-06-17
KR0124548B1 true KR0124548B1 (ko) 1997-12-15

Family

ID=19398116

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019940030134A KR0124548B1 (ko) 1994-11-17 1994-11-17 퍼스널컴퓨터 응용프로그램 프로텍션 방법 및 장치

Country Status (1)

Country Link
KR (1) KR0124548B1 (ko)

Also Published As

Publication number Publication date
KR960018912A (ko) 1996-06-17

Similar Documents

Publication Publication Date Title
US5121345A (en) System and method for protecting integrity of computer data and software
EP0408689B1 (en) System and method of protecting integrity of computer data and software
US6662359B1 (en) System and method for injecting hooks into Java classes to handle exception and finalization processing
US4748561A (en) Method of protecting computer software
Lampson et al. An open operating system for a single-user machine
US7243340B2 (en) Method and system for obfuscation of computer program execution flow to increase computer program security
US5963970A (en) Method and apparatus for tracking erase cycles utilizing active and inactive wear bar blocks having first and second count fields
Kuperman et al. Detection and prevention of stack buffer overflow attacks
JP5467271B2 (ja) 情報処理装置及びプログラム、情報処理方法、記録媒体
US20140165210A1 (en) Software watermarking techniques
US5951700A (en) Methods of computer system usage determination based on hard disk drive activity
EP0217068A2 (en) Method of emulating the instructions of a target computer
EP0247274B1 (en) Detection of the presence of an incorrect removable storage medium
US5996113A (en) Method and apparatus for generating digital checksum signatures for alteration detection and version confirmation
KR0124548B1 (ko) 퍼스널컴퓨터 응용프로그램 프로텍션 방법 및 장치
KR100791815B1 (ko) 컴퓨터 시스템 및 컴퓨터 시스템에서 인스트럭션을 실행하는 방법
CN101403977B (zh) 信息处理装置及其方法
CN111881485B (zh) 一种基于arm指针验证的内核敏感数据完整性保护方法
CN1124377A (zh) 微型计算机硬盘信息保护技术及装置
KR20220095986A (ko) 임베디드 프로세서의 소스 코드의 컴파일링 방법 및 컴파일러
WO1993021582A1 (en) System for protection of software
US20230137661A1 (en) Verification method and verification system for information and communication safety protection mechanism
JPS6143334A (ja) マイクロコンピユ−タ装置
JP2003005855A (ja) ライセンス管理方法および記録媒体
JP3129865B2 (ja) データの検証方法

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee