IP Library Granted Patent US 10,891,167
Granted Patent B2
US 10,891,167 · App. 15/328,605 · Granted Jan 12, 2021

Memory fractionation software protection

Inventor: Joseph James Sharkey (Deerfield, NY)
Assignee: Siege Technologies, LLC
G06F9/5066G06F9/28G06F9/46G06F9/50G06F12/08G06F12/1408G06F12/1433G06F12/1458G06F16/00G06F21/14G06F2212/1052G06F2212/152G06F2221/2125
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,891,167
App. No.
15/328,605
Granted
Jan 12, 2021
Kind
B2
Abstract

A method of protecting software in a computer system includes defining a memory fractionation configuration for an application software program in the computer system, fractionating at least one page of the application software program into fractions according to the memory fractionation configuration, and running the application in such a manner that, at any particular point in time when the application is running, at least a first one of the fractions is stored in a manner that is not accessible from a user space or a kernel space of the computer system.

Claims (59)

1. A method of protecting software in a computer system, the method comprising:

defining a memory fractionation configuration for an application software program in the computer system, wherein:

the application software includes two or more pages of code blocks, and

the memory fractionation configuration represents how the code blocks should be assigned to different code block fractions based, at least in part, on a first frequency with which one or more code blocks of a first code block fraction are transferred to a second code block fraction;

fractionating at least one page of the application software program into the code block fractions according to the memory fractionation configuration;

running the application in such a manner that, at any particular point in time when the application is running, at least one of the first and second code block fractions is stored in a manner that is not accessible from a user space or a kernel space of the computer system, according to the memory fractionation configuration;

determining whether the first frequency is greater than or equal to a predetermined value;

in accordance with a determination that the first frequency is greater than or equal to the predetermined value, reducing the first frequency to a second frequency with which one or more code blocks of the first and second code block fractions are transferred between the first and second code block fractions; and

defining the memory fractionation configuration to represent how the code blocks should be assigned to different code block fractions based, at least in part, on the second frequency.

2. The method of claim 1 , wherein at the particular point in time when the application is running, the second code block fraction is stored in a manner that is accessible from the user space or the kernel space of the computer system.

3. The method of claim 2 , further comprising:

switching, over time, which of the fractions is accessible from the user space or the kernel space and which of the fractions is not accessible from the user space or the kernel space, between the first and second code block fractions, based, at least in part, on the first frequency.

4. The method of claim 3 , further comprising:

providing a fractionator to perform the switching,

wherein the fractionator is implemented in the user space, the kernel space or a hypervisor space.

5. The method of claim 2 , wherein the first code block fraction is a different size than the second code block fraction.

6. The method of claim 2 , wherein each of the first and second code block fractions is smaller than a page size of the application.

7. The method of claim 1 , further comprising generating a configuration file that describes the memory fractionation configuration.

8. The method of claim 7 , further comprising:

generating multiple different configuration files for the application software program; and

cycling through the multiple different configuration files while the application is running.

9. The method of claim 1 , wherein defining the memory fractionation configuration comprises using a computer-based processor to group code chunks into respective fractions based, at least in part, on a number of cross fraction control flow transfers associated with a control flow graph for each respective one of a plurality of candidate memory fractionation configurations.

10. The method of claim 1 , wherein the fractionating is implemented at a hypervisor space, a microvisor space, a kernel space or a user space.

11. The method of claim 1 , wherein the fractionation is transparent to the application.

12. The method of claim 1 , wherein at least one of the code block fractions is at a first board and at least another one of the code block fractions is at a second board.

13. The method of claim 12 , wherein the first board and the second board are in a multiboard computer.

14. A computer system comprising:

a first computer configured to define a memory fractionation configuration for an application software program in a computer system,

wherein:

the application software includes two or more pages of code blocks;

the memory fractionation configuration represents how the code blocks should be assigned to different code block fractions based, at least in part, on a first frequency with which one or more code blocks of a first code block fraction are transferred to a second code block fraction; and

the first computer or a second computer is configured to:

fractionate, with a computer-based fractionator, at least one page of the application software program into the code block fractions according to the memory fractionation configuration;

run the application, with a computer-based runtime support module, in such a manner that, at any particular point in time when the application is running, at least one of the first and second code block fractions is stored, in a first computer-based memory storage device, in a manner that is not accessible from a user space or a kernel space of the computer system, according to the memory fractionation configuration;

determine whether the first frequency is greater than or equal to a predetermined value;

in accordance with a determination that the first frequency is greater than or equal to the predetermined value, reduce the first frequency to a second frequency with which one or more code blocks of the first and second code block fractions are transferred between the first and second code block fractions; and

define the memory fractionation configuration to represent how the code blocks should be assigned to different code block fractions based, at least in part, on the second frequency.

15. The computer system of claim 14 , wherein at the particular point in time when the application is running, the second code block fraction is stored, in a second computer-based memory storage device, in a manner that is accessible from the user space or the kernel space of the computer system.

16. The computer system of claim 15 , wherein the runtime support module is further configured to switch, over time, which of the fractions is accessible from the user space or the kernel space and which of the fractions is not accessible from the user space or the kernel space, between the first and second code block fractions, based, at least in part, on the first frequency.

17. The computer system of claim 16 , wherein the fractionator is implemented based on a user space, kernel space or hypervisor space.

18. The computer system of claim 15 , wherein the first code block fraction is a different size than the second code block fraction.

19. The computer system of claim 15 , wherein each of the first and second code block fractions is smaller than a page size of the application.

20. The computer system of claim 14 , wherein the fractionator is further configured to generate a computer configuration file that describes the memory fractionation configuration.

21. The computer system of claim 20 , wherein the fractionator is further configured to:

generate multiple different configuration files for the application software program; and

cycle through the multiple different configuration files while the application is running.

22. The computer system of claim 14 , wherein the fractionator is further configured to define the memory fractionation configuration by grouping code chunks into respective fractions based, at least in part, on a number of cross fraction control flow transfers associated with a control flow graph for each respective one of a plurality of candidate memory fractionation configurations.

23. The computer system of claim 14 , wherein the fractionator is implemented at a hypervisor space, a microvisor space, a kernel space or a user space.

24. The computer system of claim 14 , wherein at least one of the code block fractions is at a first board and at least another one of the code block fractions is at a second board in the computer system.

25. The computer system of claim 24 , wherein the first board and the second board are in a multiboard computer.

26. A non-transitory, computer-readable medium that stores instructions executable by a processor to perform the steps comprising:

defining a memory fractionation configuration for an application software program in the computer system, wherein:

the application software includes two or more pages of code blocks,

the memory fractionation configuration represents how the code blocks should be assigned to different code block fractions based, at least in part, on a first frequency with which one or more code blocks of a first code block fraction are transferred to a second code block fraction;

fractionating at least one page of the application software program into the code block fractions according to the memory fractionation configuration;

running the application in such a manner that, at any particular point in time when the application is running, at least one of the first and second code block fractions is stored in a manner that is not accessible from a user space or a kernel space of the computer system, according to the memory fractionation configuration;

determining whether the first frequency is greater than or equal to a predetermined value;

in accordance with a determination that the first frequency is greater than or equal to the predetermined value, reducing the first frequency to a second frequency with which one or more code blocks of the first and second code block fractions are transferred between the first and second code block fractions; and

defining the memory fractionation configuration to represent how the code blocks should be assigned to different code block fractions based, at least in part, on the second frequency.

Assignments (3)
CORRECTIVE ASSIGNMENT TO CORRECT THE NEWLY MERGED ENTITY'S NAME TO SIEGE TECHNOLOGIES, LLC PREVIOUSLY RECORDED ON REEL 049830 FRAME 0758. ASSIGNOR(S) HEREBY CONFIRMS THE MERGER AND CHANGE OF NAME. Recorded Mar 19, 2020
From: SIEGE TECHNOLOGIES ACQUISITION, LLC
To: SIEGE TECHNOLOGIES, LLC
Reel/Frame 053021/0794 →
MERGER AND CHANGE OF NAME Recorded Jul 23, 2019
From: SIEGE TECHNOLOGIES, LLC; SIEGE TECHNOLOGIES ACQUISITION, LLC
To: SIEGE TECHNOLOGIES ACQUISITION, LLC
Reel/Frame 049830/0758 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 24, 2017
From: SHARKEY, JOSEPH JAMES
To: SIEGE TECHNOLOGIES LLC
Reel/Frame 041468/0968 →
Continuity (2)
Provisional Application 62272909 · Dec 30, 2015
Related Publication 20180046516A1 · Feb 15, 2018