KR102107872B1 - 컴파일러 기반 난독화 기법 - Google Patents

컴파일러 기반 난독화 기법 Download PDF

Info

Publication number
KR102107872B1
KR102107872B1 KR1020157023260A KR20157023260A KR102107872B1 KR 102107872 B1 KR102107872 B1 KR 102107872B1 KR 1020157023260 A KR1020157023260 A KR 1020157023260A KR 20157023260 A KR20157023260 A KR 20157023260A KR 102107872 B1 KR102107872 B1 KR 102107872B1
Authority
KR
South Korea
Prior art keywords
code
obfuscation
compiler
module
modification
Prior art date
Application number
KR1020157023260A
Other languages
English (en)
Other versions
KR20150122149A (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 KR20150122149A publication Critical patent/KR20150122149A/ko
Application granted granted Critical
Publication of KR102107872B1 publication Critical patent/KR102107872B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

컴파일러 기반 난독화가 개시된다. 난독화를 이용한 코드 프로젝트의 부분을 보호하기 위해, 컴파일 프로세스의 일부로서 코드를 난독화하는 하나 이상의 변형(modification)을 생성하도록, 코드가 컴파일러 내에서 수정된다. 컴파일러 내에서 생성되는 변형을 갖는 코드의 컴파일된 버전이 생성된다. 한 방법에서, 컴파일러는 보호할 코드의 부분을 표시하고 표시된 부분에 대해 행할 변형들을 특정하는 난독화 디스크립션(description)을 사용하도록 구성된다. 대응하는 난독화 특징을 구현하기 위한 컴파일 프로세스 동안 코드의 다양한 다른 수정이 수행될 수 있다. 예를 들어, 컴파일러 내에서 이루어진 수정은 코드의 위조 검출(tamper detection), 안티디버깅, 및/또는 암호화를 가능하게 하도록 설계된 수정들을 포함할 수 있지만, 이들로 제한되지는 않는다.

Description

컴파일러 기반 난독화 기법{COMPILER BASED OBFUSCATION}
애플리케이션 및 기타 코드를 개발하는 것과 연관된 하나의 도전과제는 코드의 민감한 부분들이 수정되거나, 사용불가능하게 되거나, 또는 역공학(reverse engineering)되지 않도록 보호하는 것이다. 예를 들어, 애플리케이션 모듈에 대한 전자 라이센싱 및/또는 디지털 권한 관리를 구현하도록 설계된 코드 부분의 보호(protection)가 수행될 수 있는데, 이는 제3자가 애플리케이션 모듈을 불법으로 사용하고/하거나 분배하기 위해 그 코드에 대해 모종의 작업을 하지 못하도록 하기 위한 것이다. 개발자가 애플리케이션을 소스 코딩하는 동안 일부 보호 대책을 직접 추가할 수 있지만, 이것은 개발자에게는 상당히 부담스럽고 시간 소모적일 수 있다. 다른 방법은 파일들이 컴파일러에 의해 출력된 후에 컴파일된 이진 파일에 보안을 적용하는 것을 포함한다. 그러나, 컴파일된 바이너리를 난독화하는 것은 일부 바이너리를 불안정하게 만들 수 있고, 난독화의 유형 및 이용가능한 코드 최적화를 제한하며, 개발 프로세스에 복잡성 및 시간을 추가한다. 또한, 통상적인 난독화에 사용되는 일부 기법들은 특히 고도의 해커에게는 디스크 상의 바이너리의 정적인 분석을 통해 또는 런타임 시에 검출하기가 매우 쉽다. 통상적인 난독화 기법들의 이들 및 다른 복잡성은 개발자들이 자신의 코드에 효과적인 보안을 추가하는 것을 비효율적으로 만들거나 금지할 수 있는 장벽 작용을 한다.
컴파일러 기반 난독화가 개시된다. 난독화를 이용한 코드 프로젝트의 부분을 보호하기 위해, 컴파일 프로세스의 일부로서 코드를 난독화하는 하나 이상의 변형(modification)을 생성하도록, 코드가 컴파일러 내에서 수정된다. 컴파일러 내에서 생성되는 변형을 갖는 코드의 컴파일된 버전이 생성된다. 한 방법에서, 컴파일러는 보호할 코드의 부분을 표시하고 표시된 부분에 대해 행할 변형들을 특정하는 난독화 디스크립션(description)을 사용하도록 구성된다. 대응하는 난독화 특징을 구현하기 위한 컴파일 프로세스 동안 코드의 다양한 다른 수정이 수행될 수 있다. 예를 들어, 컴파일러 내에서 이루어진 수정은 코드의 위조 검출(tamper detection), 안티디버깅, 및/또는 암호화를 가능하게 하도록 설계된 수정들을 포함할 수 있지만, 이들로 제한되지는 않는다.
본 개요는 후속하여 발명의 상세한 설명 부분에서 설명되는 개념들 중 선택된 것들을 단순화된 형태로 소개하고자 제공되는 것이다. 본 개요는 청구항의 청구대상의 핵심적인 특징이나 필수적인 특징들을 밝히고자 함이 아니며, 청구항의 청구대상의 범위를 결정하는 데 도움이 되고자 함도 아니다.
상세한 설명은 첨부 도면을 참조하여 개시된다. 도면에서, 참조번호의 맨좌측 숫자는 그 참조번호가 처음 나타나는 도면을 나타낸다. 상세한 설명 및 도면에서 상이한 예들에 사용되는 동일한 참조번호는 유사하거나 동일한 항목을 나타낼 수 있다.
도 1은 컴파일러 기반 난독화 기술을 이용하도록 동작가능한 예시적인 구현예의 환경의 일례를 도시한 것이다.
도 2는 난독화로 보호된 컴파일된 코드를 생성하기 위해 일어날 수 있는 동작을 나타내는 예시적인 컴파일러 기반 난독화를 도시한 도면이다.
도 3은 난독화로 보호된 컴파일된 코드가 개발 프로젝트를 위한 컴파일링 코드의 일부로서 생성되는 예시적인 구현예에서의 절차를 도시하는 흐름도이다.
도 4는 컴파일 프로세스의 일부로서 난독화된 코드를 생성하기 위해 중간 언어 코드에 수정이 이루어지는 예시적인 구현예에서의 절차를 도시하는 흐름도이다.
도 5는 통합 개발 환경을 통해 컴파일러 기반 난독화가 수행되는 예시적인 구현예에서의 절차를 도시하는 흐름도이다.
도 6은 본 명세서에 기술된 기법들의 실시예를 구현하는데 이용될 수 있는 예시적인 시스템 및 시스템의 컴포넌트를 도시한 것이다.
개요
제3자가 통상의 난독화 기법을 이용하여 개발자의 코드를 불법으로 사용하거나 배포하지 못하도록, 개발자가 코드에 효과적인 보안(protection)을 추가하는 것은 어렵거나 또는 금지되어 있을 수 있다. 소스 코딩 동안 또는 컴파일러에 의해 출력된 컴파일된 바이너리에 적용된 통상의 난독화 기법은, 제한된 보호 옵션을 제공할 수 있고/있거나, 런타임 시에 검출하기가 상당히 쉬운 기법을 사용하고/하거나, 개발 프로세스에 시간/복잡성/비용을 추가할 수 있다.
본 명세서에서는 컴파일러 기반 난독화가 개시된다. 난독화를 이용한 코드 프로젝트의 부분을 보호하기 위해, 코드가 컴파일러 내에서 수정되어 컴파일 프로세스의 일부로서 코드를 난독화하는 하나 이상의 변형을 생성한다. 컴파일러 내에서 생성되는 변형을 갖는 코드의 컴파일된 버전이 생성된다. 한 방법에서, 컴파일러는 보호할 코드의 부분을 표시하고 표시된 부분에 대해 행할 수정을 특정하는 난독화 디스크립션을 사용하도록 구성된다. 대응하는 난독화 특징들을 구현하기 위해 컴파일 프로세스 동안에 코드에 대해 다양한 수정들이 수행될 수 있다. 예를 들어, 컴파일러 내에서 이루어진 수정은 코드의 암호화, 안티디버깅, 및/또는 위조 검출을 가능하게 하도록 설계된 수정들을 포함할 수 있지만, 이들로 제한되지는 않는다.
이하의 논의에서는, 먼저 본 명세서에서 기술된 컴파일러 기반 난독화 기법을 이용하는 예시적인 환경을 설명한다. 다음으로, 컴파일러 기반 난독화의 예시적인 세부사항을 예시하는 예시적인 프로세스를 설명한다. 그 다음에 예시적인 환경 및 다른 환경에서 수행될 수 있는 절차들을 설명한다. 따라서, 예시적인 절차들의 수행이 예시적인 환경으로 한정되지는 않고, 예시적인 환경이 이들 예시적인 절차들의 수행으로 제한되지도 않는다. 마지막으로, 컴파일러 기반 난독화의 하나 이상의 구현예에서 채용될 수 있는 예시적인 시스템 및 시스템의 컴포넌트를 설명한다.
예시적인 동작 환경
도 1은 본 명세서에서 기술된 기법들을 이용하여 동작가능한 예시적인 구현예의 환경(100)의 일례이다. 도시된 환경(100)은 네트워크(106)를 통해 통신가능하게 연결되어 있는 컴퓨팅 장치(102) 및 웹 서비스(104)를 포함한다. 컴퓨팅 장치(102)는 네트워크(106)를 통해 웹 서비스(104)를 경유하여 이용가능한 다양한 리소스(105)(예컨대, 콘텐츠 및 서비스)에 액세스하여 이와 상호작용하도록 구성될 수 있다. 컴퓨팅 장치(102) 및 웹 서비스(104)는 각각 넓은 범위의 컴퓨팅 장치에 의해 구현될 수 있다.
예를 들어, 컴퓨팅 장치(102)는 데스크탑 컴퓨터, 모바일 스테이션, 엔터테인먼트 기기, 태블릿 또는 슬레이트 장치, 서피스 컴퓨팅 장치, 디스플레이 장치에 통신가능하게 연결된 셋탑 박스, 모바일 통신 장치(예컨대, 무선 전화), 게임 콘솔 등과 같은, 네트워크(106)를 통해 통신할 수 있는 컴퓨터로서 구성될 수 있다. 컴퓨팅 장치(102)는 다양한 처리 시스템을 이용하는 임의의 적절한 컴퓨팅 시스템 및/또는 장치로서 구성될 수 있으며, 그 몇몇 추가적인 예들이 도 6의 예시적인 시스템과 관련하여 논의된다.
컴퓨팅 장치(102)는 또한 운영 체제(108)를 포함하는 것으로 도시되어 있다. 일반적으로, 운영 체제(108)는 컴퓨팅 장치(102) 상에서 실행가능한 애플리케이션(110)에 대한 컴퓨팅 장치(102)의 기본 기능(underlying functionality)을 추상화하도록 구성된다. 예를 들어, 운영 체제(108)는, 애플리케이션(110)이 어떻게 이 기본 기능이 구현되는지를 모르는 채로 기록될 수 있도록, 프로세싱, 메모리, 네트워크, 및/또는 컴퓨팅 장치(102)의 디스플레이 기능을 추상화할 수 있다. 예를 들어, 애플리케이션(110)은 디스플레이 장치에 의해 렌더링되고 디스플레이될 데이터를 이 렌더링이 수행되는 방법을 이해하지 못한 채로 운영 체제(108)에 제공할 수 있다. 운영 체제(108)는 애플리케이션(110)이 시스템 피처를 이용하기 위해 호출할 수 있는 다양한 서비스, 인터페이스, 및 기능을 제공할 수 있다. 넓은 범위의 기능을 컴퓨팅 장치(102)에 제공하는 다양한 애플리케이션(110)은, 예컨대 브라우저, 오피스 생산성 애플리케이션, 이메일 클라이언트, 멀티미디어 관리 프로그램, 장치 관리 소프트웨어, 소프트웨어 개발 환경 및 네트워킹 애플리케이션을 포함하는 것으로 고려된다.
컴퓨팅 장치(102)는 또한 애플리케이션(110)의 개발을 위한 IDE(integrated development environment)를 제공하도록 동작가능한 기능을 나타내는 개발 모듈(112)을 포함한다. 개발 모듈(112)은 일반적으로 애플리케이션의 설계, 개발, 테스트, 및/또는 배포에 대한 지원을 포함하는 애플리케이션 라이프사이클 관리를 제공한다. 개발 모듈(112)은, 코드 에디터, 하나 이상의 컴파일러, 빌드(build) 자동화 툴, 디버거 등과 같은 애플리케이션 개발을 단순화하기 위해, 상이한 프로그래밍 언어를 지원하고 상이한 컴포넌트들을 통합할 수 있다. 따라서, 개발 모듈(112)은 애플리케이션(110)을 구축하기 위해 프로젝트에 대한 소스 콘텐츠/코드를 생성/편집하고 소스 콘텐츠/코드를 컴파일하기 위한 기능을 개발자에게 제공한다.
본 명세서에 기술된 기법들에 따르면, 개발 모듈(112)은 본 명세서에 기술된 바와 같이 동작하는 컴파일러 모듈(114) 및 난독화 모듈(116)을 더 포함할 수 있고 이를 이용할 수 있다. 컴파일러 모듈(114)은 개발 프로젝트용 소스 코드 파일을 기계어 코드 및 실행파일(예컨대, 오브젝트 코드, 이진 파일, 실행 파일 등)로 변환하기 위한 컴파일 프로세스를 구현하도록 동작가능한 기능을 나타낸다. 컴파일러 모듈(114)은 복수의 별개의 서브 모듈, 처리 단계, 및/또는 컴파일링 단계를 포함할 수도 있다. 예를 들어, 컴파일러 모듈은 프론트엔드 컴파일러 및 백엔드 컴파일러를 포함할 수 있다. 난독화 모듈(116)은 독립형 모듈로서 도시되어 있지만 컴파일러 모듈(114)의 통합 컴포넌트로서 제공될 수도 있다. 또한, 일부 구현예에서, 개발 모듈(112), 컴파일러 모듈(114), 및 난독화 모듈(116) 중 하나 이상은 네트워크(106)를 통해 클라이언트에게 액세스가능해지는 웹 서비스로서(예컨대, "클라우드 내의" 개발 서비스 또는 난독화 서비스로서) 구성될 수 있다. 이 예에서, 개발자는, 온라인에서 이용가능한 리소스(105)로서 코드 난독화 툴/인터페이스를 포함하는 애플리케이션 개발 툴을 제공하는 웹 서비스(104)와의 상호작용을 통해 애플리케이션을 개발할 수 있다.
난독화 모듈(116)은 컴파일러 모듈(114)에 의해 수행된 컴파일 프로세스의 일부로서 코드 난독화 기법을 가능하게 하도록 동작할 수 있는 기능을 나타낸다. 일반적으로, 본 명세서에서 사용된 난독화는 코드를 이해하기 어렵게 만드는 여러 방식으로 그 코드를 수정하는 것을 말한다. 난독화는 코드가 인터셉트되어 암호화되지않고 보여지는 경우에도 그 코드의 의미와 목적을 숨기는데 이용될 수 있다. 이것은 코드를 위조하거나 또는 역공학하려고 시도하는 해커에 대항하는 수준의 보안을 생성한다. 전통적인 기법들과 달리, 난독화는 컴파일 프로세스에서 발생한다. 따라서, 컴파일러 모듈(114)은, 소스 코드의 적어도 일부분을 난독화하기 위해 수정을 적용하기 위해 컴파일 동안 난독화 모듈(116)을 호출하거나, 이와 상호작용하거나 또는 이용하도록 구성될 수 있다. 적어도 몇몇 구현예에서, 개발자는 개발 모듈(112) 및/또는 난독화 모듈(116)과 상호작용하여 소스 코드 중 난독화로 보호할 특정 부분을 지정하고 또한 그 부분에 대한 수정을 정의하기 위한 난독화 디스크립션을 생성할 수 있다. 난독화 디스크립션은 컴파일 동안 소스 코드의 지정된 부분에 대한 수정을 구현하도록 컴파일러 모듈(114)에게 지시하기에 적합한 인스트럭션으로 구성될 수 있다. 코드를 난독화하는 다양한 종류의 수정 및 기술이 고려될 수 있는데, 그 중 일부 예들이 다음의 도면들과 관련하여 설명된다.
예시적인 동작 환경을 살펴봤으므로, 이제 하나 이상의 실시예에 따른 컴파일러 기반의 난독화에 대한 몇몇 예시적인 세부사항을 검토해보자.
컴파일러 기반 난독화의 세부사항
이하의 논의는 전술한 시스템 및 장치를 활용하여 구현될 수 있는 컴파일러 기반의 난독화 기법들의 구현예의 세부사항을 설명한다. 컴파일러 기반 난독화의 특징들은 도 2에 도시된 예시적인 시나리오를 참조하여 설명한다. 구체적으로, 도 2는, 일반적으로 200에서, 일부 구현예에 따른 컴파일 동안 코드를 난독화함으로써 보호된 컴파일된 코드를 생성하는데 이용될 수 있는 개발 모듈(112)의 컴포넌트 및 동작에 대한 세부사항을 도시한다.
동작 중에, 개발자는 개발 모듈(112)을 사용하여 애플리케이션에 대한 프로젝트에서 소스 코드(202)(예컨대, 코드 모듈, 콘텐츠, 스크립트, 이미지, 스타일, 주석 등)를 설계하고, 정의하고, 생성하고 편집할 수 있다. 개발 모듈(112)은 하나 또는 복수의 상이한 프로그래밍 언어로 프로그래밍하는 소프트웨어를 지원할 수 있다. 일반적으로, 본 명세서에 기술된 컴파일러 기반 난독화 기법은 다양한 프로그래밍 언어, IDE, 컴파일러 등을 이용할 수 있다.
개발 프로젝트의 일환으로서, 소스 코드(202)와 연관되는 난독화 디스크립션(204)을 생성하기 위해 난독화 모듈(116)이 호출될 수 있다. 한 방법에서는, 개발자가 소스 코드(202)의 부분들에 대해 난독화 디스크립션(204)을 생성하도록 선택할 수 있게 하는 인터페이스가 노출될 수 있다. 전술한 바와 같이, 난독화 디스크립션(204)은 난독화할 소스 코드(202)의 적어도 일부분을 지정하고 이들 부분에 대해 이루어질 수정을 정의하도록 구성된다. 한 방법에서, 난독화 디스크립션(204)은 대응 난독화를 구현하기 위해 컴파일러 모듈(114)에 의해 사용될 수 있는 다양한 디렉티브(directive)(206)를 포함할 수 있다. 난독화 모듈(116)은 적절한 인터페이스를 통해 개발자에 의해 행해진 선택에 따라 자동으로 디렉티브(206)를 생성하도록 구성될 수 있다.
디렉티브(206)는 다양한 방법으로 보안을 위해 개발자에 의해 선택되는 소스 코드(202)의 일부를 식별하도록 구성될 수 있다. 디렉티브(206)는 또한 상이한 유형의 수정, 난독화 알고리즘, 설정, 및 수정을 하기 위해 컴파일 동안 해석되고 적용될 수 있는 기타 파라미터를 정의하도록 구성될 수 있다. 일부 구현예에서, 디렉티브(206)는 소스 코드(202)의 선택된 부분들에 대해 지정된 하나 이상의 수정을 구현하기 위한 소스 코드의 부분들을 포함하도록 생성된다. 수정들은 일반적으로 일부 방식으로 코드를 난독화하도록 코드를 조작하도록 설계된다. 이것은 코드의 왜곡(distortion), 심볼/신택스 대체, 블록 또는 모듈의 재정렬, 코드에의 삽입, 브랜치, 함수 재배치, 점프 인스트럭션의 추가, 레이아웃 및 프로그램 흐름 조작, 민감한 코드 부분들의 암호화 등을 포함할 수 있지만, 이들로 한정되지는 않는다.
수정들은 또한 런타임에서 난독화된 형태로 실행할 하나 이상의 함수의 시각화를 포함할 수 있다. 여기서, 가상 실행 환경은 수정된 시각화된 형태로 표현된 커맨드/인스트럭션을 해석하는 적어도 하나의 함수에 대해 정의된다. 인스트럭션의 수정된 난독화된 표현은 암호화되지않고 인터셉트된 경우에도 해커가 해석하기 어려운 바이트 코드 값일 수 있다. 런타임 시에, 가상 실행 환경은 실제로는 수정된 난독화된 형태로 표현되는 인스트럭션의 동작을 시뮬레이트 또는 에뮬레이트한다. 이런 방법으로, 표현되는 기본 명령어(underlying instruction)의 노출이 회피될 수 있다.
컴파일러 모듈(114)은 소스 코드(202) 스캐닝, 코드 파싱, 신택스 검증, 소스 코드를 중간 언어(IL) 코드로 변환하기, 코드 및 레이아웃 최적화, 및 컴파일된 출력 파일(예컨대, 이진 파일, 어셈블리 코드, 오브젝트 코드 등) 생성을 포함하는 동작을 수행하도록 구성될 수 있다. 이 프로세스의 일부로서, 컴파일러 모듈(114)은 대응하는 수정을 실행하기 위해 디렉티브(206)에 의해 지정된 선택된 난독화 알고리즘을 적용할 수 있다. 코드의 난독화를 위한 코드의 적절한 수정을 생성하기 위한 임의의 적절한 알고리즘이 이용될 수 있다. 코드의 적어도 일부분은 디렉티브(206)를 통해 난독화를 위해 선택될 수 있는 반면에, 코드의 다른 부분은 난독화되지 않은 채로/수정되지 않은 채로 유지될 수 있다. 난독화를 위해 선택되는 코드의 각 부분에 하나 이상의 다른 알고리즘이 적용될 수 있다. 한 방법에서, 난독화를 실행하기 위한 상이한 알고리즘 또는 알고리즘의 변형이 컴파일 프로세스의 일부로서 온더플라이(on the fly)로(예컨대, 필요에 따라 동적으로) 생성된다. 따라서, 코드의 상이한 부분을 난독화하기 위해 상이한 기술 및 알고리즘이 이용될 수 있다. 해커/악의적인 관계자는 각각의 난독화된 코드 부분에 사용된 각각의 개별 기법 및 알고리즘을 발견하여 디코딩하지 않고 코드의 목적 및/또는 의미를 충분히 이해하지 못할 수 있기 때문에, 상이한 코드 부분에 대해 상이한 알고리즘을 이용하는 것은 코드를 역공학하려는 시도를 더욱 복잡하게 한다.
또한, 난독화는 각 부분에 대해 개별화될 수 있다. 예를 들어, 암호화는 일부 민감한 디지털 권한 코드 부분에 적용될 수 있는 반면에, 코드 재배치 및 레이아웃 수정은 제각기의 상이한 보안 레벨을 제공하기 위해 덜 민감한 코드에 사용될 수 있다. 추가적인 보호된 부분에 점프 인스트럭션 및 심볼 대체가 선택적으로 적용될 수 있다. 난독화를 인코딩/디코딩하기 위한 또 다른 키 쌍 및/또는 대체 패턴이 상이한 보호된 부분에 대해 동적으로 생성될 수 있다. 상이한 키 쌍 및/또는 대체 패턴은 상이한 보호된 부분에 대해서뿐만 아니라 상이한 프로젝트/애플리케이션에 걸쳐 알고리즘 체계를 변화시키고/변화시키거나 난독화 알고리즘을 개인화하는데 이용될 수 있다. 인코딩/디코딩 키는 랜덤으로 생성된 키, 체크섬 또는 해시에 기초하여 유도된 키, 정적 키 값 등일 수 있다. 코드의 다른 부분은 수정되지 않고 난독화에 의해 보호되지 않은 채로 유지될 수 있다.
따라서, 각각의 코드 부분에 대해 적절한 보안 레벨이 선택될 수 있고, 각 부분마다 변하는 대응 기법/알고리즘이 부분들에 각각 적용될 수 있다. 각각의 예에 적용된 각각의 프로젝트 및 기법에 사용된 특정한 난독화 구성은 코드의 임의의 주어진 부분에 사용된 보안의 유형을 결정하기 어렵게 하기 위해 변할 수 있다. 이런 방식으로, 난독화 정의(204) 및/또는 디렉티브(206)에 의해 지시된 대로 보안을 개인화하기 위해 상이한 난독화 특징 및 수정이 보호된 코드의 복수의 부분에 대해 개별 단위로 적용될 수 있다.
따라서, 난독화 모듈(116)은 컴파일러에서 발생하는 난독화를 정의하는 디렉티브(206)를 생성하도록 호출될 수 있다. 예를 들어, 개발자는 난독화 모듈(116)을 통해 보호할 적어도 일부 코드 부분, 예컨대 디지털 라이센싱 및 권한 관리와 관련되는 코드를 선택할 수 있다. 이 액션은 컴파일러에 의해 사용할 난독화 디스크립션(204)을 생성한다. 그 후, 도 2에 도시된 바와 같이 프로젝트를 위한 소스 코드(202) 및 디렉티브(206)를 갖는 대응하는 난독화 디스크립션(204)이 컴파일러 모듈(114)에 대한 입력으로 제공될 수 있다.
일반적으로, 컴파일러 모듈(114)은 개발 프로젝트에 대한 소스 코드(202)를 그 코드의 컴파일되고 보호된(예컨대, 난독화된) 버전으로 변환하는 난독화 모듈(116)의 영향 하에 동작할 수 있는 기능을 나타낸다. 전술한 바와 같이, 컴파일러 모듈(114)은 복수의 별도의 서브모듈, 처리 단계, 및/또는 컴파일링 스테이지를 포함할 수 있다. 예를 들어, 컴파일러 모듈은 프런트엔드(front-end) 컴파일러 및 백엔드(back-end) 컴파일러 또는 또는 기능의 다른 부분을 포함할 수 있다.
도 2에 도시된 바와 같이, 컴파일러 모듈(114)은 소스 코드(202)를 분석하고 소스 코드(202)를 중간 언어 코드(210)(예컨대, IL 코드)로 변환하는 전처리 동작(208)을 수행할 수 있다. IL 코드는 소스 코드의 전처리에 기초하여 생성된 하이 레벨 인스트럭션을 나타낸다. IL 코드의 하이 레벨 인스트럭션은 후에 저 수준 머신 코드를 생성하는 컴파일 프로세스에서 사용될 수 있다. IL 코드는 또한 난독화 기능을 가능하게 하는 난독화 디스크립션(204)으로부터 도출된 런타임 인스트럭션을 포함할 수도 있다. 따라서, 중간 언어 코드(210)는 컴파일 프로세스에서 다양한 수정을 구현하기 위해 난독화 디스크립션(204)에 의해 표시된 코드 부분과 소스 코드(202)의 조합을 나타낼 수 있다.
예를 들어, 전처리 동작(208)은 난독화 디스크립션(204)으로부터 런타임 인스트럭션을 유도하기 위해 토크나이저(tokenizer) 또는 유사 기능을 이용하여 난독화 디스크립션(204)으로부터 런타임 인스트럭션을 유도할 수 있다. 여기서, 토크나이저는 난독화 디스크립션(204)을 분석하고 해석하여 디렉티브(206)를 갖는 런타임 파일을 중간 언어로 확장되기에 적합한 포맷으로 생성할 수 있다. 토크나이저는 또한 컴파일 동안 적용될 다양한 수정에 대한 구성을 기술하는 토큰을 생성할 수 있다. 토큰은 컴파일러 기반 난독화에 대해 정의된 스키마(schema)에 따라 수정에 대한 구성 데이터를 나타내는 문자열로 이루어진 키 값 쌍으로서 구현될 수 있다. 그 다음에, 디렉티브가 확장되고 토큰이 대응하는 중간 언어 코드로 대체되어 난독화를 구현하기 위해 컴파일된 코드에 포함될 함수, 데이터 구조, 및 알고리즘에 대한 소스 난독화 코드를 포함하는 전처리된 런타임 파일을 생성할 수 있다.
또한, 전처리 동작(208)은 프런트엔드 컴파일러 또는 유사한 기능을 이용하여 프로젝트를 위한 소스 코드(202)를 소스 난독화 코드와 결합하고 결합된 코드를 중간 언어 코드(210)로 사전 컴파일할 수 있다. 즉, 난독화 디스크립션(204) 및/또는 관련 디렉티브(206)는 소스 코드에 수행할 수정을 나타내는 소스 난독화 코드를 생성하기 위한 전처리 동작(208)에 사용될 수 있다. 그 다음에, 프로젝트를 위한 소스 코드 및 소스 난독화 코드가 프런트엔드 컴파일러 등을 통해 수행될 수 있는 사전 컴파일 단계에서 함께 연결된다. 전처리 동작(208)의 결과는 소스 코드(202) 및 난독화를 위한 구성 정보를 결합하는 중간 언어 코드(210)이다.
중간 언어 코드(210)는 그 후 컴파일러 모듈(114)에 의해 구현되는 컴파일 프로세스의 후속 단계에서 사용될 수 있다. 도 2에 도시된 바와 같이, 이것은 중간 언어 코드(210)를 입력으로서 취하고 그에 따라 코드를 수정하여 난독화된 중간 언어 코드(214)를 생성하는 난독화 프로세스(212)를 포함한다. 따라서, 난독화는, 이미 컴파일된 버전의 코드에서 동작하거나 또는 개발자에게 소스 코드 개발 동안 시간/리소스 집약적 수정을 수행할 것을 요구하는 통상의 기법과 반대로 컴파일러 내에서 발생한다.
그 다음에, 난독화된 중간 언어 코드(214)는 컴파일 프로세스(216)에서 컴파일되어 코드를 난독화하기 위해 다양한 수정이 이루어지는 보호된 컴파일된 코드(218)를 생성한다. 일반적으로, 컴파일 프로세스(216)는 코드를 바이너리, 오브젝트 코드, 어셈블리 코드 등과 같은 저 수준 머신 코드로 변환하는 것을 포함한다. 따라서, 본 명세서에서 사용되는 컴파일 프로세스(216)는 IL 코드를 적절한 저 수준 머신 코드로 변환하는 동작들을 지칭한다. 난독화 프로세스(212) 및 컴파일 프로세스(216)는 백엔드 컴파일러 또는 컴파일러 모듈(114)에 의해 구현된 다른 유사한 기능에 의해 발생할 수 있다. 또한, 중간 언어 코드의 난독화 및 컴파일링은 상이한 보호 부분에 대해 순차적으로(도시된 바와 같이), 동시에 또는 다른 방식으로 일어날 수도 있다.
한 방법에서는, 입력 중간 언어 코드(210)가 컴파일러 모듈(114)(예컨대, 백엔드 컴파일러) 및 난독화 모듈(116)에 의해 동작되는 튜플 스트림으로 변환된다. 여기서, 컴파일러 모듈(114)은 난독화 디스크립션(204)에 의해 지정되고 중간 언어 코드(210)에 반영된 수정을 구현하기 위한 다양한 방법으로 난독화 모듈(116)과 상호작용할 수 있다. 상호작용은 통신, 데이터 교환 및 컴파일러 모듈(114)과 난독화 모듈(116) 사이의 다른 상호작용을 용이하게 하는 적절한 인터페이스(220)를 통해 일어날 수 있다.
일실시예에서, 컴파일러 모듈(114)은, IL 코드가 처리 중일 때 심볼, 데이터 유형, 상태 및 함수의 상태에 관한 구성 정보를 난독화 모듈에 전달하기 위해, 컴파일 동안 난독화 모듈(116)을 호출하도록 구성된다. 난독화 모듈(116)은 컴파일러 모듈(114)로부터 획득된 정보를 이용하여 보호할 데이터 및 함수를 결정하고 난독화의 유형 및 수행할 수정을 확인할 수 있다. 여기서, 난독화 모듈(116)은 컴파일러 모듈(114)과 별개의 컴포넌트로서 구현될 수 있으며, 따라서 지정된 수정을 직접 하는 것이 불가능할 수 있다. 대신에, 난독화 모듈(116)은 컴파일러 모듈(114)에 의해 제공된 구성 정보를 처리하고, 구성 정보로 나타내어지는 수정을 인식하고, 컴파일러 모듈에게 대신 수정을 하게 하도록 구성되는 정보를 컴파일러 모듈에게 송신한다. 예를 들어, 난독화 모듈(116)은 컴파일러 모듈(114)에게 호(call)를 삽입하거나, 소정의 값을 획득 또는 설정하거나, 함수를 암호화하거나, 및/또는 코드를 난독화하기 위한 다른 종류의 수정을 하도록 지시할 수 있는데, 그 예는 위에서 기술하였으며 또한 후술할 것이다. 이에 더하여 또는 이에 갈음하여, 난독화 모듈(116)은 컴파일러 모듈(114) 및/또는 백엔드 컴파일러의 컴포넌트로서 구현될 수 있으며, 따라서 IL 코드에 직접 수정하도록 동작할 수 있다.
전술한 바와 같이 다양한 다른 종류의 수정이 고려된다. 이들 수정은 위조 검출, 안티-디버깅, 및/또는 암호화와 같은 난독화 특징/기능을 구현하는데 이용될 수 있다. 일 구현예에서, 수정은 런타임 시의 힙 실행, 코드 부분의 암호/해독, 및 코드의 검증 중 하나 이상을 가능하게 하도록 설계된다. 이들 및 다른 컴파일러 기반 난독화 특징을 구현하기 위해 이용될 수 있는 수정에 대한 일부 비제한적인 예로는 심볼 속성 및 동작에 대한 변경, 복제 함수의 생성, 호 재지정(call redirection), 코드 블록의 분할, 코드 블록의 재정렬, 호 재배치, 특정 코드 세그먼트들 사이의 절대 기준 설정, 및 엔트리 포인트의 수정을 들 수 있다. 포기 리스트(forgoing list) 내의 하나 이상의 예시적인 수정은 힙 실행 및 다른 난독화 특징을 가능하게 할 수 있다. 수정들은 체크섬, 검증기 모듈, 및/또는 검증 특징을 구현하고 또한 다른 난독화 특징을 용이하게 하기 위한 검증 코드의 삽입을 포함할 수 있다. 또한, 수정은 코드의 지정된 부분에 대한 암호화를 구현하기 위해 코드 부분의 암호화 및/또는 해독/재암호화 코드의 추가를 포함할 수 있다. 컴파일러 기반 코드 난독화에 대한 이들 및 다른 특징들에 대한 추가적인 세부사항은 다음의 예시적인 절차의 논의에서 찾아볼 수 있을 것이다.
예시적인 절차
이 섹션에서는, 임의의 적절한 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합과 함께 구현될 수 있는 컴파일러 기반 난독화에 대한 예시적인 절차를 논의한다. 이들 절차는 하나 이상의 장치에 의해 수행된 동작들을 지정하는 블록들의 세트로서 도시되며, 제각기의 블록에 의한 동작을 수행하기 위해 반드시 도시된 순서로 제한되지는 않는다. 적어도 일부 실시예에서, 이들 절차는 도 1의 예시적인 컴퓨팅 장치(102)와 같은 적절히 구성된 컴퓨팅 장치를 통해 구현될 수 있다. 절차들의 특징들은 컴퓨팅 장치의 개발 모듈(112)을 통해 구현될 수 있다. 또한, 개발 모듈은 예시적인 절차들과 관련하여 설명되는 동작들 중 적어도 일부를 수행하도록 구성된 난독화 모듈(116) 및/또는 컴파일러 모듈을 포함하거나 이용할 수 있다.
도 3은 개발 프로젝트를 위한 코드를 컴파일하는 것의 일환으로 난독화에 의해 보호된 컴파일된 코드가 생성되는 구현예의 절차(300)를 도시한 것이다. 예를 들어, 절차(300)는 개발 모듈(112)의 하나 이상의 컴파일러 모듈(114)을 통해 수행된 예시적인 동작을 나타낼 수 있다. 코드의 컴파일의 일환으로 그 코드의 일부분을 난독화하기 위해 컴파일 내에서 코드가 수정되어 하나 이상의 수정이 생성된다(블록(302)). 예를 들어, 개발 모듈(112)의 컴파일러(예컨대, 컴파일러 모듈(114))가 애플리케이션 개발 프로젝트를 컴파일하기 위해 호출될 수 있다. 도 2와 관련하여 설명한 바와 같이, 컴파일러는 관련 소스 코드를 난독화하는 방법을 기술하는 디렉티브(206)를 갖는 난독화 디스크립션(204)을 제공하는 난독화 모듈(116)을 포함하거나 또는 이와 상호작용할 수 있다. 디렉티브(206)는 컴파일러로 하여금 소스 코드를 컴파일링하는 것의 일부로서 다양한 수정을 구현하게 하도록 구성된다. 컴파일러는 난독화 모듈과 함께 동작하여 프로젝트 내의 코드의 적어도 일부분에 대해 지정된 수정을 할 수 있다. 전술한 바와 같이 다양한 수정이 고려될 수 있다. 이들 수정은 제한적인 것은 아니지만 코드의 암호화, 검증 및 힙 실행을 포함하는 개발 모듈에 의해 지원되는 상이한 유형의 난독화 특징을 생성하는데 이용된다.
컴파일러 내에서 생성된 코드의 일부분을 난독화하기 위한 수정을 갖는 코드의 컴파일된 버전이 컴파일러에 의해 생성된다(블록(304)). 예를 들어, 다양한 수정을 통해 난독화되는 코드는 컴파일러에 의해 컴파일되어 컴파일된 코드를 생성한다. 컴파일된 코드는 적절한 기계어의 이진 파일 또는 다른 로우 레벨 파일일 수 있다. 컴파일러에 의해 출력되는 컴파일된 코드는 컴파일러 자체 내에서 구현되는 난독화를 포함한다.
도 4는 중간 언어 코드에 수정이 행해져서 난독화된 코드를 생성하는 구현예에서의 절차(400)를 도시한 흐름도이다. 예를 들어, 절차(400)는 난독화 모듈(116)을 포함하거나 이용하는 컴파일러 모듈(114)을 통해 수행된 예시적인 동작을 나타낼 수 있다. 개발 프로젝트를 위한 소스 코드 중 보호할 부분을 나타내는 디렉티브 및 나타낸 부분을 난독화하도록 하기 위한 수정이 획득된다(블록(402)). 예를 들어, 관련 소스 코드의 컴파일 동안 컴파일러 모듈(114)에 의해 사용되도록 난독화 디스크립션(204)에 포함된 디렉티브(206)가 난독화 모듈(116)에 의해 제공될 수 있다. 디렉티브(206)는 전술한 바와 같이 수행할 여러 수정을 특정하고 보호할 코드의 특정 부분을 나타낼 수 있다.
소스 코드를 디렉티브를 구현하기 위한 코드와 결합한 중간 언어 코드가 생성된다(블록(404)). 이것은 도 2와 관련하여 설명한 방식으로 일어난다. 예를 들어, 난독화 소스 코드를 생성하기 위한 전처리가 발생한다. 난독화 소스 코드는 프로젝트를 위한 소스 코드와 결합되고 중간 언어 포맷으로 사전 컴파일된다. 한 방법에서, 컴파일 프로세스의 후속 단계에서의 처리를 위해 결합된 IL 코드를 갖는 단일 오브젝트 파일이 출력된다.
디렉티브는 디렉티브에 따라서 표시된 부분을 수정하도록 중간 언어 코드에 적용된다(블록(406)). 그 다음에, 중간 언어 코드에 대한 디렉티브의 적용에 의해 생성된 난독화된 코드가 컴파일되고(블록(408)), 개발 프로젝트를 위한 보호된 컴파일된 코드가 출력된다(블록(410)). 여기서, 컴파일러 모듈(114)은 결합된 IL 코드를 처리하여 지정되는 다양한 수정을 실행하도록 동작할 수 있다. 그렇게 하기 위해, 컴파일러는 전술한 바와 같이 난독화 모듈(116)을 호출하고/하거나 이와 상호작용할 수 있다. 컴파일러 모듈(114)은 또한 IL 코드를 저 수준 기계 코드(예컨대, 바이너리)로 낮추기 위해 코드를 컴파일하도록 구성될 수 있다. 일반적으로, 이것은 코드의 분석, 신택스의 인식 및 검증, 심볼 대체, 코드의 레이아웃 및 최적화, 소스 코드를 컴파일하기 위해 통상적으로 수행된 기타 동작들을 포함할 수 있다. 그 결과 제3자에 의한 조작 및 역공학으로부터의 다양한 난독화에 의해 보호되는 코드의 컴파일된 버전이 생성된다.
도 5는 컴파일러 기반 난독화가 통합 개발 환경을 통해 수행되는 구현예에서의 절차(500)를 도시한 흐름도이다. 예를 들어, 절차(500)는 데스크탑 패키지, 온라인 웹 서비스 등으로서 이용가능한 IDE(integrated development environment)를 나타내는 개발 모듈(112)을 통해 수행된 예시적인 동작들을 나타낼 수 있다. 소프트웨어 개발 프로젝트를 위한 소스 코드의 생성을 가능하게 하기 위한 개발 인터페이스가 노출된다(블록(502)). 예를 들어, 애플리케이션 또는 다른 프로젝트를 위한 소스 코드를 생성하기 위해 개발 모듈(112)이 개발자에 의해 이용될 수 있다. 개발 모듈(112)은 컴파일러 기반 난독화를 구현하기 위해 본 명세서에 기술된 바와 같이 동작하는 난독화 모듈(116)을 포함하거나 이용할 수 있다.
소스 코드는, 소스 코드의 하나 이상의 선택된 부분을 난독화하기 위해 소스 코드의 컴파일 동안 컴파일러가 행할 수정을 특정하는 개발 인터페이스를 통해 생성된 난독화 디스크립션과 연관된다(블록(504)). 여기서, 난독화 모듈(116)이 호출되어 코드의 하나 이상의 부분에 대해 지정된 수정을 나타내는 디렉티브(206)를 포함하는 난독화 디스크립션(204)을 생성할 수 있다. 코드의 부분들에 대해 개별 단위로 다양한 수정이 선택적으로 지정될 수 있다.
하나 이상의 선택된 부분을 난독화하기 위해 지정된 수정을 실시하는 난독화 디스크립션을 이용하여 개발 프로젝트를 위한 보호된 컴파일된 코드를 생성하도록 소스 코드가 컴파일된다(블록(506)). 예를 들어, 컴파일러 모듈(14)은 난독화 디스크립션(204)을 획득하고 해석하여 컴파일 동안 코드의 대응 수정을 실행할 수 있다. 본 명세서에서 논의되는 바와 같이 컴파일러 모듈(114)은 수정을 직접 실행하거나 또는 수정을 지시하는 난독화 모듈(116)에 의존할 수 있다. 제3자가 결과의 코드를 이해하기 어렵고 해석하기 어려우며 역공학하기 어렵게 만드는 하나 이상의 유형의 난독화로 보호되는 컴파일된 코드를 생성하기 위한 전술한 다양한 수정이 이루어질 수 있다.
컴파일러 기반 난독화를 위한 예시적인 절차들을 살펴봤으므로, 이제 본 명세서에 기술된 기법들의 실시에를 구현하기 위해 이용될 수 있는 예시적인 시스템 및 컴포넌트에 대한 논의를 검토해보자.
예시적인 시스템
도 6은 본 명세서에 기술된 다양한 기법들을 구현할 수 있는 하나 이상의 컴퓨팅 시스템 및/또는 장치를 나타내는 예시적인 컴퓨팅 장치(602)를 포함하는 예시적인 시스템(600)을 도시한 것이다. 컴퓨팅 장치(602)는, 예를 들어 서비스 제공자의 서버, 클라이언트(예컨대, 클라이언트 장치)와 연관된 장치, 온칩 시스템, 및/또는 기타 다른 적합한 컴퓨팅 장치 또는 컴퓨팅 시스템일 수 있다.
도시된 예시적인 컴퓨팅 장치(602)는 서로 통신가능하게 연결되어 있는 처리 시스템(604), 하나 이상의 컴퓨터 판독가능 매체(606), 및 하나 이상의 I/O 인터페이스(608)를 포함한다. 도시되어 있지는 않지만, 컴퓨팅 장치(602)는 다양한 컴포넌트들을 서로 연결하는 시스템 버스 또는 다른 데이터 및 커맨드 전송 시스템을 더 포함할 수 있다. 시스템 버스는 메모리 버스 또는 메모리 컨트롤러, 주변 버스, 범용 직렬 버스, 및/또는 프로세서 또는 로컬 버스와 같은 상이한 버스 구조의 임의의 하나 이상의 조합을 포함할 수 있다. 제어 및 데이터 라인과 같은 다양한 다른 예들이 고려된다.
처리 시스템(604)은 하드웨어를 사용하여 하나 이상의 동작을 수행하는 기능을 나타낸다. 따라서, 처리 시스템(604)은 프로세서, 기능 블록 등으로 구성될 수 있는 하드웨어 요소(610)를 포함하는 것으로 도시되어 있다. 이것은 하나 이상의 반도체를 이용하여 형성된 애플리케이션 특정 집적 회로 또는 다른 로직 장치로서의 하드웨어 구현을 포함할 수 있다. 하드웨어 요소(610)는 이들을 형성하는 재료 또는 그 내부에서 이용되는 처리 메커니즘에 의해 제한되지 않는다. 예를 들어, 프로세서는 반도체 및/또는 트랜지스터(예컨대 전자 집적 회로(IC))로 이루어질 수 있다. 이러한 상황에서, 프로세서 실행가능 명령어는 전자적으로 실행가능한 명령어일 수 있다.
컴퓨터 판독가능 매체(606)는 메모리/저장부(612)를 포함하는 것으로 도시되어 있다. 메모리/저장부(612)는 하나 이상의 컴퓨터 판독가능 매체와 연관된 메모리/저장 용량을 나타낸다. 메모리/저장부(612)는 휘발성 매체(예컨대, RAM) 및/또는 비휘발성 매체(예컨대, ROM, 플래시 메모리, 광학 디스크, 자기 디스크 등)를 포함할 수 있다. 메모리/저장부(612)는 고정식 매체(예컨대, RAM, ROM, 고정식 하드 드라이브 등) 및 착탈식 매체(예컨대, 플래시 메모리, 착탈실 하드 드라이브, 광 디스크 등)를 포함할 수 있다. 컴퓨터 판독가능 매체(606)는 후술하는 바와 같이 다양한 방식으로 구성될 수 있다.
입력/출력 인터페이스(608)는, 사용자가 컴퓨팅 장치(602)에 커맨드 및 명령어를 입력할 수 있게 하고 또한 사용자 및/또는 다양한 입력/출력 장치에 사용하는 다른 컴포넌트 또는 장치에게 정보를 제시할 수 있게 하는 기능을 나타낸다. 입력 장치의 예로는 키보드, 커서 제어 장치(예컨대, 마우스), 음성 동작을 위한 마이크로폰, 스캐너, 터치 기능(예컨대, 물리적 터치를 검출하도록 구성되는 용량성 센서 또는 기타 센서), (예컨대, 터치를 제스처로서 포함하지 않는 움직임을 검출하기 위해 적외선 주파수와 같은 가시적 또는 비가시적 파장을 이용할 수 있는) 카메라 등을 들 수 있다. 출력 장치의 예로는 디스플레이 장치(예컨대, 모니터 또는 프로젝터), 스피커, 프린터, 네트워크 카드, 촉감 응답 장치 등을 들 수 있다. 따라서, 컴퓨팅 장치(602)는 후술하는 바와 같이 다양한 방식으로 구성되어 사용자 상호작용을 지원할 수 있다.
다양한 기법들은 소프트웨어, 하드웨어 요소, 또는 프로그램 모듈의 일반적인 맥락으로 설명될 수 있다. 일반적으로, 그러한 모듈은 특정 태스크를 수행하거나 또는 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 오브젝트, 요소, 컴포넌트, 데이터 구조 등을 포함한다. 본 명세서에 사용된 "모듈", "기능(functionality)" 및 "컴포넌트"란 용어는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다. 본 명세서에 기술된 기법들의 특징은 플랫폼 독립적인데, 이는 이들 기법이 다양한 프로세서를 갖는 다양한 상용 컴퓨팅 플랫폼 상에서 구현될 수 있음을 의미한다.
상술한 모듈들 및 기법들의 구현예는 일부 형태의 컴퓨터 판독가능 매체 상에 저장되거나 또는 이들을 가로질러 전송될 수 있다. 컴퓨터 판독가능 매체는 컴퓨팅 장치(602)에 의해 액세스될 수 있는 다양한 매체를 포함할 수 있다. 예를 들어, 컴퓨터 판독가능 매체는 "컴퓨터 저장가능 매체" 및 "통신 매체"를 포함할 수 있다.
"컴퓨터 판독가능 매체"는 단순한 신호 전송, 반송파, 또는 신호 그 자체와 달리 정보의 저장을 가능하게 하는 매체 및/또는 장치를 지칭한다. 따라서, 컴퓨터 판독가능 저장 매체는 신호 전달 매체 또는 신호 자체를 포함하지는 않는다. 컴퓨터 판독가능 저장 매체는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 논리 소자/회로 등과 같은 정보의 저장에 적합한 방법 또는 기술로 구현된 휘발성 및 비휘발성, 착탈식 및 비착탈식 매체 및/또는 저장 장치를 포함한다. 컴퓨터 판독가능 저장 매체의 예로는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 다른 광학 저장부, 하드 디스크, 자기 카세트, 자기 테이프, 자기 디스크 저장부 또는 기타 자기 저장 장치, 또는 기타 저장 장치, 유형의 매체, 또는 원하는 정보를 저장하기에 적합하고 컴퓨터에 의해 액세스될 수 있는 제품을 들 수 있다.
"통신 매체"는 명령어를, 예컨대 네트워크를 통해, 컴퓨팅 장치(602)의 하드웨어에 전송하도록 구성된 신호 전달 매체를 지칭한다. 통신 매체는 통상적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 반송파, 데이터 신호, 또는 기타 전송 메커니즘과 같은 변조된 데이터 신호 내의 다른 데이터를 포함할 수 있다. 통신 매체는 또한 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"란 용어는 신호 내의 정보를 인코딩하는 방식으로 설정되거나 변경된 특징들 중 하나 이상을 갖는 신호를 의미한다. 예를 들어, 통신 매체는 유선 네트워크 또는 직도선(direct-wired) 연결과 같은 유선 매체, 및 음향, RF, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함한다.
전술한 바와 같이, 하드웨어 소자(610) 및 컴퓨터 판독가능 매체(606)는, 일부 실시예에서 본 명세서에 기술된 기법들 중 적어도 일부 특징을 구현하기 위해 이용될 수 있는 하드웨어 형태로 구현된 명령어, 모듈, 프로그램가능 장치 로직 및/또는 고정된 장치 로직을 나타낸다. 하드웨어 요소는 집적 회로 또는 온칩 시스템의 컴포넌트, ASIC(application-specific integrated circuit), FPGA(field-programmable gate array), CPLD(complex programmable logic device), 및 실리콘 또는 다른 하드웨어 장치의 다른 구현예들을 포함할 수 있다. 이런 맥락에서, 하드웨어 요소는 명령어, 모듈, 및/또는 하드웨어 요소에 의해 구현된 로직에 의해 정의된 프로그램 태스크를 수행하는 처리 장치뿐만 아니라 실행할 명령어를 저장하는데 이용되는 하드웨어 장치, 예컨대 전술한 컴퓨터 판독가능 저장 매체로서 동작할 수 있다.
본 명세서에 기술된 다양한 기법들 및 모듈들을 구현하기 위해 앞서 말한 것들의 조합이 이용될 수도 있다. 따라서, 운영 체제(108), 애플리케이션(110), 개발 모듈(112), 컴파일러 모듈(114), 난독화 모듈(116) 및 기타 프로그램 모듈을 포함하는 소프트웨어, 하드웨어, 또는 프로그램 모듈은, 몇몇 형태의 컴퓨터 판독가능 저장 매체 상에 그리고/또는 하나 이상의 하드웨어 요소(610)에 의해 구현된 하나 이상의 명령어 및/또는 로직으로서 구현될 수 있다. 컴퓨팅 장치(602)는 소프트웨어 및/또는 하드웨어 모듈에 대응하는 특정한 명령어 및/또는 기능을 실행하도록 구성될 수 있다. 따라서, 컴퓨팅 장치(602)에 의해 소프트웨어로서 실행될 수 있는 모듈로서의 모듈의 구현은, 예컨대, 컴퓨터 판독가능 저장 매체 및/또는 처리 시스템의 하드웨어 요소(610)의 사용을 통해 적어도 부분적으로 하드웨어로 달성될 수 있다. 명령어 및/또는 기능은 하나 이상의 제품(예컨대, 본 명세서에 기술된 기법들, 모듈들, 및 예들을 구현하기 위한 하나 이상의 컴퓨팅 장치(602) 및/또는 처리 시스템(604))에 의해 실행가능/동작가능할 수 있다.
또한 도 6에 도시된 바와 같이, 예시적인 시스템(600)은 PC, 텔레비전 장치 및/또는 모바일 서비스에서 애플리케이션을 실행할 때 끊김없는 사용자 경험을 위해 유비쿼터스 환경을 제공할 수 있다. 서비스 및 애플리케이션은 애플리케이션을 활용하거나, 비디오 게임을 하거나, 비디오를 시청하거나 하는 동안 하나의 장치로부터 다음 장치로 전환할 때 공통의 사용자 경험을 위해 세 환경 모두에서 실질적으로 유사하게 실행된다.
예시적인 시스템(600)에서, 복수의 장치가 중앙 컴퓨팅 장치를 통해 상호연결된다. 중앙 컴퓨팅 장치는 복수의 장치에 대해 로컬일 수도 있고 또는 복수의 장치로부터 원격으로 위치할 수 있다. 일실시예에서, 중앙 컴퓨팅 장치는 네트워크, 인터넷, 또는 다른 데이터 통신 링크를 통해 복수의 장치에 연결되는 하나 이상의 서버 컴퓨터의 클라우드일 수 있다.
일실시예에서, 이 상호연결 구조는 복수의 장치의 사용자에게 공통의 끊김없는 경험을 제공하기 위해 복수의 장치에 걸쳐 기능이 전달되게 할 수 있다. 복수의 장치 각각은 상이한 물리적 요건 및 능력을 가질 수 있고, 중앙 컴퓨팅 장치는 장치에 맞게 조정되지만 모든 장치에 공통인 경험을 장치에 전달할 수 있는 플랫폼을 사용한다. 일실시예에서, 타겟 장치의 부류(class)가 생성되고 경험이 일반 부류의 장치에 맞게 조정된다. 장치의 부류는 장치의 물리적 특징, 사용 유형, 또는 기타 공통인 특징에 의해 정의될 수 있다.
다양한 구현예에서, 컴퓨팅 장치(602)는 컴퓨터(614), 모바일(616), 및 텔레비전(618) 용의 다양한 구성을 취할 수 있다. 이들 구성 각각은 일반적으로 상이한 구성 및 능력을 가질 수 있는 장치를 포함하며, 따라서 컴퓨팅 장치(602)는 상이한 장치 부류 중 하나 이상에 따라 구성될 수 있다. 예를 들어, 컴퓨팅 장치(602)는 개인용 컴퓨터, 데스크탑 컴퓨터, 멀티스크린 컴퓨터, 랩탑 컴퓨터, 넷북 등을 포함하는 장치의 컴퓨터(614) 부류로서 구현될 수 있다.
컴퓨팅 장치(602)는 모바일 폰, 휴대형 뮤직 플레이어, 휴대형 게이밍 장치, 태블릿 컴퓨터, 멀티스크린 컴퓨터 등과 같은 모바일 장치를 포함하는 장치의 모바일(616) 부류로서 구현될 수 있다. 컴퓨팅 장치(602)는 일반적인 뷰잉 환경에서 일반적으로 대형 스크린을 갖거나 또는 연결된 장치를 포함하는 장치의 텔레비전(618) 부류로서 구현될 수 있다. 이들 장치는 텔레비전, 셋탑 박스, 게이밍 콘솔 등을 포함한다.
본 명세서에 기술된 기법들은 컴퓨팅 장치(602)의 이들 다양한 구성에 의해 지원될 수 있으며, 본 명세서에 기술된 기법들의 특정 예에 한정되지 않는다. 이것은 컴퓨팅 장치(602) 상에 개발 모듈(112)을 포함시킨 것으로 도시되어 있다. 개발 모듈(112) 및 다른 모듈의 기능은 모두 또는 부분적으로, 전술한 플랫폼(622)을 통한 예컨대 "클라우드"(620)에 걸친 분산 시스템의 사용을 통해 구현될 수 있다.
클라우드(620)는 리소스(624)에 대한 플랫폼(622)을 포함하고/또는 이러한 플랫폼을 나타낸다. 플랫폼(622)은 하드웨어(예컨대, 서버)의 기본 기능 및 클라우드의 소프트웨어 리소스를 추상화한다. 리소스(624)는 컴퓨터 프로세싱이 컴퓨팅 장치(602)로부터 원격인 서버에서 실행되는 동안 이용될 수 있는 애플리케이션 및/또는 데이터를 포함할 수 있다. 리소스(624)는 또한 인터넷 상에서 및/또는 셀룰러 또는 WiFi 네트워크와 같은 가입자 네트워크를 통해제공된 서비스를 포함할 수 있다.
플랫폼(622)은 컴퓨팅 장치(602)를 다른 컴퓨팅 장치와 연결하기 위해 리소스 및 기능을 추상화할 수 있다. 플랫폼(622)은 또한 플랫폼(622)을 통해 구현되는 리소스(624)에 대해 마주치는 요청에 대해 대응하는 스케일 레벨을 제공하기 위해 리소스의 스케일링을 추상화하는 역할을 할 수도 있다. 따라서, 상호연결된 장치 실시예에서, 본 명세서에 기술된 기능의 구현이 시스템(600)에 걸쳐 분산될 수 있다. 예컨대, 이 기능은 컴퓨팅 장치(602) 상에서뿐만 아니라 클라우드(620)의 기능을 추상화하는 플랫폼(622)을 통해 부분적으로 구현될 수 있다.
결론
본 발명은 구조적 특징 및/또는 방법론적 동작에 특정한 언어로 기술되었지만, 첨부된 청구항에 정의된 본 발명은 반드시 이러한 특정한 특징 또는 기술된 동작으로 한정되지는 않는다. 오히려, 특정한 특징 및 동작은 청구된 본 발명을 구현하는 예시적인 형태로서 개시된다.

Claims (16)

  1. 컴파일러 내에서 개발 프로젝트를 위한 코드를 수정하여, 상기 코드의 컴파일(compilation)의 일부로서 상기 코드의 일부분을 난독화하기 위한 하나 이상의 수정(modification)을 생성하는 단계- 상기 수정을 생성하는 단계는
    상기 수정을 정의하는 디렉티브(directive)를 갖는 난독화 디스크립션(obfuscation description)을 획득하는 단계- 상기 수정은 상기 코드의 힙 실행(heap execution), 검증, 또는 암호화 중 하나 이상을 가능하게 하도록 설계됨 - 와,
    상기 개발 프로젝트를 위한 코드를 상기 디렉티브를 구현하는 코드와 결합하는 중간 코드에 상기 난독화 디스크립션을 적용하여 상기 수정을 생성하는 단계- 상기 난독화 디스크립션은 난독화할 상기 코드의 하나 이상의 부분 및 상기 하나 이상의 부분에 수행할 수정을 지정하도록 구성됨 -를 포함함 -와,
    상기 컴파일러에 의해 상기 컴파일러 내에서 상기 코드의 일부분을 난독화하기 위해 생성된 상기 수정을 갖는 상기 코드의 컴파일된 버전을 생성하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 수정을 생성하기 위해 상기 컴파일의 일부로서 하나 이상의 난독화 알고리즘을 온더플라이(on the fly)로 생성하는 단계를 더 포함하는
    방법.
  3. 제2항에 있어서,
    상기 코드의 적어도 2개의 상이한 부분에 대해 상이한 난독화 알고리즘이 생성되어 적용되는
    방법.
  4. 제1항에 있어서,
    상기 코드의 컴파일의 일부로서 상기 코드의 다수의 부분을 수정하는 단계를 더 포함하되,
    상기 코드의 다수의 부분을 수정하는 단계는 상기 다수의 부분의 보안을 개별화하기 위해 상기 난독화 디스크립션 내의 상기 디렉티브에 의해 지시된 대로 상이한 난독화 특징 및 수정을 상기 다수의 부분에 개별 단위로 적용하는 단계를 포함하는
    방법.
  5. 제1항에 있어서,
    상기 코드의 컴파일된 버전을 생성하는 단계는 컴파일된 이진 파일을 생성하는 단계를 포함하는
    방법.
  6. 제1항에 있어서,
    상기 수정은
    코드 블록의 재배열, 호 재지정(call redirection), 복제 함수의 생성, 심볼 속성 및 동작에 대한 변경, 코드 블록의 분할, 호 재배치(replacing call), 상기 코드의 상이한 부분들 간의 절대 기준 설정, 또는 상기 코드로의 엔트리 포인트의 수정 중 적어도 하나를 포함하는
    방법.
  7. 제1항에 있어서,
    상기 수정은
    체크섬의 삽입, 검정기 모듈의 삽입, 또는 검증 코드의 삽입 중 적어도 하나를 포함하는
    방법.
  8. 제1항에 있어서,
    상기 수정은 상기 코드의 일부분의 암호화, 및 복호화/재-암호화 코드의 추가를 포함하는
    방법.
  9. 제1항에 있어서,
    상기 수정은 난독화된 형태로 런타임에서 실행할 적어도 하나의 함수의 가상화를 포함하는
    방법.
  10. 제1항에 있어서,
    상기 코드를 수정하는 것은
    상기 코드를 전처리하여, 상기 개발 프로젝트를 위한 소스 코드를 상기 소스 코드에 수행할 수정을 나타내는 소스 난독화 코드와 결합하는 중간 언어 코드를 생성하는 것과,
    상기 코드의 컴파일 동안 상기 컴파일러 내에서 상기 중간 언어 코드에 상기 수정을 적용함으로써 상기 코드를 난독화하는 것
    을 포함하는 방법.
  11. 컴퓨팅 장치에 의해 실행될 경우에, 컴파일러 모듈을 구현하는 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 저장 매체로서,
    상기 컴파일러 모듈은
    개발 프로젝트를 위한 소스 코드 중 보호할 부분을 나타내는 디렉티브 및 상기 나타낸 부분을 난독화하기 위해 수행할 수정을 획득하는 동작 -상기 수정은 상기 소스 코드의 힙 실행, 검증, 또는 암호화 중 하나 이상을 가능하게 하도록 설계됨- 과,
    상기 소스 코드를 상기 디렉티브를 구현하기 위한 코드와 결합하는 중간 언어 코드를 생성하는 동작과,
    상기 컴파일러 모듈에 의한 상기 중간 언어 코드의 컴파일 동안 상기 디렉티브에 따라 상기 나타낸 부분을 수정하기 위해 상기 중간 언어 코드에 상기 디렉티브를 적용하는 동작- 상기 컴파일은, 하나 이상의 기능을 위한 난독화된 명령어의 동작을 에뮬레이트하는 가상 실행 환경을 통해 런타임 시에 난독화된 형태로 실행되도록 상기 하나 이상의 기능의 수정을 포함함 -을 수행하도록 구성된
    컴퓨터 판독가능 저장 매체.
  12. 제11항에 있어서,
    상기 중간 언어 코드에 상기 디렉티브를 적용하는 동작은
    상기 중간 언어 코드의 컴파일 동안 난독화 모듈에 구성 정보를 전달하는 동작과,
    상기 컴파일러 모듈로 하여금 상기 수정을 수행하게 하도록 구성된 상기 난독화 모듈로부터의 명령어를 수신하는 동작을 더 포함하는
    컴퓨터 판독가능 저장 매체.
  13. 제11항에 있어서,
    상기 컴파일러 모듈은
    상기 디렉티브를 상기 중간 언어 코드에 적용함으로써 생성된 난독화된 코드를 컴파일하는 동작과,
    상기 컴파일러 모듈에 의한 상기 중간 언어 코드의 컴파일 동안 생성된 난독화를 갖는 상기 개발 프로젝트를 위한 보호된 컴파일된 코드를 출력하는 동작
    을 수행하도록 더 구성되는
    컴퓨터 판독가능 저장 매체.
  14. 컴퓨팅 장치로서,
    처리 시스템과,
    IDE(integrated development environment)를 구현하기 위해 상기 처리 시스템의 하드웨어를 통해 적어도 부분적으로 동작가능한 하나 이상의 모듈
    을 포함하되,
    상기 하나 이상의 모듈은
    소프트웨어 개발 프로젝트를 위한 소스 코드의 생성을 가능하게 하는 개발 인터페이스를 노출시키는 개발 모듈과,
    난독화 모듈- 상기 난독화 모듈은
    상기 소스 코드의 하나 이상의 선택된 부분을 난독화하기 위해 상기 소스 코드의 컴파일 동안 컴파일러가 수행할 수정을 지정하는 난독화 디스크립션을상기 개발 인터페이스를 통해 생성하고- 상기 수정은 상기 선택된 부분의 보안을 개별화하기 위해 상기 난독화 디스크립션에 의해 지시된 대로 상이한 난독화 특징 및 수정을 상기 선택된 부분에 개별 단위로 적용하는 것을 포함함 -,
    상기 난독화 디스크립션을 상기 소스 코드와 연관시키고,
    상기 컴파일러 모듈에 의해 소비되도록 상기 난독화 디스크립션을 공급하도록 구성됨 -과,
    컴파일 동안 상기 하나 이상의 선택된 부분을 난독화하기 위한 상기 지정된 수정을 구현하기 위해 상기 난독화 모듈에 의해 공급된 상기 난독화 디스크립션을 해석하고 적용함으로써 상기 난독화 디스크립션을 사용하여 상기 개발 프로젝트를 위한 보호된 컴파일된 코드를 생성하도록 상기 소스 코드를 컴파일하는 컴파일러 모듈을 포함하는
    컴퓨팅 장치.
  15. 제14항에 있어서,
    상기 난독화 모듈 및 상기 컴파일러 모듈은 상기 IDE의 통합 컴포넌트로서 구현되는
    컴퓨팅 장치.
  16. 제14항에 있어서,
    상기 IDE는 네트워크를 통해 개발자에게 이용가능한 웹 액세스가능 서비스로서 구현되는
    컴퓨팅 장치.
KR1020157023260A 2013-02-28 2014-02-26 컴파일러 기반 난독화 기법 KR102107872B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/781,691 2013-02-28
US13/781,691 US9116712B2 (en) 2013-02-28 2013-02-28 Compile based obfuscation
PCT/US2014/018458 WO2014134080A1 (en) 2013-02-28 2014-02-26 Compiler based obfuscation

Publications (2)

Publication Number Publication Date
KR20150122149A KR20150122149A (ko) 2015-10-30
KR102107872B1 true KR102107872B1 (ko) 2020-05-07

Family

ID=50336512

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157023260A KR102107872B1 (ko) 2013-02-28 2014-02-26 컴파일러 기반 난독화 기법

Country Status (6)

Country Link
US (2) US9116712B2 (ko)
EP (1) EP2962193B1 (ko)
JP (1) JP6490598B2 (ko)
KR (1) KR102107872B1 (ko)
CN (1) CN105103127B (ko)
WO (1) WO2014134080A1 (ko)

Families Citing this family (69)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9081587B1 (en) * 2012-04-25 2015-07-14 Google Inc. Multiversioned functions
US9116712B2 (en) 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
US9104862B2 (en) * 2013-04-01 2015-08-11 Uniquesoft, Llc Secure computing device using new software versions
EP2913772A1 (de) * 2014-02-28 2015-09-02 Wibu-Systems AG Verfahren und Computersystem zum Schutz eines Computerprogramms gegen Beeinflussung
US9389890B2 (en) 2014-03-27 2016-07-12 Microsoft Technology Licensing, Llc Hierarchical directives-based management of runtime behaviors
US9292270B2 (en) 2014-03-27 2016-03-22 Microsoft Technology Licensing, Llc Supporting dynamic behavior in statically compiled programs
US9547758B2 (en) * 2014-05-19 2017-01-17 Nxp B.V. Program cable obfuscation based upon recently executed program code
US9501301B2 (en) * 2015-02-26 2016-11-22 Nxp B.V. Flexible instruction sets for obfuscated virtual machines
KR101757407B1 (ko) 2015-06-11 2017-07-12 라인 가부시키가이샤 바이너리 병합 장치, 방법 및 컴퓨터 프로그램
IN2015DE02056A (ko) * 2015-07-07 2015-07-31 Hcl Technologies Ltd
KR101740134B1 (ko) * 2015-08-10 2017-05-26 라인 가부시키가이샤 어플리케이션의 코드 난독화를 위한 시스템 및 방법
US10255443B2 (en) * 2016-02-11 2019-04-09 Line Corporation Method, apparatus, system and non-transitory computer readable medium for code protection
US10452802B2 (en) * 2016-07-08 2019-10-22 efabless corporation Methods for engineering integrated circuit design and development
US10354069B2 (en) * 2016-09-02 2019-07-16 Bae Systems Information And Electronic Systems Integration Inc. Automated reverse engineering
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
US10248412B2 (en) * 2016-09-20 2019-04-02 Microsoft Technology Licensing, Llc Sharing applications by modifying attributes
CN106547548B (zh) * 2016-10-19 2020-06-30 海信视像科技股份有限公司 一种软件版本的编译方法和装置
CN106650340B (zh) * 2016-11-16 2019-12-06 中国人民解放军国防科学技术大学 一种采用动态细粒度代码隐藏与混淆技术的二进制软件保护方法
CN106778100B (zh) * 2016-12-01 2020-06-05 北京智游网安科技有限公司 基于安卓平台和ios平台的混淆编译方法及混淆编译器
US10311217B2 (en) 2016-12-09 2019-06-04 Microsoft Technology Licensing, Llc Application piracy prevention with secure enclave protection of automatically modularized functions
CN110168548B (zh) * 2017-01-05 2023-05-26 皇家飞利浦有限公司 编译设备和方法
CN107092518A (zh) * 2017-04-17 2017-08-25 上海红神信息技术有限公司 一种保护拟态防御系统软件层安全的编译方法
CN108733988B (zh) * 2017-04-19 2023-01-24 北京梆梆安全科技有限公司 安卓平台上可执行程序的保护方法
CN107766702A (zh) * 2017-05-10 2018-03-06 平安科技(深圳)有限公司 代码混淆方法、装置及计算机可读存储介质
CN109240696A (zh) * 2017-05-19 2019-01-18 腾讯科技(深圳)有限公司 一种软件更新方法及装置
CN107229848A (zh) * 2017-06-12 2017-10-03 北京洋浦伟业科技发展有限公司 一种代码加固方法和装置
US10706164B2 (en) * 2017-09-29 2020-07-07 Intel Corporation Crypto-enforced capabilities for isolation
EP3467691B1 (en) * 2017-10-05 2020-08-26 Eshard Method of selecting software files
CN108197440A (zh) * 2017-11-28 2018-06-22 五八有限公司 一种代码混淆方法、设备及计算机可读存储介质
CN109933326B (zh) * 2017-12-15 2023-03-17 北京奇虎科技有限公司 改写代码的编译方法、装置及相应终端
EP3502935A1 (en) * 2017-12-20 2019-06-26 Koninklijke Philips N.V. Compiling device and method
CN108446541B (zh) * 2018-02-12 2021-10-29 北京梆梆安全科技有限公司 基于有限状态机和符号执行的源代码加固方法及装置
CN108446536B (zh) * 2018-02-12 2021-08-13 北京梆梆安全科技有限公司 一种基于符号执行和单点逻辑的源代码加固方法及装置
CN108537012B (zh) * 2018-02-12 2021-11-16 北京梆梆安全科技有限公司 基于变量和代码执行顺序的源代码混淆方法及装置
EP3534253A1 (en) * 2018-02-28 2019-09-04 Koninklijke Philips N.V. Compiling device and method
US10698668B1 (en) * 2018-05-29 2020-06-30 Amazon Technologies, Inc. Custom code transformations during compilation process
EP3591550A1 (en) * 2018-07-06 2020-01-08 Koninklijke Philips N.V. A compiler device with masking function
CN109101237A (zh) * 2018-08-01 2018-12-28 北京顶象技术有限公司 代码的加密编译方法及装置
CN109145535A (zh) * 2018-08-13 2019-01-04 阿里巴巴集团控股有限公司 一种前端页面提供方法及装置
CN109409037B (zh) * 2018-09-29 2022-04-29 创新先进技术有限公司 一种数据混淆规则的生成方法、装置及设备
KR102663589B1 (ko) * 2018-10-26 2024-05-09 삼성전자주식회사 서버 및 서버의 제어 방법
CN109784010A (zh) * 2018-12-18 2019-05-21 武汉极意网络科技有限公司 一种基于llvm的程序控制流混淆方法及装置
US20220179930A1 (en) * 2019-04-18 2022-06-09 RunSafe Security, Inc. Source modification engine
CN110135133B (zh) * 2019-04-19 2021-08-17 佛山市微风科技有限公司 一种面向微控制器的压缩整合式源代码混淆方法及系统
CN111984939A (zh) * 2019-05-22 2020-11-24 北京奇虎科技有限公司 字符串混淆方法、装置、电子设备和存储介质
US11741248B2 (en) 2019-08-20 2023-08-29 Bank Of America Corporation Data access control using data block level encryption
US11176264B2 (en) 2019-08-20 2021-11-16 Bank Of America Corporation Data access control using data block level decryption
CN110597516B (zh) * 2019-08-27 2023-10-20 贝壳技术有限公司 插件化代码的混淆方法、装置、电子设备和存储介质
JP6752347B1 (ja) * 2019-10-17 2020-09-09 株式会社Dnpハイパーテック 情報処理装置、コンピュータプログラム及び情報処理方法
KR102361534B1 (ko) * 2020-02-05 2022-02-10 라인플러스 주식회사 컴파일러를 이용한 난독화 방법 및 시스템
CN111339503B (zh) * 2020-02-25 2023-01-03 Oppo广东移动通信有限公司 控制流混淆方法及相关产品
KR102322965B1 (ko) * 2020-03-23 2021-11-09 주식회사 티맥스 소프트 Transpiler를 통하여 전환된 언어와 source 언어간 범용 런타임 검증 시스템
CN111475168B (zh) * 2020-04-14 2023-05-05 中国人民解放军战略支援部队信息工程大学 一种代码编译方法及装置
CN111666078A (zh) * 2020-04-30 2020-09-15 平安科技(深圳)有限公司 源码加固方法、装置、计算机设备及存储介质
CN111694564B (zh) * 2020-06-05 2023-08-04 百度在线网络技术(北京)有限公司 Flutter混合模式的编译方法、装置、设备和介质
CN111857808B (zh) * 2020-06-22 2022-04-26 烽火通信科技股份有限公司 一种符号的重命名方法和重命名装置
EP3944106A1 (en) * 2020-07-24 2022-01-26 Nagravision SA Obfuscating method of protecting code
CN112099776A (zh) * 2020-09-17 2020-12-18 重庆轩进软件有限公司 安卓系统防止二次打包修改方法
CN112612999B (zh) * 2020-12-30 2022-11-15 中国人民解放军战略支援部队信息工程大学 基于树结构的多样化变体生成方法及系统
US11556336B2 (en) 2021-02-16 2023-01-17 Bank Of America Corporation System for computer code development environment cloning and authentication using a distributed server network and machine learning
US20220308956A1 (en) * 2021-03-26 2022-09-29 Vmware, Inc. Verifying object file canisters using built-in reverse relocation integrity checking
EP4334822A4 (en) * 2021-06-30 2024-06-05 Huawei Technologies Co., Ltd. METHOD AND SYSTEM FOR PROVIDING A CONTEXT-SENSITIVE NON-INTRUSIVE DATA PROCESSING OPTIMIZATION STRUCTURE
CN113742661A (zh) * 2021-09-07 2021-12-03 北京闲徕互娱网络科技有限公司 unity代码安全防护方法、计算机可读介质
CN114090964A (zh) * 2021-11-18 2022-02-25 北京五八信息技术有限公司 代码处理方法、装置、电子设备及可读介质
EP4209938A1 (en) * 2022-01-05 2023-07-12 Irdeto B.V. Systems, methods, and storage media for creating secured computer code
CN115473702A (zh) * 2022-08-23 2022-12-13 广西电网有限责任公司电力科学研究院 一种基于在线交互式web动态防御的内容混淆方法
KR102482880B1 (ko) * 2022-09-05 2022-12-29 한화시스템(주) 무기체계 임베디드 sw 보호를 위한 역공학 방지 시스템 및 그 방법
CN117172209B (zh) * 2023-11-03 2024-02-27 睿思芯科(深圳)技术有限公司 芯片的验证系统、方法及相关设备
CN117909939B (zh) * 2024-03-19 2024-06-07 麒麟软件有限公司 一种基于代码文本内容的代码保护方法及编译器文本锁

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007503038A (ja) 2003-08-20 2007-02-15 マクロヴィジョン ヨーロッパ リミテッド コード難読化およびエミュレーションによるプロセッサ制御
JP2007304726A (ja) 2006-05-09 2007-11-22 Fuji Xerox Co Ltd プログラム難読化装置、難読化方法及び難読化プログラム
JP2011516953A (ja) 2008-04-07 2011-05-26 メタフォリック リミテッド 自動解析を採用する改竄防止システム

Family Cites Families (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09233067A (ja) * 1990-07-31 1997-09-05 Hiroichi Okano 知的情報処理方法および装置
US6668325B1 (en) 1997-06-09 2003-12-23 Intertrust Technologies Obfuscation techniques for enhancing software security
US7770016B2 (en) 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US7353400B1 (en) * 1999-08-18 2008-04-01 Sun Microsystems, Inc. Secure program execution depending on predictable error correction
US7051200B1 (en) * 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
US7587616B2 (en) * 2005-02-25 2009-09-08 Microsoft Corporation System and method of iterative code obfuscation
US20070174818A1 (en) * 2005-08-18 2007-07-26 Pasula Markus I Method and apparatus for generating application programs for multiple hardware and/or software platforms
WO2007049817A1 (en) * 2005-10-28 2007-05-03 Matsushita Electric Industrial Co., Ltd. Obfuscation evaluation method and obfuscation method
US8001607B2 (en) * 2006-09-27 2011-08-16 Direct Computer Resources, Inc. System and method for obfuscation of data across an enterprise
US8584109B2 (en) * 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US8365157B2 (en) * 2006-11-09 2013-01-29 Oracle International Corporation System and method for early platform dependency preparation of intermediate code representation during bytecode compilation
JP5133973B2 (ja) * 2007-01-18 2013-01-30 パナソニック株式会社 難読化支援装置、難読化支援方法、プログラムおよび集積回路
US9451009B2 (en) * 2007-02-19 2016-09-20 Appcentral, Inc. Methods and system to create applications and distribute applications to a remote device
US20080229115A1 (en) * 2007-03-16 2008-09-18 Microsoft Corporation Provision of functionality via obfuscated software
US8176473B2 (en) * 2007-05-14 2012-05-08 Microsoft Corporation Transformations for software obfuscation and individualization
CN100474253C (zh) * 2007-11-22 2009-04-01 北京飞天诚信科技有限公司 .Net程序保护方法及装置
US8176337B2 (en) * 2008-03-12 2012-05-08 Apple Inc. Computer object code obfuscation using boot installation
US9063765B2 (en) * 2008-04-28 2015-06-23 Kaazing Corporation System and methods for distributed execution of computer executable programs utilizing asymmetric translation
US8094813B2 (en) * 2008-09-02 2012-01-10 Apple Inc. System and method for modulus obfuscation
US8429637B2 (en) * 2008-09-02 2013-04-23 Apple Inc. System and method for conditional expansion obfuscation
WO2010001324A2 (en) * 2008-06-30 2010-01-07 Mominis Ltd Method of generating and distributing a computer application
US8929208B2 (en) * 2008-08-14 2015-01-06 The Invention Science Fund I, Llc Conditionally releasing a communiqué determined to be affiliated with a particular source entity in response to detecting occurrence of one or more environmental aspects
US8583553B2 (en) * 2008-08-14 2013-11-12 The Invention Science Fund I, Llc Conditionally obfuscating one or more secret entities with respect to one or more billing statements related to one or more communiqués addressed to the one or more secret entities
US8626848B2 (en) * 2008-08-14 2014-01-07 The Invention Science Fund I, Llc Obfuscating identity of a source entity affiliated with a communiqué in accordance with conditional directive provided by a receiving entity
EP2159732A1 (en) * 2008-08-21 2010-03-03 Thomson Licensing Method and device for code obfuscation
US8561040B2 (en) * 2009-03-10 2013-10-15 Oracle America, Inc. One-pass compilation of virtual instructions
US8434059B2 (en) * 2009-05-01 2013-04-30 Apple Inc. Systems, methods, and computer-readable media for fertilizing machine-executable code
US8510723B2 (en) * 2009-05-29 2013-08-13 University Of Maryland Binary rewriting without relocation information
US8386803B2 (en) * 2009-11-18 2013-02-26 Apple Inc. System and method for data obfuscation based on discrete logarithm properties
US20110138373A1 (en) * 2009-12-08 2011-06-09 American National Laboratories, Inc. Method and apparatus for globally optimizing instruction code
US8667301B2 (en) * 2010-04-01 2014-03-04 Apple Inc. Obfuscating transformations on data array content and addresses
US8539597B2 (en) * 2010-09-16 2013-09-17 International Business Machines Corporation Securing sensitive data for cloud computing
US20120079462A1 (en) * 2010-09-24 2012-03-29 SoftKrypt LLC Systems and methods of source software code obfuscation
US9473530B2 (en) * 2010-12-30 2016-10-18 Verisign, Inc. Client-side active validation for mitigating DDOS attacks
US8615735B2 (en) 2011-05-03 2013-12-24 Apple Inc. System and method for blurring instructions and data via binary obfuscation
CN102236757A (zh) * 2011-06-30 2011-11-09 北京邮电大学 一种适用于Android系统的软件保护方法及系统
US20130014267A1 (en) * 2011-07-07 2013-01-10 Farrugia Augustin J Computer protocol generation and obfuscation
US8751823B2 (en) * 2011-08-01 2014-06-10 Apple Inc. System and method for branch function based obfuscation
US8695060B2 (en) * 2011-10-10 2014-04-08 Openpeak Inc. System and method for creating secure applications
US20130097431A1 (en) * 2011-10-18 2013-04-18 Paul Marion Hriljac Systems and methods of source software code modification
US20140006017A1 (en) * 2012-06-29 2014-01-02 Qualcomm Incorporated Systems, methods, apparatus, and computer-readable media for generating obfuscated speech signal
US9111383B2 (en) * 2012-10-05 2015-08-18 Elwha Llc Systems and methods for obtaining and using augmentation data and for sharing usage data
US9336370B2 (en) * 2012-12-06 2016-05-10 Apple Inc. Method and apparatus for dynamic obfuscation of static data
CN103093155B (zh) * 2012-12-07 2016-04-27 中北大学 基于源码修改的信息隐藏方法
US9116712B2 (en) 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
US9250937B1 (en) * 2013-11-06 2016-02-02 The Regents Of The University Of California Code randomization for just-in-time compilers
EP2876593B1 (en) * 2013-11-21 2018-09-26 Nxp B.V. Method of generating a structure and corresponding structure
US10338933B2 (en) * 2014-03-25 2019-07-02 Dell Products, Lp Method for generating custom BIOS setup interface and system therefor
EP3012764A1 (en) * 2014-10-24 2016-04-27 Thomson Licensing Control flow graph flattening device and method
EP3012762A1 (en) * 2014-10-24 2016-04-27 Thomson Licensing Control flow graph flattening device and method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007503038A (ja) 2003-08-20 2007-02-15 マクロヴィジョン ヨーロッパ リミテッド コード難読化およびエミュレーションによるプロセッサ制御
JP2007304726A (ja) 2006-05-09 2007-11-22 Fuji Xerox Co Ltd プログラム難読化装置、難読化方法及び難読化プログラム
JP2011516953A (ja) 2008-04-07 2011-05-26 メタフォリック リミテッド 自動解析を採用する改竄防止システム

Also Published As

Publication number Publication date
US9471288B2 (en) 2016-10-18
US20140245271A1 (en) 2014-08-28
JP2016511905A (ja) 2016-04-21
JP6490598B2 (ja) 2019-03-27
WO2014134080A1 (en) 2014-09-04
US20150339108A1 (en) 2015-11-26
CN105103127B (zh) 2018-05-04
EP2962193A1 (en) 2016-01-06
KR20150122149A (ko) 2015-10-30
CN105103127A (zh) 2015-11-25
EP2962193B1 (en) 2021-03-24
US9116712B2 (en) 2015-08-25

Similar Documents

Publication Publication Date Title
KR102107872B1 (ko) 컴파일러 기반 난독화 기법
EP3605324B1 (en) Application development method and tool, and storage medium thereof
US20180260199A1 (en) Method and apparatus for intermediate representation of applications
CN110178136B (zh) 现场可编程门阵列程序的签名验证的方法和设备
US20170116410A1 (en) Software protection
CN106462677B (zh) 一种保护软件项目的方法和装置
BE1023400B1 (nl) Een build-systeem
CN110199271A (zh) 现场可编程门阵列虚拟化
EP3126973A1 (en) Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine
US20170024585A1 (en) Secured electronics device
CN105022936A (zh) 一种类class文件加密解密方法和装置
JP7242675B2 (ja) コンパイル装置及び方法
CN108351766B (zh) 从移动设备创建和修改应用
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
CN110457869B (zh) 程序编译加密方法、装置、存储介质及电子设备
KR101832594B1 (ko) 중간 언어 파일의 로딩 속도 개선을 위한 방법 및 시스템
KR101823226B1 (ko) 코드 보호 방법 및 시스템
CN106922191B (zh) 生成和执行受保护的软件项目
CN109478212A (zh) 按需代码解密
KR102439778B1 (ko) 애플리케이션의 보안성 향상을 위한 애플리케이션 변환 장치 및 방법
CN110032832B (zh) 一种Web应用程序的处理方法及装置
KR101845155B1 (ko) 어플리케이션 패키지를 제공하는 방법 및 시스템, 그리고 어플리케이션을 실행하는 방법 및 시스템
KR102361534B1 (ko) 컴파일러를 이용한 난독화 방법 및 시스템
EP3451214A1 (en) Computing device with computer program bounded thereto
KR20240009129A (ko) 유저 계정의 입력 정보에 기반한 어플리케이션 자동 제작 시스템

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant