opaque predicate 学习笔记

Posted by API Caller on February 17, 2020

Summary

我觉得 opaque predicate 其实就是对抗编译器的优化, 譬如:

1
2
3
4
5
6
int i;
if (1+1==2){
    i = 1000;
} else {
    i = 9999;
}

一般来说编译完不会保留 if :

push    rbp
mov     rbp, rsp
xor     eax, eax
mov     dword ptr [rbp - 4], 1000
pop     rbp
ret

而如何让编译器不把这个 if 条件优化掉, 就是 opaque predicate 要干的事.

Detail

所以实际上 opaque predicate 是很多代码混淆保护技术的基础元件,

Anti

SMT (Satisfiability modulo theories) solvers

还有个叫 SAT(SATISFIABILITY) Solver 的

离散数学预定

Ref

Symbolic Execution

Angr

Ref

Ref