Control flow flattening is an obfuscation technique used to make a program's execution path less comprehensible by transforming its control flow into a more complex, non-linear structure. This method is often employed to protect software from reverse engineering by making it difficult to discern the original logical structure of the code.