KR101942010B1 - 모듈의 암호화/복호화 프로그램 - Google Patents

모듈의 암호화/복호화 프로그램 Download PDF

Info

Publication number
KR101942010B1
KR101942010B1 KR1020147010195A KR20147010195A KR101942010B1 KR 101942010 B1 KR101942010 B1 KR 101942010B1 KR 1020147010195 A KR1020147010195 A KR 1020147010195A KR 20147010195 A KR20147010195 A KR 20147010195A KR 101942010 B1 KR101942010 B1 KR 101942010B1
Authority
KR
South Korea
Prior art keywords
module
program
execution
executed
quot
Prior art date
Application number
KR1020147010195A
Other languages
English (en)
Other versions
KR20140069176A (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 디엔피 하이퍼텍 컴퍼니 리미티드
Publication of KR20140069176A publication Critical patent/KR20140069176A/ko
Application granted granted Critical
Publication of KR101942010B1 publication Critical patent/KR101942010B1/ko

Links

Images

Classifications

    • 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/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • 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/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/123Restricting unauthorised execution of programs by using dedicated hardware, e.g. dongles, smart cards, cryptographic processors, global positioning systems [GPS] devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • 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/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • 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/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs

Abstract

암호화되어 있는 프로그램이라도 실행 시에 한번에 모든 모듈을 복호화하면, 저장 영역에 저장된 코드를 분석하는 것이 가능하다. 따라서 리버스 엔지니어링으로 쉽게 해석할 수 없는 프로그램의 실행 및 복호화 방식이 요구된다.
상기 과제를 해결하기 위해, 본 발명에서는 프로그램을 시작하여도 실행할 때 각 모듈을 복호화하면서 모듈을 실행할 수 있는 프로그램 복합체를 제공한다. 이에 의해 용이하게 모듈이 해석되지 않고 프로그램의 내탬퍼성(Tamper Resistance)의 향상을 도모할 수 있다.

Description

모듈의 암호화/복호화 프로그램{MODULE ENCRYPTION/DECRYPTION PROGRAM}
본 발명은 소프트웨어의 내탬퍼성(Tamper Resistance)을 향상시키는 기술에 관한 것이다.
소프트웨어 중, 예를 들면 인증 알고리즘을 포함하는 것과 같이 그 내용을 알리고 싶지 않은 것이 존재한다. 그럼에도 불구하고 소스 코드는 물론 실행 형식의 소프트웨어에서도 분해(disassembly) 및 디버깅에 의해 소프트웨어 알고리즘 등의 내용이 공개된다는 위협이 존재한다. 특허문헌 1에는 다음과 같은 기술이 개시되어 있다. 해당 기술에서는 소스 코드의 조건분기 명령을 복잡하게 하여 분기 조건의 분석을 어렵게 한다. 이에 의해 코드 난독성을 높여 상기와 같은 위협을 회피하도록 하고 있다. 즉, 분해 등이 가능하더라도 그에 따라 분석되어 발생한 소스 코드 자체의 난독성에 의해 분석의 어려움이 생긴다. 이렇게 하여 소프트웨어의 내탬퍼성(Tamper Resistance)의 향상을 도모할 수 있다.
일본 특허공개 제2011-28506호 공보
그러나 소스 코드 자체의 난독성을 높여도 거기에서 생기는 실행 형식의 코드 자체가 평문이기 때문에, 시간을 들이면 반드시 분석이 가능하다는 점이 문제가된다. 그래서 실행 형식의 코드를 암호화하여 실행 시에 복호화하는 방법이 고려될 수 있다. 이에 의해 저장 영역에 저장된 상태의 실행 형식의 파일에 대해서는 암호화되어 있기 때문에 분석이 거의 불가능하다. 그러나 암호화하는 것만으로는 실행 시에는 어떠한 형태로든지 복호화할 필요가 있고, 복호화하여 실행중인 코드에 대해서는 디버거(debugger) 등에 의한 분석이 가능하다는 점이 문제가 된다. 예를 들어, 실행 시에 모든 코드를 복호화하고 나서 실행하는 방법이면, 실행 전에는 암호화되어 있기 때문에 분석은 거의 불가능하다. 그러나, 실행 시에 프로그램 전체를 복호화하는 방식이면, 메모리 상에서 복호화된 프로그램이 로드된 상태의 이미지를 분석하여 그 내용을 파악하는 것이 가능하다. 그러면 암호화된 모듈을 용이하게 분석할 수 없는 방식으로 프로그램의 실행 방법을 구현해야하는 과제가 생긴다.
이상의 과제를 해결하기 위하여, 첫 번째 본 발명은 다음과 같은 프로그램 복합체를 제공한다. 상기 프로그램 복합체는 복수의 모듈로 구성되어 있다. 실행 전에는 적어도 하나의 모듈은 암호화 데이터로 유지되고, 실행 시에는 암호화된 모듈의 전에 실행되는 모듈이 복호화 처리를 수행하여, 복호화된 모듈이 실행되도록 하는 프로그램 복합체이다.
구체적으로는 모듈의 집합체로 이루어지는 프로그램 본체로서, 각 모듈 중 적어도 하나는 비 실행 시에는 암호화된 상태인 프로그램 본체와, 다음에 실행되는 모듈인 다음 모듈이 암호화되어 있는 경우에는 현재 실행 중인 모듈의 종료 전의 타이밍에서 연산 장치가 실행 가능하게 복호화하기 위한 처리를 컴퓨터에 실행시키기 위한 복호화 프로그램으로 이루어지는 프로그램 복합체이다.
두 번째는, 상기 첫 번째 프로그램 복합체를 기본으로 다음에 실행되는 모듈을 호출한 후, 그 모듈을 저장 영역에서 삭제하는 처리를 수행하는 프로그램 복합체이다.
구체적으로는, 다음 모듈의 실행 개시 후에 다음 모듈을 호출한 모듈인 호출원 모듈을 연산 장치용 저장 매체에서 삭제하는 처리를 컴퓨터로 실행시키기 위한 삭제 프로그램을 더 구비하는 청구항 1 에 기재된 프로그램 복합체이다.
세 번째는, 상기 첫 번째 프로그램 복합체를 기본으로 다음에 실행되는 모듈을 호출한 후, 그 모듈을 재 암호화하는 처리를 수행하는 프로그램 복합체이다.
구체적으로는 다음 모듈의 실행 개시 후에 호출원 모듈을 연산장치용 저장 매체에서 재 암호화하는 처리를 컴퓨터에 실행시키기 위한 재 암호화 프로그램을 더 구비하는 청구항 1에 기재된 프로그램 복합체이다.
이상과 같은 구성을 채택한 첫 번째 본 발명에 의하여, 실행 전에는 암호화된 데이터로 모듈을 유지하고, 실행 시에 암호화된 모듈을 직전에 복호화하여 실행하는 것이 가능하다. 그러면 실행 직전까지 감추고자 하는 모듈을 암호화 상태로 하는 것이 가능하다. 따라서 디버거 등으로 프로그램을 분석하는 경우에도 한 번에 모든 모듈을 가독할 수 있는 경우에 비하여 분석에 노력과 시간이 걸리게 된다. 이에 의해 프로그램의 내탬퍼성(Tamper Resistance)이 향상된다.
또한, 두 번째 본 발명에 의하여, 감추고자 하는 모듈을 실행한 후에 즉시 저장 매체에서 삭제하는 것이 가능해진다. 이에 의해 실행 후 저장 영역에 남아 있는 평문 모듈을 제거하여, 그 내용을 분석하는 것을 불가능하게 할 수 있다. 이에 의해 실행 시에만 평문 모듈이 저장 영역에 존재하는 동작이 가능하게 되어 프로그램의 내탬퍼성이 향상된다.
또한, 세 번째 본 발명에 의하여, 감추고자 하는 모듈을 실행한 후에 즉시 재 암호화할 수 있게 된다. 이에 의해 실행 후 저장 영역에 남아 있는 평문 모듈을 암호화하여, 그 내용을 분석하는 것을 불가능하게 할 수 있다. 이에 의해 실행 시에만 평문 모듈이 저장 영역에 존재하는 동작이 가능하게 되어 프로그램의 내탬퍼성이 향상된다.
도 1은 실시예 1의 프로그램 복합체에 의한 처리의 개요를 설명하기 위한 도면,
도 2는 실시예 1의 프로그램 복합체에 의한 처리의 일례를 설명하기 위한 도면,
도 3은 실시예 1의 프로그램 복합체의 기능 블록의 일례를 나타내는 도면,
도 4는 실시예 1의 프로그램 복합체의 처리의 일례를 설명하기 위한 타이밍 챠트,
도 5는 실시예 1의 프로그램 복합체의 처리의 흐름의 일례를 나타내는 순서도,
도 6은 실시예 1의 프로그램 복합체의 하드웨어 구성의 일례를 나타내는 개략도,
도 7은 실시예 2의 프로그램 복합체에 의한 처리의 일례를 설명하기 위한 도면,
도 8은 실시예 2의 프로그램 복합체의 기능 블록의 일례를 나타내는 도면,
도 9는 실시예 2의 프로그램 복합체의 처리의 흐름의 일례를 나타내는 순서도,
도 10은 실시예 2의 프로그램 복합체의 하드웨어 구성의 일례를 나타내는 개략도,
도 11은 실시예 3의 프로그램 복합체에 의한 처리의 일례를 설명하기 위한 도면,
도 12는 실시예 3의 프로그램 복합체의 기능 블록의 일례를 나타내는 도면,
도 13은 실시예 3의 프로그램 복합체의 처리의 흐름의 일례를 나타내는 순서도,
도 14는 실시예 3의 프로그램 복합체의 하드웨어 구성의 일례를 나타내는 개략도.
이하에 도면을 이용하여 본 발명의 실시 형태를 설명한다. 또한, 본 발명은 이들 실시 형태에 조금도 한정되는 것이 아니며, 그 요지를 벗어나지 않는 범위에서 다양한 형태로 실시할 수 있다. 또한, 실시예 1은 주로 청구항 1, 2, 3에 대해 설명한다. 또한, 실시예 2는 주로 청구항 4에 대해 설명한다. 또한 실시예 3은 주로 청구항 5에 대해 설명한다.
≪ 실시예 1 ≫
< 개요 >
도 1은 본 실시예의 프로그램 복합체의 동작의 일례를 설명하기 위한 개념도 이다. 이 도면에서와 같이, 프로그램 A로 된 프로그램 복합체는 저장 영역의 어드레스 X 에서 어드레스 Y 사이에 모듈 P개가 존재하고 있다. 모듈 2에서 모듈 P는 암호화되어 있다. 프로그램은 모듈 1부터 차례로 모듈 P까지 실행되는 것으로 한다. 모듈 1은 모듈 2를 호출하고, 모듈 2는 모듈 3을 호출하는 계층적인 실행 방식을 취한다.
여기에서 보호해야 할 모듈은 모듈 P인 것으로 한다. 실행 전의 상태에서는, 분석자는 모듈 P가 어드레스 Y의 위치에 존재하는지는 알 수 없다. 실제로 모듈 P-1까지 실행하고 분석한 후가 아니면, 모듈 P를 분석할 수 없다. 한편, 실행 시에 모든 모듈을 먼저 복호화하는 암호화 방식이면, 복호화한 후에는 프로그램 전체의 흐름을 바라보는 것이 가능하므로, 모듈 P가 보호해야 할 모듈인 것이 조기에 특정될 수 있어, 모듈 P를 분석하는 것이 가능하다.
도 2는 도 1의 내용을 더 개략화한 것이며, 프로그램 A의 동작을 설명하기 위한 도면이다. 이 도면에서와 같이 초기 상태(0201)에서는 모듈 1 외에는 암호화되어 있다. 실행이 개시되면 모듈 1이 실행되고 모듈 1의 완료 전에 모듈 1이 모듈 2를 복호화하여 순차적으로 다음 모듈을 복호화하면서 실행해 나간다. 그리고 보호해야 할 P번째 모듈을 복호화하면서 실행하고 종료한다(0202).
이와 같이, 본 실시예의 프로그램 복합체는 프로그램의 실행 시에 있어서, 모듈이 실행되고 종료되기 직전에 다음에 실행할 모듈을 복호화하는 동작이 가능하다. 이에 의해 실행 시가 되어 비로소 모듈의 코드를 판독할 수 있기 때문에, 도 2에서 보호해야 할 P번째 모듈을 분석하려고 한 경우에는 직접 P번째 모듈을 분석할 수는 없으며 차례대로 실행하여 분석할 필요가 있다. 따라서 디버거 등으로 프로그램을 분석하는 경우, 한 번에 모든 함수를 판독할 수 있는 경우에 비하여, 현저하게 분석에 시간이 걸리게 된다. 또한 암호화에 의해 보호대상 함수 P까지의 흐름이 은폐되어 있기 때문에, 분석자가 프로그램의 전체적인 그림을 충분히 파악할 수 없다.
< 기능적 구성 >
도 3은 본 실시예의 프로그램 복합체의 기능 블록의 일례를 나타내는 도면이다. 이 도면에서와 같이, 본 실시예의 「프로그램 복합체」(0300)는 「프로그램 본체」(0301)와, 「모듈 집합체」(0302)와, 「복호화 프로그램」(0303)을 구비한다.
「프로그램 본체」(0301)는 모듈의 집합체로 구성된다. 모듈은 복수로 존재하고, 적어도 하나의 보호해야 할 모듈로 이루어진다. 보호해야 할 모듈은 암호화되어 있다.
「모듈 집합체」(0302)는 복수의 모듈로 구성된다. 여기서 모듈은 함수나, 서브루틴, 메서드 등을 포함한다. 모듈은 다음에 실행해야 할 다음 모듈이 암호화되어 있는 경우에는, 복호화 프로그램(0303)을 호출하여 해당 모듈 종료 전의 타이밍에서 다음 모듈을 복호화하여 다음 모듈을 실행한다. 도 3에서는 모듈 2의 다음 모듈이 보호해야 할 모듈로 되어 있다. 따라서 모듈 2는, 모듈 2의 종료 전의 타이밍에서 복호화 프로그램(0303)을 호출하여 모듈 3을 복호화하고 실행시킨다.
여기서 모듈의 「실행」이라 함은, 모듈을 메모리 등의 저장 영역에 로드하여 연산 장치에 데이터를 보내고 그 결과를 받는 것으로, 시스템의 내부 상태에 변화를 가하는 것이다. 「연산 장치」는, CPU나 MPU, GPU 등의 연산 가능한 장치를 가리킨다. 이러한 「연산 장치」를 내부에 내장하여 연산 결과를 저장 영역에서 유지할 수 있는 장치를 「컴퓨터」로 한다.
암호화되어 있는 모듈은 반드시 보호해야 할 모듈에 한정되지 않는다. 분석자를 속이기 위해 보호해야 할 모듈 이외의 모듈도 암호화함으로써, 보호해야 할 함수에 이르기까지의 길을 은폐할 수 있다. 이에 의해 분석에 걸리는 노력과 시간이 증가하고 내탬퍼성(Tamper Resistance)의 향상을 기대할 수 있다.
도 4는 「모듈 종료 전의 타이밍」을 설명하기 위한 도면이다. 도면의 가로축은 시간축이며 모듈이 실행되는 타이밍을 나타낸다. 모듈 1은 평문 모듈이고, 종료 전에 암호화 모듈인 모듈 2를 복호화하기 위해 복호화 프로그램을 호출함과 동시에 모듈 2를 실행시킨다. 모듈 2는 종료 전에 모듈 3을 실행한다. 모듈 4는 모듈 3의 종료 전의 타이밍에서 실행이 시작되고, 동시에 모듈 2의 종료 전의 타이밍에서 실행이 개시되고 있다. 이 경우는 모듈 2가 복호화 프로그램을 호출하여 모듈 4를 복호화하고 실행하여도 되고, 모듈 3이 복호화 프로그램을 호출하여, 종료 전에 모듈 4를 복호화하고 실행하여도 된다. 모듈 5는 모듈 4의 종료 후에 실행되고 있기 때문에, 모듈 2의 종료 전 타이밍에서 모듈 2가 복호화 프로그램을 호출함으로써 복호화되어 실행된다.
이와 같이 「다음에 실행되는 모듈인 다음 모듈」이라 함은, 모듈 2와 모듈 4의 관계나, 모듈 2와 모듈 5의 관계와 같이 반드시 바로 다음에 실행되는 모듈만으로 제한되지 않는다. 상기와 같이 모듈 내의 적절한 위치에 복호화 프로그램의 호출과, 다음 모듈의 실행 명령을 포함하는 것으로, 요구된 타이밍에 모듈이 실행되어 적절한 프로그램의 동작을 얻을 수 있다.
「복호화 프로그램」(0303)은 다음 모듈의 복호화를 수행한다. 구체적으로는 실행 중인 모듈에서 다음 모듈의 저장 영역의 어드레스 정보를 얻고 그 정보를 바탕으로 복호화를 수행한다. 복호화 프로그램은 도 2와 같이 별도로 독립하여 존재하고, 모듈로부터 호출되는 것이어도 되고, 각 모듈에 직접 포함된 것이어도 좋다. 또한 복호화 프로그램을 복수개 존재시켜 여러 종류의 암호화 방식에 대응시키는 것이어도 좋다. 이 경우 실행 중인 모듈에는 다음 모듈에 적합한 암호화 방식의 복호화 프로그램의 실행 명령을 포함시킬 수 있다.
< 처리의 흐름 >
도 5는 본 실시예의 프로그램 복합체의 처리 흐름의 일례를 나타내는 흐름도이다. 먼저 다음 모듈이 암호화되어 있는지 여부의 판단을 행한다(스텝 S0501). 암호화되어 있는 경우에는 복호화하기 위한 처리를 실행한다(스텝 S0502). 암호화되어 있지 않은 경우에는 스텝 S0502는 생략한다. 그 후 다음 모듈을 실행하고(스텝 S0503), 프로그램의 종료 여부의 판단을 행하고(스텝 S0504), 종료되지 않은 경우, 스텝 S0501로 되돌아 간다. 종료된 경우, 프로그램을 종료시킨다.
< 하드웨어적 구성 >
도 6은 상기 기능적인 각 구성 요소를 하드웨어로 구현했을 때의 프로그램 복합체의 구성의 일례를 나타내는 개략도이다. 이 도면을 이용하여 어플리케이션 전환 처리에 있어서 각각의 하드웨어 구성부의 작동에 대해 설명한다. 이 도면에서와 같이, 본 실시예의 프로그램 복합체는 각종 연산 처리를 행하는 「CPU(중앙 연산 장치)」(0601)와, 「휘발성 메모리」(0602)와, 「비 휘발성 메모리」(0603)를 구비하고 있다. 또한 사용자로부터의 조작 입력을 받아들이는 마우스 및 키보드 등이나, 표시 장치 등이 접속되는 「입출력 I/F」(0604)를 가진다. 그리고 그들이 「시스템 버스」(0605) 등의 데이터 통신경로에 의해 상호 접속되어 정보의 송수신 및 처리를 행한다.
또한 「휘발성 메모리」(0602)는 각종 처리를 행하는 프로그램을 「CPU」(0601)로 실행시키기 위해 「비 휘발성 메모리」(0603)로부터 독출함과 동시에 그 프로그램의 작업 영역이기도 한 워크 영역을 제공한다.
여기서, 입출력 I/F(0604)로부터의 명령에 의해 프로그램 A가 시작된다. 그러면 프로그램 A가 비 휘발성 메모리(0603)로부터 휘발성 메모리(0602)로 로드된다. 프로그램 A는 CPU(0601)에 의해 처리가 실행된다. 프로그램 A는 N개의 모듈과 복호화 프로그램으로 구성된다. 모듈은 차례로 CPU(0601)에서 실행되고, 다음 모듈이 암호화되어 있다고 판단된 경우에는 현재 실행중인 모듈에 의해, 복호화 프로그램을 CPU(0601)에서 실행하고, 암호화된 모듈을 디코딩하여 평문 모듈로 하고 그 코드를 휘발성 메모리(0602)에 기록한다. 기록된 코드는 CPU(0601)에서 실행된다.
< 효과의 간단한 설명 >
이상과 같이 본 실시예의 프로그램 복합체에 의하여, 암호화된, 다음에 실행 되어야 할 모듈을 호출원 모듈에 의해 복호화하여 실행할 수 있다. 이에 의해 모듈 은 계층적으로 실행되는 것으로 되고, 실행 직전까지 보호해야 할 모듈을 암호화 된 상태로 유지하는 것이 가능하다. 이에 의해 한 번에 모든 모듈을 복호화하는 경우보다, 분석에 노력과 시간이 걸리게 되므로 프로그램의 내탬퍼성이 향상된다.
≪ 실시예 2 ≫
< 개요 >
도 7은 본 실시예의 프로그램 복합체의 적용예에 대해서 설명하기 위한 개념도이다. 이 도면에서와 같이 프로그램의 실행 개시 시(0801)에는 모듈 1 이외의 모듈은 암호화되어 있다. 복호화 프로그램에 의해 모듈 1의 실행 종료 전에 다음에 실행해야 할 모듈 2를 복호화한다. 그리고 모듈 1의 종료 후에는 모듈 1을 저장 영역에서 삭제한다(0802).
이와 같이 본 실시예의 프로그램 복합체는 다음에 실행해야 할 모듈이 개시되면, 다음 모듈을 호출한 모듈을 저장 영역에서 삭제할 수 있는 전환 장치이다. 이에 의해, 프로그램 실행 종료 시에 저장 영역에 남아 있는 모듈의 코드를 분석할 수 없게 되어 프로그램의 내탬퍼성이 향상된다.
< 기능적 구성 >
도 8은 본 실시예의 프로그램 복합체의 기능 블록의 일례를 나타내는 도면이다. 이 도면에서와 같이, 본 실시예의 「프로그램 복합체」(0800)는 「프로그램 본체」(0801)와, 「모듈 집합체」(0802)와, 「복호화 프로그램」(0803)을 구비한다. 또한 이들 구성요소에 대해서는 상기 실시예에서 이미 설명되었기 때문에 그 설명을 생략한다. 본 실시예의 프로그램 복합체의 특징점은 「프로그램 복합체」(0800)가 「삭제 프로그램」(0804)을 새롭게 갖는 점이다.
「삭제 프로그램」(0804)은 다음 모듈의 실행 개시 후에 다음 모듈을 호출한 모듈인 호출원 모듈을 연산 장치용 저장 매체에서 삭제하는 처리를 컴퓨터에 실행시키기 위한 처리를 행한다. 도 7에서 설명하면, 모듈 2의 동작이 완료한 것을 모듈 2 또는 모듈 3에서 검지하고, 모듈 2 또는 모듈 3으로부터 모듈 2의 저장 영역의 어드레스를 취득한다. 취득한 어드레스에 기초해서 삭제 프로그램은 모듈 2의 삭제를 실행한다.
< 처리의 흐름 >
도 9는 본 실시예의 프로그램 복합체의 처리 흐름의 일례를 나타내는 흐름도이다. 먼저 다음 모듈이 암호화되어 있는지 여부의 판단을 행한다(스텝 S0901). 암호화되어 있는 경우에는 복호화하기 위한 처리를 실행한다(스텝 S0902). 암호화되어 있지 않은 경우에는 스텝 S0902는 생략한다. 그 후 다음 모듈을 실행 개시한다(스텝 S0903). 이어서 다음 모듈은 호출원 모듈의 삭제를 행한다(스텝 S0904). 그 후 프로그램의 종료 여부의 판단을 행하고(스텝 S0905), 종료되지 않은 경우, 스텝 S0901로 되돌아 간다. 종료된 경우 프로그램을 종료시킨다.
< 하드웨어 구성 >
도 10은 상기 기능적인 각 구성 요소를 하드웨어로 구현했을 때의 프로그램 복합체의 구성의 일례를 나타내는 개략도이다. 이 도면을 이용하여 어플리케이션 전환 처리에서의 각각의 하드웨어 구성부의 동작에 대해 설명한다. 이 도면에서와 같이, 본 실시예의 프로그램 복합체는 각종 연산 처리를 행하는 「CPU(중앙 연산 장치)」(1001)와, 「휘발성 메모리」(1002)와, 「비 휘발성 메모리」(1003)를 구비하고 있다. 또한 사용자의 조작 입력을 받아들이는 마우스 및 키보드 등이나, 표시 장치 등이 접속되는 「입출력 I/F」(1004)를 가진다. 그리고 그들이 「시스템 버스」(1005) 등의 통신 경로에 의해 상호 접속되어 정보의 송수신 및 처리를 행한다.
또한 「휘발성 메모리」(1002)는, 각종 처리를 행하는 프로그램을 「CPU」(1001)에 실행시키기 위해 「비 휘발성 메모리」(1003)로부터 독출함과 동시에 그 프로그램의 작업 영역이기도 한 워크 영역을 제공한다.
여기서, 입출력 I/F(1004)로부터의 명령에 의해 프로그램 A가 시작된다. 그러면 프로그램 A가 비 휘발성 메모리(1003)로부터 휘발성 메모리(1002)로 로드된다. 프로그램 A는 CPU(1001)에 의해 처리가 실행된다. 프로그램 A는 N개의 모듈과 복호화 프로그램으로 구성된다. 모듈은 차례로 CPU(1001)에서 실행되고, 다음 모듈이 암호화되어 있다고 판단된 경우에는 현재 실행 중인 모듈에 의해, 복호화 프로그램을 CPU(1001)에서 실행하고 암호화된 모듈을 디코딩하여 평문 모듈로 하고 그 코드를 휘발성 메모리(1002)에 기록한다. 기록된 코드는 CPU(1001)에서 실행된다.
평문으로 된 모듈을 실행할 때, 프로그램 A는 삭제 프로그램을 CPU(1001)로 실행한다. 삭제 프로그램은 프로그램 A 중 먼저 실행된 모듈을 휘발성 메모리(1002)로부터 삭제한다.
< 효과의 간단한 설명 >
이와 같이 하여 실행 후의 모듈을 삭제해 나감으로써, 실행 후에 저장 영역에 남아 있는 평문 코드를 제거할 수 있다. 이에 의해 실행 후 모듈의 코드를 분석하는 것이 불가능해진다. 따라서 내탬퍼성이 높은 프로그램 복합체의 실행이 가능해진다.
≪ 실시예 3 ≫
< 개요 >
도 11은 본 실시예의 프로그램 복합체의 적용예를 설명하기 위한 개념도이다. 이 도면에서와 같이 프로그램 실행 개시 시(1101)에는 모듈 1 이외의 모듈은 암호화되어 있다. 복호화 프로그램에 의해 모듈 1의 실행 종료 전에 다음에 실행할 모듈 2를 복호화한다. 그리고 모듈 1의 종료 후에는 모듈 1을 재 암호화한다(1102).
이와 같이 본 실시예의 프로그램 복합체는 다음 모듈의 실행 시에 그 모듈을 호출한 호출원 모듈을 재 암호화하는 처리가 가능하다. 이에 의해 모듈 또는 프로그램 본체의 실행 후에, 저장 영역에 남아 있는 모듈의 코드를 분석하는 것이 불가능하게 된다. 따라서 프로그램 복합체의 내탬퍼성이 향상된다.
< 기능적 구성 >
도 12는 본 실시예의 프로그램 복합체의 기능 블록의 일례를 나타내는 도면이다. 이 도면에서와 같이, 본 실시예의 「프로그램 복합체」(1200)는 「프로그램 본체」(1201)와, 「모듈 집합체」(1202)와, 「복호화 프로그램」(1203)을 구비한다. 또한 이들 구성 요소에 대해서는 실시예에서 이미 설명되었기 때문에 그 설명을 생략한다. 본 실시예의 프로그램 복합체의 특징점은 「프로그램 복합체」( 1200)가 「재 암호화 프로그램」(1204)을 새롭게 구비하는 점이다.
「재 암호화 프로그램」(1204)은, 다음 모듈의 실행 개시 후에 호출원 모듈을 연산 장치용 저장 매체에 재 암호화하는 처리를 컴퓨터로 실행시키기 위한 처리를 행한다. 구체적으로는 다음 모듈의 실행 개시 후에, 호출원 모듈(모듈 2)의 어드레스 정보를 재 암호화 프로그램이 호출원 모듈 또는 실행 중인 모듈(모듈 3)로부터 취득한다. 실행 중인 모듈은 재 암호화 프로그램을 실행하고 호출원 모듈을 암호화한다.
< 처리의 흐름 >
도 13은 본 실시예의 프로그램 복합체의 처리의 흐름의 일례를 나타내는 흐름도이다. 먼저, 다음 모듈은 암호화되어 있는지 여부의 판단을 행한다(스텝 S1301). 암호화되어 있는 경우에는 복호화하기 위한 처리를 실행한다(스텝 S1302). 암호화되어 있지 않은 경우에는 스텝 S1302는 생략한다. 그 후 다음 모듈을 실행 개시(스텝 S1303)한다. 계속하여, 다음 모듈은 호출원 모듈의 재 암호화를 행한다(스텝 S1304). 그 후 프로그램의 종료 여부의 판단을 행하여(스텝 S1305), 종료되지 않은 경우, 스텝 S1301로 되돌아 간다. 종료된 경우 프로그램을 종료시킨다.
< 하드웨어 구성 >
도 14는 상기 기능적인 각 구성 요소를 하드웨어로 구현한 때의 프로그램 복합체의 구성의 일례를 나타내는 개략도이다. 이 도면을 이용하여 어플리케이션 전환 처리에서의 각각의 하드웨어 구성부의 동작에 대해 설명한다. 이 도면에서와 같이, 본 실시예의 프로그램 복합체는 각종 연산 처리를 행하는 「CPU(중앙 연산 장치)」(1401)와, 「휘발성 메모리」(1402)와, 「비 휘발성 메모리」(1403)를 구비하고 있다. 또한 사용자로부터의 조작 입력을 받아들이는 마우스 및 키보드 등이나, 표시 장치 등이 접속되는 「입출력 I/F」(1404)를 구비한다. 그리고 그들이 「시스템 버스」(1405) 등의 데이터 통신 경로에 의해 상호 접속되어 정보의 송수신 및 처리를 행한다.
또한, 「휘발성 메모리」(1402)는 각종 처리를 행하는 프로그램을 「CPU」(1401)로 실행시키기 위해 「비 휘발성 메모리」(1403)로부터 독출함과 동시에 그 프로그램의 작업 영역이기도 한 워크 영역을 제공한다.
여기서, 입출력 I/F(1404)로부터의 명령에 의해 프로그램 A가 시작된다. 그러면 프로그램 A가 비 휘발성 메모리(1403)로부터 휘발성 메모리(1402)로 로드된다. 프로그램 A는 CPU(1401)에 의해 처리가 실행된다. 프로그램 A는 N개의 모듈과 복호화 프로그램으로 구성된다. 모듈은 차례로 CPU(1401)에서 실행되고, 다음 모듈이 암호화되어 있다고 판단된 경우에는 현재 실행 중인 모듈에 의해, 복호화 프로그램을 CPU(1401)에서 실행하고, 암호화된 모듈을 디코딩하여 평문 모듈로 하고 그 코드를 휘발성 메모리(1402)에 기록한다. 기록된 코드는 CPU(1401)에서 실행된다.
평문으로 된 모듈을 실행할 때, 프로그램 A는 재 암호화 프로그램을 CPU(1401)에 실행한다. 재 암호화 프로그램은, 프로그램 A 중 먼저 실행된 모듈을 다시 암호화하여 비 휘발성 메모리 내지 휘발성 메모리에 저장한다.
< 효과의 간단한 설명 >
이와 같이 하여 본 실시예의 프로그램 복합체는, 실행 후 저장 영역에 남아 있는 평문 코드를 다시 암호화할 수 있다. 이에 의해 실행 후 모듈의 코드를 분석하는 것이 불가능해진다. 따라서 내탬퍼성이 높은 프로그램 복합체의 실행이 가능해진다.
0300 프로그램 복합체
0301 프로그램 본체
0302 모듈의 집합체
0303 복호화 프로그램

Claims (5)

  1. 실행시에는 실행 메모리 영역에 전개되는 복수개의 모듈의 집합체로 이루어지며, 일 모듈이 상기 일 모듈의 다음에 실행될 모듈을 호출하는 방식으로 연산장치가 전체 모듈을 차례로 실행하도록 이루어진 프로그램 본체로서,
    상기 모듈 중 적어도 하나는 암호화된 모듈이며, 각 모듈은 다음에 실행되는 모듈에 대한 정보를 포함하는 프로그램 본체와,
    다음에 실행되는 모듈인 다음 모듈이 암호화되어 있는 경우에는, 현재 실행 중인 모듈에 의해 현재 실행 중인 모듈의 종료 전으로서 다음 모듈의 실행 직전의 타이밍에 상기 다음 모듈을 연산 장치가 실행가능하도록 복호화하기 위한 처리를 컴퓨터에 실행시키기 위한 복호화 프로그램과,
    다음 모듈의 실행 개시 후에 다음 모듈을 호출한 모듈인 호출원 모듈을 실행 메모리 영역에서 삭제하는 처리를 컴퓨터에 실행시키기 위한 삭제 프로그램으로 이루어지고,
    상기 복호화는, 다음 모듈이 암호화되어 있는 저장영역의 어드레스 정보를 실행 중인 모듈로부터 받아 행해지는 프로그램 복합체를 기록한 컴퓨터로 읽을 수 있는 매체.
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
KR1020147010195A 2011-09-20 2012-06-14 모듈의 암호화/복호화 프로그램 KR101942010B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JPJP-P-2011-204370 2011-09-20
JP2011204370A JP5988473B2 (ja) 2011-09-20 2011-09-20 モジュールの暗号化/復号化プログラム
PCT/JP2012/065246 WO2013042409A1 (ja) 2011-09-20 2012-06-14 モジュールの暗号化/復号化プログラム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020167028810A Division KR20160123395A (ko) 2011-09-20 2012-06-14 모듈의 암호화/복호화 프로그램

Publications (2)

Publication Number Publication Date
KR20140069176A KR20140069176A (ko) 2014-06-09
KR101942010B1 true KR101942010B1 (ko) 2019-01-24

Family

ID=47914190

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020167028810A KR20160123395A (ko) 2011-09-20 2012-06-14 모듈의 암호화/복호화 프로그램
KR1020147010195A KR101942010B1 (ko) 2011-09-20 2012-06-14 모듈의 암호화/복호화 프로그램

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020167028810A KR20160123395A (ko) 2011-09-20 2012-06-14 모듈의 암호화/복호화 프로그램

Country Status (4)

Country Link
US (1) US9251356B2 (ko)
JP (1) JP5988473B2 (ko)
KR (2) KR20160123395A (ko)
WO (1) WO2013042409A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6083348B2 (ja) * 2013-07-31 2017-02-22 株式会社ソシオネクスト プログラム実行方法および復号装置
CN107430650B (zh) 2015-03-02 2020-10-09 因温特奥股份公司 保护计算机程序以抵御逆向工程
JP2019149763A (ja) * 2018-02-28 2019-09-05 オムロン株式会社 データの処理方法、制御システム、制御装置
US11941109B2 (en) * 2021-12-21 2024-03-26 Cyberark Software Ltd. Customizable and dynamically mutable operating systems

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005018725A (ja) * 2002-08-01 2005-01-20 Matsushita Electric Ind Co Ltd 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法
JP2005050196A (ja) * 2003-07-30 2005-02-24 Matsushita Electric Ind Co Ltd 暗号化プログラム実行方法およびその装置
JP2007148575A (ja) * 2005-11-24 2007-06-14 Fuji Xerox Co Ltd 保護済み実行プログラムの作成のためのプログラム、方法及び装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7752141B1 (en) * 1999-10-18 2010-07-06 Stamps.Com Cryptographic module for secure processing of value-bearing items
US7216110B1 (en) * 1999-10-18 2007-05-08 Stamps.Com Cryptographic module for secure processing of value-bearing items
EP1603001B1 (en) 2002-08-01 2007-10-31 Matsushita Electric Industrial Co., Ltd. Apparatusses and methods for decrypting blocks of data and locating the decrypted blocks of data in memory space used for execution
JP5374751B2 (ja) * 2008-07-31 2013-12-25 株式会社ハイパーテック メモリ管理方法
JP2010217975A (ja) * 2009-03-13 2010-09-30 Nec System Technologies Ltd 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法
JP2011028506A (ja) 2009-07-24 2011-02-10 Renesas Electronics Corp プログラムの難読化方法とプログラムと装置
US8782429B2 (en) * 2009-12-23 2014-07-15 Ab Initio Technology Llc Securing execution of computational resources
US20120331303A1 (en) * 2011-06-23 2012-12-27 Andersson Jonathan E Method and system for preventing execution of malware

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005018725A (ja) * 2002-08-01 2005-01-20 Matsushita Electric Ind Co Ltd 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法
JP2005050196A (ja) * 2003-07-30 2005-02-24 Matsushita Electric Ind Co Ltd 暗号化プログラム実行方法およびその装置
JP2007148575A (ja) * 2005-11-24 2007-06-14 Fuji Xerox Co Ltd 保護済み実行プログラムの作成のためのプログラム、方法及び装置

Also Published As

Publication number Publication date
JP2013065237A (ja) 2013-04-11
US9251356B2 (en) 2016-02-02
WO2013042409A1 (ja) 2013-03-28
JP5988473B2 (ja) 2016-09-07
KR20140069176A (ko) 2014-06-09
KR20160123395A (ko) 2016-10-25
US20150006909A1 (en) 2015-01-01

Similar Documents

Publication Publication Date Title
RU2620712C2 (ru) Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
Wang et al. Steal This Movie: Automatically Bypassing DRM Protection in Streaming Media Services.
CN107273723B (zh) 一种基于so文件加壳的Android平台应用软件保护方法
US20120144208A1 (en) Indexed table based code encrypting/decrypting device and method thereof
CN105022936A (zh) 一种类class文件加密解密方法和装置
CN111240654B (zh) 一种Python代码加固保护的方法及其系统
KR101942010B1 (ko) 모듈의 암호화/복호화 프로그램
JP2006522387A (ja) コンピュータソフトウェアの実行を管理するためのシステムおよび方法
CN114124364A (zh) 密钥安全处理方法、装置、设备及计算机可读存储介质
CN106375080B (zh) 一种flash文件的加密及解密方法及其装置
KR101688814B1 (ko) 주 기억 장치 내부의 코드 수정을 통한 애플리케이션 코드 은닉 장치 및 이를 이용한 애플리케이션 코드 은닉 방법
CN107220528A (zh) Java程序的保护与运行方法、装置和终端
US11023567B2 (en) Software intellectual property protection systems and methods for embedded platforms
JP6554103B2 (ja) 暗号アルゴリズムで使用されるときに秘密データを保護する方法
CN106789051A (zh) 一种保护文件的方法、装置和计算设备
US9378395B2 (en) Method, a device and a computer program support for execution of encrypted computer code
Bahaa-Eldin et al. A comprehensive software copy protection and digital rights management platform
CN109995526A (zh) 一种密钥的存储方法和装置、密钥的调用方法和装置
JP6374454B2 (ja) モジュールの暗号化/復号化プログラム
JP6374453B2 (ja) モジュールの暗号化/復号化プログラム
JP2016028334A (ja) モジュールの暗号化/復号化プログラム
CN107688729B (zh) 基于可信主机的应用程序保护系统及方法
JP6215468B2 (ja) プログラム保護装置
KR101300256B1 (ko) 동적분석 및 정적분석 방지를 통한 소프트웨어 실행파일 보호 방법, 그리고 그에 따른 소프트웨어 실행파일 보호 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
JP4895068B2 (ja) 処理装置及び処理方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
A107 Divisional application of patent
J201 Request for trial against refusal decision
J301 Trial decision

Free format text: TRIAL NUMBER: 2016101005979; TRIAL DECISION FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20161019

Effective date: 20180927

S901 Examination by remand of revocation
GRNO Decision to grant (after opposition)