What is an informal definition of obfuscation?
To obfuscate a program P means to transform it into a executable program P’ from which it is harder to extract information than from P.
What is an informal definition of reverse engineering?
The process of extracting data or a model of the system by inspecting its lower level description and/or behavior.
Name 2 attack scenarios addressed by obfuscation
Stealing intellectual property, stealing secrets embedded in program
Name the two main types of obfuscation and their respective properties
Static obfuscation:
Dynamic obfuscation
What are different ‘Points of insertion’ for obfuscation?
Source code, Intermediate representation, machine code
What are the different Transformation targets?
Name 9 different static obfuscation techniques
Confuse Code Reader:
Confuse Code Reader and Compiler:
- Opaque predicates
What is Scrambling identifiers?
Identifier names are replaced with random strings
What is instruction substitution?
Replace binary operation by functionally equivalent but more complicated computations
What is garbage code insertion?
Dead code is added
What are opaque predicates?
Opaque predicates are bogus branches in the control flow which always take the same branch, although hard to see for an attacker
What is control-flow flattening?
2. Wrap the switch statement in an infinite loop
What is a possible attack on control-flow flattening and how could it be countered?
What is an opaque expression?
An opaque expression is an expression that will always evaluate to the same value in a way not obvious for an attacker.
How do opaque expressions from array aliasing work?
How does virtualization obfuscation work?
What is the goal and the idea behind White-Box cryptography?
Goal: Hide encryption/decryption key
Idea: Embed the key within the cipher
What are some issues with software diversity?
Name two types of software diversity
- Post-distribution Software Diversity
In which phases does dynamic obfuscation run?
How does replacing instructions work?
How does dynamic code merging work?
How does dynamic decryption and re-encryption work?
What is a non-obvious but annoying problem with self-modifying code?
Virus scanners will complain