备忘录:一些逻辑运算的公式推导(VMP、OLLVM)
知识点:命题逻辑 - > 等值演算离散数学教材上给出了24个等值式,与蕴涵式有关的等值式混淆里面用不到,剩下的基本上都属于常识性内容……
VMP万用门:万用门其实就是数字电路中的与非门,一般是用Nand表示。
Nand(a,b) = ~a & ~b
Not(a) = ~a = ~a & ~a = Nand(a,a)
Or(a,b) = a | b = ~(~a & ~b) = Nand(Nand(a,b),Nand(a,b))
And(a,b) = a & b = ~~a & ~~b = Nand(Nand(a,a),Nand(b,b))
Xor(a,b) = (~a & b) | (a & ~b) = (0 | (a & ~b)) | (0 | (b & ~a)) = (a & (~a | ~b)) | (b & (~a | ~b)) = (~a | ~b) & (a | b) = ~(a & b) | ~(~a & ~b) = Nand(And(a,b),Nand(a,b)) = Nand(Nand(Nand(a,a),Nand(b,b)),Nand(a,b))
-a = ~a + 1
a - b = ~(a - b) + 1 = ~(a - b - 1) = ~(~a + 1 - 1 + b) = ~(~a + b)
减法公式的证明只能说是“自我安慰”,因为我不清楚如何证明其EFLAGS的得到过程。
OLLVM的指令替代混淆:
a = b & c=>a = (b ^ ~c) & b
证明过程:
a = ((~b & ~c) | (b & c)) & b = ((~b & ~c) & b) | ((b & c) & b) = (0 & (b & ~c)) | (b & (b & c)) = b & (b & c) = b & c
a = b | c=>a = (b & c) | (b ^ c)
证明过程:
a = (b & c) | ((~b & c) | (b & ~c)) = (b & c) | (~b & c) | (b & ~c) = b | c
a = a ^ b=>a = (~a & b) | (a & ~b)
证明过程:
易证……
OLLVM的文档:https://github.com/obfuscator-llvm/obfuscator/wiki/Instructions-Substitution
好骚气,看的我头晕眼花的 需不懂,但觉吊! 很牛掰的说。要想看懂还得学习 THANKS for sharing 感谢大佬分享 [快捷回复]-学破解防逆向,知进攻懂防守! 感谢分享