The bytes that make up a data primitive (e.g., float, integer, etc.) are stored in adjacent bytes and in known order, based on a computer's architecture. Storing data in adjacent bytes is required by the hardware in order to operate on them. Compilers, in an effort to improve cache efficiency, pack primitives together. This packing indirectly communicates the relationship between primitives. When reverse engineering code, an attacker can observe the state of data on the stack. Knowing how the data is structured makes this much easier. The most reliable structuring is knowing how primitives will be structured. This disclosure describes techniques that achieve code security by distributing data across distinct, non-adjacent, randomly-selected memory locations, thereby reducing the accessibility of the data to attackers.
Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 License.
Vaage, Aaron, "Security by Obfuscating Data Across Non-Adjacent Memory Locations", Technical Disclosure Commons, (August 20, 2020)