KR101583133B1 - 스택 기반 소프트웨어 유사도 평가 방법 및 장치 - Google Patents

스택 기반 소프트웨어 유사도 평가 방법 및 장치 Download PDF

Info

Publication number
KR101583133B1
KR101583133B1 KR1020140035139A KR20140035139A KR101583133B1 KR 101583133 B1 KR101583133 B1 KR 101583133B1 KR 1020140035139 A KR1020140035139 A KR 1020140035139A KR 20140035139 A KR20140035139 A KR 20140035139A KR 101583133 B1 KR101583133 B1 KR 101583133B1
Authority
KR
South Korea
Prior art keywords
software
stack
function
similarity
usage information
Prior art date
Application number
KR1020140035139A
Other languages
English (en)
Other versions
KR20150111610A (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 KR1020140035139A priority Critical patent/KR101583133B1/ko
Publication of KR20150111610A publication Critical patent/KR20150111610A/ko
Application granted granted Critical
Publication of KR101583133B1 publication Critical patent/KR101583133B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

스택 사용 정보에 기반한 소프트웨어 유사도 평가 방법 및 장치가 개시된다. 소프트웨어 유사도 평가 방법은, 소프트웨어의 코드에서 함수 호출 명령어를 추적하여 소프트웨어에서 호출되는 함수를 검출하는 단계와, 검출된 함수가 사용하는 스택의 크기를 산출하고, 스택의 크기에 기반하여 스택 사용 정보를 생성하는 단계와, 스택 사용 정보에 기반하여 복수의 소프트웨어 간의 유사도를 판단하는 단계를 포함하여 구성될 수 있다. 소프트웨어 유사도 평가 장치는, 소프트웨어의 코드에서 함수 호출 명령어를 추적하여 상기 소프트웨어에서 호출되는 함수를 검출하는 함수 검출부와, 함수 검출부가 검출한 함수가 사용하는 스택의 크기를 산출하고, 스택의 크기에 기반하여 스택 사용 정보를 생성하는 스택 사용 정보 생성부와, 스택 사용 정보 생성부가 생성한 스택 사용 정보에 기반하여 복수의 소프트웨어 간의 유사도를 판단하는 유사도 판단부를 포함하여 구성될 수 있다.

Description

스택 기반 소프트웨어 유사도 평가 방법 및 장치{METHOD FOR EVALUATING SOFTWARE SIMILARITY USING STACK AND APPARATUS THEREFOR}
본 발명은 소프트웨어의 유사도 평가에 관한 것으로, 더욱 자세하게는 소프트웨어의 코드로부터 스택 사용 정보를 생성하여 비교하는 방법으로 복수의 소프트웨어에 대한 유사도를 평가하는 기술에 관한 것이다.
이를 위하여 소프트웨어 코드(code)의 함수 호출(function call)을 동적으로 혹은 정적으로 분석하는 기술이 요구된다.
소스 코드(source code) 또는 원시 코드란 컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 글을 말한다. 한 개, 또는 여러 개의 텍스트 파일로 구성되어 있다. 현대 소프트웨어 개발에서 기계어는 극히 일부 영역에서만 쓰이며, 대부분 고급 언어로 된 소스 코드를 컴파일(compile)하여 개발한다. 소스 코드는 주로 실행 프로그램을 만드는 과정을 입력하는 데 이용된다. 이를테면 컴파일이나 해석 과정이 그것이다. 또, 사람들 사이에 알고리즘을 주고 받는 방식으로 이용되기도 한다.
한편 컴퓨터가 인식할 수 있는 0과 1만을 사용하여 표현하는 것을 이진 코드(바이너리 코드)라고 하며, 컴퓨터 내부적으로 이용하는 코드이다. 예를 들면, 파일 전송 프로토콜(FTP, File Transfer Protocol)를 사용하다 보면 다운로드 할 때 모드가 두 가지 있다. 아스키(ascii) 모드와 바이너리 모드가 그것이다. 아스키 모드는 일반 텍스트 파일을 위한 것이고, 바이너리 모드는 실행 파일과 같이 텍스트 이외의 파일을 위한 것이라고 이해할 수 있다.
일반적인 코드 분석은 소스 코드 분석을 의미하나, 소스 코드는 일반적으로 공개되어 있지 않고 기계어로 컴파일 된 바이너리 형태의 실행 파일만이 접근 가능한 경우가 많으므로 코드 분석의 요구는 바이너리 코드를 분석함에 이르렀다.
이러한 코드 분석이 필요한 분야로서 소프트웨어 불법 복제 탐지, 바이러스 및 멀웨어(malware) 탐지, 소프트웨어 리팩토링(refactoring) 분야를 들 수 있다. 코드의 분석 방법 중 하나로서 복수의 소프트웨어에 대한 유사도 평가가 있다. 소프트웨어 유사도 평가가 활용되는 위 예를 구체적으로 살펴보면 다음과 같다.
첫 번째 분야는 소프트웨어 불법 복제 탐지 기술이다. 최근 컴퓨터의 사용 범위가 확대되면서 다양한 소프트웨어가 개발되고 있으며, 일부 개발자들은 다른 사람이 개발한 소프트웨어를 불법적으로 도용하기도 한다. 이러한 소프트웨어 저작권 위반을 탐지하기 위해서는 유사도를 비교할 수 있어야 한다.
두 번째 분야는 바이러스 탐지 분야이다. 최근 다양한 바이러스들이 등장하고 있으며, 이 중에서 대부분이 기존에 존재하던 바이러스를 변형한 것이다. 따라서 기존 바이러스들의 특성을 데이터베이스화하고 이들과 유사한 프로그램이 발견되면, 이것을 바이러스일 가능성이 높은 후보로 탐지할 수 있다.
세 번째 분야는 소프트웨어 리팩토링이다. 소프트웨어가 커짐에 따라, 유사한 코드가 한 소프트웨어에 중복되어 존재하는 경우가 많아지고 있다. 하지만 이러한 중복은 메모리를 비효율적으로 사용하게 만들 뿐만 아니라, 일관적이지 않은 업그레이드에 인한 버그 가능성을 증가시키게 된다. 이 문제는 소프트웨어에서 유사한 중복 부분을 발견하고, 이를 제거하여 해결할 수 있다.
소프트웨어 유사도를 평가하는 종래 기술로 다양한 방법들이 제안되었다. 예를 들어 소프트웨어에 나타나는 토큰(token)들을 기반으로 유사도를 평가한다. 이때 토큰이란 프로그램 키워드, 변수/함수 이름, 주석 등으로 정의된다. 예를 들어 두 소프트웨어가 유사한 변수 이름을 많이 사용하면 더 유사하다고 평가하는 것이다. 또 다른 방법은 소프트웨어 제어 흐름을 추상 구문 트리(abstract syntax tree)로 생성하고, 이 트리가 얼마나 비슷한가를 기반으로 소프트웨어 유사도를 평가하였다.
한편 한 연구에서는 제어 흐름과 데이터 흐름을 의존 그래프(dependence graph)로 표현하고, 이를 기반으로 소프트웨어 유사도를 평가하였다. 이러한 방법들은 프로그램의 구문(syntax)을 이용하여 유사도를 평가한다는 특징을 갖는다.
소프트웨어가 수행될 때 메모리의 변화를 기반으로 유사도를 평가하는 연구도 진행되었다. 소프트웨어가 수행되는 과정에서 메모리에 저장된 값의 변화를 추적하고, 이러한 변화 패턴을 기반으로 유사도를 평가한다.
또 다른 연구에서는 메모리 값들의 변화를 메모리 문맥(memory context)으로 추상화시키고, 이를 기반으로 유사도를 평가한다. 이러한 방법들은 구문이 아닌 소프트웨어의 의미(semantic)를 이용하여 유사도를 평가한다.
본 발명의 목적은 소프트웨어 수행 중에 사용하는 스택(stack)의 변화 패턴을 모니터링하고, 이를 기반으로 소프트웨어의 유사도를 감정하는 방법 및 장치를 제공하는 데 있다.
또한 위와 같이 동적으로 소프트웨어 유사도를 감정하는 것 외에 소프트웨어 코드 자체를 분석하는 정적인 방법으로 소프트웨어의 유사도를 감정하는 방법 및 장치를 제공하는 것도 본 발명의 목적에 포함된다.
상술한 본 발명의 목적을 달성하기 위한 일 측면에 따른 소프트웨어 유사도 평가 방법은, 소프트웨어(software)의 유사도(similarity)를 평가하는 장치가 수행하는 방법에 있어서, 소프트웨어의 코드(code)에서 함수 호출(function call) 명령어를 추적(trace)하여 소프트웨어에서 호출되는 함수를 검출하는 단계와, 검출된 함수가 사용하는 스택(stack)의 크기를 산출하고, 스택의 크기의 변화 패턴에 기반하여 스택 사용 정보를 생성하는 단계와, 스택 사용 정보에 기반하여 복수의 소프트웨어 간의 유사도를 판단하는 단계를 포함하여 구성될 수 있다.
여기에서, 상기 소프트웨어 유사도 평가 방법은, 함수를 검출하는 단계 이후에, 검출된 함수에 기반하여 함수 호출 그래프(graph)를 생성하는 단계를 더 포함하여 구성될 수 있다. 나아가 상기 스택 사용 정보를 생성하는 단계는, 함수 호출 그래프로부터 검출된 함수가 사용하는 스택의 크기를 산출할 수 있다.
여기에서, 상기 스택 사용 정보를 생성하는 단계는, 검출된 함수의 인자(arguments) 또는 지역 변수(local variables)에 기반하여 검출된 함수가 사용하는 스택(stack)의 크기를 산출할 수 있다.
여기에서, 상기 유사도를 판단하는 단계는, 복수의 소프트웨어에 대한 스택 사용 정보 간의 자카드 계수(Jaccard coefficient), 유클리드 거리(Euclid distance) 및 가장 긴 공통 부문자열(LCS, Longest Common Subsequence) 중 적어도 하나의 계산값이 소정의 조건을 충족시키는지 여부를 판단하는 것일 수 있다.
여기에서, 상기 코드는, 소스(source) 코드 및 바이너리(binary) 코드 중 적어도 하나의 형태일 수 있다.
여기에서, 상기 함수를 검출하는 단계는, 소프트웨어를 실행시 변화되는 메모리 덤프(memory dump)로부터 함수를 검출하는 제1 검출방법을 수행하거나, 소프트웨어의 코드를 구문(syntax) 분석하여 함수를 검출하는 제2 검출방법을 수행할 수 있다. 나아가 상기 제1 검출방법은, 함수가 호출되는 빈도에 기반하여 함수를 선택적으로 검출할 수 있다.
여기에서, 상기 스택 사용 정보는, 검출된 함수가 호출될 때의 스택 증가량 정보 또는 검출된 함수가 리턴될 때의 스택 감소량 정보를 포함할 수 있다. 나아가 상기 소프트웨어 유사도 평가 방법은, 스택 사용 정보를 생성하는 단계 이후에, 스택 증가량 정보 또는 스택 감소량 정보에 기반하여 검출된 함수의 스택 사용량을 산출하는 단계를 더 포함하여 구성될 수 있다.
상술한 본 발명의 목적을 달성하기 위한 일 측면에 따른 소프트웨어 유사도 평가 장치는, 소프트웨어(software)의 유사도(similarity)를 평가하는 장치에 있어서, 소프트웨어의 코드(code)에서 함수 호출(function call) 명령어를 추적(trace)하여 소프트웨어에서 호출되는 함수를 검출하는 함수 검출부와, 함수 검출부가 검출한 함수가 사용하는 스택(stack)의 크기를 산출하고, 스택의 크기의 변화 패턴에 기반하여 스택 사용 정보를 생성하는 스택 사용 정보 생성부와, 스택 사용 정보 생성부가 생성한 스택 사용 정보에 기반하여 복수의 소프트웨어 간의 유사도를 판단하는 유사도 판단부를 포함하여 구성될 수 있다.
여기에서, 소프트웨어 유사도 평가 장치는, 검출한 함수에 기반하여 함수 호출 그래프(graph)를 생성하는 함수 호출 그래프 생성부를 더 포함하여 구성될 수 있다. 나아가 상기 스택 사용 정보 생성부는, 함수 호출 그래프로부터 검출한 함수가 사용하는 스택의 크기를 산출할 수 있다.
여기에서, 상기 스택 사용 정보 생성부는, 검출한 함수의 인자(arguments) 또는 지역 변수(local variables)에 기반하여 검출한 함수가 사용하는 스택(stack)의 크기를 산출할 수 있다.
여기에서, 상기 유사도 판단부는, 복수의 소프트웨어에 대한 스택 사용 정보 간의 자카드 계수(Jaccard coefficient), 유클리드 거리(Euclid distance) 및 가장 긴 공통 부문자열(LCS, Longest Common Subsequence) 중 적어도 하나의 계산값이 소정의 조건을 충족시키는지 여부를 판단할 수 있다.
여기에서, 상기 코드는, 소스(source) 코드 및 바이너리(binary) 코드 중 적어도 하나의 형태일 수 있다.
여기에서, 상기 함수 검출부는, 소프트웨어를 실행시 변화되는 메모리 덤프(memory dump)로부터 함수를 검출하는 제1 검출방법을 수행하거나, 소프트웨어의 코드를 구문(syntax) 분석하여 함수를 검출하는 제2 검출방법을 수행할 수 있다. 나아가 상기 제1 검출방법은, 함수가 호출되는 빈도에 기반하여 함수를 선택적으로 검출할 수 있다.
여기에서, 상기 스택 사용 정보는, 검출한 함수가 호출될 때의 스택 증가량 정보 또는 검출한 함수가 리턴될 때의 스택 감소량 정보를 포함할 수 있다. 나아가 상기 소프트웨어 유사도 평가 장치는, 스택 증가량 정보 또는 스택 감소량 정보에 기반하여 검출된 함수의 스택 사용량을 산출하는 스택 사용량 산출부를 더 포함하여 구성될 수 있다.
본 발명은 소프트웨어의 불법 사용 방지, 저작권 보호, 바이러스 및 Malware 분류 및 탐지, 소프트웨어 리팩토링 등의 분야에 효과적으로 활용될 수 있다.
또한 소프트웨어의 전체 코드를 분석하지 않고 스택의 사용량을 분석하여 소프트웨어 유사도를 판단하므로 분석에 필요한 하드웨어 리소스 및 시간을 절약할 수 있다는 장점이 있다.
소프트웨어의 함수 호출을 추적함으로써의 장점은 소프트웨어의 실행 시뿐만 아니라 비실행 시에도 유사도 판단이 가능하다는 데 있다. 즉, 동적 분석과 정적 분석이 모두 가능하고 동적 분석의 경우에는 자주 호출되는 함수를 집중적으로 분석할 수 있다는 장점이 있고, 정적 분석의 경우에는 소프트웨어 코드의 확장 분석이 가능하다는 장점이 있다.
도 1은 본 발명의 일 실시예에 따른 소프트웨어 유사도 평가 방법의 전체 구조를 개략적으로 설명하기 위한 개념도이다.
도 2는 본 발명의 일 실시예에 따른 소프트웨어 유사도 평가 방법과 그 세부 단계를 설명하기 위한 흐름도이다.
도 3은 본 발명의 일 실시예에 따른 소프트웨어 유사도 평가 방법을 사용하여 SQLite라는 소프트웨어 바이너리 코드에서 각 버전별 스택 사용 패턴을 분석한 예시도이다.
도 4는 본 발명의 일 실시예에 따른 소프트웨어 유사도 평가 방법을 사용하여 Tree라는 소프트웨어 바이너리 코드에서 각 버전별 스택 사용 패턴을 분석한 예시도이다.
도 5는 본 발명의 일 실시예에 따른 도 3과 도 4의 스택 사용 패턴을 기반으로 각 소프트웨어의 유사도를 정량적으로 평가한 예시도이다.
도 6은 본 발명의 일 실시예에 따른 소프트웨어 유사도 평가 장치와 그 세부 구성요소를 설명하기 위한 블록도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
먼저, 본 출원에서 사용되는 용어를 간략히 설명하면 다음과 같다.
코드는 기호의 계열을 다른 기호 계열로 표현할 때의 약속, 또는 그 기호 계열을 말한다. 전신에서는 한글 문자를 전기의 음양 또는 단속 등의 전기신호로 바꾸어 보내는데, 그 때의 한글 문자와 전기신호의 대응, 또는 전기신호의 음양을 나타내는 기호계열을 코드라고 한다. 데이터 통신이 많이 이용되면서부터 0과 1로 나타내는 2종의 기호를 사용한 이진 코드(binary code)가 고안되어 실용화되었다.
한편 소스 코드는 원시 코드라고도 하며 시스템 소프트웨어(OS, Operating System)나 응용 소프트웨어 등 컴퓨터 소프트웨어를 개발하는 경우에 그 동작의 모든 것을 기록해 놓은 것이다. 보통 인간이 읽고 쓸 수 있는 텍스트파일의 형식으로 보존된다. 소스 코드에서 사용되는 언어는 인간은 그 의미를 알 수 있지만, 컴퓨터는 이해할 수 없다. 따라서 원시코드에서 사용된 언어를 기계언어로 번역해서 컴퓨터가 이해할 수 있는 형식으로 변환한 것이 OS나 응용 프로그램으로서 배포된다.
인자(arguments)란 함수나 서브루틴, 명령(command)을 사용할 때 주어지는 변수로, 인수라고도 한다. 인자란 배열(array) 중의 특정 항목의 기억 위치(location)를 식별하는 데 필요한 변수나 상수 또는 그들의 조합을 말한다. 이런 의미로는 탐색 키(search key)라고도 할 수 있다. 주 프로그램과 서브루틴 사이에서 값을 넘겨 주는 변수나 상수 또는 그들의 집합이며 매개변수(parameter)라고도 한다. 가인수(formal argument)는 서브루틴을 정의하기 위하여 사용하는 경우를 말하며, 실인수(actual argument)는 그것을 호출할 때 지정하는 경우를 말한다. 일반적으로 소스 코드 내에서 그 형식을 선언(declaration)하여 사용된다.
지역 변수란 프로그램 언어에 있어서 변수가 어떤 블록(block) 내에서만 선언될 때에는 다른 블록에서 그것을 사용하는 것은 불가능하며, 프로그램 내 전체에 걸쳐 사용할 수 없다. 이것은 그 변수가 지역적인 것이며, 프로그램 전체에 대하여 정의되어 있지 않기 때문이다. 이러한 변수를 「지역 변수」라 한다. 이와는 달리 메인 프로그램(main program)으로도 서브프로그램으로도 액세스(access)하는 것이 가능한 이름을 갖는 변수를 전역 변수(global variables)라고 한다.
자카드 계수란 수치 분류학에서 사용되는 연관 계수를 말한다. 두 종류의 개체가 가지고 있지 않은 것을 제외하고, 동일한 특성이 많을수록 자카드 계수는 증가한다.
유클리드 거리(Euclidean distance)는 두 점 사이의 거리를 계산할 때 흔히 쓰는 방법이다. 이 거리를 사용하여 유클리드 공간을 정의할 수 있다. 만약 두 점이 0과 1의 이진 부호로만 표현되는 숫자 코드라면 유클리드 거리의 제곱이 해밍 거리(Hamming distance)가 된다.
LCS(Longest Common Subsequence)는 주어진 두 개의 문자열에서 공통된 가장 긴 문자열을 말한다.
스택은 모든 원소들의 삽입(insert)과 삭제(delete)가 리스트의 한쪽 끝에서만 수행되는 제한 조건을 가지는 선형 자료 구조(linear data structure)로서, 삽입과 삭제가 일어나는 리스트의 끝을 top이라 하고, 다른 한쪽 끝을 bottom이라 한다. 스택은 종종 pushdown stack이라고도 하는데, 스택의 top에 새로운 원소를 삽입하는 것을 push라 하고, 가장 최근에 삽입된 원소를 의미하는 스택의 top으로부터 한 원소를 제거하는 것을 pop이라 한다. 이와 같은 스택 연산은 항상 스택의 top에서 발생하므로 top 포인터의 값을 1씩 증가 또는 감소시킴으로써 수행된다. 스택은 코어 메모리의 물리적 단위이기도 하다. 데이터 저장시 후입선출법(LIFO, Last In First Out)에 의해 기억 장치 내에 저장하기 위해 미리 약정된 영역을 후입선출 스택이라고 부른다.
리스트의 한쪽 끝에서만 삽입과 삭제가 일어나는 스택과는 달리 리스트의 한쪽 끝에서는 원소들이 삭제되고 반대쪽 끝에서는 원소들의 삽입만 가능하게 만든 순서화된 리스트를 큐(queue)라고 한다. 가장 먼저 리스트에 삽입된 원소가 가장 먼저 삭제되므로 선입선출 (FIFO, First In First Out) 리스트라고도 한다.
이하 본 발명의 바람직한 실시예를 도면을 참조하여 상세히 설명한다. 제안기술은 소프트웨어 유사도를 평가할 때 스택의 변화를 이용한다.
도 1은 본 발명의 일 실시예에 따른 소프트웨어 유사도 평가 방법의 전체 구조를 개략적으로 설명하기 위한 개념도이다. 도 1을 참조하여 소프트웨어 유사도 평가 과정을 개략적으로 살펴보면 다음과 같다.
스택은 소프트웨어 수행 중에 함수를 호출할 때 인자(argument)와 지연 변수(local variable)를 저장하는 메모리 공간으로, 구조적 프로그래밍(structured programming)을 사용하는 C, C++, JAVA 등 대부분 프로그래밍 언어에서 사용될 수 있다. 스택의 변화 패턴은 결국 특정 소프트웨어가 사용하는 함수들의 종류와 함수들의 사용 방법을 유추할 수 있게 해주며, 이를 통해 그 소프트웨어와 다른 소프트웨어 간에 유사도를 평가할 수 있다.
본 발명에서 제안하는 방법은 소프트웨어 수행 중에 동적으로 함수 호출 그래프(function call graph)를 추출하는 과정, 함수 호출 그래프에서 스택 사용 패턴(stack usage pattern)을 분석하는 과정, 스택 사용 패턴을 기반으로 유사도를 평가(similarity evaluation)하는 과정으로 구성될 수 있다. 이 기술은 소프트웨어 불법 복제 방지, 바이러스 및 Malware 분류 및 탐지, 그리고 소프트웨어 리팩터링(refactoring) 등에 효과적으로 활용될 수 있다.
제안기술은 함수 호출 그래프 생성기, 스택 사용 패턴 분석기, 유사도 비교 측정기 등의 요소(component)로 구성될 수 있다. 함수 호출 그래프 생성기는 입력받은 소프트웨어 바이너리에서 함수 호출 그래프를 생성할 수 있다. 함수 호출 그래프는 바이너리에서 사용하는 call, return 등의 명령어를 추적하면 생성 가능하다. 스택 사용 패턴 분석기는 호출 그래프에서 각 함수들이 수행될 때 사용하는 스택의 크기를 분석할 수 있다. 스택의 크기는 함수에서 사용하는 인자(arguments)와 지역 변수(local variables)의 유형과 개수를 조사하면 계산 가능하다. 유사도 비교 측정기는 두 개의 소프트웨어에서 분석된 스택 사용 패턴을 비교하여 유사도를 정량적으로 평가할 수 있다. 이때 스택 크기 변화값들을 기반으로 LCS(Longest Common Subsequence), 자카드 계수(Jaccard coefficient), 또는 유클리드 거리(Euclid Distance)를 사용할 수 있다.
제안기술이 종래기술에 비해 제공하는 장점은 다음과 같다. 첫째, 제안기술은 소프트웨어의 소스 코드 없이 바이너리만으로 유사도 분석이 가능하다. 소프트웨어 표절 분쟁에서 어느 정도 증거가 나오기 전 까지는 분쟁 당사자들이 소스 코드를 보여주기를 꺼려한다. 따라서 소스코드 없이 바이너리만으로 유사도를 비교할 필요가 있는데, 본 발명은 이러한 요구를 만족한다. 둘째, 바이너리의 전체 구문(syntax) 또는 변화되는 메모리 내용을 모두 분석하는 것이 아니라 스택의 변화만 분석하기 때문에, 유사도 비교 시간이 빠르다. 셋째, 제안기술은 정적(static)인 분석뿐만 아니라 동적(dynamic)인 분석도 가능하다. 즉, 바이너리 자체를 분석하면서 유사도를 비교할 수 있을 뿐만 아니라 바이너리를 컴퓨터나 PIN 등의 에뮬레이터에서 실제 수행하면서 유사도를 비교할 수도 있다. 결국 정적 분석의 장점인 분석 범위(coverage) 확장과 동적 분석의 장점인 많이 사용하는 부분에 대한 집중적인 분석을 동시에 얻을 수 있다. 넷째, 스택 사용 패턴을 통해 소프트웨어 유사도를 시각적(visual)하게 표현할 수 있다.
도 2는 본 발명의 일 실시예에 따른 소프트웨어 유사도 평가 방법과 그 세부 단계를 설명하기 위한 흐름도이다. 도 3과 도 4는 소프트웨어 유사도 평가 방법을 사용하여 SQLite 및 Tree라는 소프트웨어 바이너리 코드에서 각 버전별 스택 사용 패턴을 분석한 각 예시도이다. 도 5는 도 3과 도 4의 스택 사용 패턴을 기반으로 각 소프트웨어의 유사도를 정량적으로 평가한 예시도이다. 도 2 내지 도 5를 참조하여 소프트웨어 평가 방법을 살펴보면 다음과 같다.
소프트웨어 유사도 평가 방법은, 소프트웨어(software)의 유사도(similarity)를 평가하는 장치가 수행하는 방법에 있어서, 소프트웨어의 코드(code)에서 함수 호출(function call) 명령어를 추적(trace)하여(S210) 소프트웨어에서 호출되는 함수를 검출하는 단계(S220)와, 검출된 함수가 사용하는 스택(stack)의 크기를 산출하고(S240), 스택의 크기에 기반하여 스택 사용 정보를 생성하는 단계(S250)와, 스택 사용 정보에 기반하여 복수의 소프트웨어 간의 유사도를 판단하는 단계(S270)를 포함하여 구성될 수 있다.
소프트웨어 유사도 평가 방법은, 함수를 검출하는 단계(S220) 이후에, 검출된 함수에 기반하여 함수 호출 그래프(graph)를 생성하는 단계(S230)를 더 포함하여 구성될 수 있다. 나아가 스택 사용 정보를 생성하는 단계(S250)는, 함수 호출 그래프로부터 검출된 함수가 사용하는 스택의 크기를 산출할 수 있다.
스택 사용 정보를 생성하는 단계(S250)는, 검출된 함수의 인자(arguments) 또는 지역 변수(local variables)에 기반하여 검출된 함수가 사용하는 스택(stack)의 크기를 산출할 수 있다.
유사도를 판단하는 단계(S270)는, 복수의 소프트웨어에 대한 스택 사용 정보 간의 자카드 계수(Jaccard coefficient), 유클리드 거리(Euclid distance) 및 가장 긴 공통 부문자열(LCS, Longest Common Subsequence) 중 적어도 하나의 계산값이 소정의 조건을 충족시키는지 여부를 판단하는 것일 수 있다.
코드는, 소스(source) 코드 및 바이너리(binary) 코드 중 적어도 하나의 형태일 수 있다.
함수를 검출하는 단계(S210)는, 소프트웨어를 실행시 변화되는 메모리 덤프(memory dump)로부터 함수를 검출하는 제1 검출방법을 수행하거나, 소프트웨어의 코드를 구문(syntax) 분석하여 함수를 검출하는 제2 검출방법을 수행할 수 있다. 나아가 제1 검출방법은, 함수가 호출되는 빈도에 기반하여 함수를 선택적으로 검출할 수 있다.
스택 사용 정보는, 검출된 함수가 호출될 때의 스택 증가량 정보 또는 검출된 함수가 리턴될 때의 스택 감소량 정보를 포함하고 있을 수 있다. 나아가 소프트웨어 유사도 평가 방법은, 스택 사용 정보를 생성하는 단계 이후에, 스택 증가량 정보 또는 스택 감소량 정보에 기반하여 검출된 함수의 스택 사용량을 산출하는 단계를 더 포함하여 구성될 수 있다.
스택 사용 패턴은 도 1에서 설명한대로 SQLite 소프트웨어의 바이너리를 입력받고, 이를 실제 수행시키면서 동적으로 함수 호출 그래프를 생성할 수 있다. 그리고 각 함수가 호출될 때 스택의 증가와 함수에서 리턴될 때 스택의 감소를 분석하여 스택 사용 패턴을 그릴 수 있다. 도 3에는 모두 4개의 스택 사용 패턴이 나타나 있는데, 각각 서로 다른 SQLite 버전, 구체적으로 SQLite 3.5.0, 3.6.0, 3.7.0, 3.8.0 버전의 바이너리를 대상으로 분석한 것이다.
도 3에서 우리는 SQLite 소프트웨어는 버전별로 약간 차이가 있기는 하지만, 전체적으로 스택 사용 패턴이 상당히 유사함을 알 수 있다. 즉, 스택의 사용 방식을 분석하여 비슷한 패턴을 보이는 소프트웨어는 그만큼 유사도가 높다고 평가할 수 있는 것이다.
도 4은 Tree라는 소프트웨어 바이너리에서 각 버전별 스택 사용 패턴을 분석한 것이다. 역시 서로 다른 4개의 버전 (버전 1.3.0, 1.4.0, 1.5.0, 1.6.0)의 바이너리를 대상으로 분석하였다. 이 도면을 보면 Tree 소프트웨어의 유사한 버전은 서로 비슷한 스택 사용 패턴을 보여주는 것을 알 수 있다. 반면 도 3과 도 4를 비교해 보면, 서로 다른 소프트웨어는 서로 관련성이 없는 스택 사용 패턴을 보여줌을 알 수 있다. 결국 스택 사용 패턴이 소프트웨어의 유사도를 평가할 수 있는 효과적인 특징(feature)이 되는 것이다.
도 5는 도 3과 도 4의 스택 사용 패턴을 기반으로 각 소프트웨어의 유사도를 정량적으로 평가한 것이다. 이 실험에서 유사도 평가는 LCS(Longest Common Subsequence)을 사용하였으며, 구체적인 수식은 다음과 같다.
Figure 112014028935668-pat00001
Where
p: stack usage pattern of a software p,
q: stack usage pattern of a software q,
LCSi: i-th Longest Common Subsequence.
도 5에서는 본 발명에서 제안한 스택 기반 유사도 평가 결과뿐만 아니라 Moss라는 도구를 이용한 유사도 평가 결과도 함께 보여주고 있다. 스탠포드 대학에서 개발한 Moss는 소스 코드의 구문을 기반으로 유사도를 평가하며, 소프트웨어 유사도를 잘 평가하는 대표적인 도구로 알려져 있다.
도 4에서 우리는 버전이 가까운 소프트웨어들이 더 높은 유사도를 보임을 알 수 있다. 예를 들어 Tree 1.3.0 버전은 1.4.0 버전과의 유사도가 높으며, 1.5.0과 1.6.0으로 버전 차이가 커질수록 유사도가 낮아진다. 또한 제안기술이 Moss와 비슷한 경향으로 소프트웨어 유사도를 평가함을 알 수 있다. 전체적으로 제안기술이 Moss보다는 유사도가 높다고 나오는데, 이것은 Moss가 전체 코드를 기반으로 평가하는데 비해 제안기술은 실제 수행된 부분을 기반으로 평가를 하기 때문이다. 하지만 전체적인 유사도 평가 경향은 일치한다. 한편 Tree의 스택 사용 패턴과 SQLite의 스택 사용 패턴을 비교하면 유사도가 거의 없는 것으로 평가되었다. 결국 본 발명의 핵심 아이디어인 스택이 소프트웨어의 유사도를 평가하는 특징으로 효과적으로 사용될 수 있음을 보여주는 것이다.
도 6은 본 발명의 일 실시예에 따른 소프트웨어 유사도 평가 장치(10)와 그 세부 구성요소를 설명하기 위한 블록도이다. 도 6을 참조하여 소프트웨어 유사도 평가 장치(10)를 살펴보면 다음과 같다.
소프트웨어 유사도 평가 장치(10)는, 소프트웨어(software)의 유사도(similarity)를 평가하는 장치에 있어서, 소프트웨어의 코드(code)에서 함수 호출(function call) 명령어를 추적(trace)하여 소프트웨어에서 호출되는 함수를 검출하는 함수 검출부(100)와, 함수 검출부(100)가 검출한 함수가 사용하는 스택(stack)의 크기를 산출하고, 스택의 크기에 기반하여 스택 사용 정보를 생성하는 스택 사용 정보 생성부(300)와, 스택 사용 정보 생성부(300)가 생성한 스택 사용 정보에 기반하여 복수의 소프트웨어 간의 유사도를 판단하는 유사도 판단부(500)를 포함하여 구성될 수 있다.
소프트웨어 유사도 평가 장치(10)는, 검출한 함수에 기반하여 함수 호출 그래프(graph)를 생성하는 함수 호출 그래프 생성부(200)를 더 포함하여 구성될 수 있다. 나아가 스택 사용 정보 생성부(300)는, 함수 호출 그래프로부터 검출한 함수가 사용하는 스택의 크기를 산출할 수 있다.
스택 사용 정보 생성부(300)는, 검출한 함수의 인자(arguments) 또는 지역 변수(local variables)에 기반하여 검출한 함수가 사용하는 스택(stack)의 크기를 산출할 수 있다.
유사도 판단부(500)는, 복수의 소프트웨어에 대한 스택 사용 정보 간의 자카드 계수(Jaccard coefficient), 유클리드 거리(Euclid distance) 및 가장 긴 공통 부문자열(LCS, Longest Common Subsequence) 중 적어도 하나의 계산값이 소정의 조건을 충족시키는지 여부를 판단할 수 있다.
코드는, 소스(source) 코드 및 바이너리(binary) 코드 중 적어도 하나의 형태일 수 있다.
함수 검출부(100)는, 소프트웨어를 실행시 변화되는 메모리 덤프(memory dump)로부터 함수를 검출하는 제1 검출방법을 수행하거나, 소프트웨어의 코드를 구문(syntax) 분석하여 함수를 검출하는 제2 검출방법을 수행할 수 있다. 나아가 제1 검출방법은, 함수가 호출되는 빈도에 기반하여 함수를 선택적으로 검출할 수 있다.
스택 사용 정보는, 검출한 함수가 호출될 때의 스택 증가량 정보 또는 검출한 함수가 리턴될 때의 스택 감소량 정보를 포함하고 있을 수 있다. 나아가 소프트웨어 유사도 평가 장치는, 스택 증가량 정보 또는 스택 감소량 정보에 기반하여 검출된 함수의 스택 사용량을 산출하는 스택 사용량 산출부(400)를 더 포함하여 구성될 수 있다.
소프트웨어 유사도 평가 장치에 대한 구체적인 설명은 앞서 설명한 소프트웨어 유사도 평가 방법에 대한 설명에서 상술한 바 있으므로 중복하여 기재하지는 않는다.
본 발명은 소프트웨어 자산관리 업체, 소프트웨어 보안업체, 침입탐지분석업체, 대규모 소프트웨어 유지/업그레이드 업체 등에 기술 이전이 가능하다. 또한 저작권위원회, 소프트웨어 분쟁 조정 협회 등에서도 활용 가능하다.
비록 몇몇의 측면들은 방법의 관점에서 설명되었지만, 이러한 측면들은 상응하는 장치의 설명을 나타내는 것이 명확하며, 여기서 방법의 단계는 장치에 대응한다. 특정 구현 요구들에 따르면, 발명의 실시예들은 하드웨어 또는 소프트웨어에서 구현될 수 있다. 본 발명의 실시예들은 프로그램 코드, 방법들 중 하나의 수행을 위해 동작하는 프로그램 코드를 가지는 컴퓨터 프로그램 제품으로서 수행될 수 있다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시 예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시 예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
10: 소프트웨어 유사도 평가 장치
100: 함수 검출부 200: 함수 호출 그래프 생성부
300: 스택 사용 정보 생성부 400: 스택 사용량 산출부
500: 유사도 판단부

Claims (16)

  1. 소프트웨어(software)의 유사도(similarity)를 평가하는 컴퓨터 또는 소프트웨어 유사도 평가 장치가 수행하는 방법에 있어서,
    상기 컴퓨터 또는 소프트웨어 유사도 평가 장치의 함수 검출부에서 상기 소프트웨어의 코드(code)에서 함수 호출(function call) 명령어를 추적(trace)하여 상기 소프트웨어에서 호출되는 함수를 검출하는 단계;
    상기 컴퓨터 또는 소프트웨어 유사도 평가 장치의 스택 사용 정보 생성부에서 상기 검출된 함수가 사용하는 스택(stack)의 크기를 산출하고, 상기 스택의 크기의 변화 패턴에 기반하여 스택 사용 정보를 생성하는 단계; 및
    상기 컴퓨터 또는 소프트웨어 유사도 평가 장치의 유사도 판단부에서 상기 스택 사용 정보에 기반하여 복수의 소프트웨어 간의 유사도를 판단하는 단계를 포함하는 소프트웨어 유사도 평가 방법.
  2. 청구항 1에 있어서,
    상기 스택 사용 정보를 생성하는 단계는,
    상기 검출된 함수의 인자(arguments) 또는 지역 변수(local variables)에 기반하여 상기 검출된 함수가 사용하는 스택(stack)의 크기를 산출하는 것을 특징으로 하는 소프트웨어 유사도 평가 방법.
  3. 청구항 1에 있어서,
    상기 유사도를 판단하는 단계는,
    상기 복수의 소프트웨어에 대한 상기 스택 사용 정보 간의 자카드 계수(Jaccard coefficient), 유클리드 거리(Euclid distance) 및 가장 긴 공통 부문자열(LCS, Longest Common Subsequence) 중 적어도 하나의 계산값이 소정의 조건을 충족시키는지 여부를 판단하는 것임을 특징으로 하는 소프트웨어 유사도 평가 방법.
  4. 청구항 1에 있어서,
    상기 코드는,
    소스(source) 코드 및 바이너리(binary) 코드 중 적어도 하나의 형태인 것을 특징으로 하는 소프트웨어 유사도 평가 방법.
  5. 청구항 1에 있어서,
    상기 함수를 검출하는 단계는,
    상기 소프트웨어를 실행시 변화되는 메모리 덤프(memory dump)로부터 상기 함수를 검출하는 제1 검출방법을 수행하거나,
    상기 소프트웨어의 코드를 구문(syntax) 분석하여 상기 함수를 검출하는 제2 검출방법을 수행하는 것을 특징으로 하는 소프트웨어 유사도 평가 방법.
  6. 청구항 5에 있어서,
    상기 제1 검출방법은,
    상기 함수가 호출되는 빈도에 기반하여 상기 함수를 선택적으로 검출하는 것을 특징으로 하는 소프트웨어 유사도 평가 방법.
  7. 청구항 1에 있어서,
    상기 스택 사용 정보는,
    상기 검출된 함수가 호출될 때의 스택 증가량 정보 또는 상기 검출된 함수가 리턴될 때의 스택 감소량 정보를 포함하고 있는 것을 특징으로 하는 소프트웨어 유사도 평가 방법.
  8. 청구항 7에 있어서,
    상기 스택 사용 정보를 생성하는 단계 이후에,
    상기 컴퓨터 또는 소프트웨어 유사도 평가 장치의 스택 사용량 산출부에서 상기 스택 증가량 정보 또는 상기 스택 감소량 정보에 기반하여 상기 검출된 함수의 스택 사용량을 산출하는 단계를 더 포함하는 것을 특징으로 하는 소프트웨어 유사도 평가 방법.
  9. 소프트웨어(software)의 유사도(similarity)를 평가하는 장치에 있어서,
    상기 소프트웨어의 코드(code)에서 함수 호출(function call) 명령어를 추적(trace)하여 상기 소프트웨어에서 호출되는 함수를 검출하는 함수 검출부;
    상기 함수 검출부가 검출한 함수가 사용하는 스택(stack)의 크기를 산출하고, 상기 스택의 크기의 변화 패턴에 기반하여 스택 사용 정보를 생성하는 스택 사용 정보 생성부;
    상기 스택 사용 정보 생성부가 생성한 상기 스택 사용 정보에 기반하여 복수의 소프트웨어 간의 유사도를 판단하는 유사도 판단부를 포함하는 소프트웨어 유사도 평가 장치.
  10. 청구항 9에 있어서,
    상기 스택 사용 정보 생성부는,
    상기 검출한 함수의 인자(arguments) 또는 지역 변수(local variables)에 기반하여 상기 검출한 함수가 사용하는 스택(stack)의 크기를 산출하는 것을 특징으로 하는 소프트웨어 유사도 평가 장치.
  11. 청구항 9에 있어서,
    상기 유사도 판단부는,
    상기 복수의 소프트웨어에 대한 상기 스택 사용 정보 간의 자카드 계수(Jaccard coefficient), 유클리드 거리(Euclid distance) 및 가장 긴 공통 부문자열(LCS, Longest Common Subsequence) 중 적어도 하나의 계산값이 소정의 조건을 충족시키는지 여부를 판단하는 것을 특징으로 하는 소프트웨어 유사도 평가 장치.
  12. 청구항 9에 있어서,
    상기 코드는,
    소스(source) 코드 및 바이너리(binary) 코드 중 적어도 하나의 형태인 것을 특징으로 하는 소프트웨어 유사도 평가 장치.
  13. 청구항 9에 있어서,
    상기 함수 검출부는,
    상기 소프트웨어를 실행시 변화되는 메모리 덤프(memory dump)로부터 상기 함수를 검출하는 제1 검출방법을 수행하거나,
    상기 소프트웨어의 코드를 구문(syntax) 분석하여 상기 함수를 검출하는 제2 검출방법을 수행하는 것을 특징으로 하는 소프트웨어 유사도 평가 장치.
  14. 청구항 13에 있어서,
    상기 제1 검출방법은,
    상기 함수가 호출되는 빈도에 기반하여 상기 함수를 선택적으로 검출하는 것을 특징으로 하는 소프트웨어 유사도 평가 장치.
  15. 청구항 9에 있어서,
    상기 스택 사용 정보는,
    상기 검출한 함수가 호출될 때의 스택 증가량 정보 또는 상기 검출한 함수가 리턴될 때의 스택 감소량 정보를 포함하고 있는 것을 특징으로 하는 소프트웨어 유사도 평가 장치.
  16. 청구항 15에 있어서,
    상기 스택 증가량 정보 또는 상기 스택 감소량 정보에 기반하여 상기 검출된 함수의 스택 사용량을 산출하는 스택 사용량 산출부를 더 포함하는 것을 특징으로 하는 소프트웨어 유사도 평가 장치.
KR1020140035139A 2014-03-26 2014-03-26 스택 기반 소프트웨어 유사도 평가 방법 및 장치 KR101583133B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020140035139A KR101583133B1 (ko) 2014-03-26 2014-03-26 스택 기반 소프트웨어 유사도 평가 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140035139A KR101583133B1 (ko) 2014-03-26 2014-03-26 스택 기반 소프트웨어 유사도 평가 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20150111610A KR20150111610A (ko) 2015-10-06
KR101583133B1 true KR101583133B1 (ko) 2016-01-07

Family

ID=54344989

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140035139A KR101583133B1 (ko) 2014-03-26 2014-03-26 스택 기반 소프트웨어 유사도 평가 방법 및 장치

Country Status (1)

Country Link
KR (1) KR101583133B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102242000B1 (ko) * 2019-08-23 2021-04-20 숭실대학교산학협력단 악성 코드의 행위 특성 추출 장치, 방법 및 이를 수행하기 위한 프로그램을 기록한 기록매체
CN110990058B (zh) * 2019-11-28 2020-08-21 中国人民解放军战略支援部队信息工程大学 软件相似性度量方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008537240A (ja) * 2005-04-22 2008-09-11 ジェムプリュス 埋め込みシステム、特にスマートカードにロードされる疑似コードの検証方法
JP2012164211A (ja) * 2011-02-08 2012-08-30 Hitachi Ltd ソフトウェアの類似性評価方法
JP2013218607A (ja) * 2012-04-11 2013-10-24 Mitsubishi Electric Corp ソフトウェア品質評価装置、ソフトウェア品質評価方法、及び、プログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140035608A (ko) * 2012-09-14 2014-03-24 단국대학교 산학협력단 소프트웨어 유사도 측정 장치 및 그 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008537240A (ja) * 2005-04-22 2008-09-11 ジェムプリュス 埋め込みシステム、特にスマートカードにロードされる疑似コードの検証方法
JP2012164211A (ja) * 2011-02-08 2012-08-30 Hitachi Ltd ソフトウェアの類似性評価方法
JP2013218607A (ja) * 2012-04-11 2013-10-24 Mitsubishi Electric Corp ソフトウェア品質評価装置、ソフトウェア品質評価方法、及び、プログラム

Also Published As

Publication number Publication date
KR20150111610A (ko) 2015-10-06

Similar Documents

Publication Publication Date Title
You et al. Profuzzer: On-the-fly input type probing for better zero-day vulnerability discovery
Alrabaee et al. Fossil: a resilient and efficient system for identifying foss functions in malware binaries
Shirani et al. Binshape: Scalable and robust binary library function identification using function shape
Nguyen et al. A graph-based approach to API usage adaptation
Sæbjørnsen et al. Detecting code clones in binary executables
US8539475B2 (en) API backward compatibility checking
Safi et al. Detecting event anomalies in event-based systems
Alrabaee et al. BinGold: Towards robust binary analysis by extracting the semantics of binary code as semantic flow graphs (SFGs)
CN104636256A (zh) 一种内存访问异常的检测方法及装置
Palahan et al. Extraction of statistically significant malware behaviors
Zhang et al. BDA: practical dependence analysis for binary executables by unbiased whole-program path sampling and per-path abstract interpretation
US20100199355A1 (en) Method of protecting digital documents against unauthorized uses
Alrabaee et al. On leveraging coding habits for effective binary authorship attribution
Anju et al. Malware detection using assembly code and control flow graph optimization
Alrabaee A stratified approach to function fingerprinting in program binaries using diverse features
Black et al. Evolved similarity techniques in malware analysis
KR101583133B1 (ko) 스택 기반 소프트웨어 유사도 평가 방법 및 장치
Kwon et al. Modeling high-level behavior patterns for precise similarity analysis of software
Alam et al. Droidclone: Attack of the android malware clones-a step towards stopping them
Chae et al. Credible, resilient, and scalable detection of software plagiarism using authority histograms
Daian et al. Runtime verification at work: A tutorial
Alrabaee et al. Binary analysis overview
Mouzarani et al. Towards designing an extendable vulnerability detection method for executable codes
Boockmann et al. Generating inductive shape predicates for runtime checking and formal verification
Adhikari et al. Using the Strings Metadata to Detect the Source Language of the Binary

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
FPAY Annual fee payment

Payment date: 20181108

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190925

Year of fee payment: 5