Cyclically dependent checks for software tamper-proofing
AssigneeSnap Inc.
InventorsJohan Wehrli, Julien Rinaldini
Life of this patent
Estimating the term…
Abstract
Embodiments of the present disclosure relate to anti-tamper computer systems, in particular to methods and systems which can embed protection code into software. Among other things, the protection code helps prevent (and make it more costly) to reverse engineer to tamper with the protected software with malicious intent, such as, but not restricted to: the removal of a license protection mechanism; the removal of code displaying advertisements; the injection of a malicious thread into the program memory space; illicit usage; or any other kind of unauthorized modification of the software.
Claims19
A system comprising:
- a processor;
- and
- memory coupled to the processor and storing instructions that, when executed by the processor, cause the system to perform operations comprising:
- selecting at least two basic blocks from a plurality of basic blocks for a compilation unit;
- selecting a check routine that returns a check value as a function of an area of memory of the selected at least two basic blocks;
- and
- inserting code into the selected at least two basic blocks to compute a starting address of a next basic block to be executed based on a result collected from the selected check routine,
- wherein each basic block is located at a respective starting address, wherein selecting the at least two basic blocks, selecting the check routine, and inserting the code to dynamically compute the starting address are performed at compilation time for a piece of software.
A method comprising:
- selecting at least two basic blocks from a plurality of basic blocks for a compilation unit;
- selecting a check routine that returns a check value as a function of an area of memory of the selected at least two basic blocks;
- and
- inserting code into the selected at least two basic blocks to compute a starting address of a next basic block to be executed based on a result collected from the selected check routine,
- wherein each basic block is located at a respective starting address, wherein selecting the at least two basic blocks, selecting the check routine, and inserting the code to dynamically compute the starting address are performed at compilation time for a piece of software.
A non-transitory computer-readable medium storing instructions that, when executed by a computer system, cause the computer system to perform operations comprising:
- selecting at least two basic blocks from a plurality of basic blocks for a compilation unit;
- selecting a check routine that returns a check value as a function of an area of memory of the selected at least two basic blocks;
- and
- inserting code into the selected at least two basic blocks to compute a starting address of a next basic block to be executed based on a result collected from the selected check routine,
- wherein each basic block is located at a respective starting address, wherein selecting the at least two basic blocks, selecting the check routine, and inserting the code to dynamically compute the starting address are performed at compilation time for a piece of software.
Dependencies are inferred from the claim text.