# US 10,482,221 B2 · Protecting a computer program against reverse engineering

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,482,221 B2
- Document ID: US10482221B2
- Status: Granted
- Kind: B2
- Application number: 15/554,830
- Filed: 2016-02-22
- Published: 2018-06-28
- Granted: 2019-11-19
- Earliest claimed: 2015-03-02
- Assignees: Inventio AG
- Applicants: Inventio AG
- Inventors: Markus Gilli
- Web page: https://patentgrep.com/patent/US10482221B2

## CPC

- G06F 21/14: against software analysis or reverse engineering, e.g. by obfuscation
- G06F 9/4401: Bootstrapping (security arrangements therefor G06F21/57)
- G06F 9/445: Program loading or initiating (bootstrapping G06F9/4401; security arrangements for program loading or initiating G06F21/57)
- G06F 9/45558: {Hypervisor-specific management and integration aspects}
- G06F 21/125: {by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code}
- G06F 21/602: {Providing cryptographic facilities or services}
- H04L 9/065: {Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3}
- H04L 9/14: using a plurality of keys or algorithms
- G06F 21/1066: {Hiding content}
- G06F 2009/45575: {Starting, stopping, suspending or resuming virtual machine instances}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

A method of protecting a computer program against reverse engineering includes: obfuscating and/or encrypting at least one program library of the computer program, wherein the at least one program library contains byte code adapted for being executed by a virtual machine; including the at least one obfuscated and/or encrypted library into a bootstrap library, the bootstrap library including a bootstrap module adapted for loading the at least one program library into the virtual machine and for starting the computer program; encrypting the bootstrap library; and including the encrypted bootstrap library into a native code launcher executable including a launcher module adapted for starting the virtual machine, decrypting the bootstrap library and for loading the bootstrap library into the virtual machine.

## Claims

### Claim 1

A method of protecting a computer program against reverse engineering, the method comprising the steps of:
at least one of obfuscating and encrypting at least one program library of the computer program, wherein the at least one program library contains byte code adapted for being executed by a virtual machine;
including the at least one program library into a bootstrap library, the bootstrap library including a bootstrap module adapted for loading the at least one program library into the virtual machine and for starting the computer program;
encrypting the bootstrap library;
including the encrypted bootstrap library into a native code launcher executable including a launcher module adapted for starting the virtual machine,
decrypting the bootstrap library and for loading the bootstrap library into the virtual machine;
wherein the bootstrap library included a first key for decrypting the at least one program library and wherein the bootstrap module is adapted for decrypting the at least one program library with the first key.

### Claim 2 (depends on 1)

The method according to claim 1 wherein a second key for decrypting the bootstrap library is included into the launcher executable and wherein the launcher executable is adapted for decrypting the bootstrap library with the second key.

### Claim 3 (depends on 1)

The method according to claim 1 wherein a key for decrypting the bootstrap library is included into the launcher executable and wherein the launcher executable is adapted for decrypting the bootstrap library with the key.

### Claim 4 (depends on 1)

The method according to claim 1 wherein the bootstrap library is obfuscated before being encrypted.

### Claim 5 (depends on 1)

The method according to claim 1 wherein at least one of the at least one program library and the bootstrap library is encrypted and decrypted with an RC4 algorithm.

### Claim 6 (depends on 1)

The method according to claim 1 wherein a further program library containing byte code is directly included into the bootstrap library.

### Claim 7 (depends on 1)

The method according to claim 1 wherein at least one of the at least one program library and the bootstrap library contains CIL byte code or JAVA byte code.

### Claim 8

A method of launching a protected computer program comprising the steps of:
starting a launcher module of a native code launcher executable, the native code launcher executable containing an encrypted bootstrap library, the encrypted bootstrap library containing at least one program library being at least one of obfuscated and encrypted;
starting a virtual machine with the launcher module; decrypting the bootstrap library with the launcher module; loading a bootstrap module of the bootstrap library into the virtual machine and starting the bootstrap module with the launcher module; and
loading a program library contained in the bootstrap library into the virtual machine and starting the program library with the bootstrap module;
resolving a call to an encrypted further program library by the bootstrap module by:
waiting for the call;
decrypting the further program library after the call; and
loading the further program library into the virtual machine.

### Claim 9 (depends on 8)

The method according to claim 8 further comprising decrypting the program library with the bootstrap module.

### Claim 10 (depends on 8)

The method according to claim 8 further comprising: detecting, by the launcher module, whether a debugger is active; and terminating the launching when an active debugger is detected.

### Claim 11 (depends on 8)

The method according to claim 8 further comprising: testing, with the launcher module, whether the computer program is allowed to run on a system that executes the launcher executable; and terminating when the computer program is not allowed to run on the system.

### Claim 12

A computer program product comprises a non-transitory computer readable medium stored instructions that when executed by a processor, cause the processor to perform the steps of:
starting a launcher module of a native code launcher executable,
the native code launcher executable containing an encrypted bootstrap library,
the encrypted bootstrap library containing at least one program library being at least one of obfuscated and encrypted;
starting a virtual machine with the launcher module;
decrypting the bootstrap library with the launcher module;
loading a bootstrap module of the bootstrap library into the virtual machine and starting the bootstrap module with the launcher module; and
loading a program library contained in the bootstrap library into the virtual
machine and starting the program library with the bootstrap module;
wherein the native code launcher executable containing native code;
wherein the encrypted bootstrap library contained in the launcher executable; and
at least one program library being at least one of obfuscated and encrypted contained in the bootstrap library.

### Claim 13 (depends on 12)

The computer program product according to claim 12 wherein the launcher executable is contained in one data file, and the bootstrap library containing the at least one program library is stored in the one data file.
