所以我正在做二进制炸弹的变体。这就是阶段
0x0000000000401205 <+0>: sub $0x8,%rsp
0x0000000000401209 <+4>: cmp $0x3,%rdi #rdi = 3
0x000000000040120d <+8>: je 0x40121d <phase_2+24> #if(rdi == 3) skip explosion
0x000000000040120f <+10>: callq 0x401c01 <bomb_ignition>
0x0000000000401214 <+15>: mov $0xffffffffffffffff,%rax
0x000000000040121b <+22>: jmp 0x40124c <phase_2+71>
0x000000000040121d <+24>: xor $0xffffffffffffff1c,%rsi #rsi ^= 0xffffffffffffff1c
0x0000000000401224 <+31>: and %rsi,%rdx #rdx &= rsi
0x0000000000401227 <+34>: add $0x1c8,%rdx #rdx += 456
0x000000000040122e <+41>: cmp $0x2c5,%rdx #rdx == 709
0x0000000000401235 <+48>: sete %al
0x0000000000401238 <+51>: movzbl %al,%eax
0x000000000040123b <+54>: cmp %rcx,%rdx #rdx == rcx
0x000000000040123e <+57>: je 0x40124c <phase_2+71>
0x0000000000401240 <+59>: callq 0x401c01 <bomb_ignition>
0x0000000000401245 <+64>: mov $0xffffffffffffffff,%rax
0x000000000040124c <+71>: add $0x8,%rsp
0x0000000000401250 <+75>: retq
我已经在汇编旁边注释了我认为它的含义。我坚持的是<+24>
在哪里xors
$0xffffffffffffff1c
and %rsi
. %rsi
第二个参数传递正确吗?那么我怎样才能知道它是什么,这样我就可以xor
它?因为那时and
s it to %rdx
这是第三个参数。
所以我认为它需要 4 个数字。第一个是“3”(对吗?)。然后xor
第二个是 0xffffffffffffff1c。And
将其移至第三个数字。然后第三个数字加上 456,应该是 709。这就是第四个数字应该是的。另外我还是有点困惑sete
and movzbl
。但我不知道第二个和第三个数字应该是什么。我的预测正确吗?感谢任何帮助。谢谢
调用者是否检查返回值?我假设是这样,否则你可以为 rsi 和 rdx 选择你想要的任何内容,然后计算 rcx 将匹配的内容。它设置rax
= -1(炸弹爆炸),或0或1(sete/movzx
)基于cmp $0x2c5,%rdx
result.
让我们命名我们的函数输入,这样我们就可以将函数参数与寄存器中的当前值分开讨论:x:rsi
, y:rdx
, and z:rcx
。 (忽略第一个参数rdi
,单独检查)。
z
只与其他交互一次,因此可以自由选择。
rsi ^= -228; // 0xffffffffffffff1c
rdx &= rsi; // rdx &= (x ^ -228)
rdx += 456
if(rdx != rcx) explode();
我们假设我们还需要 rdx == 709 = 0x2c5 (因此z
=709,也是)。让我们从rdx == 709
:
709 - 456 = 253 // rdx before add $0x1c8,%rdx
那么我们需要x
and y
这样y & (x^-228) == 253
。这是一个包含 2 个变量的方程,因此应该有多个解。 “最简单”的是y
= 253 (0xfd),然后选择一个x
这将保留所有这些位。
例如,选择x
以便x ^ 0x1c == 0xfd
以及。 (我们可以忽略高位,因为 AND 与 0xfd 会清除它们)。您可以像求解加法一样求解该方程。xor
是它自己的逆(并且是可交换/结合的),所以我们可以xor
双方由0x1c
解决x = 0xfd ^ 0x1c = 0xe1 = 225
.
@Prl的解决方案使用x = 0xe1
but y=255
。这可以;额外的设置位将被 AND 擦除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)