KR20220122986A - 소프트웨어 프로그램의 코드 분석으로부터 외부 디버거 애플리케이션을 차단하는 방법 - Google Patents

소프트웨어 프로그램의 코드 분석으로부터 외부 디버거 애플리케이션을 차단하는 방법 Download PDF

Info

Publication number
KR20220122986A
KR20220122986A KR1020227020221A KR20227020221A KR20220122986A KR 20220122986 A KR20220122986 A KR 20220122986A KR 1020227020221 A KR1020227020221 A KR 1020227020221A KR 20227020221 A KR20227020221 A KR 20227020221A KR 20220122986 A KR20220122986 A KR 20220122986A
Authority
KR
South Korea
Prior art keywords
code
application
application program
program
computing device
Prior art date
Application number
KR1020227020221A
Other languages
English (en)
Inventor
아키 임모넨
Original Assignee
슈퍼셀 오와이
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 슈퍼셀 오와이 filed Critical 슈퍼셀 오와이
Publication of KR20220122986A publication Critical patent/KR20220122986A/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
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • G06F11/3656Software debugging using additional hardware using a specific debug interface
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Mathematical Physics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

외부 디버거 애플리케이션을 컴퓨팅 장치(202, 300)상에 설치된 소프트웨어 프로그램(306)의 코드 분석으로부터 차단하는 방법이 개시되어 있다. 상기 방법은 상기 소프트웨어 프로그램을 초기화하는 단계를 포함하며, 상기 소프트웨어 프로그램은 애플리케이션 프로그램(308) 및 내부 디버거 애플리케이션(310)을 포함한다. 상기 소프트웨어 프로그램은 상기 소프트웨어 프로그램의 초기화 시에 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 애플리케이션 프로그램을 로드하도록 지시한다. 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제(204)의 커널 리소스들(312)을 이용하도록 구성된다. 상기 방법은 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 내부 디버거 애플리케이션을 실행하는 단계; 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 애플리케이션 프로그램을 실행하는 단계; 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 애플리케이션 프로그램의 코드 실행을 중지하는 단계; 및 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 내부 디버거 애플리케이션에 넘겨주는 단계; 를 포함한다.

Description

소프트웨어 프로그램의 코드 분석으로부터 외부 디버거 애플리케이션을 차단하는 방법
본 개시내용은 일반적으로 소프트웨어 무단 복제를 방지하는 시스템 및 방법에 관한 것이며, 더 구체적으로는, 소프트웨어 프로그램의 코드 분석으로부터 외부 디버거 애플리케이션을 차단하는 방법, 시스템 및 컴퓨팅 장치에 관한 것이다.
컴퓨터 게임, 콘솔 게임 애플리케이션, 시뮬레이션 애플리케이션, 코딩 및 테스팅 콘솔 기반 애플리케이션 등과 같은 소프트웨어 애플리케이션의 소프트웨어 무단 복제 및 부정(不正) 액세스, 수정 및 불법 이용은 점점 심각한 문제가 되어 왔다. 소프트웨어 무단 복제는 무단 복제된 소프트웨어 프로그램의 복제물의 부정 유통으로 인해 수익의 손실로 이어질 수 있다. 또한, 무단 복제된 소프트웨어 프로그램의 복제물의 유통으로 인한 수익의 손실 외에도, 소프트웨어 무단 복제는 또한 특정 소프트웨어 프로그램에서 구체화될 수 있는 중요한 영업 비밀을 노출할 위협을 가한다. 또한, 소프트웨어 무단 복제는 개인 및/또는 회사가 보호를 요청했을 수 있는 지적 재산권에 대해 위협을 가한다. 특히, 소프트웨어 프로그램 회사는 경쟁 상대 소프트웨어 프로그램의 부정 액세스를 통해 상당한 경쟁 우위를 확보할 수 있다.
일반적으로 소프트웨어 프로그램은 알려진 마이크로프로세서 및 운영 체제와 호환되도록 특정 방식으로 이루어진 전자 파일 또는 일부 코드로 구성되어 있고 그럼으로써 소프트웨어 프로그램을 해커나 크래커에 의해 수정될 여지(餘地)가 있다. 일반적으로 소프트웨어 프로그램의 부정 액세스를 제한하는 데 사용될 수 있는 많은 소프트웨어 보안 메커니즘이 있다. 대부분의 소프트웨어 보안 메커니즘은 악의적인 사용자를 차단하기 위해 정품 라이선스, 암호화된 패스워드 또는 키를 도입하는 것과 같이 본질적으로 단순하다. 그러나 이러한 보안 검사는 강력한 디버깅 도구와 함께 메모리 해제 도구인 "ProcDump"와 같은 널리 이용 가능한 도구를 사용하여 숙련된 해커에 의해 쉽게 우회될 수 있다. 이러한 도구는 메모리 보호 방식에 관계없이 임의의 메모리 위치로부터 임의의 데이터 콘텐츠를 캡처할 수도 있고, 예를 들어 회로 내 에뮬레이터(in-circuit emulator)를 사용함으로써 데이터에 액세스하거나 전체 OS를 복제하도록 파일 시스템을 모니터링하고 파일을 전사할 수도 있다. 이러한 도구는 일반적으로 해커에 의해 소프트웨어 프로그램의 콘텐츠를 리버스 엔지니어링, 수정 또는 복제하는 데 해커에게 도움을 주는 소프트웨어 코드를 단계별로 분석하는데 사용된다. 또한, 이를 극복하기 위해, 많은 소프트웨어 프로그램은 해커 또는 크래커가 소프트웨어의 라이선스 제한을 극복하는 능력을 방해하거나 해커가 소프트웨어 프로그램의 일부 코드를 이해하는 것을 방지하기 위해 일부를 암호화하는 것과 같은 소프트웨어 보안 메커니즘을 채용한다. 그러나 이러한 보안 메커니즘은 숙련된 해커나 크래커에 의해 쉽게 브리칭(breaching)되기도 한다.
그러므로 위의 논의에 비추어 볼 때, 소프트웨어 프로그램의 코드 분석을 방지함으로써 소프트웨어 프로그램을 부정 수정 또는 불법 이용으로부터 보호하기 위한 소프트웨어 보안 메커니즘과 결부된 위에서 언급한 단점을 극복할 필요가 있다.
본 개시내용은 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 방법을 제공하고자 한 것이다. 본 개시내용은 또한, 컴퓨팅 장치에 연관된 처리 장치에 의해 액세스될 때 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 컴퓨팅 장치상에 설치된 컴퓨터 프로그램 제품을 제공하고자 한 것이다. 본 개시내용은 또한, 실행될 때 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는, 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하는 컴퓨터 프로그램 제품을 제공하고자 한 것이다. 본 개시내용은 또한, 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 컴퓨팅 장치를 제공하고자 한 것이다. 또한, 본 개시내용은 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 애플리케이션 프로그램의 코드 분석으로부터 차단하는 시스템을 제공하고자 한 것이다.
본 개시내용은 소프트웨어 무단 복제 및 소프트웨어 프로그램의 부정 액세스, 수정 또는 불법 이용의 기존 문제에 대한 해결수법을 제공하고자 한 것이다. 본 개시내용의 목적은 선행기술에서 직면한 문제를 적어도 부분적으로 극복하고, 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 신뢰 가능하고 효율적인 방법을 제공하는 해결수법을 제공하고자 한 것이다.
제1 실시형태에서, 본 개시내용의 일 실시 예는 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 방법을 제공하며, 상기 방법은,
- 상기 소프트웨어 프로그램을 초기화하는 단계 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하며, 상기 소프트웨어 프로그램은 상기 소프트웨어 프로그램의 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성됨 -;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 단계;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 단계;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 단계; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 단계;
를 포함한다.
제2 실시형태에서, 본 개시내용의 일 실시 예는 처리 장치에서 실행될 때 상기 처리 장치가 본 내용의 임의의 실시 예에 따른 방법을 수행하게 하는 컴퓨터-판독가능 코드 수단을 포함하는 컴퓨터 프로그램 제품을 제공한다. 특히, 컴퓨팅 장치상에 설치된 컴퓨터 프로그램 제품이 제공되며, 상기 컴퓨터 프로그램 제품은 상기 컴퓨팅 장치에 연관된 처리 장치에 의해 액세스될 때 상기 처리 장치로 하여금 이하의 동작들을 수행하게 하는 소프트웨어 프로그램의 프로그램 명령어들이 저장된 비-일시적 기계-판독가능 데이터 저장 매체를 포함하고, 상기 이하의 동작들은,
- 상기 소프트웨어 프로그램을 초기화하는 동작 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하며, 상기 소프트웨어 프로그램은 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성됨 -;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
을 포함한다.
제3 실시 형태에서, 본 개시내용의 일 실시 예는 컴퓨팅 장치를 위한 비-일시적 기계-판독가능 데이터 저장 매체로서 구체화되는 컴퓨터 프로그램 제품을 제공하며, 상기 컴퓨터 프로그램 제품은 소프트웨어 프로그램을 포함하고, 상기 소프트웨어 프로그램은,
- 애플리케이션 프로그램; 및
- 외부 디버거 애플리케이션을 상기 소프트웨어 프로그램의 코드 분석으로부터 차단하기 위해 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성된 내부 디버거 애플리케이션;
을 포함하며, 상기 내부 디버거 애플리케이션은, 실행될 경우, 상기 컴퓨팅 장치로 하여금,
- 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하도록 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트들을 설정하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
을 수행하게 한다.
본 발명에 따른 컴퓨터 프로그램 제품은 외부 디버거 애플리케이션을 소프트웨어 프로그램의 코드 분석으로부터 차단하기 위해 이하에서 설명되는 바와 같이 컴퓨터 장치 또는 시스템에 저장되어 실행될 수 있다.
제4 실시형태에서, 본 개시내용의 일 실시 예는 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 컴퓨팅 장치를 제공하며, 상기 컴퓨팅 장치는,
- 상기 소프트웨어 프로그램을 초기화하는 동작 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하며, 상기 소프트웨어 프로그램은 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성됨 -;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
을 수행하도록 구성된다.
제5 실시형태에서, 본 개시내용의 일 실시 예는 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 애플리케이션 프로그램의 코드 분석으로부터 차단하는 시스템을 제공하며, 상기 시스템은,
- 상기 컴퓨팅 장치에 통신 가능하게 연결된 디버깅 서버;
를 포함하며, 상기 디버깅 서버는 내부 디버거 애플리케이션을 상기 애플리케이션 프로그램에 연계하도록 구성되고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성되며, 상기 내부 디버거 애플리케이션은 실행될 때 상기 컴퓨팅 장치로 하여금 이하의 동작을 수행하게 하고, 상기 이하의 동작은,
- 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하도록 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트들을 설정하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
을 포함한다.
본 개시내용의 실시 예는 위에서 언급한 선행기술의 문제점을 실질적으로 제거하거나 적어도 부분적으로 해결하고, 애플리케이션 프로그램의 코드 분석을 방지하는 신뢰 가능하고 효율적인 방법을 제공한다.
본 개시내용의 추가적인 실시형태, 이점, 특징 및 목적은 이하 첨부된 청구범위와 관련하여 구성된 예시적인 실시 예들의 구체적인 설명 및 첨부도면들로부터 명백해질 것이다.
여기서 이해할 점은 본 개시내용의 특징들이 첨부된 청구범위에 의해 정의된 바와 같은 본 개시내용의 범위를 벗어나지 않고 다양한 조합으로 이루어질 수 있다는 것이다.
위의 요약과 아울러, 이하 예시적인 실시 예들의 이하의 상세한 설명은 첨부 도면들과 관련하여 숙독하면 더 잘 이해된다. 본 개시내용을 예시하기 위해, 본 개시내용의 예시적인 구성들이 첨부도면들에 나타나 있다. 그러나 본 개시내용은 여기에 개시된 특정 방법 및 수단에 국한되지 않는다. 더욱이, 당업자는 첨부도면들이 일정한 비율로 이루어진 것이 아님을 이해할 것이다. 가능한 한, 유사한 요소들은 동일한 번호들로 나타나 있다.
본 개시내용의 실시 예들은 지금부터 단지 예로서 이하 첨부도면들을 참조하여 설명될 것이다.
도 1은 본 개시내용의 일 실시 예에 따른, 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 방법의 단계들을 보여주는 흐름도이다.
도 2는 본 개시내용의 일 실시 예에 따른 컴퓨팅 장치의 블록도이다.
도 3은 본 개시내용의 일 실시 예에 따른 (도 1의 컴퓨팅 장치와 같은) 컴퓨팅 장치의 동작을 보여주는 블록도이다.
도 4는 본 개시내용의 일 실시 예에 따른 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 애플리케이션 프로그램의 코드 분석으로부터 차단하는 시스템의 블록도이다.
첨부도면들에서, 밑줄 친 숫자는 밑줄 친 숫자가 위치하는 항목 또는 밑줄 친 숫자가 인접한 항목을 나타내기 위해 채용되어 있다. 밑줄 치지 않은 숫자는 밑줄 치지 않은 숫자를 항목에 링크하는 라인에 의해 식별되는 항목과 관련된다. 숫자에 밑줄 치지 않고 연관된 화살표가 있는 경우, 밑줄 치지 않은 숫자는 화살표가 가리키는 일반 항목을 식별하는 데 사용된다.
이하의 상세한 설명은 본 개시의 실시 예들 및 상기 실시 예들이 구현될 수 있는 방식들을 예시한 것이다. 본 개시내용을 수행하는 일부 모드들이 개시되었지만, 당업자는 본 개시내용을 수행하거나 실시하기 위한 다른 실시 예들도 가능하다는 것을 인식할 것이다.
제1 실시형태에서, 본 개시내용의 일 실시 예는 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 방법을 제공하며, 상기 방법은,
- 상기 소프트웨어 프로그램을 초기화하는 단계 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하며, 상기 소프트웨어 프로그램은 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성됨 -;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 단계;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 단계;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 단계; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 단계;
를 포함한다.
제2 실시형태에서, 본 개시내용의 일 실시 예는 컴퓨팅 장치상에 설치된 컴퓨터 프로그램 제품을 제공하며, 상기 컴퓨터 프로그램 제품은 상기 컴퓨팅 장치에 연관된 처리 장치에 의해 액세스될 때 상기 처리 장치로 하여금 이하의 동작들을 수행하게 하는 소프트웨어 프로그램의 프로그램 명령어들이 저장된 비-일시적 기계-판독가능 데이터 저장 매체를 포함하고, 상기 이하의 동작들은,
- 상기 소프트웨어 프로그램을 초기화하는 동작 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하며, 상기 소프트웨어 프로그램은 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성됨 -;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
을 포함한다.
제3 실시 형태에서, 본 개시내용의 일 실시 예는 컴퓨팅 장치를 위한 비-일시적 기계-판독가능 데이터 저장 매체로서 구체화되는 컴퓨터 프로그램 제품을 제공하며, 상기 컴퓨터 프로그램 제품은 소프트웨어 프로그램을 포함하고, 상기 소프트웨어 프로그램은,
- 애플리케이션 프로그램; 및
- 외부 디버거 애플리케이션을 상기 소프트웨어 프로그램의 코드 분석으로부터 차단하기 위해 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성된 내부 디버거 애플리케이션;
을 포함하며, 상기 내부 디버거 애플리케이션은, 실행될 경우, 상기 컴퓨팅 장치로 하여금,
- 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하도록 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트들을 설정하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
을 수행하게 한다.
제4 실시형태에서, 본 개시내용의 일 실시 예는 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 컴퓨팅 장치를 제공하며, 상기 컴퓨팅 장치는,
- 상기 소프트웨어 프로그램을 초기화하는 동작 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하며, 상기 소프트웨어 프로그램은 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성됨 -;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
을 수행하도록 구성된다.
제5 실시형태에서, 본 개시내용의 일 실시 예는 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 애플리케이션 프로그램의 코드 분석으로부터 차단하는 시스템을 제공하며, 상기 시스템은,
- 상기 컴퓨팅 장치에 통신 가능하게 연결된 디버깅 서버;
를 포함하며, 상기 디버깅 서버는 내부 디버거 애플리케이션을 상기 애플리케이션 프로그램에 연계하도록 구성되고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성되며, 상기 내부 디버거 애플리케이션은 실행될 때 상기 컴퓨팅 장치로 하여금 이하의 동작을 수행하게 하고, 상기 이하의 동작은,
- 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하도록 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트들을 설정하는 동작;
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
- 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
- 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
을 포함한다.
본 개시내용은 런타임 동안 내부 디버거 애플리케이션을 애플리케이션 프로그램과 함께 구현함으로써 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 방법을 제공한다. 본 개시내용은 애플리케이션 프로그램의 코드 분석을 방지하는 방식으로 소프트웨어 프로그램의 실행을 가능하게 함으로써, 상기 애플리케이션 프로그램의 코드의 부정 액세스 및 수정을 방지하는 방법 및 시스템을 제공한다. 본 개시내용은 상기 애플리케이션 프로그램의 코드를 상기 내부 디버거 애플리케이션의 코드와 통합함으로써 외부 디버거 애플리케이션을 차단하는 방법 및 시스템을 제공한다. 유리하게는, 그러한 방법은 저렴하고 시간이 덜 걸리고 매우 효율적인 방식으로 소프트웨어 프로그램의 무단 복제를 방지한다. 본 개시내용은 사용자가 상기 소프트웨어 프로그램과 외부 디버거 애플리케이션을 연계하는 것을 방지하고 그럼으로써 권한이 없는 사용자가 상기 소프트웨어 프로그램의 코드를 분석하는 것을 제한하는 상기 애플리케이션 프로그램과 통합된 내부 디버거 애플리케이션을 연계하는 방법을 제공한다.
본 개시내용 전반에 걸쳐, "소프트웨어 프로그램"이라는 용어는 컴퓨팅 장치상에 설치된 명령어들의 모임 또는 집합 - 또한 코드로서 언급됨 -을 언급한다. 상기 명령어들의 모임 또는 집합은 상기 소프트웨어 프로그램의 의도인 태스크를 수행하기 위해 상기 컴퓨터 또는 상기 디지털 시스템을 구성하도록 상기 컴퓨팅 장치 또는 기타 디지털 시스템에 의해 실행 가능하다. 여기에서 "소프트웨어 프로그램"이라는 용어는 상기 내부 디버거 애플리케이션의 코드가 엠베드된 애플리케이션 프로그램의 코드를 포함하며, 그럼으로써 상기 소프트웨어 프로그램의 초기화는 상기 내부 디버거 애플리케이션을 로드한 후에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하게 된다. 여기서 이해할 점은 본원 명세서에서 사용되는 용어 "소프트웨어 프로그램"이 상기 애플리케이션 프로그램 및 상기 내부 디버거 애플리케이션을 포함하며 상기 컴퓨팅 장치에서 실행될 때 외부 디버거 애플리케이션을 상기 소프트웨어 프로그램과의 연계로부터 차단하고 그럼으로써 상기 소프트웨어 프로그램의 코드 분석을 방지하는 완전한 소프트웨어 패키지를 언급하는데 사용된다.
하나 이상의 실시 예들에서, "소프트웨어 프로그램"이라는 용어는 RAM, 하드 디스크, 광디스크 등과 같은 저장 매체에 저장된 그러한 명령어들을 포함하도록 의도되고, 또한 ROM 등 상에 저장된 소프트웨어 프로그램인 소위 "펌웨어"를 포함하도록 의도된다. 선택적으로, 상기 소프트웨어 프로그램은 소프트웨어 애플리케이션을 언급한다. 이러한 소프트웨어 프로그램은 다양한 방식으로 편성되고, 예를 들어 상기 소프트웨어 프로그램에는 라이브러리로 편성된 소프트웨어 구성요소, 원격 서버 등 상에 저장된 인터넷 기반 프로그램, 소스 코드, 해석 코드, 객체 코드, 직접 실행가능 코드 등이 포함된다. 여기서 이해할 수 있는 점은 상기 소프트웨어 프로그램이 특정 기능들을 수행하기 위해 서버 또는 다른 위치상에 상주하는 다른 소프트웨어를 호출하거나 그에 대한 시스템 레벨 코드를 호출할 수 있다는 것이다. 또한, 상기 소프트웨어 프로그램은 사전에 구성되어 운영 체제와 사전에 통합되고, 그럼으로써 소프트웨어 어플라이언스를 구축할 수 있게 해준다.
본 개시내용 전반에 걸쳐, 여기에서 사용되는 "애플리케이션 프로그램"이라는 용어는 컴퓨팅 장치상에 설치된 명령어들의 모임 또는 집합 - 또한 코드로서 언급됨 - 을 언급한다. "애플리케이션 프로그램"이라는 용어는 프로그래머(또한 개발자로서 언급됨)에 의해 작성된 애플리케이션, 커널, 드라이버, 인터럽트 핸들러, 라이브러리를 포함하기 위해 여기에서 광범위하게 사용된다. 다시 말하면, "애플리케이션 프로그램"이라는 용어는 상기 애플리케이션 프로그램이 상기 컴퓨팅 장치에서 실행될 때 특정 기능, 태스크 또는 활동을 수행하도록 설계된 완전한 독립형 컴퓨터 프로그램을 포함한다. 선택적으로, 상기 애플리케이션 프로그램은 게이밍 애플리케이션 프로그램이다. 예를 들어, 상기 게이밍 애플리케이션 프로그램은 레이싱 게임, 어드벤처 게임, 퍼즐 게임, 액션 게임, 롤-플레잉(role-playing) 게임(RPG), 전략 게임, 슈팅 게임, 시뮬레이션 게임 등과 같은 다양한 장르의 수많은 게이밍 애플리케이션 프로그램을 포함할 수 있다.
또한, 상기 애플리케이션 프로그램은 RAM, 하드 디스크, 광디스크 등과 같은 저장 매체 내에 저장될 수 있으며, ROM 등에 저장되는 소프트웨어인 소위 "펌웨어"도 포함하도록 의도된 것이다. 이러한 애플리케이션 프로그램은 다양한 방식으로 편성되는데, 예를 들어 상기 애플리케이션 프로그램에는 라이브러리로서 편성된 구성요소, 원격 서버 등 상에 저장된 인터넷-기반 프로그램, 소스 코드, 해석 코드, 객체 코드, 직접 실행가능 코드 등을 포함한다. 여기서 이해할 수 있는 점은 상기 애플리케이션이 특정 기능을 수행하기 위해 서버 또는 다른 위치상에 상주하는 다른 소프트웨어를 호출하거나 그에 대한 시스템-레벨 코드를 호출할 수 있다는 것이다.
또한, 여기에서 사용되는 용어 "코드"는 프로세서 명령어, 데이터(상수, 변수 및 데이터 구조를 포함함), 또는 양자 모두의 명령어와 데이터를 언급한다. 여기에서 이해할 점은 본 방법을 구현함으로써 권한이 없는 사용자에 의한 코드 분석이 방지된다는 것이다. 마찬가지로, 그러한 용어는 서브루틴, 기능, 절차, 객체 메소드, 컴퓨팅 장치상에서 실행되는 소프트웨어 프로그램, 인터페이스 또는 객체, 실행가능 애플리케이션, 애플릿, 서블릿, 소스 코드, 객체 코드 또는 중간 코드, 공유 라이브러리 및/또는 동적 로딩/링크 라이브러리 및/또는 기타 명령어 시퀀스 또는 명령어 그룹을 구현하도록 설계된 방식을 포함하거나 그러한 방식으로 이루어질 수 있다.
선택적으로 상기 애플리케이션 프로그램의 코드는 여러 코드 블록을 포함한다. 여기에서 사용되는 용어 "코드 블록(code block)"은 상기 애플리케이션 프로그램의 하나 이상의 의도된 태스크들 중 특정 태스크를 수행하도록 구성된 실행가능 코드의 모듈을 의미한다. 일반적으로, 코드 블록은 입력을 수신하고, 상기 입력을 처리하며, 상기 입력의 처리에 기초하여 이루어진 결과를 출력으로서 반환하도록 구성된다. 상기 하나 이상의 코드 블록들 각각은 상기 컴퓨팅 장치 내 메모리에 연관된다.
선택적으로, 상기 애플리케이션 프로그램은 Java® 환경을 포함하지만 이에 국한되지 않는 적절한 운영 환경에서 개발된 것이며 그 일부는 C, C++, C#, Python, R-프로그래밍 언어, Oracle과 같은 언어들을 이용하는 환경들을 포함한다. 여기서 이해할 점은 개시된 방법 및 시스템이 다양한 프로그래밍 언어, 프로그래밍 모델 및 프로그램에 적용 가능할 뿐만 아니라 소프트웨어 개발 분야 외의 기술적 노력에도 적용 가능하며, 게이밍 애플리케이션 프로그램에만 국한되지 않음을 당업자라면 이해할 것이라는 것이다.
위에서 언급한 바와 같이, 상기 애플리케이션 프로그램은 상기 컴퓨팅 장치상에 설치된다. 본 개시내용 전반에 걸쳐, 여기에서 사용되는 용어 "컴퓨팅 장치"는 일반적으로 사용자가 상기 애플리케이션 프로그램에 연관된 특정 태스크들을 수행할 수 있게 하는 사용자에 관련된(또는 사용자에 의해 사용되는) 전자 장치에 관한 것이다. 또한, 상기 컴퓨팅 장치는 무선 통신 네트워크를 통한 음성 및/또는 데이터 통신에 사용될 수 있는 임의의 전자 장치를 포함하도록 광범위하게 해석되도록 의도된다. 상기 컴퓨팅 장치에는 모바일폰, 스마트폰, 모바일 인터넷 장치(MID), 태블릿 컴퓨터, UMPC(Ultra-Mobile Personal Computer), 패블릿 컴퓨터, PDA(Personal Digital Assistant), 웹 패드, 개인용 컴퓨터(PC), 핸드헬드 PC, 랩톱 컴퓨터, 데스크톱 컴퓨터, NAS(Network-Attached Storage) 장치, PC가 엠베드된 대형 터치 스크린, 및 게임 콘솔, 텔레비전(TV) 세트 및 셋톱 박스(STB)와 같은 대화형 엔터테인먼트 장치, 비디오 슬롯 기계, 비디오 포커 기계, 키오스크, 카지노 개인용 장치, 그리고 일반적으로 게이밍 장치와 관련하여 위에서 설명한 요소들의 대부분 또는 전부를 포함할 수 있지만, 이들에 국한되지 않는다.
특히, 여기에서 "컴퓨팅 장치"라는 용어는 상기 애플리케이션 프로그램 및 상기 내부 디버거 애플리케이션을 포함하는 패키지로서 상기 소프트웨어 프로그램이 설치된 범용 컴퓨터와 같은 전자 장치를 언급하기 위해 사용된다. 또한, "컴퓨팅 장치"라는 용어는 Microsoft Xbox™, Nintendo Wii™, Sony PlayStation™ 등과 같은 게임 콘솔을 포함하는 데에도 사용된다.
또한, 상기 컴퓨팅 장치는 처리 장치 및 메모리를 포함한다. 상기 처리 장치는 Intel™ 또는 AMD™ 에 의해 제조되거나 ARM에 의해 라이센스가 부여된 마이크로프로세서와 같은 하나 이상의 알려진 프로세서일 수 있다. 처리 장치는 병렬 프로세스들을 동시에 실행하는 단일 코어 또는 다중 코어 프로세서를 구성할 수 있다. 예를 들어, 프로세서는 가상 처리 기술로 구성된 단일 코어 프로세서일 수 있다. 특정 실시 예들에서, 상기 처리 장치는 다수의 프로세스를 동시에 실행하고 제어하기 위해 논리 프로세서를 사용할 수 있다. 처리 장치는 다중 소프트웨어 프로세스, 애플리케이션, 프로그램 등을 실시, 제어, 실행, 조작 및 저장할 수 있는 능력을 제공하기 위해 가상 기계 기술, 또는 다른 알려진 기술을 구현할 수 있다. 다른 일 실시 예에서, 상기 처리 장치는 멀티 코어 프로세서 배치(예컨대, 듀얼, 쿼드 코어 등)를 포함할 수 있으며, 이는 상기 컴퓨팅 장치가 다중 프로세스를 동시에 실행하는 것을 허용하기 위해 병렬 처리 기능을 제공하도록 구성된다. 당업자라면 이해하겠지만, 여기에서 개시되는 능력을 제공하는 다른 유형의 처리 장치 배치가 구현될 수 있다. 또한, 상기 메모리는 앱(들)과 같은 하나 이상의 프로그램(들)을 저장하는, 휘발성 또는 비-휘발성, 자기, 반도체, 솔리드-스테이트(solid-state), 테이브, 광학, 탈착 가능, 비-탈착 가능, 또는 다른 유형의 저장 장치 또는 유형(有形)(다시 말하면, 비-일시적) 컴퓨터-판독가능 매체를 포함할 수 있다. 일 예에서, 상기 컴퓨팅 장치는 하나 이상의 모듈들, 다시 말하면 상기 소프트웨어 프로그램을 실행하기 위한 제1 모듈 및 제2 모듈을 포함한다. 구체적으로는, 상기 제1 모듈이 상기 애플리케이션 프로그램을 실행하도록 구성되고 상기 제2 모듈이 상기 내부 디버거 애플리케이션을 실행하도록 구성된다.
프로그램(들)은 하나 이상의 처리 장치들에 의해 실행될 때 알려진 운영 체제 기능을 수행하는 운영 체제를 포함할 수 있다. 예를 들어, 상기 운영 체제는 Microsoft Windows™, Unix™, Linux™, Android™, Microsoft XP™, AIX™, IBM의 i5os 및 Apple™ 운영 체제, Microsoft CE™ 과 같은 PDA(Personal Digital Assistant) 유형 운영 체제 또는 기타 유형의 운영 체제들을 포함할 수 있다. 따라서, 개시된 실시 예들은 임의 유형의 운영 체제를 실행하는 컴퓨팅 장치들과 함께 작동하고 기능 할 수 있다. 상기 컴퓨팅 장치는 또한 프로세서에 의해 실행될 때 웹 브라우저 소프트웨어, 태블릿 또는 스마트 핸드 헬드 장치 네트워킹 소프트웨어 등과 같은 네트워크 및/또는 로컬 네트워크와의 통신을 제공하는 통신 소프트웨어를 포함할 수 있다.
본 개시내용 전반에 걸쳐, 용어 "사용자"는 컴퓨팅 장치에 연관된 사람 또는 인간을 언급하며, 상기 컴퓨팅 장치상에서 상기 애플리케이션 프로그램을 실행할 수 있다. 특히 "권한이 있는 사용자"와 "권한이 없는 사용자"라는 용어는 권한이 있는 사용자가 코드 분석을 할 수 있는 프로그래머 또는 개발자라는 의미에서 다른데, 다시 말하면 권한이 있는 사용자는 상기 애플리케이션 프로그램의 코드를 볼 수도 있고 수정할 수도 있으며 삭제할 수도 있는 반면에, 권한이 없는 사용자는 상기 애플리케이션 프로그램의 코드 분석을 할 수 없는 사용자(또는 게이밍 애플리케이션의 경우, 플레이어)이다.
상기 방법은 상기 소프트웨어 프로그램을 초기화하는 단계를 포함하며 상기 소프트웨어 프로그램은 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함한다. 상기 소프트웨어 프로그램은 그의 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성된다. 본 개시내용 전반에 걸쳐, 여기에서 사용되는 용어 "운영 체제"는 스레드들(다시 말하면, 프로세스 내 단일 시퀀스 스트림)을 스케줄링하고 메모리 액세스, 입/출력(input/output; IO) 리소스들에 대한 액세스 등을 포함하는, 스레드들에서 운영 체제 리소스들을 사용할 수 있게 하는 기능들을 제공하는 시스템 소프트웨어 계층을 언급한다. 또한 운영 체제는 컴퓨터 리소스들에 대한 액세스의 할당 및 권한부여를 제어한다. 운영 체제는 키보드로부터의 입력 수신, 디스플레이로의 출력 전송, 자기 디스크 드라이브 상에의 디렉터리들 및 파일들의 유지, 디스크 드라이브들 및 프린터들과 같은 주변 장치들의 제어와 같은 낮은 수준의 기본 태스크들을 수행한다.
본 개시내용 전반에 걸쳐, "디버거" 또는 일반적으로 "디버거"로서 알려진 "내부 디버거 애플리케이션"이라는 용어는 디버기(debuggee) 프로그램으로서 언급되는 다른 프로그램을 테스트 및 디버그하는 데 사용되는 컴퓨터 프로그램 또는 소프트웨어 애플리케이션을 언급한다. 일반적으로, 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램을 테스트하고 상기 애플리케이션 프로그램에서 알려진 문제 또는 "버그(bug)"의 원인을 식별하는 데 사용된다. 상기 애플리케이션 프로그램의 테스트는 일반적으로 "디버깅(debugging)"으로서 언급된다. 특히, 상기 내부 디버거 애플리케이션은 한 번에 하나의 프로그램 명령어를 실행(상기 프로그램의 "단일 스테핑(single stepping)"으로서 언급됨)하고 실행해야 할 다음 명령어를 결정하도록 구성된다. 또한, 상기 내부 디버거 애플리케이션은 컴퓨터 레지스터 및 메모리 위치들을 검사 및/또는 수정하는 데 사용된다. 상기 내부 디버거 애플리케이션은 실행 중인 애플리케이션 프로그램의 실행 상태에 대한 정보 및 그의 제어를 상기 프로그램에 제공한다. 상기 애플리케이션의 상태에는 프로그램 및 데이터 메모리; 하드웨어 레지스터; 프로그램 스택; 및 대기열, 동기화 객체 및 프로그램 계정 정보와 같은 운영 체제 객체가 포함된다. 상기 내부 디버거 애플리케이션은 중지(또는 대안으로 개시, 일시 중단, 종료, 명령어들의 건너뛰기, 분기들의 실행, 구문들의 건너뛰기, 서브루틴 호출들의 단계별 실행, 브레이크 포인트들에서의 중지(차후에 구체적으로 논의됨), 및 데이터 워치 포인트(data watchpoint)에서의 중지)와 같은 동작들로 상기 애플리케이션 프로그램의 실행을 제어하도록 구성된다.
구체적으로, 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램에 연계되어 있고, 상기 소프트웨어 프로그램이 실행되고 있는 경우, 외부 디버거는 상기 소프트웨어 프로그램으로의 연계로부터 차단되고, 그럼으로써 상기 애플리케이션 프로그램의 코드 분석을 방지하게 된다. 이하, "외부 디버거 애플리케이션"이라는 용어는 상기 소프트웨어 프로그램과 일체화되어 있지 않고 상기 소프트웨어 의 코드를 분석할 의도로 상기 소프트웨어 프로그램에 연계되도록 시도하게 되는 디버거 애플리케이션을 언급하는데 사용된다. 또한 "외부 디버거 애플리케이션"은 본 방법 및 시스템을 구현함으로써 차단되는 부정 디버거 애플리케이션이다. 실제로, 일 예로서, 내부 디버거 애플리케이션을 실행하는 것은 동일한 컴퓨팅 장치에서 외부 디버거 애플리케이션을 실행하는 것을 차단한다. 한 대표적인 실시 예에서, 상기 컴퓨팅 장치의 운영 체제(커널 등)는 단지 하나의 디버거 애플리케이션이 단일 프로세스에 동시 연계되는 것을 허용하도록 구성된다.
또한, 위에서 언급한 바와 같이, 상기 내부 디버거 애플리케이션은 운영 체제의 커널 리소스들을 이용한다. 본 개시내용 전반에 걸쳐, 여기에서 사용되는 "커널 리소스들"은 상기 컴퓨팅 장치에 연관된 운영 체제의 중앙 모듈을 언급한다. 특히, 커널은 처음으로 로드되는 운영 체제의 일부이며 메모리에 상주하게 된다. 상기 커널은 메모리 관리, 프로세스 및 태스크 관리, 및 디스크 관리의 기능을 수행한다. 상기 커널은 장치 하드웨어를 애플리케이션에 접속시킨다. 특히, 상기 커널은 소프트웨어 또는 상기 운영 체제의 일부이며 상기 애플리케이션 프로그램에서의 실행 스레드들을 대신하여 상기 컴퓨팅 장치의 하드웨어에 대한 보안 액세스를 제공하는 기능을 수행한다. 또한, 상기 커널은 메모리, 처리 용량, 입력/출력 리소스들 등에 대한 액세스를 포함하는 상기 컴퓨팅 장치의 다른 구성요소들에 대한 액세스를 제공한다. 일반적으로, 커널은 특정 유형의 모든 장치들에 보편적인 명령어 집합으로서 하드웨어 추상화(hardware abstraction)를 제공하고, 그럼으로써 상기 애플리케이션 프로그램으로부터 그리고 운영 체제의 다른 구성요소로부터 근본적인 복잡성을 은닉(hiding)하는 것을 그 목적으로 한다. 유리하게는, 상기 커널 리소스들은 상기 컴퓨팅 장치의 하드웨어에 대한 액세스를 제어 및 중재하고, 프로세스, 스레드, 파일, 장치 등과 같은 기본 추상화를 구현 및 지원하고, 메모리, 프로세서, 디스크, 파일 디스크립터, 프로세스 디스크립터, 스레드 디스크립터 등과 같은 운영 체제 리소스들을 할당 및 스케줄링하며, 그리고 상기 운영 체제 리소스들의 보안 및 보호를 제공하는 커널 서비스를 제공한다. 여기서 이해할 점은 위에서 설명한 바와 같은 운영 체제 및 커널 리소소들의 기능 및 동작이 여기에 첨부된 청구항들의 범위를 과도하게 제한하지 않아야 하며, 상기 운영 체제 및 상기 커널 리소스들이 당 업계에 알려진 바와 같은 다양한 기능 및 동작을 수행할 수 있다.
또한, 상기 방법은 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하는 단계를 포함한다. 여기서, 상기 소프트웨어 프로그램은 상기 소프트웨어 프로그램의 초기화 시에 상기 애플리케이션 프로그램에 상기 내부 디버거 애플리케이션 내에 로드되도록 지시하는 하나 이상의 배치 파일(batch file)들을 더 포함할 수 있다. 선택적으로, 상기 방법은 상기 내부 디버거 애플리케이션 내에 로드하도록 상기 애플리케이션 프로그램을 구성하는 단계를 포함한다. 여기서, 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드한다는 것은 상기 애플리케이션 프로그램이 상기 내부 디버거 애플리케이션에서 실행하도록 구성됨을 의미한다. 여기서 이해할 점은 상기 애플리케이션 프로그램이 런타임 동안 상기 내부 디버거 애플리케이션에서 실행하고, 그럼으로써 상기 외부 디버거 애플리케이션이 특정 애플리케이션 프로그램을 디버깅하는 것을 방지하도록 구성된다는 것이다.
선택적으로, 상기 애플리케이션 프로그램은 상기 컴퓨팅 장치의 사용자에 의해 상기 소프트웨어 프로그램이 시동될 때 상기 내부 디버거 애플리케이션을 초기화하도록 구성된다. 상기 사용자는 예를 들어 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하는 상기 애플리케이션 프로그램의 실행 파일을 클릭함으로써 여러 방법으로 상기 소프트웨어 프로그램을 시동할 수 있다. 선택적으로, 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램의 코드 실행을 초기화한다. 여기서 이해할 점은 상기 애플리케이션 프로그램이 상기 내부 디버거 애플리케이션의 초기화 후에만 실행을 수행하도록 구성된다는 것이다. 이러한 방법은 외부 디버거 애플리케이션이 상기 애플리케이션 프로그램에 연계되지 않게 하여 상기 애플리케이션 프로그램의 코드를 분석하거나 수정하기 위한 부정 액세스의 가능성을 제거한다. 여기서 이해할 점은 상기 애플리케이션 프로그램의 코드가 상기 소프트웨어 프로그램을 구성하기 위해 상기 애플리케이션 프로그램의 코드 내에 통합되고, 그럼으로써 상기 애플리케이션 프로그램의 코드가 상기 내부 디버거 애플리케이션에서 실행하도록 구성되는 방식으로 상기 소프트웨어 프로그램의 초기화가 상기 내부 디버거 애플리케이션의 초기화를 트리거하게 된다는 것이다.
또한, 상기 방법은 상기 애플리케이션 프로그램의 코드에 하나 이상의 브레이크 포인트들을 설정하여 상기 애플리케이션 프로그램의 코드에 대한 실행 코드를 정의하도록 상기 내부 디버거 애플리케이션을 실행하는 단계를 포함한다. 특히, 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램의 코드의 하나 이상의 명령어 세트들 이후에 상기 애플리케이션 프로그램의 코드에 하나 이상의 브레이크 포인트을 도입하도록 구성된다. 여기서 "브레이크 포인트(break-point)"라는 용어는 상기 애플리케이션 프로그램의 실행 중 의도적인 중지 또는 일시 중지를 언급하는데 사용된다. 특히, 상기 브레이크 포인트들은 종종 상기 애플리케이션 프로그램의 실행이 예상대로 기능 하고 있는지의 여부를 결정하기 위해 삽입된다. 브레이크 포인트들은 한 브레이크 포인트가 맞닥뜨리게 된 직후에 실행 중인 애플리케이션 프로그램을 인터럽트하는 데 사용된다. 특히, 상기 브레이크 포인트들은 상기 애플리케이션 프로그램의 코드 내 다른 명령어에 삽입되고 새로운 실행 경로들은 삽입된 브레이크 포인트들에 따라 상응하게 정의된다. 위에서 언급한 바와 같이, 상기 애플리케이션 프로그램은 상기 내부 디버거 애플리케이션 내에 로드하도록 구성된다. 일 예에서, 내부 디버거 애플리케이션의 실행은 페어런트 프로세스(parent process)이고, 애플리케이션 프로그램의 실행은 차일드 프로세스(child process)이며, 실행 경로가 그에 따라 정의될 수 있다.
선택적으로, 상기 하나 이상의 브레이크 포인트들은 상기 내부 디버거 애플리케이션의 실행 후 한 코드 블록으로부터 다른 한 코드 블록으로 이동하도록 하는 명령어들을 포함하도록 설정된다. 여기서, 상기 명령어들은 상기 컴퓨팅 장치에 연관된 메모리의 메모리 어드레스를 포함할 수 있다. 상기 메모리 어드레스는 상기 내부 디버깅 애플리케이션의 코드로부터 페치(fetch)되고, 그에 따라 다른 한 코드 블록의 실행으로 이동된다. 선택적으로, 상기 하나 이상의 브레이크 포인트들은 상기 애플리케이션 프로그램의 코드 내 하나 이상의 사전에 결정된 코드 블록들의 종단부에 설정된다. 선택적으로, 하나 이상의 브레이크 포인트들은 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 실행 빈도에 기초하여 설정된다. 선택적으로, 상기 하나 이상의 브레이크 포인트들은 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 종단부에 무작위로 설정된다.
또한, 상기 방법은 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 단계를 포함한다. 여기에서, "실행 경로(execution path)"라는 용어는 상기 컴퓨팅 장치의 메모리에서 지정된 고유 위치 실행가능 파일에 액세스하기 위해 실행가능 명령어 세트가 이어지게 되는 경로를 언급한다. 특히, 상기 실행 경로는 실행 전과 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 획득한 후에 정의된다. 여기서 이해할 점은 특정 브레이크 포인트 다음에 오는 명령어들에 대해 브레이크 포인트들이 삽입될 때 상기 실행 경로가 다시 정의된다는 것이다. 또한, 상기 방법은 상기 애플리케이션 프로그램 내 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 단계를 포함한다. 여기에서, 브레이크 포인트가 맞닥뜨리게 되면, 제1 실행 경로에서는 상기 애플리케이션 프로그램의 코드 실행이 중단되고, 제2 실행 경로에서는 상기 애플리케이션 프로그램의 코드 실행이 개시된다. 또한, 상기 방법은 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내 디버거 애플리케이션에 넘겨주는 단계를 포함한다. 여기에서, 상기 제1 실행 경로에서 상기 애플리케이션 프로그램의 실행을 중지한 후에, 상기 제어는 제2 실행 경로를 통해 상기 내부 디버거 애플리케이션으로 이전된다. 상기 내부 디버거 애플리케이션의 코드는 상기 애플리케이션 프로그램의 코드에 대한 제3 실행 경로에 따라 실행될 다음 지시에 대한 어드레스를 제공한다.
상기 애플리케이션 프로그램의 코드 내 하나 이상의 사전에 결정된 코드 블록들의 종단부에 상기 하나 이상의 브레이크 포인트들이 설정되는 경우에, 상기 브레이크 포인트들은 제1 코드 블록의 마지막 실행가능 지시의 종단부 뒤에 삽입되고, 그럼으로써 실행될 제2 코드 블록의 제1 실행가능 지시의 메모리 어드레스가 상기 내부 디버거 애플리케이션의 코드 내에 저장되게 한다. 여기에서, 상응하는 브레이크 포인트가 맞닥뜨리게 되면, 상기 제1 코드 블록의 마지막 실행가능 지시의 실행 후에 상기 애플리케이션 프로그램의 실행이 중지되고 제어가 상기 내부 디버거 애플리케이션으로 이전된다. 또한, 실행될 다른 한 코드 블록의 제1 실행가능 지시의 메모리 어드레스는 상기 내부 디버거 애플리케이션의 코드로부터 페치된다. 여기서 이해할 점은 그러한 방법이 권한이 없는 사용자가 상기 애플리케이션의 전체 코드에 액세스하지 못하게 한다는 것이다. 사용자가 상기 애플리케이션 프로그램의 코드의 특정 부분에 액세스할 수 있는 경우의 시나리오에서, 브레이크 포인트가 맞닥뜨리게 되면 상기 애플리케이션 프로그램의 실행이 중지되고 다음 지시에 대한 어드레스는 권한이 없는 사용자에게 제공되지 않으며, 그럼으로써 상기 소프트웨어 프로그램의 소프트웨어 무단 복제를 방지하게 된다.
상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 실행 빈도에 기초하여 상기 하나 이상의 브레이크 포인트들이 설정되는 경우에, 상기 브레이크 포인트들은 게이밍 애플리케이션 프로그램의 경우에서와같이 상기 애플리케이션 프로그램에서 가장 빈번하게 사용되는 코드 블록들의 앞 또는 뒤에 주기적으로 삽입된다. 상기 브레이크 포인트들은 위에서 언급한 바와 유사한 방식으로 상기 컴퓨팅 장치의 메모리에 액세스함으로써 삽입된다. 여기에서, 상기 브레이크 포인트들이 빈번하게 사용되는 코드 블록들보다 앞에 있는 그러한 경우는, 권한이 없는 사용자에 의해 액세스될 위험이 큰 코드 블록들의 보호를 보장한다.
상기 하나 이상의 브레이크 포인트들이 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록의 종단부에 무작위로 설정되는 경우에, 상기 브레이크 포인트들은 상기 코드 블록들 중 어느 한 코드 블록 뒤 또는 앞에 임의로 삽입된다. 여기에서, 상기 브레이크 포인트들은 상기 소프트웨어 프로그램이 초기화될 때마다 브레이크 포인트들의 위치들이 임의로 변경되도록 하나 이상의 위치들에 동적으로 삽입될 수 있다. 여기서 이해할 점은 브레이크 포인트들을 삽입하는 방법이 위에서 논의한 바와 동일하지만 상기 브레이크 포인트들이 동적으로 설정된다는 것이다.
본 개시내용은 또한 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 애플리케이션 프로그램의 코드 분석으로부터 차단하는 시스템을 제공한다. 상기 시스템은 상기 컴퓨팅 장치에 통신 가능하게 연결된 디버깅 서버를 포함한다. 본 개시내용 전반에 걸쳐, "디버깅 서버(debugging server)"에서 사용되는 "서버"라는 용어는 원격 디버깅에 관련된 정보를 저장, 처리 및/또는 공유하도록 구성된 프로그램가능 및/또는 비-프로그램가능 구성요소들을 포함하는 구조 및/또는 모듈을 언급한다. 선택적으로, 상기 서버는 원격 디버깅과 같은 다양한 계산 태스크를 수행하기 위해 정보를 향상시킬 수 있는 물리적 또는 가상의 계산 엔티티들의 임의의 배치를 포함한다. 또한, 여기서 이해하여야 할 점은 상기 서버가 단일의 하드웨어 서버 및/또는 병렬 또는 분산 아키텍처에서 동작하는 복수의 하드웨어 서버들 양자 모두일 수 있다는 것이다. 일 예에서, 상기 서버는 상기 컴퓨팅 장치와 같은 다른 컴퓨팅 구성요소들을 사용하여 정보를 저장, 처리 및/또는 공유하기 위해 메모리, 프로세서, 네트워크 어댑터 등과 같은 구성요소를 포함할 수 있다.
특히, 상기 컴퓨팅 장치는 통신 네트워크를 통해 상기 디버깅 서버에 통신 가능하게 연결된다. 한 대표적인 네트워크 환경에서, 다수의 컴퓨팅 장치는 상기 디버깅 서버에 연결되고, 상기 디버깅 서버는 상기 통신 네트워크를 통해 연결된 상기 컴퓨팅 장치들 각각에 원격 디버깅 서비스를 제공하도록 구성된다. 위에서 언급한 바와 같이, 상기 애플리케이션 프로그램은 상기 컴퓨팅 장치상에 설치되며, 상기 애플리케이션 프로그램이 상기 컴퓨팅 장치상에서 초기화될 때 상기 디버깅 서버에 액세스하도록 구성된다. 여기서 이해할 점은 상기 컴퓨팅 장치가 디버깅 서버와 연결되어 있는 경우에만 상기 애플리케이션 프로그램이 상기 컴퓨팅 장치상에서 실행하고, 그럼으로써 상기 외부 디버거를 상기 애플리케이션 프로그램의 코드 분석으로부터 차단하도록 구성된다는 것이다.
여기에서, 상기 통신 네트워크는 서로 상호접속되어 단일의 대규모 네트워크로서 기능 하는 개별 네트워크들의 모임일 수 있다. 이러한 개별 네트워크들은 유선, 무선 또는 이들의 조합일 수 있다. 이러한 개별 네트워크의 예로는 LAN(Local Area Network), WAN(Wide Area Network), MAN(Metropolitan Area Network), WLAN(Wireless LAN), WWAN(Wireless WAN), WMAN(Wireless MAN), 인터넷, 2세대(2G) 통신 네트워크, 3세대(3G) 통신 네트워크, 4세대(4G) 통신 네트워크 및 WiMAX(Worldwide Interoperability for Microwave Access) 네트워크를 포함하지만, 이들에 국한되지 않는다.
추가로 또는 대안으로, 상기 컴퓨팅 장치들은 이들 자체의 Bluetooth® 네트워크를 사용하고 Bluetooth® 서버에 연결하여 다른 전자 장치들과 동기화할 수 있다. 네트워크 환경은 가능한 여러 시나리오에 따라 다양한 방식으로 구현될 수 있다. 한 대표적인 시나리오에서, 상기 네트워크 환경은 서버와 데이터베이스의 공간 배치된 구성을 통해 구현될 수 있다. 다른 한 대표적인 시나리오에서, 상기 네트워크 환경은 상기 통신 네트워크를 통해 통신 가능하게 상호 연결된 상기 서버 및 상기 데이터베이스의 공간 분산된 구성을 통해 구현될 수 있다. 또 다른 한 대표적인 시나리오에서, 상기 서버 및 상기 데이터베이스는 클라우드 컴퓨팅 서비스를 통해 구현될 수 있다.
또한, 상기 디버깅 서버는 내부 디버거 애플리케이션을 상기 애플리케이션 프로그램에 연계하도록 구성된다. 여기에서, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성된다. 특히, 상기 내부 디버거 애플리케이션의 기능은 본 개시내용에서 앞서 설명한 바와 동일하다. 그러나 여기서 이해하여야 할 점은 상기 시스템에서 사용되는 내부 디버거 애플리케이션이 상기 애플리케이션 프로그램과 통합되지 않는다는 것이다. 여기서, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치에 의해 상기 통신 네트워크를 통해 원격 액세스되도록 구성된다. 상기 내부 디버거 애플리케이션은 실행될 때 상기 컴퓨팅 장치가 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하게 한다. 또한, 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드 내 하나 이상의 브레이크 포인트들을 설정한다. 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행한다. 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램의 코드 내 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지한다. 또한, 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨준다.
위에서 언급한 바와 같이, 본 개시내용은 또한 컴퓨팅 장치상에 설치된 컴퓨터 프로그램 제품에 관한 것이며, 상기 컴퓨터 프로그램 제품은 소프트웨어 프로그램의 프로그램 명령어들이 저장된 비-일시적 기계-판독가능 데이터 저장 매체를 포함한다. 위에서 개시한 실시 예들 및 세부사항들은 실행될 때 외부 디버거 애플리케이션을 상기 소프트웨어 프로그램의 코드 분석으로부터 차단하도록 상기 컴퓨터 프로그램 제품에 적용된다.
선택적으로, 상기 애플리케이션 프로그램의 코드는 다중 코드 블록을 포함하고, 상기 하나 이상의 브레이크 포인트들은 상기 내부 디버거 애플리케이션의 실행 후 한 코드 블록으로부터 다른 한 코드 블록으로 이동하도록 하는 명령어들을 포함한다.
선택적으로, 상기 컴퓨터 프로그램 제품의 프로그램 명령어들은 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 코드 블록에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주게 한다.
선택적으로, 상기 컴퓨터 프로그램 제품의 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 애플리케이션 프로그램의 코드 내 하나 이상의 사전에 결정된 코드 블록들의 종단부에 하나 이상의 브레이크 포인트들을 설정하게 한다.
선택적으로, 상기 컴퓨터 프로그램 제품의 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 실행 빈도에 따라 상기 하나 이상의 브레이크 포인트들을 설정하게 한다.
선택적으로, 상기 컴퓨터 프로그램 제품의 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 종단부에 상기 하나 이상의 브레이크 포인트들을 임의로 설정하게 한다.
선택적으로, 상기 컴퓨터 프로그램 제품의 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 컴퓨팅 장치의 사용자에 의한 상기 소프트웨어 프로그램의 개시 시 상기 내부 디버거 애플리케이션을 초기화하도록 상기 애플리케이션 프로그램을 구성하게 한다.
선택적으로, 상기 컴퓨터 프로그램 제품의 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 내부 디버거 애플리케이션이 상기 애플리케이션 프로그램의 코드 실행을 초기화하게 한다.
선택적으로, 상기 애플리케이션 프로그램은 게이밍 애플리케이션 프로그램이다.
위에서 언급한 바와 같이, 본 개시내용은 또한 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 컴퓨팅 장치를 제공한다. 위에서 개시한 실시 예들 및 세부사항들은 상기 외부 디버거 애플리케이션을 상기 소프트웨어 프로그램의 코드 분석으로부터 차단하기 위해 상기 컴퓨팅 장치에 적용된다.
선택적으로, 상기 애플리케이션 프로그램의 코드는 다중 코드 블록을 포함하고, 상기 하나 이상의 브레이크 포인트들은 상기 내부 디버거 애플리케이션의 실행 후에 한 코드 블록으로부터 다른 한 코드 블록으로 이동하도록 하는 명령어들을 포함한다.
선택적으로, 상기 컴퓨팅 장치는 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 코드 블록에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주도록 추가로 구성된다.
선택적으로, 상기 컴퓨팅 장치는 상기 애플리케이션 프로그램의 코드 내 하나 이상의 사전에 결정된 코드 블록들의 종단부에 상기 하나 이상의 브레이크 포인트들을 설정하도록 추가로 구성된다.
선택적으로, 상기 컴퓨팅 장치는 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 실행 빈도에 기초하여 상기 하나 이상의 브레이크 포인트들을 설정하도록 추가로 구성된다.
선택적으로, 상기 컴퓨팅 장치는 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 종단부에 상기 하나 이상의 브레이크 포인트을 임의로 설정하도록 추가로 구성된다.
선택적으로, 상기 컴퓨팅 장치는 상기 컴퓨팅 장치의 사용자에 의한 상기 애플리케이션 프로그램의 시동 시 상기 내부 디버거 애플리케이션을 초기화하도록 구성된다.
선택적으로, 상기 컴퓨팅 장치는 상기 내부 디버거 애플리케이션의 초기화 시에 상기 애플리케이션 프로그램의 코드 실행을 초기화하도록 구성된다.
도 1을 참조하면, 도 1에는 본 개시내용의 일 실시 예에 따른, 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 방법의 단계들을 보여주는 흐름도(100)가 도시되어 있다. 단계 102에서, 상기 소프트웨어 프로그램이 초기화되고, 상기 소프트웨어 프로그램이 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하며, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성된다. 단계 104에서, 상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드 내 하나 이상의 브레이크 포인트들을 설정하도록 실행된다. 단계 106에서, 상기 애플리케이션 프로그램은 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 실행된다. 단계 108에서, 상기 애플리케이션 프로그램의 코드 실행은 상기 애플리케이션 프로그램의 코드 내 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 중지된다. 단계 110에서, 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어는 상기 내부 디버거 애플리케이션에 넘겨진다.
단계 102 내지 110은 단지 예시일 뿐이며 하나 이상의 단계들이 추가되거나, 하나 이상의 단계들이 제거되거나, 하나 이상의 단계들이 여기에서의 청구항들의 범위를 벗어나지 않고 다른 시퀀스로 제공되는 다른 대안들도 제공될 수 있다.
도 2를 참조하면, 도 2에는 본 개시내용의 일 실시 예에 따른 컴퓨팅 장치(200)의 블록도가 예시되어 있다. 도시된 바와 같이, 상기 컴퓨팅 장치(200)는 처리 장치(202), 운영 체제(OS)(204), BIOS(basic input output system)(206), 및 커널 리소스들(208)을 포함한다. 상기 처리 장치(202)는 랜덤 액세스 메모리(RAM)(212) 및 플래시 메모리(214)를 포함하는 메모리(210)를 더 포함한다. 여기에서, 상기 처리 장치(202)는 상기 소프트웨어 프로그램의 초기화 시에 상기 운영 체제(204)의 커널 리소스들(208)에 액세스하도록 구성된다. 또한, 상기 처리 장치(202)는 상기 RAM(212) 내 소프트웨어 프로그램의 코드에 메모리 위치들을 할당한다. 또한, 상기 플래시 메모리(214)는 상기 컴퓨팅 장치(202)의 동작을 가능하게 하기 위해 상기 BIOS(206) 및 상기 OS(204)로부터의 부트 코드를 저장하도록 구성된다.
도 3을 참조하면, 도 3에는 본 개시내용의 일 실시 예에 따른 (도 1의 컴퓨팅 장치(200)와 같은) 컴퓨팅 장치(300)의 동작을 보여주는 블록도가 예시되어 있다. 도시된 바와 같이, 상기 컴퓨팅 장치(300)는 메모리(304)와 통신하는 처리 장치(302)를 포함한다. 여기에서, 상기 소프트웨어 프로그램(306)의 코드는 상기 메모리(304)에 저장된다. 상기 소프트웨어 프로그램(306)은 애플리케이션 프로그램(308) 및 내부 디버거 애플리케이션(310)을 포함한다. 상기 처리 장치(302)는 상기 메모리(304)로부터 상기 소프트웨어 프로그램(306)의 코드에 액세스하도록 구성된다. 또한, 상기 처리 장치(302)는 상기 소프트웨어 프로그램(306)의 초기화 시에 커널 리소스들(312)을 이용하도록 구성된다.
도 4를 참조하면, 도 4에는 본 개시내용의 일 실시 예에 따른, 외부 디버거 애플리케이션을 컴퓨팅 장치(402)상에 설치된 애플리케이션 프로그램의 코드 분석으로부터 차단하는 시스템(400)의 블록도가 예시되어 있다. 도시된 바와 같이, 상기 시스템(400)은 디버깅 서버(404)에 통신 가능하게 연결된 컴퓨팅 장치(402)를 포함한다. 또한, 상기 컴퓨팅 장치(402)와 상기 디버깅 서버(404)는 통신 네트워크(406)를 통해 통신 가능하게 접속된다. 여기에서, 상기 디버깅 서버(404)는 내부 디버거 애플리케이션을 상기 애플리케이션 프로그램에 연계시킴으로써 상기 컴퓨팅 장치(402)에 디버깅 서비스를 제공함으로써 상기 외부 디버거 애플리케이션을 차단하도록 구성된다.
위에서 설명한 본 개시내용의 실시 예들에 대한 변형들은 첨부된 청구항들에 의해 정의된 바와 같은 본 개시내용의 범위를 벗어나지 않고 가능하다. 본 개시내용을 설명하고 청구하는데 사용된 "지니는", "구성하는", "포함하는", "구비하다", "이다"와 같은 표현들은 비-배타적 방식으로 해석되도록 의도되는데, 다시 말하면 또한 명시적으로 나타나 있지 않은 항목, 구성요소 또는 요소를 허용한다. 단수에 대한 참조는 또한 복수에 관련된 것으로 해석되어야 한다.

Claims (28)

  1. 외부 디버거 애플리케이션을 컴퓨팅 장치(202, 300)상에 설치된 소프트웨어 프로그램(306)의 코드 분석으로부터 차단하는 방법으로서, 상기 방법은,
    - 상기 소프트웨어 프로그램을 초기화하는 단계 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램(308) 및 내부 디버거 애플리케이션(310)을 포함하며, 상기 소프트웨어 프로그램은 상기 소프트웨어 프로그램의 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제(204)의 커널 리소스들(312)을 이용하도록 구성됨 -;
    - 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 단계;
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 단계;
    - 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 단계; 및
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 단계;
    를 포함하는, 외부 디버거 애플리케이션의 차단 방법.
  2. 제1항에 있어서,
    상기 애플리케이션 프로그램의 코드는 다수의 코드 블록을 포함하고, 상기 하나 이상의 브레이크 포인트들은 상기 내부 디버거 애플리케이션의 실행 후에 한 코드 블록으로부터 다른 한 코드 블록으로 이동하도록 하는 명령어들을 포함하는, 외부 디버거 애플리케이션의 차단 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 코드 블록에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 단계;
    를 더 포함하는, 외부 디버거 애플리케이션의 차단 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 하나 이상의 브레이크 포인트들은 상기 애플리케이션 프로그램의 코드 내 하나 이상의 사전에 결정된 코드 블록들의 종단부에 설정되는, 외부 디버거 애플리케이션의 차단 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 하나 이상의 브레이크 포인트들은 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 실행 빈도에 기초하여 설정되는, 외부 디버거 애플리케이션의 차단 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 하나 이상의 브레이크 포인트들은 상기 애플리케이션 프로그램의 코드내 하나 이상의 코드 블록들의 종단부에 임의로 설정되는, 외부 디버거 애플리케이션의 차단 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    상기 애플리케이션 프로그램은 상기 컴퓨팅 장치의 사용자에 의한 상기 애플리케이션 프로그램의 시동 시에 상기 내부 디버거 애플리케이션을 초기화하도록 구성되는, 외부 디버거 애플리케이션의 차단 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 내부 디버거 애플리케이션은 상기 애플리케이션 프로그램의 코드 실행을 초기화하는, 외부 디버거 애플리케이션의 차단 방법.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서,
    상기 애플리케이션 프로그램은 게이밍 애플리케이션 프로그램인, 외부 디버거 애플리케이션의 차단 방법.
  10. 컴퓨팅 장치(200)상에 설치된 컴퓨터 프로그램 제품으로서, 상기 컴퓨터 프로그램 제품은 상기 컴퓨팅 장치에 연관된 처리 장치에 의해 액세스될 때 상기 처리 장치로 하여금 이하의 동작들을 수행하게 하는 소프트웨어 프로그램의 프로그램 명령어들이 저장된 비-일시적 기계-판독가능 데이터 저장 매체를 포함하고, 상기 이하의 동작들은,
    - 상기 소프트웨어 프로그램을 초기화하는 동작 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램 및 내부 디버거 애플리케이션을 포함하며, 상기 소프트웨어 프로그램은 상기 소프트웨어 프로그램의 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제의 커널 리소스들을 이용하도록 구성됨 -;
    - 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 동작;
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
    - 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
    을 포함하는, 컴퓨터 프로그램 제품.
  11. 제10항에 있어서,
    상기 애플리케이션 프로그램의 코드는 다수의 코드 블록을 포함하고, 상기 하나 이상의 브레이크 포인트들은 상기 내부 디버거 애플리케이션의 실행 후에 한 코드 블록으로부터 다른 한 코드 블록으로 이동하도록 하는 명령어들을 포함하는, 컴퓨터 프로그램 제품.
  12. 제10항 또는 제11항에 있어서,
    상기 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 코드 블록에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작을 수행하게 하는, 컴퓨터 프로그램 제품.
  13. 제10항 내지 제12항 중 어느 한 항에 있어서,
    상기 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 애플리케이션 프로그램의 코드 내 하나 이상의 사전에 결정된 코드 블록들의 종단부에 상기 하나 이상의 브레이크 포인트들을 설정하는 동작을 수행하게 하는, 컴퓨터 프로그램 제품.
  14. 제10항 내지 제13항 중 어느 한 항에 있어서,
    상기 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 실행 빈도에 기초하여 상기 하나 이상의 브레이크 포인트들을 설정하는 동작을 수행하게 하는, 컴퓨터 프로그램 제품.
  15. 제10항 내지 제14항 중 어느 한 항에 있어서,
    상기 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 종단부에 상기 하나 이상의 브레이크 포인트들을 임의로 설정하는 동작을 수행하게 하는, 컴퓨터 프로그램 제품.
  16. 제10항 내지 제15항 중 어느 한 항에 있어서,
    상기 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 처리 장치가 상기 컴퓨팅 장치의 사용자에 의한 상기 애플리케이션 프로그램의 시동 시에 상기 내부 디버거 애플리케이션을 초기화하도록 상기 애플리케이션 프로그램을 구성하는 동작을 수행하게 하는, 컴퓨터 프로그램 제품.
  17. 제10항 내지 제16항 중 어느 한 항에 있어서,
    상기 프로그램 명령어들은 상기 처리 장치에 의해 액세스될 때 상기 내부 디버거 애플리케이션이 상기 애플리케이션 프로그램의 코드 실행을 초기화하는 동작을 수행하게 하는, 컴퓨터 프로그램 제품.
  18. 제10항 내지 제17항 중 어느 한 항에 있어서,
    상기 애플리케이션 프로그램은 게이밍 애플리케이션 프로그램인, 컴퓨터 프로그램 제품.
  19. 컴퓨팅 장치(202, 300)를 위한 비-일시적 기계-판독가능 데이터 저장 매체로서 구체화되는 컴퓨터 프로그램 제품으로서, 상기 컴퓨터 프로그램 제품은 소프트웨어 프로그램을 포함하고, 상기 소프트웨어 프로그램은,
    - 애플리케이션 프로그램; 및
    - 외부 디버거 애플리케이션을 상기 소프트웨어 프로그램의 코드 분석으로부터 차단하기 위해 상기 컴퓨팅 장치의 운영 체제(204)의 커널 리소스들(312)을 이용하도록 구성된 내부 디버거 애플리케이션(310);
    을 포함하며, 상기 내부 디버거 애플리케이션은, 실행될 경우, 상기 컴퓨팅 장치로 하여금,
    - 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하는 동작;
    - 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하도록 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트들을 설정하는 동작;
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
    - 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
    을 수행하게 하는, 컴퓨터 프로그램 제품.
  20. 외부 디버거 애플리케이션을 컴퓨팅 장치상에 설치된 소프트웨어 프로그램의 코드 분석으로부터 차단하는 컴퓨팅 장치(202, 300)로서, 상기 컴퓨팅 장치는,
    - 상기 소프트웨어 프로그램을 초기화하는 동작 - 상기 소프트웨어 프로그램은 애플리케이션 프로그램(308) 및 내부 디버거 애플리케이션(310)을 포함하며, 상기 소프트웨어 프로그램은 상기 소프트웨어 프로그램의 초기화 시에 상기 내부 디버거 애플리케이션에 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하도록 지시하고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제(202)의 커널 리소스들(312)을 이용하도록 구성됨 -;
    - 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하기 위해 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트(break point)들을 설정하도록 상기 내부 디버거 애플리케이션을 실행하는 동작;
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
    - 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
    을 수행하도록 구성되는, 컴퓨팅 장치.
  21. 제20항에 있어서,
    상기 애플리케이션 프로그램의 코드는 다수의 코드 블록을 포함하고, 상기 하나 이상의 브레이크 포인트들은 상기 내부 디버거 애플리케이션의 실행 후에 한 코드 블록으로부터 다른 한 코드 블록으로 이동하도록 하는 명령어들을 포함하는, 컴퓨팅 장치.
  22. 제20항 또는 제21항에 있어서,
    상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 코드 블록에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주도록 더 구성되는, 컴퓨팅 장치.
  23. 제20항 내지 제22항 중 어느 한 항에 있어서,
    상기 애플리케이션 프로그램의 코드 내 하나 이상의 사전에 결정된 코드 블록들의 종단부에 상기 하나 이상의 브레이크 포인트들을 설정하도록 더 구성되는, 컴퓨팅 장치.
  24. 제20항 내지 제23항 중 어느 한 항에 있어서,
    상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 실행 빈도에 기초하여 상기 하나 이상의 브레이크 포인트들을 설정하도록 더 구성되는, 컴퓨팅 장치.
  25. 제20항 내지 제24항 중 어느 한 항에 있어서,
    상기 애플리케이션 프로그램의 코드 내 하나 이상의 코드 블록들의 종단부에 상기 하나 이상의 브레이크 포인트들을 임의로 설정하도록 더 구성되는, 컴퓨팅 장치.
  26. 제20항 내지 제25항 중 어느 한 항에 있어서,
    상기 컴퓨팅 장치의 사용자에 의한 상기 애플리케이션 프로그램의 시동 시에 상기 내부 디버거 애플리케이션을 초기화하도록 구성되는, 컴퓨팅 장치.
  27. 제20항 내지 제26항 중 어느 한 항에 있어서,
    상기 내부 디버거 애플리케이션의 초기화 시에 상기 애플리케이션 프로그램의 코드 실행을 초기화하도록 구성되는, 컴퓨팅 장치.
  28. 외부 디버거 애플리케이션을 컴퓨팅 장치(300)상에 설치된 애플리케이션 프로그램의 코드 분석으로부터 차단하는 시스템(400)으로서, 상기 시스템은,
    - 상기 컴퓨팅 장치에 통신 가능하게 연결된 디버깅 서버(404);
    를 포함하며, 상기 디버깅 서버는 내부 디버거 애플리케이션(310)을 상기 애플리케이션 프로그램에 연계하도록 구성되고, 상기 내부 디버거 애플리케이션은 상기 컴퓨팅 장치의 운영 체제(204)의 커널 리소스들(312)을 이용하도록 구성되며, 상기 내부 디버거 애플리케이션은 실행될 때 상기 컴퓨팅 장치로 하여금 이하의 동작들을 수행하게 하고, 상기 이하의 동작들은,
    - 상기 내부 디버거 애플리케이션 내에 상기 애플리케이션 프로그램을 로드하는 동작;
    - 상기 애플리케이션 프로그램의 코드에 대한 실행 경로를 정의하도록 상기 애플리케이션 프로그램의 코드에서 하나 이상의 브레이크 포인트들을 설정하는 동작;
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에 따라 상기 애플리케이션 프로그램을 실행하는 동작;
    - 상기 애플리케이션 프로그램의 코드에서의 하나 이상의 브레이크 포인트들 중 어느 한 브레이크 포인트에 이르게 되면 상기 애플리케이션 프로그램의 코드 실행을 중지하는 동작; 및
    - 상기 애플리케이션 프로그램의 코드에 대해 정의된 실행 경로에서 실행될 다음 지시에 대한 어드레스를 제공하도록 하는 제어를 상기 내부 디버거 애플리케이션에 넘겨주는 동작;
    을 포함하는, 외부 디버거 애플리케이션의 차단 시스템.
KR1020227020221A 2020-01-07 2020-12-11 소프트웨어 프로그램의 코드 분석으로부터 외부 디버거 애플리케이션을 차단하는 방법 KR20220122986A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/736,242 2020-01-07
US16/736,242 US11194695B2 (en) 2020-01-07 2020-01-07 Method for blocking external debugger application from analysing code of software program
PCT/FI2020/050836 WO2021140269A1 (en) 2020-01-07 2020-12-11 Method for blocking external debugger application from analysing code of software program

Publications (1)

Publication Number Publication Date
KR20220122986A true KR20220122986A (ko) 2022-09-05

Family

ID=73855501

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227020221A KR20220122986A (ko) 2020-01-07 2020-12-11 소프트웨어 프로그램의 코드 분석으로부터 외부 디버거 애플리케이션을 차단하는 방법

Country Status (6)

Country Link
US (3) US11194695B2 (ko)
EP (1) EP4088204B1 (ko)
JP (1) JP2023515293A (ko)
KR (1) KR20220122986A (ko)
CN (1) CN114868120A (ko)
WO (1) WO2021140269A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11966343B2 (en) 2021-07-19 2024-04-23 Samsung Electronics Co., Ltd. Universal mechanism to access and control a computational device

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226747B1 (en) * 1998-04-10 2001-05-01 Microsoft Corporation Method for preventing software piracy during installation from a read only storage medium
US7503072B2 (en) * 1998-04-29 2009-03-10 Microsoft Corporation Hardware ID to prevent software piracy
US6567933B1 (en) * 1999-02-19 2003-05-20 Texas Instruments Incorporated Emulation suspension mode with stop mode extension
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US20010052053A1 (en) * 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US7054443B1 (en) * 2000-03-27 2006-05-30 Microsoft Corporation System and method for protecting digital goods using random and automatic code obfuscation
US7024696B1 (en) * 2000-06-14 2006-04-04 Reuben Bahar Method and system for prevention of piracy of a given software application via a communications network
US7237123B2 (en) * 2000-09-22 2007-06-26 Ecd Systems, Inc. Systems and methods for preventing unauthorized use of digital content
EP1395890A2 (en) * 2001-05-09 2004-03-10 ECD Systems, Inc. Systems and methods for the prevention of unauthorized use and manipulation of digital content
US7140042B2 (en) * 2002-01-14 2006-11-21 Mcafee, Inc. System and method for preventing software piracy
US7516331B2 (en) * 2003-11-26 2009-04-07 International Business Machines Corporation Tamper-resistant trusted java virtual machine and method of using the same
US20060137016A1 (en) * 2004-12-20 2006-06-22 Dany Margalit Method for blocking unauthorized use of a software application
US7752139B2 (en) * 2005-12-27 2010-07-06 Michael Noel Hu Method and system for managing software licenses and reducing unauthorized use of software
US7913092B1 (en) * 2005-12-29 2011-03-22 At&T Intellectual Property Ii, L.P. System and method for enforcing application security policies using authenticated system calls
US8424082B2 (en) * 2008-05-08 2013-04-16 Google Inc. Safely executing an untrusted native code module on a computing device
US20100095281A1 (en) * 2008-10-14 2010-04-15 Riverside Research Institute Internal Function Debugger
US8510842B2 (en) * 2011-04-13 2013-08-13 International Business Machines Corporation Pinpointing security vulnerabilities in computer software applications

Also Published As

Publication number Publication date
JP2023515293A (ja) 2023-04-13
WO2021140269A1 (en) 2021-07-15
US11954010B2 (en) 2024-04-09
EP4088204A1 (en) 2022-11-16
US20230281103A1 (en) 2023-09-07
CN114868120A (zh) 2022-08-05
US11586529B2 (en) 2023-02-21
US20220164275A1 (en) 2022-05-26
US20210208997A1 (en) 2021-07-08
EP4088204B1 (en) 2024-02-07
US11194695B2 (en) 2021-12-07

Similar Documents

Publication Publication Date Title
US10949247B2 (en) Systems and methods for auditing a virtual machine
US7996836B1 (en) Using a hypervisor to provide computer security
US10013553B2 (en) Protecting software application
Zhou et al. Hybrid user-level sandboxing of third-party android apps
US11954010B2 (en) Method for blocking external debugger application from analysing code of software program
Fleischer et al. Memory corruption attacks within Android TEEs: a case study based on OP-TEE
CN112231198B (zh) 一种恶意进程调试方法、装置、电子设备及介质
US8407523B2 (en) Method for protecting software programs
Lyerly et al. Dynamic and secure memory transformation in userspace
Abrath et al. Resilient self-debugging software protection
Gu et al. Drip: A framework for purifying trojaned kernel drivers
Vinck et al. Sharing is caring: Secure and efficient shared memory support for mvees
Yehuda et al. Arm security alternatives
Gu et al. Remote attestation on function execution (work-in-progress)
KR102494791B1 (ko) 컨테이너 환경에서 알려지지 않은 바이너리 검사 및 차단 방법 및 장치
Mishra et al. Thwarting piracy: Anti-debugging using gpu-assisted self-healing codes
Brown Control-flow Integrity for Real-time Embedded Systems
Mendonça Vulnerability detection in device drivers
CA2668547A1 (en) Protecting software programs