KR20140050323A - 라이선스 검증 방법 및 그 장치 - Google Patents

라이선스 검증 방법 및 그 장치 Download PDF

Info

Publication number
KR20140050323A
KR20140050323A KR1020120116578A KR20120116578A KR20140050323A KR 20140050323 A KR20140050323 A KR 20140050323A KR 1020120116578 A KR1020120116578 A KR 1020120116578A KR 20120116578 A KR20120116578 A KR 20120116578A KR 20140050323 A KR20140050323 A KR 20140050323A
Authority
KR
South Korea
Prior art keywords
binary file
license
symbol
verification
file
Prior art date
Application number
KR1020120116578A
Other languages
English (en)
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 KR1020120116578A priority Critical patent/KR20140050323A/ko
Priority to EP13188990.9A priority patent/EP2722783A3/en
Priority to US14/058,828 priority patent/US20140115720A1/en
Publication of KR20140050323A publication Critical patent/KR20140050323A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/105Arrangements for software license management or administration, e.g. for managing licenses at corporate level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Quality & Reliability (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Storage Device Security (AREA)

Abstract

바이너리 파일을 포함하는 소프트웨어의 라이선스를 검증하기 위한 라이선스 검증 방법 및 그 장치에 관한 것으로, 이러한 본 발명은 바이너리 파일을 획득하는 단계와, 상기 바이너리 파일의 심벌 및 명령어 시퀀스를 추출하는 단계 및 검증하고자 하는 라이선스를 기반으로 형성된 데이터베이스를 이용하여 상기 심벌 및 명령어 시퀀스를 순차적으로 검증하는 단계를 포함한다.

Description

라이선스 검증 방법 및 그 장치{METHOD AND APPARATUS FOR LICENSE VERIFICATION OF BINARY FILE}
본 발명은 라이선스 검증 방법 및 그 장치에 관한 것으로 특히, 바이너리 파일을 포함하는 소프트웨어의 라이선스를 검증하기 위한 라이선스 검증 방법 및 그 장치에 관한 것이다.
품질이 검증된 FOSS(Free and Open Source Software)가 증가하면서, 프로그램 개발자는 FOSS를 제품 개발에 도입하여 개발 주기를 단축하고, 개발 비용을 감소시키며, 적시 출시(Time To Market)를 통한 시장 선점을 할 수 있는 이점을 얻고 있다. 또한 개발자는 우수한 품질이 확보된 FOSS를 도입함으로써, 제품 개발에 대한 투자 비용을 감소시킬 수 있다.
FOSS를 제품에 탑재할 경우 오픈 소스 라이선스 감시 단체에 의한 법정 소송을 피하고 기업과 제품의 브랜딩 이미지 실추에 대한 위험 부담을 줄이기 위해, 탑재된 FOSS가 라이선스 규약을 준수하는지 필수적으로 검증해야 한다.
일반적으로 라이선스 검증은 소프트웨어 소스 코드를 기반으로 하여 파일별로 라이선스를 검증하게 되며, 상용화 도구(예를 들어, ProtexIP)를 사용하게 된다. 즉, 상기 상용화 도구를 이용하여 SW 소스코드를 대상으로 파일별로 기존에 확보된 컴포넌트 풀인 지식 베이스(Knowledge Base)와 매칭하여 라이선스를 검증하였다.
그러나 이러한 종래의 방식에서는 아웃소싱이나, 오픈소스로부터 유입된 바이너리 형태의 파일에 대해서는 그 라이선스 타입에 대해 검증할 방법이 없는 상황이다. 즉 현재 알려진 상용 검증 도구들은 오픈 소스에 포함된 바이너리 파일에 대해서는 라이선스 검증 방법을 제공하고 있지 않아 정밀한 라이선스 검증을 할 수 없어 검증 실패에 따른 위험 부담을 여전히 안고 있어 문제가 된다.
상술한 문제점을 해결하기 위하여, 본 발명은 바이너리 파일을 포함하는 소프트웨어의 라이선스를 검증하기 위한 라이선스 검증 방법 및 그 장치를 제공한다.
본 발명의 목적은 소스코드만을 대상으로 하는 라이선스 검증의 범위를 넘어, 제품에 탑재되는 바이너리 파일에 대한 라이선스 검증을 가능하게 함으로써, 제품에 탑재되는 소프트웨어 라이선스 위반에 대한 위험을 최소화할 수 있는 라이선스 검증방법 및 그 장치를 제공하는데 있다.
상기와 같은 목적들을 달성하기 위한 본 발명의 실시 예에 따른 방법은, 바이너리 파일을 획득하는 단계와, 상기 바이너리 파일의 심벌 및 명령어 시퀀스를 추출하는 단계 및, 검증하고자 하는 라이선스를 기반으로 형성된 데이터베이스를 이용하여 상기 심벌 및 명령어 시퀀스를 순차적으로 검증하는 단계를 포함한다.
상기와 같은 목적들을 달성하기 위한 본 발명의 실시 예에 따른 방법은, 바이너리 파일의 라이선스를 검증하는 방법에 있어서, 오픈소스에 포함된 심벌을 선별하는 단계와, 상기 선별된 심벌을 포함하여 상기 오픈소스에 관한 지식 데이터베이스를 생성하는 단계와, 상기 오픈소스에 포함된 기능별 명령어 시퀀스를 데이터베이스화하여 헥사 지식 데이터베이스를 생성하는 단계와, 검증하고자 하는 상기 바이너리 파일을 획득하는 단계와, 상기 바이너리 파일의 심벌 및 명령어 시퀀스를 추출하는 단계와, 상기 지식 데이터베이스를 기반으로 상기 바이너리 파일의 심벌을 검증하는 단계 및 상기 헥사 지식 데이터베이스를 기반으로 상기 바이너리 파일의 명령어 시퀀스를 검증하는 단계를 포함한다.
상기와 같은 목적들을 달성하기 위한 본 발명의 실시 예에 따른 장치는, 라이선스 검증 요청을 입력받는 입력부 및 상기 라이선스 검증 요청에 따라 바이너리 파일을 획득하고, 상기 바이너리 파일로부터 검증 대상인 심벌 및 명령어 시퀀스를 추출하고, 검증하고자 하는 라이선스를 기반으로 미리 형성된 데이터베이스를 이용하여 상기 심벌 및 명령어 시퀀스를 검증하는 제어부를 포함한다.
상기와 같은 목적들을 달성하기 위한 본 발명의 실시 예에 따른 장치는, 바이너리 파일의 라이선스를 검증하는 라이선스 검증장치에 있어서, 고유 지수로 선별된 오픈소스의 심벌을 포함하는 지식 데이터베이스 생성부와, 상기 오픈소스의 함수별 명령어 시퀀스를 데이터베이스화하는 헥사 지식 데이터베이스 생성부 및 상기 바이너리 파일의 심벌 및 명령어 시퀀스를 추출하고, 상기 지식 데이터베이스 생성부 및 헥사 지식 데이터베이스 생성부로부터 각각 생성된 심볼 및 함수별 명령어 시퀀스와 비교하여, 상기 바이너리 파일의 라이선스를 검증하는 라이선스 검증 엔진부를 포함한다.
상술한 바와 같이 본 발명에서 제안하는 라이선스 검증 방법 및 그 장치에 따르면, 오픈소스 라이선스 검증 범위를 확대할 수 있다. 즉, 제품에 탑재된 바이너리 파일에 대한 라이선스를 검증함으로써, 소스코드 확보가 어려운 아웃소싱 바이너리에 대해서도 검증할 수 있다.
또한, 본 발명은 바이너리 파일에 대해 직접 라이선스 검증을 실시함으로써, 소스코드 기반으로 검증하는 방식에 비하여 라이선스 검증의 정확성 및 효율성을 증대시킬 수 있다.
또한, 본 발명은 소스코드 검증 시 투입되는 검증자의 자원 및 시간을 절약할 수 있다.
또한, 본 발명은 소스코드 검증 상용화 도구 도입으로 인한 초기 투지 비용 및 유지보수 비용에 대한 부담을 줄일 수 있다.
도 1은 본 발명의 실시예에 따른 라이선스 검증 장치를 개략적으로 나타낸 블록도이다.
도 2는 본 발명의 실시예에 따른 프리/오픈소스 크롤링을 개략적으로 도시한 도면이다.
도 3은 본 발명의 실시예에 따른 자동 크롤링 시스템을 개략적으로 나타낸 도면이다.
도 4는 오픈소스 패키지의 일반적인 구성을 개략적으로 도시한다.
도 5는 본 발명의 실시예에 따른 심벌의 고유지수를 산출하기 위한 공식을 나타낸 도면이다.
도 6은 본 발명의 실시예에 따른 헥사 지식 데이터베이스를 생성하는 방법을 나타내는 흐름도이다.
도 7은 본 발명의 실시예에 따른 데이터베이스 테이블의 일예를 도시한 도면이다.
도 8은 본 발명의 실시예에 따른 라이선스 검증 방법에 대한 검증 진행 상황 표시 화면을 나타낸 도면이다.
도 9는 본 발명의 실시예에 따른 바이너리 파일의 라이선스 검증방법을 나타낸 순서도이다.
도 10은 본 발명의 실시예에 따른 라이선스 검증 결과 리포트 표시 화면의 일 실시 예를 나타낸 도면이다.
도 11은 본 발명의 실시예에 따른 검증 대상의 타입을 분석하는 방법을 나타낸 순서도이다.
도 12는 본 발명의 실시예에 따른 지식 데이터베이스를 생성하기 위한 방법을 나타낸 순서도이다.
본 발명은 바이너리 파일에 대하여 라이선스 검증을 수행하는 전자 기기를 위해 적용될 수 있다.
구체적으로 본 발명은, 모바일 기기 및 TV, 프린터기, 냉장고 등의 생활 가전 등에 탑재되는 바이너리 파일의 라이선스 검증을 수행하는 전자 기기 또는 서비스를 위해 적용될 수 있다.
본 명세서에서 사용되는 기술적 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명의 사상을 한정하려는 의도가 아님을 유의해야 한다. 또한, 본 명세서에서 사용되는 기술적 용어는 본 명세서에서 특별히 다른 의미로 정의되지 않는 한, 본 발명이 속하는 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 의미로 해석되어야 하며, 과도하게 포괄적인 의미로 해석되거나, 과도하게 축소된 의미로 해석되지 않아야 한다.
도 1은 본 발명의 실시예에 따른 라이선스 검증 장치를 개략적으로 나타낸 블록도이다.
도 1을 참조하면, 본 발명의 실시예에 따른 라이선스 검증 장치(10)는 제어부(20), 입력부(32), 저장부(34) 및 표시부(36)를 포함하여 구성될 수 있다.
입력부(32)는, 사용자의 조작 신호를 입력받을 수 있다. 입력부(1200)는 키보드(keyboard), 키 패드(key pad), 돔 스위치 (dome switch), 터치 패드(정압/정전), 조그 휠, 조그 스위치 등으로 구성될 수 있다.
입력부(32)는 사용자로부터 라이선스 검증 요청 또는 라이선스 검증 대상의 선택을 입력받을 수 있다.
제어부(20)는, 라이선스 검증장치(10)의 전반적인 동작을 제어하기 위하여 각 구성 요소를 제어할 수 있다. 예를 들어, 제어부(20)는 라이선스 검증장치(10)가 검증 대상에 대한 라이선스 검증을 수행할 수 있도록 라이선스 검증장치(10)를 제어할 수 있다.
제어부(20)는, KDB 생성부(22), HEX-KDB 생성부(24), 파일 획득부(26), 검증 대상 추출부(27) 및 검증 엔진부(28)을 포함하여 구성될 수 있다.
KDB 생성부(22)는, 지식 데이터베이스(Knowledge Database, 30)를 생성한다. 즉, KDB 생성부(22)는 지식 데이터베이스에 다양한 오픈 소스 프로젝트로부터 추출된 정보를 저장한다.
예를 들면, 오픈 소스의 프로젝트 네임(project name), 라이선스 타입(license type), 문자열(string literals), 함수 이름(function name) 및 심벌(symbol)의 고유 지수(unique degree)를 저장할 수 있다.
지식 데이터베이스(30)는 복수의 라이선스에 대하여 별개로 형성될 수 있으며, 각각의 라이선스에 대응하는 적어도 하나의 심벌로 구성될 수 있다.
또한, 지식 데이터베이스(30)는 커널 모듈에 대해서 별도로 형성될 수 있으며, 커널 모듈이 라이선스에 대응하기 위한 적어도 하나의 함수, 심벌, API명 등을 포함하여 구성될 수 있다.
지식 데이터베이스(30)에 저장된 상기 정보들은 라이선스 검증하고자 하는 심벌과 비교하는 기준으로 구성될 수 있다.
지식 데이터베이스(30)는 필요에 따라 사전(dictionary), 컴포넌트 풀(component pool) 등으로 명명될 수 있다.
지식 데이터베이스(30)의 신뢰성(reliability)은 검증 툴(verification of tool), 즉 라이선스 검증장치(10)의 신뢰성과 연관된다.
이와 같은 라이선스 검증장치(10)의 신뢰성을 향상시키기 위해 KDB 생성부(22)는 라이선스 검증 시에 기준이 되는 심벌을 선별하는 작업을 실행할 수 있다.
라이선스 검증을 위한 기준 심벌을 선별하기 위해 KDB 생성부(22)는 세 가지 단계를 실행할 수 있다. 첫 번째 단계로 오픈소스를 크롤링하는 단계(Crawling open source), 두 번째로 라이선스를 확인하고 심벌을 추출하는 단계(Identifying license and extracting symbols) 및 세 번째로 심벌을 스코링(symbol scoring)하는 단계를 실행할 수 있다.
이하 도 2 내지 도 7을 참조하여 상기 세 단계의 실행에 대해 상세히 설명하기로 한다.
첫 번째 단계로, KDB 생성부(22)는 도 2에 도시된 바와 같이 저장소(12)에 저장된 오픈소스 패키지로부터 소스코드를 크롤링(crawling)할 수 있다.
즉, KDB 생성부(22)는 함수와 스트링(strings)의 오리지널 소스(source)인 프리/오픈소스 패키지(free and open source packages)를 수집할 수 있다.(이하 설명의 편의를 위하여 프리/오픈소스 패키지를 오픈소스로 표기하기로 한다.)
오픈소스 패키지는 그 수가 방대해서 이들을 직접 수집하기에는 시간과 자원이 많이 필요하기 때문에, KDB 생성부(22)는 예를 들어 Free Software Foundations, Source Forge 및 GNU FTP와 같은 사이트로부터 오픈소스 패키지를 자동적으로 크롤링하고 다운로드하는 자동 환경 시스템을 구축할 수 있다.
즉, KDB 생성부(22)는 자동적으로 오픈소스 패키지를 크롤링 및 다운로드할 수 있다. 도 3은 언급한 자동 크롤링 시스템(Distributed Auto-crawling Enviroment system)의 구성을 도시한다. 도 3을 참조하면, 자동 크롤링 시스템은 오픈 소스 패키지를 크롤링하는 프로세싱의 부하가 크고, 오픈소스 패키지의 양이 방대하기 때문에 분산 서버(distributed servers, 40, 50)로 구축될 수 있다.
일반적으로는 오픈소스 패키지가 C/C++과 같은 소스코드로 수집되지만, 본 발명의 실시예에서는 바이너리 파일을 검증하기 위해 오픈소스를 바이너리 타입(binary type and characteristics)으로 수집할 수 있다. 그리고 라이선스 검증 대상이 리눅스 커널 모듈인 경우를 대비하여, 검증 기준(validation criteria)으로서 리눅스 커널 소스에 포함된 GPL-Only Symbol(GPL-Only API)를 수집할 수 있다. 또한 라이선스 검증 대상이 APK-Android application file인 경우를 대비하여, 검증기준으로서 자바 언어 기반의 패키지를 수집할 수 있다.
두 번째 단계로, KDB 생성부(22)는 오픈소스 패키지의 라이선스 타입을 확인하고, 소스코드로부터 심벌을 추출한다. 구체적으로 상기 두 번째 단계는 다음과 같은 프로세스로 구성될 수 있다.
먼저, 소스 패키지를 언패킹(Unpacking Source Packages)하는 프로세서이다. 다운로드된 오픈소스는 주로 tar, gzip, bzip, zip와 같은 타입으로 패키징된 형태이다. KDB 생성부(22)는 이런 오픈소스 패키지를 언패킹하기 위해 먼저 패키지 타입을 체크하고, 패키지 타입에 따라 오픈소스 패키지를 압축해제, 언팩 또는 디컴파일할 수 있다.
다음으로, 오픈소스 패키지의 라이선스를 확인하는 프로세서이다. 오픈소스 패키지로부터 추출된 심벌에 기반한 라이선스 검증 실행을 위해 KDB 생성부(22)는, 각 심벌의 라이선스 타입을 파악해야한다.
대부분의 경우에 오픈소스 패키지는 복제(COPYING) 또는 라이선스(LICENSE) 텍스트 파일을 소스 폴더에 포함하고 있다. KDB 생성부(22)는 이러한 패키지의 라이선스 타입을 인지할 수 있다. 도 4는 오픈소스 패키지의 일반적인 구성을 개략적으로 도시한다. 도 4를 참조하면, 오픈소스 패키지(60)는 다수의 내부 패키지 및 상기 패키지 내부에 포함된 다수의 파일들로 구성될 수 있다.
마지막으로, 소스코드로부터 함수 및 스트링을 추출(Extracting function and strings from source code)하는 프로세서이다. KDB 생성부(22)는 함수 타입의 심벌(function type's symbol)을 분석하기 위해 doxygen 장치를 통해 소스코드의 XML 출력 파일을 생성할 수 있다. 이 XML 출력파일은 소스코드의 속성에 의해 분류될 수 있다.
다음으로 XML 출력파일을 파싱(parsing)함으로써, KDB 생성부(22)는 함수 심벌의 속성을 분류할 수 있다. 함수 세트의 최종 분류는 패키지의 심벌이다. 심벌의 라이선스는 오리지널 소스 파일에 기반 한다.
코드로부터 스트링 심벌(string symbol)을 추출하기 위해서 xgettext 라는 유틸리티를 사용한다. 이것은 인용마크(quotation marks) 내에 있는 모든 스트링을 추출할 수 있다. 이 툴을 이용하여 소스코드로부터 스트링을 추출할 수 있다. 이 스트링에 의해 오리지널 파일의 라이선스를 부여할 수 있다.
다시 두 번째 단계에 이어 세 번째 단계로, KDB 생성부(22)는 심벌을 스코링한다. 즉, KDB 생성부(22)는 심벌의 고유 지수(unique degree)를 산출하여 상기 고유 지수를 심벌에 스코링(scoring)할 수 있다.
구체적으로, 이 단계는 라이선스 검증 기준이 되는 심벌을 선별하기 위한 단계로서, 이 같은 단계를 통해 심벌에 해당하는 함수의 기능이 다르나 스펠링이 동일한 중복 심벌(duplicated symbol) 및 리던던트 심벌(redundant symbol)을 라이선스 검증 기준이 되는 심벌에서 제외시킬 수 있다. 이에 따라, 본 발명의 실시예에 따른 라이선스 검증 장치의 신뢰성을 높일 수 있다.
예를 들어, KDB 생성부(22)는 'printf', 'scan_files', 'Error:%s %s'와 같은 리던던트 심벌이나, 함수의 기능이 다르나 스펠링이 동일한 중복 심벌을 라이선스 검증 기준이 되는 심벌에서 제외시킬 수 있다.
상기 고유 지수는 심벌마다 산출하여 각 심벌에 스코링할 수 있다. 상기 고유 지수란, 특정 심벌이 오픈 소스 프로젝트 내에 얼마나 있는지를 체크하기 위한 개념일 수 있다. 이와 같은 고유 지수를 산출하기 위한 공식은 도 5에 표현된 바와 같다.
상기 공식을 참조하면, 고유 지수는 심벌의 길이와 비례하고, 오픈소스, 즉 패키지 및 파일 내에 존재하는 심벌의 개수에 반비례하며, 리던던트 심벌 지수는 상수(constant)인 알파(α)와 베타(β)로 표현된다.
상기 상수인 알파와 베타 값은 수치를 변경해가며 수차례의 시뮬레이션 결과를 분석하여 임의로 정할 수 있다. 상기 공식의 결과 값인 스코어는 예를 들어, 심벌이 중복되는 수가 많을수록 스코어 값이 떨어짐을 알 수 있다. 이러한 스코어는 심벌의 고유성(uniqueness)의 정도를 반영한다.
KDB 생성부(22)는 일정지수 이상으로 산출된 고유 지수에 해당하는 심벌을 추출할 수 있다. 즉, KDB 생성부(22)는 상기 고유성의 정도가 미리 설정된 일정정도 이상인 심벌을 추출하고, 고유성의 정도가 일정정도 이하인 예를 들어 리던던트 심벌이나 중복 심벌과 같은 심벌은 제거할 수 있다. 그리고 추출된 심벌을 라이선스 검증 기준이 되는 심벌로서 지식 데이터베이스에 저장할 수 있다.
이에 더불어 KDB 생성부(22)는 오픈소스의 프로젝트 이름, 함수 이름, 라이선스 타입, 문자열(string literals)을 포함하고, 상기 고유 지수가 스코링된 심벌 정보를 지식 데이터베이스에 저장할 수 있다.
상기 세 번째 단계의 흐름을 정리하기 위해 도 12을 참조하여 지식 데이터베이스 생성 방법에 관하여 상세히 설명하기로 한다.
도 12는 KDB 생성부(22)가 지식 데이터베이스를 생성하기 위한 방법을 나타낸 흐름도이다.
도 12를 참조하면, KDB 생성부(22)는 먼저 오픈소스의 심벌을 추출할 수 있다.(100 단계)
다음으로, 추출된 심벌의 고유 지수를 산출할 수 있다.(110 단계)
다음으로, 산출된 고유 지수가 일정 지수 이상인지 판단할 수 있다.(120 단계)
다음으로, 고유 지수가 일정 지수 이상인 심벌을 라이선스 기준 심벌로 선별할 수 있다.(130 단계) 그리고 고유 지수가 일정 지수 이하인 심벌은 라이선스 기준 심벌에서 제외시킬 수 있다.(135 단계)
다음으로, 상기 130 단계에 의해 선별된 라이선스 기준 심벌을 포함하는 지식 데이터베이스를 생성할 수 있다.(140 단계)
다시, 도 1을 참조하면, HEX-KDB 생성부(24)는, 오픈소스의 함수별 명령어 시퀀스를 데이터베이스화하여 상기 명령어 시퀀스를 저장하는 헥사 지식 데이터베이스(HEX Knowledge Database)를 생성할 수 있다.
HEX-KDB 생성부(24)는 오픈소스의 함수별 명령어 시퀀스를 데이터베이스화하여 헥사 지식 데이터베이스를 생성한다. 여기서 도 7을 참조하여 HEX-KDB 생성부가 헥사 지식 데이터베이스를 생성하는 방법을 설명하기로 한다.
도 6을 참조하면, HEX-KDB 생성부(24)는 먼저, 오픈소스 패키지의 소스코드를 바이너리로 컴파일한다.(단계 70)
다음으로, 상기 컴파일된 바이너리를 기반으로 기계어를 추출하며, 기계어 파일을 덤프하여, 상기 기계어를 어셈블리화 한다. 즉, 함수별로 어셈블리어를 추출한다.(단계 72)
다음으로, 어셈블리어를 명령어 기반으로 정규화한다.(단계 74)
이러한 과정을 거쳐 HEX-KDB 생성부(24)는 함수별 명령어 시퀀스를 포함하는 헥사 지식 데이터베이스를 생성한다.(단계 76)
도 7을 참조하면, HEX-KDB 생성부(24)는 데이터베이스 테이블(DB table)에 도시된 바와 같이 어셈블리어 명령 시퀀스를 정규화하고, 이를 데이터베이스화하여 헥사 지식 데이터베이스에 저장할 수 있다.
다시 도 1을 참조하면, 파일 획득부(26)는 검증 대상으로부터 파일을 획득할 수 있다. 특히, 파일 획득부(26)는 검증 대상으로부터 바이너리 파일을 획득할 수 있다. 검증 대상은 파일, 폴더이거나, 압축 파일 또는 패키지 파일 중 하나의 타입을 가질 수 있다. 또한, 라이선스 검증 대상은 리눅스 커널(Linux kernel)에 대한 커널 모듈(kernel module)이거나 커널 모듈을 포함할 수 있다.
그리고 파일 획득부(26)는 라이선스 검증 대상이 압축 파일 타입 또는 패키지 파일 타입인지 판단할 수 있다. 압축 파일은 복수의 파일을 하나의 파일로 압축하여 생성되는 것으로, 압축 해제에 의하여 복수의 파일로 분리될 수 있다. 패키지 파일은 복수의 파일을 하나의 패키지로 묶음 처리하여 생성되는 것으로, 압축 해제, 언팩(unpack) 또는 디컴파일에 의하여 복수의 파일로 분리될 수 있다. 압축 파일 또는 패키지 파일은 .apk, .dpkg, .rpm 등의 확장자를 가지거나 rootfs image 파일일 수 있다. 여기서, 압축 파일 또는 패키지 파일을 구성하는 복수의 파일은 바이너리 파일을 포함할 수 있다.
다음으로, 파일 획득부(26)는 라이선스 검증 대상이 바이너리 파일 타입인지 판단할 수 있다.
바이너리 파일은 이진 데이터로 구성되는 파일로써, 단말에 탑재되는 .a, .so, .lib, .dll, .exe와 같은 실행 파일 또는 라이브러리 파일 확장자를 갖는 파일일 수 있으며, 이미지 또는 멀티미디어 파일 등의 리소스 파일은 제외될 수 있다.
파일 획득부(26)는 검증 대상이 바이너리 파일 타입인지 판단하거나, 검증 대상이 폴더인 경우 폴더에 포함된 적어도 하나의 파일에 대하여 바이너리 파일 타입인지 판단할 수 있다. 또한, 검증 장치는 압축 파일 또는 패키지 파일로부터 분리된 복수의 파일에 대하여 바이너리 파일 타입인지 판단할 수 있다.
검증 대상이 바이너리 파일 타입인 경우, 파일 획득부(26)는 바이너리 파일을 획득할 수 있다.
파일 획득부(26)는 검증 대상이 바이너리 파일 타입인 경우, 검증 대상 자체를 획득하거나, 검증 대상이 폴더인 경우, 폴더 내에 존재하는 바이너리 파일을 획득할 수 있다. 또는, 검증 장치는 압축 파일 또는 패키지 파일로부터 분리된 복수의 파일 중 바이너리 파일을 획득할 수 있다.
추가로, 파일 획득부(26)는 검증 대상이 커널 모듈에 대응되는지 판단할 수 있다.
커널 모듈은 사용자의 필요에 따라 커널에 로드하거나 언로드 할 수 있는 장치 드라이버와 같은 커널의 특정한 기능을 수행하는 프로그램이다. 커널 모듈은 운영 체제를 재시작하지 않고도 사용자가 쉽게 커널의 기능을 확장할 수 있다. 커널 모듈은 .ko와 같은 라이브러리 파일 확장자를 가질 수 있다.
커널 모듈은 주로 파일 시스템과 장치 드라이버를 확장하기 위해 사용될 수 있다. 커널 모듈은 커널 API로 작성되며, 빌드(build)를 통해 바이너리 파일로 작성될 수 있다. 커널 API는 GPL과 Non-GPL로 구분될 수 있으며, 사용된 커널 API에 따라 라이선스 타입이 결정될 수 있다.
파일 획득부(26)는 검증 대상이 커널 모듈인지 판단할 수 있다. 또는, 파일 획득부(26)는 바이너리 파일이 시스템 콜을 통해 커널 모듈을 사용하는지 판단할 수 있다.
검증 대상이 커널 모듈에 대응되는 경우, 파일 획득부(26)는 커널 모듈을 획득할 수 있다.
검증 대상 추출부(27)는 라이선스 검증 대상이 압축 파일 타입 또는 패키지 파일 타입인 경우, 라이선스 검증 대상을 압축 해제하거나 디컴파일 할 수 있다.
검증 대상 추출부(27)는 압축 파일 또는 패키지 파일을 압축 해제, 언팩(unpack) 또는 디컴파일하여, 압축 파일 또는 패키지 파일을 구성하는 복수의 파일로 분리할 수 있다. 압축 해제, 언팩(unpack) 또는 디컴파일에 의하여 분리된 복수의 파일은 적어도 하나의 바이너리 파일을 포함할 수 있다.
검증 대상 추출부(27)는 최종적으로 바이너리 파일로부터 검증 대상인 심벌 및 명령어 시퀀스를 추출할 수 있다. 구체적으로 검증 대상 추출부(27)는 바이너리 파일에 포함된 함수의 명칭(function name), 상기 함수의 타입 및 함수 명칭의 길이(length)에 관한 정보 중 적어도 하나를 포함하는 적어도 하나의 바이너리 파일의 심벌을 추출할 수 있다.
그리고, 검증 대상 추출부(27)는 바이너리 파일로부터 기계어를 추출하고, 상기 기계어를 어셈블리화하며, 상기 어셈블리어를 기능별 명령어 시퀀스로 정규화함으로써, 바이너리 파일의 명령어 시퀀스를 추출할 수 있다.
검증 대상 추출부(27)는 라이선스 검증하고자 하는 바이너리 파일의 심벌 및 명령어 시퀀스를 목록으로 작성하여 저장부(34)에 저장할 수 있다.
검증 엔진부(28)는, 검증하고자 하는 라이선스를 기반으로 미리 형성된 데이터베이스를 이용하여 상기 심벌 및 명령어 시퀀스를 검증할 수 있다.
검증 엔진부(28)는 readelf, strings, nm 등과 같은 시스템 유틸리티(utility)를 사용하여 상술한 문자열 추출을 수행할 수 있다.
검증 엔진부(28)는 바이너리 파일 또는 커널모듈의 심벌 및 명령어 시퀀스에 대한 라이선스를 검증한 결과를 저장부(34)에 저장하고 표시부(36)에 표시할 수 있다.
저장부(34)는 라이선스 검증장치(10)의 동작에 필요한 프로그램, 정보 및 데이터를 저장할 수 있다. 저장부(34)는 라이선스 검증을 위한 지식 데이터베이스, 헥사 지식 데이터베이스, 라이선스 검증 과정에서 형성되는 임시적인 데이터, 라이선스 검증 결과 리포트 등을 영구적 또는 임시적으로 저장할 수 있다.
또한, 저장부(34)는 라이선스 검증 장치(10)가 라이선스 검증을 수행하도록 작성된 프로그램, 또는 작성된 프로그램이 컴퓨터가 읽을 수 있는 코드로 구현된 형태를 저장할 수 있다. 저장부(34)에 저장된 프로그램 또는 컴퓨터가 읽을 수 있는 코드는 제어부(20)의 제어에 의하여 실행될 수 있다.
저장부(34)는 플래시 메모리 타입(flash memory type), 하드디스크 타입(hard disk type), 멀티미디어 카드 마이크로 타입(multimedia card micro type), 카드 타입의 메모리(예를 들어 SD 또는 XD 메모리 등), 램(Random Access Memory, RAM), SRAM(Static Random Access Memory), 롬(Read-Only Memory, ROM), EEPROM(Electrically Erasable Programmable Read-Only Memory), PROM(Programmable Read-Only Memory), 자기 메모리, 자기 디스크, 광디스크 중 적어도 하나의 타입의 저장매체를 포함할 수 있다.
표시부(36)는 라이선스 검증장치(10)에서 처리되는 정보를 표시(출력)한다. 예를 들어, 표시부(36)는 라이선스 검증장치(10)의 동작과 관련된 사용자 인터페이스(User Interface; UI) 화면을 표시할 수 있다.
표시부(36)는 액정 디스플레이(liquid crystal display, LCD), 박막 트랜지스터 액정 디스플레이(thin film transistor-liquid crystal display, TFT LCD), 유기 발광 다이오드(organic light-emitting diode, OLED), 플렉시블 디스플레이(flexible display), 3차원 디스플레이(3D display) 중에서 적어도 하나를 포함할 수 있다.
표시부(36)는 터치 센서 또는 근접 센서와 결합하여 터치 스크린으로 동작할 수 있다. 이때, 표시부(36)는 표시 장치 외에 입력 장치로 취급될 수 있다.
본 발명의 실시 예에 따르면, 표시부(36)는 도 8에 도시된 바와 같이 검증 대산 선택 개체(1), 검증 요청 입력 개체(2) 및 검증 정보 표시 개체(4)를 표시할 수 있다.
표시부(36)는 라이선스 검증을 수행하고자 하는 검증 대상을 선택받기 위해 검증 대상 선택 개체(1)를 표시할 수 있다. 검증 대상 선택 개체(1)는 검증 대상을 검색하기 위한 개체와 선택된 검증 대상의 경로, 이름, 확장자 등을 표시할 수 있는 검증 대상 표시 개체로 구성될 수 있다. 검증 대상 선택 개체(1)는 적어도 하나의 텍스트, 아이콘, 버튼, 이미지, 창 또는 이들이 결합된 형태 등으로 표시될 수 있다.
표시부(36)는 검증 대상에 대한 검증 요청을 입력받기 위해 검증 요청 입력 개체(2)를 표시할 수 있다. 검증 요청 입력 개체(2)는 검증 요청 입력에 따라 검증이 진행 중인 경우에, 검증 중지 요청 입력 개체로 대체될 수 있다. 검증 요청 입력 개체(2)는 적어도 하나의 텍스트, 아이콘, 버튼, 이미지, 창 또는 이들이 결합된 형태 등으로 표시될 수 있다.
표시부(36)는 검증 대상에 대한 검증 정보를 표시하기 위해 검증 정보 표시 개체(4)를 표시할 수 있다. 예를 들어, 검증 상태 표시 개체(4)는 검증 대상을 구성하는 파일의 목록, 바이너리 파일 목록, 검증 대상의 타입 및 검증 대상의 압축 해제, 언팩(unpack) 또는 디컴파일(decompile) 상태 중 적어도 하나를 표시할 수 있다.
검증이 진행 중인 경우, 표시부(36)는 검증 정보 표시 개체(4)를 통하여 검증 중인 파일의 목록 및 검증 중인 심벌 및 명령어 시퀀스의 목록 중 적어도 하나를 포함하는 검증 진행 상황을 표시할 수 있다.
검증이 완료된 경우, 표시부(36)는 검증 정보 표시 개체(4)를 통하여 검증을 수행한 파일, 문자열, 라이선스의 목록, 라이선스에 대응하는 파일의 목록, 파일의 수, 함수 또는 심벌 및 명령어 시퀀스 목록, 라이선스 대응에 대한 신뢰도 중 적어도 하나를 포함하는 검증 결과 리포트를 표시할 수 있다.
검증 정보 표시 개체(4)는 검증 정보를 표시하기 위한 창으로 구성될 수 있으며, 적어도 하나의 텍스트, 아이콘, 버튼, 이미지, 창 또는 이들이 결합된 형태를 포함할 수 있다.
도 9는 본 발명의 실시예에 따른 바이너리 파일의 라이선스 검증방법을 나타낸 순서도이다.
도 9를 참조하면, 본 발명의 실시예에 따른 라이선스 검증장치는, 먼저, 검증대상 바이너리 파일을 획득할 수 있다.(400 단계) 즉, 라이선스 검증장치가 검증하고자 하는 바이너리 파일을 획득하는 단계에 해당한다.
이 단계는 검증 대상의 타입을 분석하는 단계와, 검증 대상의 타입이 압축 파일 또는 패키지 파일인 경우, 상기 검증 대상을 압축 해제, 언팩(unpack) 또는 디컴파일(decompile)하는 단계 및 압축 해제 또는 디컴파일 결과를 기초로 바이너리 파일을 획득하는 단계를 포함할 수 있다.
다음으로, 바이너리 파일의 심벌 및 명령어 시퀀스를 추출할 수 있다.(410 단계) 즉, 라이선스 검증장치가 바이너리 파일에 포함된 함수의 명칭, 함수의 타입 및 함수 명칭의 길이 중 적어도 하나를 포함하는 심벌을 추출한다.
또한, 라이선스 검증장치가 바이너리 파일로부터 기계어를 추출하고, 상기 기계어를 어셈블리화하며, 상기 어셈블리어를 기능별 명령어 시퀀스로 정규화함으로써, 바이너리 파일의 명령어 시퀀스를 추출한다.
다음으로, KDB 기반으로 심벌을 매칭할 수 있다.(420 단계) 즉, 라이선스 검증장치가 지식 데이터베이스를 기반으로 바이너리 파일의 심벌을 매칭하는 단계에 해당한다. 바이너리 파일의 심벌과 동일한 기준 심벌이 지식 데이터베이스에 존재하는지 매칭할 수 있다. 여기서 지식 데이터베이스에 존재하는 심벌은 라이선스 검증을 위한 기준 심벌이라고 할 수 있다.
다음으로, 바이너리 파일의 심벌을 검증할 수 있다.(430 단계) 즉, 420 단계에 의한 매칭 결과를 기반으로 라이선스 검증장치가 바이너리 파일의 심벌에 대한 라이선스를 검증할 수 있다.
다음으로, 바이너리 파일의 명령어 시퀀스를 매칭할 수 있다.(440 단계) 즉, 라이선스 검증장치가 헥사 지식 데이터베이스를 기반으로 바이너리 파일의 명령어 시퀀스를 매칭하는 단계에 해당한다. 바이너리 파일의 명령어 시퀀스와 동일한 기준 명령어 시퀀스가 헥사 지식 데이터베이스에 존재하는지 매칭할 수 있다. 여기서 헥사 지식 데이터베이스에 존재하는 명령어 시퀀스는 라이선스 검증을 위한 기준 명령어 시퀀스라고 할 수 있다.
다음으로, 바이너리 파일의 명령어 시퀀스를 검증할 수 있다.(450 단계) 즉, 440 단계에 의한 매칭 결과를 기반으로 라이선스 검증장치가 바이너리 파일의 명령어 시퀀스에 대한 라이선스를 검증할 수 있다.
다음으로, 바이너리 파일의 라이선스를 검증할 수 있다.(460 단계) 즉, 라이선스 검증장치는 420 단계 내지 450 단계를 통해 바이너리 파일의 심벌 및 명령어 시퀀스를 순차적으로 검증함으로써, 바이너리 파일을 단계적으로 라이선스 검증할 수 있다. 본 발명의 실시예에 의한 라이선스 검증장치는 바이너리 파일의 심벌뿐만 아니라 명령어 시퀀스까지 검증함으로써, 라이선스 검증의 신뢰도를 높일 수 있다.
다음으로, 라이선스 검증 결과를 표시할 수 있다.(470 단계) 즉, 라이선스 검증장치는 검증 대상이 검증하고자 하는 라이선스에 대응하는지 여부에 대한 검증 결과를 사용자 인터페이스 화면상에 표시할 수 있다.
검증 장치는 검증 결과 표시를 위하여 검증 결과 리포트를 생성할 수 있다. 검증 결과 리포트는 검증을 수행한 파일, 심벌, 명령어 시퀀스, 검증을 수행한 라이선스의 목록, 라이선스에 대응하는 파일의 목록, 수, 함수 또는 심벌 목록, 명령어 시퀀스 목록, 라이선스 대응에 대한 신뢰도 중 적어도 하나를 포함하여 생성될 수 있다.
여기서, 라이선스 대응에 대한 신뢰도는 라이선스에 대응된다고 판단된 심벌의 수 및 명령어 시퀀스의 수 등을 기초로 판단될 수 있으며, 판단 결과에 따라 신뢰도에 대한 점수를 매김으로써 결정될 수 있다.
라이선스 검증장치는, 도 10에 도시된 바와 같이, 라이선스 검증 결과를 검증 정보 표시 개체(5)에 표시할 수 있다. 라이선스 검증장치는 검증 결과를 목록, 표, 프레임 등의 형태로 표시할 수 있고, 검증 결과에 연관된 수치를 선형, 원형, 막대형 등의 그래프로 표시할 수 있다. 예를 들어, 검증 장치는 도 10에 도시된 바와 같이 검증 대상에 대하여 하나 이상의 라이선스에 대응하는 심벌의 수를 기초로, 라이선스 대응 여부를 백분율화하여 그래프로 표시할 수 있다.
그리고 도시되지 않았지만, 단계 460에 의한 바이너리 파일의 심볼 및 명령어 시퀀스의 검증결과를 기초로 상기 바이너리 파일의 상기 라이선스 대응 여부를 결정할 수 있다.
한편, 라이선스 검증장치는 검증 대상의 타입을 분석할 수 있다. 이에 대해 도 11을 참조하여 상세히 설명하기로 한다.
도 11을 참조하면, 검증 장치는 검증 대상의 타입을 분석할 수 있다.(300 단계)
검증 대상은 파일, 폴더이거나, 압축 파일 또는 패키지 파일 중 하나의 타입을 가질 수 있다. 또한, 검증 대상은 리눅스 커널(Linux kernel)에 대한 커널 모듈(kernel module)이거나 커널 모듈을 포함할 수 있다.
다음으로, 검증 장치는 검증 대상이 압축 파일 타입 또는 패키지 파일 타입인지 판단할 수 있다.(310 단계)
압축 파일은 복수의 파일을 하나의 파일로 압축하여 생성되는 것으로, 압축 해제에 의하여 복수의 파일로 분리될 수 있다. 패키지 파일은 복수의 파일을 하나의 패키지로 묶음 처리하여 생성되는 것으로, 압축 해제, 언팩(unpack) 또는 디컴파일에 의하여 복수의 파일로 분리될 수 있다. 압축 파일 또는 패키지 파일은 .apk, .dpkg, .rpm 등의 확장자를 가지거나 rootfs image 파일일 수 있다. 여기서, 압축 파일 또는 패키지 파일을 구성하는 복수의 파일은 바이너리 파일을 포함할 수 있다.
검증 대상이 압축 파일 타입 또는 패키지 파일 타입인 경우, 검증 장치는 검증 대상을 압축 해제하거나 디컴파일 할 수 있다.(320 단계)
검증 장치는 압축 파일 또는 패키지 파일을 압축 해제, 언팩(unpack) 또는 디컴파일하여, 압축 파일 또는 패키지 파일을 구성하는 복수의 파일로 분리할 수 있다.
압축 해제, 언팩(unpack) 또는 디컴파일에 의하여 분리된 복수의 파일은 적어도 하나의 바이너리 파일을 포함할 수 있다.
다음으로, 검증 장치는 검증 대상이 바이너리 파일 타입인지 판단할 수 있다.(330 단계)
바이너리 파일은 이진 데이터로 구성되는 파일로써, 단말에 탑재되는 .a, .so, .lib, .dll, .exe와 같은 실행 파일 또는 라이브러리 파일 확장자를 갖는 파일일 수 있으며, 이미지 또는 멀티미디어 파일 등의 리소스 파일은 제외될 수 있다.
검증 장치는 검증 대상이 바이너리 파일 타입인지 판단하거나, 검증 대상이 폴더인 경우 폴더에 포함된 적어도 하나의 파일에 대하여 바이너리 파일 타입인지 판단할 수 있다. 또한, 검증 장치는 압축 파일 또는 패키지 파일로부터 분리된 복수의 파일에 대하여 바이너리 파일 타입인지 판단할 수 있다.
검증 대상이 바이너리 파일 타입인 경우, 검증 장치는 바이너리 파일을 획득할 수 있다.(340 단계)
검증 장치는 검증 대상이 바이너리 파일 타입인 경우, 검증 대상 자체를 획득하거나, 검증 대상이 폴더인 경우, 폴더 내에 존재하는 바이너리 파일을 획득할 수 있다. 또는, 검증 장치는 압축 파일 또는 패키지 파일로부터 분리된 복수의 파일 중 바이너리 파일을 획득할 수 있다.
도 10을 참조하면, 검증 장치는 획득된 바이너리 파일 목록을 사용자 인터페이스 화면상에 표시할 수 있다. 검증 장치는 획득된 바이너리 파일 목록을 검증 정보 표시 개체(4)를 구성하는 창에 표시할 수 있으며, 텍스트, 아이콘, 버튼, 이미지 또는 이들이 결합된 형태로 표시할 수 있다.
다시 도 11을 참조하면, 검증 장치는 검증 대상이 커널 모듈에 대응되는지 판단할 수 있다(350 단계)
커널 모듈은 사용자의 필요에 따라 커널에 로드하거나 언로드 할 수 있는 장치 드라이버와 같은 커널의 특정한 기능을 수행하는 프로그램이다. 커널 모듈은 운영 체제를 재시작하지 않고도 사용자가 쉽게 커널의 기능을 확장할 수 있다. 커널 모듈은 .ko와 같은 라이브러리 파일 확장자를 가질 수 있다.
커널 모듈은 주로 파일 시스템과 장치 드라이버를 확장하기 위해 사용될 수 있다. 커널 모듈은 커널 API로 작성되며, 빌드(build)를 통해 바이너리 파일로 작성될 수 있다. 커널 API는 GPL과 Non-GPL로 구분될 수 있으며, 사용된 커널 API에 따라 라이선스 타입이 결정될 수 있다.
검증 장치는 검증 대상이 커널 모듈인지 판단할 수 있다. 또는, 검증 장치는 바이너리 파일이 시스템 콜을 통해 커널 모듈을 사용하는지 판단할 수 있다.
검증 대상이 커널 모듈에 대응되는 경우, 검증 장치는 커널 모듈을 획득할 수 있다.(360 단계)
검증 대상이 커널 모듈인 경우, 검증 장치는 해당 커널 모듈을 획득할 수 있다. 검증 장치는 바이너리 파일과 구분하여 커널 모듈을 획득하고, 획득된 커널 모듈 목록을 사용자 인터페이스 화면상에 표시할 수 있다.
상술한 바와 같이 본 발명에서 제안하는 라이선스 검증 방법 및 그 장치에 따르면, 오픈소스 라이선스 검증 범위를 확대할 수 있다. 즉, 제품에 탑재된 바이너리 파일에 대한 라이선스를 검증함으로써, 소스코드 확보가 어려운 아웃소싱 바이너리에 대해서도 검증할 수 있다.
또한, 본 발명은 바이너리 파일에 대해 직접 라이선스 검증을 실시함으로써, 소스코드 기반으로 검증하는 방식에 비하여 라이선스 검증의 정확성 및 효율성을 증대시킬 수 있다.
또한, 본 발명은 소스코드 검증 시 투입되는 검증자의 자원 및 시간을 절약할 수 있다.
또한, 본 발명은 소스코드 검증 상용화 도구 도입으로 인한 초기 투지 비용 및 유지보수 비용에 대한 부담을 줄일 수 있다.
상술한 본 발명에 따른 라이선스 검증 방법의 모든 절차가 필수적인 것은 아니어서, 실시 예에 따라 발명의 기술적 특징에 영향을 미치지 않는 범위 내에서 일부 과정이 생략되거나 추가됨으로써 본 발명에 구현될 수 있음은 자명하다.
본 발명에 따른 바이너리 파일의 라이선스 검증 방법은 검증 방법을 실행하기 위한 프로그램을 작성될 수 있고, 작성된 프로그램은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로서 구현될 수 있다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 저장 장치를 포함한다. 컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 코드로서 저장되고 실행될 수 있다.
본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시 예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시 예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
10: 라이선스 검증장치 20: 제어부
22: KDB 생성부 24: HEX-KDB 생성부
26: 파일 획득부 27: 검증 대상 추출부
28: 검증 엔진부 32: 입력부
34: 저장부 36: 표시부

Claims (33)

  1. 바이너리 파일을 획득하는 단계;
    상기 바이너리 파일의 심벌 및 명령어 시퀀스를 추출하는 단계; 및
    검증하고자 하는 라이선스를 기반으로 형성된 데이터베이스를 이용하여 상기 심벌 및 명령어 시퀀스를 순차적으로 검증하는 단계를 포함하는 것을 특징으로 하는, 라이선스 검증방법.
  2. 제1항에 있어서, 상기 바이너리 파일을 획득하는 단계는,
    검증 대상의 타입을 분석하는 단계;
    상기 검증 대상의 타입이 압축 파일 또는 패키지 파일인 경우, 상기 검증 대상을 압축 해제, 언팩(unpack) 또는 디컴파일(decompile)하는 단계; 및
    상기 압축 해제 또는 디컴파일 결과를 기초로, 바이너리 파일을 획득하는 단계를 포함하는 것을 특징으로 하는 라이선스 검증 방법.
  3. 제1항에 있어서, 상기 바이너리 파일의 심벌을 추출하는 단계는,
    상기 바이너리 파일에 포함된 함수의 명칭(function name), 상기 함수의 타입 및 함수 명칭의 길이(length)에 관한 정보 중 적어도 하나를 포함하는 상기 심벌을 추출하는 것을 특징으로 하는, 라이선스 검증 방법.
  4. 제1항에 있어서, 상기 바이너리 파일의 명령어 시퀀스를 추출하는 단계는,
    상기 바이너리 파일의 기계어를 추출하는 단계;
    상기 기계어를 어셈블리화하는 단계; 및
    상기 어셈블리어를 기능별 명령어 시퀀스로 정규화하는 단계를 포함하는, 라이선스 검증 방법.
  5. 제1항에 있어서, 상기 바이너리 파일의 심벌을 검증하는 단계는,
    상기 추출된 바이너리 파일의 심벌과 대응되는 심벌이 상기 데이터베이스에 존재하는지 판단하는 것을 특징으로 하는, 라이선스 검증방법.
  6. 제1항에 있어서, 바이너리 파일의 명령어 시퀀스를 검증하는 단계는,
    상기 추출된 바이너리 파일의 명령어 시퀀스와 대응되는 명령어 시퀀스가 상기 데이터베이스에 존재하는지 판단하는 것을 특징으로 하는, 라이선스 검증방법.
  7. 제1항에 있어서,
    상기 바이너리 파일의 심벌 및 명령어 시퀀스의 검증결과를 기초로 상기 바이너리 파일의 상기 라이선스 대응 여부를 결정하는 단계를 더 포함하는 것을 특징으로 하는, 라이선스 검증 방법.
  8. 바이너리 파일의 라이선스를 검증하는 방법에 있어서,
    오픈소스에 포함된 심벌을 선별하는 단계;
    상기 선별된 심벌을 포함하여 상기 오픈소스에 관한 지식 데이터베이스를 생성하는 단계;
    상기 오픈소스에 포함된 기능별 명령어 시퀀스를 데이터베이스화하여 헥사 지식 데이터베이스를 생성하는 단계;
    검증하고자 하는 상기 바이너리 파일을 획득하는 단계;
    상기 바이너리 파일의 심벌 및 명령어 시퀀스를 추출하는 단계;
    상기 지식 데이터베이스를 기반으로 상기 바이너리 파일의 심벌을 검증하는 단계; 및
    상기 헥사 지식 데이터베이스를 기반으로 상기 바이너리 파일의 명령어 시퀀스를 검증하는 단계를 포함하는 것을 특징으로 하는, 라이선스 검증방법.
  9. 제8항에 있어서, 상기 오픈소스에 포함된 심벌을 선별하는 단계는,
    상기 심벌에 해당하는 함수 기능이 다르나 스펠링이 동일한 중복 심벌(duplicated symbol) 및 리던던트 심벌(redundant symbol)을 제외시키는 단계를 포함하는 것을 특징으로 하는, 라이선스 검증방법.
  10. 제8항에 있어서, 상기 오픈소스에 포함된 심벌을 선별하는 단계는,
    상기 심벌의 고유 지수를 산출하는 단계; 및
    일정지수 이상의 상기 고유 지수에 해당하는 상기 심벌을 추출하는 단계를 포함하는 것을 특징으로 하는, 라이선스 검증방법.
  11. 제10항에 있어서, 상기 고유 지수를 산출하는 단계는,
    상기 심벌의 길이와 비례하고, 상기 오픈소스 내에 포함된 상기 심벌의 중복 횟수와 반비례하는 상기 고유 지수를 산출하는 것을 특징으로 하는, 라이선스 검증방법.
  12. 제8항에 있어서, 상기 지식 데이터베이스를 생성하는 단계는,
    검증하고자 하는 라이선스를 기반으로, 상기 라이선스에 대응하기 위해 프로젝트 네임, 라이선스 타입, 문자열(string literals)과 함수 이름(function name) 및 상기 고유 지수 중 적어도 하나를 포함하여 상기 지식 데이터베이스를 생성하는 것을 특징으로 하는, 라이선스 검증 방법.
  13. 제8항에 있어서, 상기 헥사 지식 데이터베이스를 생성하는 단계는,
    상기 오픈소스의 소스코드를 바이너리로 컴파일하는 단계;
    상기 바이너리를 함수 별 어셈블리어로 추출하는 단계;
    상기 어셈블리어를 명령어 기반으로 정규화하는 단계; 및
    상기 명령어를 함수 별 명령어 시퀀스로 데이터베이스화하는 단계를 포함하는 것을 특징으로 하는, 라이선스 검증방법.
  14. 제8항에 있어서, 상기 바이너리 파일을 획득하는 단계는,
    검증 대상의 타입을 분석하는 단계;
    상기 검증 대상의 타입이 압축 파일 또는 패키지 파일인 경우, 상기 검증 대상을 압축 해제, 언팩(unpack) 또는 디컴파일(decompile)하는 단계; 및
    상기 압축 해제 또는 디컴파일 결과를 기초로, 바이너리 파일을 획득하는 단계를 포함하는 것을 특징으로 하는 라이선스 검증 방법.
  15. 제8항에 있어서, 상기 바이너리 파일의 심벌을 추출하는 단계는,
    상기 바이너리 파일에 포함된 함수의 명칭(function name), 상기 함수의 타입 및 함수 명칭의 길이(length)에 관한 정보 중 적어도 하나를 포함하는 상기 심벌을 추출하는 것을 특징으로 하는, 라이선스 검증 방법.
  16. 제8항에 있어서, 상기 바이너리 파일의 명령어 시퀀스를 추출하는 단계는,
    상기 바이너리 파일의 기계어를 추출하는 단계;
    상기 기계어를 어셈블리화하는 단계; 및
    상기 어셈블리어를 기능별 명령어 시퀀스로 정규화하는 단계를 포함하는, 라이선스 검증 방법.
  17. 제8항에 있어서, 상기 바이너리 파일의 심벌을 검증하는 단계는,
    상기 추출된 바이너리 파일의 심벌과 대응되는 상기 선별된 오픈소스의 심벌이 존재하는지 판단하는 것을 특징으로 하는, 라이선스 검증방법.
  18. 제1항에 있어서, 상기 바이너리 파일의 명령어 시퀀스를 검증하는 단계는,
    상기 추출된 바이너리 파일의 명령어 시퀀스와 대응되는 상기 데이터베이스화된 오픈소스의 명령어 시퀀스가 존재하는지 판단하는 것을 특징으로 하는, 라이선스 검증 방법.
  19. 제1항에 있어서,
    상기 바이너리 파일의 심볼 및 명령어 시퀀스의 검증결과를 기초로 상기 바이너리 파일의 상기 라이선스 대응 여부를 결정하는 단계를 더 포함하는 것을 특징으로 하는, 라이선스 검증 방법.
  20. 제1항에 있어서,
    상기 획득된 바이너리 파일 정보, 상기 추출된 검색 대상 문자열 정보, 검증 진행 상황, 검증 결과 중 적어도 하나를 표시하는 단계를 더 포함하는 것을 특징으로 하는 라이선스 검증 방법.
  21. 라이선스 검증 요청을 입력받는 입력부; 및
    상기 라이선스 검증 요청에 따라 바이너리 파일을 획득하고, 상기 바이너리 파일로부터 검증 대상인 심벌 및 명령어 시퀀스를 추출하고, 검증하고자 하는 라이선스를 기반으로 미리 형성된 데이터베이스를 이용하여 상기 심벌 및 명령어 시퀀스를 검증하는 제어부를 포함하는 것을 특징으로 하는 라이선스 검증 장치.
  22. 제21항에 있어서, 상기 제어부는,
    검증 대상의 타입을 분석하고, 상기 검증 대상의 타입이 압축 파일 또는 패키지 파일인 경우, 상기 검증 대상을 압축 해제, 언팩(unpack) 또는 디컴파일(decompile)하고, 상기 압축 해제, 언팩(unpack) 또는 디컴파일 결과를 기초로, 상기 바이너리 파일을 획득하는 것을 특징으로 하는 라이선스 검증 장치.
  23. 제21항에 있어서, 상기 제어부는,
    상기 바이너리 파일에 포함된 함수의 명칭(function name), 상기 함수의 타입 및 함수 명칭의 길이(length) 중 적어도 하나의 정보를 추출하는 것을 특징으로 하는, 라이선스 검증 장치.
  24. 제21항에 있어서,
    상기 데이터베이스를 저장하는 저장부를 더 포함하고, 상기 데이터 베이스는 지식 데이터베이스 및 헥사 지식 데이터베이스를 포함하는 것을 특징으로 하는, 라이선스 검증 장치.
  25. 제24항에 있어서, 상기 지식 데이터베이스는,
    검증하고자 하는 라이선스를 기반으로, 상기 라이선스에 대응하기 위해 프로젝트 네임, 라이선스 타입, 문자열(string literals)과 함수 이름(function name)을 구성으로 하는 심벌 중 적어도 하나를 포함하는 것을 특징으로 하는, 라이선스 검증 장치.
  26. 제25항에 있어서, 상기 제어부는,
    상기 추출된 심벌과 대응되는 심벌이 상기 지식 데이터베이스에 존재하는지 판단하는 것을 특징으로 하는, 라이선스 검증 장치.
  27. 제24항에 있어서, 상기 헥사 지식 데이터베이스는,
    검증하고자 하는 라이선스를 기반으로, 상기 라이선스에 대응하기 위해 데이터베이스화된 명령어 시퀀스를 포함하는 것을 특징으로 하는, 라이선스 검증 장치.
  28. 제27항에 있어서, 상기 제어부는,
    상기 추출된 명령어 시퀀스와 대응되는 명렁어 시퀀스가 상기 헥사 지식 데이터베이스에 존재하는지 판단하는 것을 특징으로 하는, 라이선스 검증 장치.
  29. 제21항에 있어서, 상기 제어부는,
    상기 심벌 및 명령어 시퀀스 검증 결과를 기초로, 상기 바이너리 파일의 상기 라이선스 대응 여부를 결정하는 것을 특징으로 하는, 라이선스 검증 장치.
  30. 제21항에 있어서,
    상기 데이터베이스를 저장하는 저장부를 더 포함하고, 상기 데이터 베이스는 지식 데이터베이스 및 헥사 지식 데이터베이스를 포함하는 것을 특징으로 하는, 라이선스 검증 장치.
  31. 제21항에 있어서,
    정보를 표시하는 표시부를 더 포함하고,
    상기 제어부는,
    상기 획득된 바이너리 파일 정보, 상기 추출된 검색 대상 문자열 정보, 검증 진행 상황, 검증 결과 중 적어도 하나를 표시하도록 상기 표시부를 제어하는 것을 특징으로 하는 라이선스 검증 장치.
  32. 바이너리 파일의 라이선스를 검증하는 라이선스 검증장치에 있어서,
    고유 지수로 선별된 오픈소스의 심벌을 포함하는 지식 데이터베이스 생성부;
    상기 오픈소스의 함수별 명령어 시퀀스를 데이터베이스화하는 헥사 지식 데이터베이스 생성부; 및
    상기 바이너리 파일의 심벌 및 명령어 시퀀스를 추출하고, 상기 지식 데이터베이스 생성부 및 헥사 지식 데이터베이스 생성부로부터 각각 생성된 심볼 및 함수별 명령어 시퀀스와 비교하여, 상기 바이너리 파일의 라이선스를 검증하는 라이선스 검증 엔진부를 포함하는 것을 특징으로 하는, 라이선스 검증장치.
  33. 제32항에 있어서, 상기 지식 데이터베이스 생성부는,
    상기 오픈소스의 심벌에 해당하는 함수 기능이 다르나 스펠링이 동일한 중복 심벌(duplicated symbol) 및 리던던트 심벌(redundant symbol)을 제외한 나머지 심벌을 포함하는 것을 특징으로 하는, 라이선스 검증방법.
KR1020120116578A 2012-10-19 2012-10-19 라이선스 검증 방법 및 그 장치 KR20140050323A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020120116578A KR20140050323A (ko) 2012-10-19 2012-10-19 라이선스 검증 방법 및 그 장치
EP13188990.9A EP2722783A3 (en) 2012-10-19 2013-10-16 License verification method and apparatus
US14/058,828 US20140115720A1 (en) 2012-10-19 2013-10-21 License verification method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120116578A KR20140050323A (ko) 2012-10-19 2012-10-19 라이선스 검증 방법 및 그 장치

Publications (1)

Publication Number Publication Date
KR20140050323A true KR20140050323A (ko) 2014-04-29

Family

ID=49447969

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120116578A KR20140050323A (ko) 2012-10-19 2012-10-19 라이선스 검증 방법 및 그 장치

Country Status (3)

Country Link
US (1) US20140115720A1 (ko)
EP (1) EP2722783A3 (ko)
KR (1) KR20140050323A (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018008810A1 (ko) * 2016-07-05 2018-01-11 엘에스웨어(주) 특징점 기반의 오픈소스 라이선스 간 충돌 검사 방법
KR20180039387A (ko) * 2016-10-10 2018-04-18 현대오트론 주식회사 리프로그래밍 장치, 전자제어유닛 및 이를 이용한 리프로그래밍 방법
KR20190031030A (ko) * 2017-09-15 2019-03-25 주식회사 인사이너리 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
WO2019135425A1 (ko) * 2018-01-04 2019-07-11 라인플러스 주식회사 오픈소스 소프트웨어의 라이선스를 검증하는 방법 및 시스템

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10552701B2 (en) * 2008-02-01 2020-02-04 Oath Inc. System and method for detecting the source of media content with application to business rules
CN106934254B (zh) 2017-02-15 2020-05-26 ***股份有限公司 一种开源许可证的分析方法及装置
CN110515420B (zh) * 2018-05-22 2022-10-25 鸿富锦精密工业(深圳)有限公司 可折叠电子装置及文件解压缩方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2703800B1 (fr) * 1993-04-06 1995-05-24 Bull Cp8 Procédé de signature d'un fichier informatique, et dispositif pour la mise en Óoeuvre.
US6029145A (en) * 1997-01-06 2000-02-22 Isogon Corporation Software license verification process and apparatus
US6857067B2 (en) * 2000-09-01 2005-02-15 Martin S. Edelman System and method for preventing unauthorized access to electronic data
US7062650B2 (en) * 2001-09-28 2006-06-13 Intel Corporation System and method for verifying integrity of system with multiple components
US7130886B2 (en) * 2002-03-06 2006-10-31 Research In Motion Limited System and method for providing secure message signature status and trust status indication
US20060116966A1 (en) * 2003-12-04 2006-06-01 Pedersen Palle M Methods and systems for verifying protectable content
US8001596B2 (en) * 2007-05-03 2011-08-16 Microsoft Corporation Software protection injection at load time
US20090313700A1 (en) * 2008-06-11 2009-12-17 Jefferson Horne Method and system for generating malware definitions using a comparison of normalized assembly code
US8732838B2 (en) * 2008-06-26 2014-05-20 Microsoft Corporation Evaluating the effectiveness of a threat model
US8479161B2 (en) * 2009-03-18 2013-07-02 Oracle International Corporation System and method for performing software due diligence using a binary scan engine and parallel pattern matching
US9721240B2 (en) * 2010-05-27 2017-08-01 International Business Machines Corporation Software license serving in a massively parallel processing environment
US8589306B1 (en) * 2011-11-21 2013-11-19 Forst Brown Todd LLC Open source license management

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018008810A1 (ko) * 2016-07-05 2018-01-11 엘에스웨어(주) 특징점 기반의 오픈소스 라이선스 간 충돌 검사 방법
KR20180039387A (ko) * 2016-10-10 2018-04-18 현대오트론 주식회사 리프로그래밍 장치, 전자제어유닛 및 이를 이용한 리프로그래밍 방법
KR20190031030A (ko) * 2017-09-15 2019-03-25 주식회사 인사이너리 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
US10642965B2 (en) 2017-09-15 2020-05-05 Insignary Inc. Method and system for identifying open-source software package based on binary files
WO2019135425A1 (ko) * 2018-01-04 2019-07-11 라인플러스 주식회사 오픈소스 소프트웨어의 라이선스를 검증하는 방법 및 시스템

Also Published As

Publication number Publication date
US20140115720A1 (en) 2014-04-24
EP2722783A3 (en) 2017-05-10
EP2722783A2 (en) 2014-04-23

Similar Documents

Publication Publication Date Title
Candea et al. Automated software testing as a service
US7493596B2 (en) Method, system and program product for determining java software code plagiarism and infringement
US8850581B2 (en) Identification of malware detection signature candidate code
US9262132B1 (en) Incremental local source code analysis
KR20140050323A (ko) 라이선스 검증 방법 및 그 장치
Krogmann et al. Using genetic search for reverse engineering of parametric behavior models for performance prediction
CN107526625B (zh) 一种基于字节码检查的Java智能合约安全检测方法
CN108228861B (zh) 用于执行机器学习的特征工程的方法及***
KR101999656B1 (ko) 라이선스 검증 방법, 그 장치 및 이를 실행하기 위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록 매체
US9632754B2 (en) Auto generation and linkage of source code to test cases
EP3147783B1 (en) Automatic determination of compiler configuration
CN111459495B (zh) 单元测试代码文件生成方法、电子装置及存储介质
US20050125776A1 (en) Determining the possibility of adverse effects arising from a code change
EP4006732A1 (en) Methods and apparatus for self-supervised software defect detection
CN111507086A (zh) 本地化应用程序中翻译文本位置的自动发现
KR20190031030A (ko) 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
CN108089870B (zh) 用于修复应用的方法和装置
Thung et al. Recommending code changes for automatic backporting of Linux device drivers
CN112099802B (zh) 应用程序的组件识别方法及装置
EP3147781A1 (en) Wrapper calls identification
CN114416481A (zh) 日志分析方法、装置、设备及存储介质
Brada et al. Practical verification of component substitutability using subtype relation
US7647581B2 (en) Evaluating java objects across different virtual machine vendors
CN116775034A (zh) 内核观测程序的构建方法、装置及设备
CN117009972A (zh) 漏洞检测方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E601 Decision to refuse application