Patents by Inventor Gideon M. Myles

Gideon M. Myles has filed for patents to protect the following inventions. This listing includes patent applications that are pending as well as patents that have already been granted by the United States Patent and Trademark Office (USPTO).

  • Patent number: 9614804
    Abstract: Messages can be managed based on expiration dates. For instance, a message having an expiration date can be removed from the recipient's inbox until the expiration date becomes imminent, automatically restored to the inbox when the expiration date becomes imminent, and automatically expired from the inbox (e.g., by deleting the message) after the expiration date has passed. Expirable messages can be identified based on user input and/or automatic extraction of expiration-date information from the message. Visual indicators can be used to distinguish a message whose expiration date is imminent from other messages in the inbox.
    Type: Grant
    Filed: May 16, 2014
    Date of Patent: April 4, 2017
    Assignee: DROPBOX, INC.
    Inventor: Gideon M. Myles
  • Publication number: 20150331881
    Abstract: Messages can be managed based on expiration dates. For instance, a message having an expiration date can be removed from the recipient's inbox until the expiration date becomes imminent, automatically restored to the inbox when the expiration date becomes imminent, and automatically expired from the inbox (e.g., by deleting the message) after the expiration date has passed. Expirable messages can be identified based on user input and/or automatic extraction of expiration-date information from the message. Visual indicators can be used to distinguish a message whose expiration date is imminent from other messages in the inbox.
    Type: Application
    Filed: May 16, 2014
    Publication date: November 19, 2015
    Applicant: Dropbox, Inc.
    Inventor: Gideon M. Myles
  • Patent number: 9116765
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for obfuscating data using instructions as a source of pseudorandom values. Obfuscation is performed by receiving instructions and data and compiling the instructions and the data into an executable file having a text section and a data section. The text section can include instructions and the data section can include data segments. The system obfuscates the data section iteratively by generating a hash of an address for a respective data segment, and based on the hash, identifying a corresponding address in the text section that includes at least one instruction. The system retrieves a mask key from the corresponding address and applies the mask key to the respective data segment, yielding a masked data segment. In one embodiment, integrity verification of obfuscated data is performed without exposing the data in an unprotected state by utilizing multiple mask keys.
    Type: Grant
    Filed: November 30, 2011
    Date of Patent: August 25, 2015
    Assignee: Apple Inc.
    Inventors: Jon McLachlan, Gideon M. Myles, Julien Lerouge
  • Patent number: 8887140
    Abstract: Disclosed herein are systems, methods, and computer-readable storage media for obfuscating using inlined functions. A system configured to practice the method receives a program listing including annotated functions for obfuscation, identifies an annotated function called more than once in the program listing, and creates an inline control flow structure in the program listing for the identified annotated function, the control flow structure being computationally equivalent to inlining the identified annotated function into the program listing for each occurrence of the identified annotated function. The program listing can include tiers of annotated functions. The system can identify annotated functions called more than once based on an optionally generated callgraph. The system can create inline control flow structures in the program listing in order of annotation importance. The system can identify how many times each annotated function is called in the program listing.
    Type: Grant
    Filed: January 15, 2010
    Date of Patent: November 11, 2014
    Assignee: Apple Inc.
    Inventors: Julien Lerouge, Nicholas T. Sullivan, Gideon M. Myles, Jon McLachlan, Augustin J. Farrugia
  • Patent number: 8756434
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for executing encrypted computer code. A system configured to practice the method receives a request to execute encrypted computer code. In response to the request, the system identifies a portion of the encrypted computer code for execution and decrypts the portion to yield decrypted computer code. Then the system stores the decrypted computer code in a pool of memory and executes the decrypted computer code from the pool of memory. The system can store the decrypted computer code in the pool of memory based on a randomization algorithm so that identical executions of the encrypted computer code result in selections of different available memory locations within the pool of memory. Related portions can be stored non-consecutively in the pool of memory. The pool of memory can store different portions of decrypted computer code over time.
    Type: Grant
    Filed: April 8, 2011
    Date of Patent: June 17, 2014
    Assignee: Apple Inc.
    Inventors: Ganna Zaks, Pierre Betouin, Augustin J. Farrugia, Julien Lerouge, Jon McLachlan, Gideon M. Myles, Cédric Tessier
  • Patent number: 8751823
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for obfuscating branches in computer code. A compiler or a post-compilation tool can obfuscate branches by receiving source code, and compiling the source code to yield computer-executable code. The compiler identifies branches in the computer-executable code, and determines a return address and a destination value for each branch. Then, based on the return address and the destination value for each branch, the compiler constructs a binary tree with nodes and leaf nodes, each node storing a balanced value, and each leaf node storing a destination value. The non-leaf nodes are arranged such that searching the binary tree by return address leads to a corresponding destination value. Then the compiler inserts the binary tree in the computer-executable code and replaces each branch with instructions in the computer-executable code for performing a branching operation based on the binary tree.
    Type: Grant
    Filed: August 1, 2011
    Date of Patent: June 10, 2014
    Assignee: Apple Inc.
    Inventors: Gideon M. Myles, Julien Lerouge, Jon McLachlan, Ganna Zaks, Augustin J. Farrugia
  • Patent number: 8615735
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for obfuscating a computer program. A system configured to practice the method identifies a set of executable instructions at a first location in an instruction section of the computer program and identifies a second location in a data section of the computer program. Then the system moves the set of executable instructions to the second location and patches references in the computer program to the set of executable instructions to point to the second location. The instruction section of the computer program can be labeled as _TEXT,_text and the data section of the computer program is labeled as _DATA,_data. The set of executable instructions can include one or more non-branching instructions optionally followed by a branching instruction. The placement of the first and second locations can be based on features of a target computing architecture, such as cache size.
    Type: Grant
    Filed: May 3, 2011
    Date of Patent: December 24, 2013
    Assignee: Apple Inc.
    Inventors: Jon McLachlan, Ganna Zaks, Julien Lerouge, Pierre Betouin, Augustin J. Farrugia, Gideon M. Myles, Cédric Tessier
  • Patent number: 8589897
    Abstract: Disclosed herein are systems, methods, and computer readable-media for obfuscating code. The method includes extracting a conditional statement from a computer program, creating a function equivalent to the conditional statement, creating a pointer that points to the function, storing the pointer in an array of pointers, replacing the conditional statement with a call to the function using the pointer at an index in the array, and during runtime of the computer program, dynamically calculating the index corresponding to the pointer in the array. In one aspect, a subset of instructions is extracted from a path associated with the conditional statement and the subset of instructions is placed in the function to evaluate the conditional statement. In another aspect, the conditional statement is replaced with a call to a select function that (1) calculates the index into the array, (2) retrieves the function pointer from the array using the index, and (3) calls the function using the function pointer.
    Type: Grant
    Filed: August 26, 2008
    Date of Patent: November 19, 2013
    Assignee: Apple Inc.
    Inventors: Gideon M. Myles, Julien Lerouge, Tanya Michelle Lattner, Augustin J. Farrugia
  • Patent number: 8434061
    Abstract: Disclosed herein are systems, methods, and computer readable-media for obfuscating array contents in a first array, the method comprising dividing the first array into a plurality of secondary arrays having a combined total size equal to or greater than the first array, expanding each respective array in the plurality of the secondary arrays by a respective multiple M to generate a plurality of expanded arrays, and arranging data elements within each of the plurality of expanded arrays such that a data element located at an index I in a respective secondary array is located at an index I*M, wherein M is the respective multiple M in an associated expanded array, wherein data in the first array is obfuscated in the plurality of expanded arrays. One aspect further splits one or more of the secondary arrays by dividing individual data elements in a plurality of sub-arrays. The split sub-arrays may contain more data elements than the respective secondary array.
    Type: Grant
    Filed: June 6, 2008
    Date of Patent: April 30, 2013
    Assignee: Apple Inc.
    Inventors: Augustin J. Farrugia, Julien Lerouge, Tanya Michelle Lattner, Gideon M. Myles, Gianpaolo Fasoli
  • Publication number: 20130104239
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for obfuscating data using instructions as a source of pseudorandom values. Obfuscation is performed by receiving instructions and data and compiling the instructions and the data into an executable file having a text section and a data section. The text section can include instructions and the data section can include data segments. The system obfuscates the data section iteratively by generating a hash of an address for a respective data segment, and based on the hash, identifying a corresponding address in the text section that includes at least one instruction. The system retrieves a mask key from the corresponding address and applies the mask key to the respective data segment, yielding a masked data segment. In one embodiment, integrity verification of obfuscated data is performed without exposing the data in an unprotected state by utilizing multiple mask keys.
    Type: Application
    Filed: November 30, 2011
    Publication date: April 25, 2013
    Applicant: Apple Inc.
    Inventors: Jon McLachlan, Gideon M. Myles, Julien Lerouge
  • Patent number: 8429637
    Abstract: Disclosed herein are systems, methods, and computer readable-media for obfuscating code through conditional expansion obfuscation. The method includes identifying a conditional expression in a computer program, identifying a sequence of conditional expressions that is semantically equivalent to the conditional expression, and replacing the conditional expression with the semantically equivalent sequence of conditional expressions. One option replaces each like conditional expression in the computer program with a diverse set of sequences of semantically equivalent conditional expressions. A second option rearranges computer instructions that are to be processed after the sequence of conditional expression is evaluated so that a portion of the instructions is performed before the entire sequence of conditional expressions is evaluated. A third option performs conditional expansion obfuscation of a conditional statement in combination with branch extraction obfuscation.
    Type: Grant
    Filed: September 2, 2008
    Date of Patent: April 23, 2013
    Assignee: Apple Inc.
    Inventors: Gideon M. Myles, Tanya Michelle Lattner, Julien Lerouge, Augustin J. Farrugia
  • Patent number: 8423974
    Abstract: Disclosed herein are systems, computer-implemented methods, and computer-readable storage media for obfuscating a function call. The method receives a computer program having an annotated function and determines prolog instructions for setting up a stack frame of the annotated function and epilog instructions for tearing down the stack frame. The method places a first portion of the prolog instructions in the computer program preceding a jump to the annotated function and a second portion of the prolog instructions at a beginning of the annotated function. The method places a first portion of the epilog instructions at an end of the annotated function and a second portion of the epilog instructions in the computer program after the jump. Executing the first and second portions of the prolog instructions together sets up the stack frame. Executing the first and the second portions of the epilog instructions together tears down the stack frame.
    Type: Grant
    Filed: August 12, 2009
    Date of Patent: April 16, 2013
    Assignee: Apple Inc.
    Inventors: Gideon M. Myles, Julien Lerouge, Tanya Michelle Lattner, Augustin J. Farrugia
  • Publication number: 20130036473
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for obfuscating branches in computer code. A compiler or a post-compilation tool can obfuscate branches by receiving source code, and compiling the source code to yield computer-executable code. The compiler identifies branches in the computer-executable code, and determines a return address and a destination value for each branch. Then, based on the return address and the destination value for each branch, the compiler constructs a binary tree with nodes and leaf nodes, each node storing a balanced value, and each leaf node storing a destination value. The non-leaf nodes are arranged such that searching the binary tree by return address leads to a corresponding destination value. Then the compiler inserts the binary tree in the computer-executable code and replaces each branch with instructions in the computer-executable code for performing a branching operation based on the binary tree.
    Type: Application
    Filed: August 1, 2011
    Publication date: February 7, 2013
    Applicant: Apple Inc.
    Inventors: Gideon M. Myles, Julien Lerouge, Jon McLachlan, Ganna Zaks, Augustin J. Farrugia
  • Publication number: 20120284688
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for obfuscating a computer program. A system configured to practice the method identifies a set of executable instructions at a first location in an instruction section of the computer program and identifies a second location in a data section of the computer program. Then the system moves the set of executable instructions to the second location and patches references in the computer program to the set of executable instructions to point to the second location. The instruction section of the computer program can be labeled as _TEXT,_text and the data section of the computer program is labeled as _DATA,_data. The set of executable instructions can include one or more non-branching instructions optionally followed by a branching instruction. The placement of the first and second locations can be based on features of a target computing architecture, such as cache size.
    Type: Application
    Filed: May 3, 2011
    Publication date: November 8, 2012
    Applicant: Apple Inc.
    Inventors: Jon McLachlan, Ganna Zaks, Julien Lerouge, Pierre Betouin, Augustin J. Farrugia, Gideon M. Myles, Cédric Tessier
  • Publication number: 20120260106
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for binary layout randomization. A system performs binary layout randomization by loading computer code into memory and identifying a section of the computer code to randomize. A loader remaps the section of computer code to a different location in memory utilizing a remapping algorithm. The loader can shuffle sections of code in place or move sections of code elsewhere. The loader patches relative addresses to point to the updated locations in memory. After the system patches the addresses, the system executes the computer code from memory. In one embodiment, the system encrypts the computer code prior to loading the computer code into memory. The loader decrypts the encrypted computer code prior to remapping the section of computer code to a different location in memory. Optionally, the loader can decrypt the encrypted computer code after patching relative addresses.
    Type: Application
    Filed: April 7, 2011
    Publication date: October 11, 2012
    Applicant: Apple Inc.
    Inventors: Ganna Zaks, Julien Lerouge, Jon McLachlan, Gideon M. Myles, Augustin J. Farrugia
  • Publication number: 20120260102
    Abstract: Disclosed herein are systems, methods, and non-transitory computer-readable storage media for executing encrypted computer code. A system configured to practice the method receives a request to execute encrypted computer code. In response to the request, the system identifies a portion of the encrypted computer code for execution and decrypts the portion to yield decrypted computer code. Then the system stores the decrypted computer code in a pool of memory and executes the decrypted computer code from the pool of memory. The system can store the decrypted computer code in the pool of memory based on a randomization algorithm so that identical executions of the encrypted computer code result in selections of different available memory locations within the pool of memory. Related portions can be stored non-consecutively in the pool of memory. The pool of memory can store different portions of decrypted computer code over time.
    Type: Application
    Filed: April 8, 2011
    Publication date: October 11, 2012
    Applicant: Apple Inc.
    Inventors: Ganna Zaks, Pierre Betouin, Augustin J. Farrugia, Julien Lerouge, Jon McLachlan, Gideon M. Myles, Cédric Tessier