A Heuristic Approach to Detect Opaque Predicates that Disrupt Static Disassembly
By: Yu-Jye Tung, Ian G. Harris
A Heuristic Approach to Detect Opaque Predicates that Disrupt - - PowerPoint PPT Presentation
A Heuristic Approach to Detect Opaque Predicates that Disrupt Static Disassembly By: Yu-Jye Tung, Ian G. Harris Opaque Predicates Defini nition: n: conditional branches that always evaluate to true or false. Thus, one of their branches is
By: Yu-Jye Tung, Ian G. Harris
Invariant expression evaluates to True
unconditional branch superfluous branch
unreachable basic block
Invariant expression evaluates to True
unreachable basic block
Invariant expression evaluates to True
unreachable basic block
Ref.: M. Dalla Preda, M. Madou, K. De Bosschere, and R. Giacobazzi, “Opaque predicates detection by abstract interpretation,” in International Conference on Algebraic Methodology and Software Technology. Springer, 2006, pp. 81–95. Ref.: P.LaFosse (2017) Automatedopaque predicate removal. [Online]. Available: https://binary.ninja/2017/10/01/automated
Ref.: R. Tofighi-Shirazi, I. Asăvoae, P. Elbaz-Vincent, and T.-H. Le, “Defeating opaque predicates statically through machine learning and binary analysis,” in Proceedings of the 3rd ACM Workshop on Software Protection. ACM, 2019, pp. 15–26. Ref.: J. Ming, D. Xu, L. Wang, and D. Wu, “Loop: Logic-oriented opaque predicate detection in obfuscated binary code,” in Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security. ACM, 2015, pp. 757–768. Ref.: S. Bardin, R. David, and J.-Y. Marion, “Backward-bounded dse: targeting infeasibility questions on obfuscated codes,” in 2017 IEEE Symposium on Security and Privacy (SP). IEEE, 2017, pp. 633–651.
Trivia ial
We Weak
Strong
Full
Ref.: C. Collberg, C. Thomborson, and D. Low, “A taxonomy of obfuscating transformations,” Department of Computer Science, The University of Auckland, New Zealand, Tech. Rep., 1997.
Invariant expression evaluates to True
nonexistence memory address unreasonable memory offset abrupt basic block end unimplemented BNILs percentage priviledge instruction usage memory pointer constraints defined but unused
"Copies the value from the second operand (source operand) to the I/O port specified with the destination operand (first operand)."
"None of the status flags that TEST affects (SF, ZF, and PF ) are used"
FN, F1)?
github.com/yellowbyte/opaque-predicates-detective
tigress.wtf github.com/tum-i22/obfuscation-benchmarks
Accuracy of our tool on detecting trivial, weak, and strong opaque predicates. Accuracy of our tool on detecting trivial, weak, and strong opaque predicates without defined_but_unused rule.
"2f a0 29 ab 61 4b 72"
github.com/yellowbyte/opaque-predicates-detective