如何对此进行反混淆[带有按位排序的条件语句或]

时间:2011-07-18 06:22:15

标签: java bitwise-operators deobfuscation

没有ixor ~

,相当于这个
if(~(i3 + -1) < -1) { ... }

会是这个吗?

if((i3 + 1) > 0)  { ... }

或(怀疑这个?)

if((i3 + 0) > 0)  { ... }

或(怀疑这个?)

if(i3 < -1)  { ... }

谢谢我真的无法自己测试它我可以......但我正在写一个反混淆器,我想100%肯定。

3 个答案:

答案 0 :(得分:3)

~xx按位(非逻辑)反转。在二进制补码中,它等于-1 - x。试试吧。

~0  = -1 -  0 = -1
~-1 = -1 - -1 = 0
~1  = -1 -  1 = -2

现在,将此应用于您的情况:

-1 - (i3 - 1) < -1
-1 - i3 + 1   < -1   # commutative property of multiplication
   - i3       < -1   # 1 + -1 == 0
     i3       >  1   # * -1 inverts everything, including the inequality

请注意,这仅适用于数字是两个补码的情况 - 但几乎所有CPU(以及大多数编程语言)现在的行为都是这样。

答案 1 :(得分:0)

首先,我假设这是Java,i3int(与byteshort或{{1一样}})。

longi3 + -1,它只是一个整数。 i3-1不是。所以我们减去了一个并否定了所有的比特。这与否定two's complement数字完全相反。 (取消两个补码通常通过添加1然后补充来完成)。幸运的是,这个操作是它自己的逆操作,所以相反的做法也是一种否定2的补码的方法。所以我们最终得到了~

您留下的-i3-i3 < -1相同,而且{* 1}}可以获得无法模糊的效果。

答案 2 :(得分:0)

~x实际上是-x - 1 因此,-(i3 - 1)相当于-(i3 - 1) - 1,等于-i3 所以,

if(~(i3 + -1) < -1) { ... } 

相当于:

if(-i3 < -1) { ... } // or simply if(i3 > 1) { ... }