내 바이너리 폭탄의 phase_4 암호에 문제가 있습니다.폭탄 실험실 단계 4 func4
지금까지 제가 입력 2의 정수 (라인 29)
및 2 정수 정상적으로 < =거나 같고 2 2 그로부터 감산보다 (라인 38-44이어야 ... 이해). 어떤 숫자가되어야 함을 의미합니다. 2-4
그런 다음 func4를 호출하고 func4의 결과를 rsp (이는 테스트를 수행하고 rsp는 항상 0)와 비교하여 그 번호를 찾아야합니다. func4에 입력되면 0을 반환합니다.
func4의 결과가 0 일 필요가있는 경우 입력이 0이어야 함을 의미합니다. phase_4에서 38 번째 줄을 입력하면 내 입력에서 2를 빼기 때문에 두 번째 #가되어야합니다. 2 ...? 그러나 나는 그것을 시험해 보았고 그것은 첫 번째 비교를 만족시키지 못하기 때문에 46 번째 줄에서 폭발하게 만든다.
저는 (0 2) (2 0) (0 1) (0 3)과 같은 숫자를 시도했지만 모두 실패했습니다. 올바른 방향으로 나를 가르키려고 어떤 제안? 감사!
phase_4:
0x000000000040101e <+0>: sub $0x18,%rsp
0x0000000000401022 <+4>: lea 0xc(%rsp),%rcx
0x0000000000401027 <+9>: lea 0x8(%rsp),%rdx
0x000000000040102c <+14>: mov $0x4027cd,%esi
0x0000000000401031 <+19>: mov $0x0,%eax
0x0000000000401036 <+24>: callq 0x400c30 <[email protected]>
0x000000000040103b <+29>: cmp $0x2,%eax //check if 2 inputs
0x000000000040103e <+32>: jne 0x40104c <phase_4+46>
0x0000000000401040 <+34>: mov 0xc(%rsp),%eax
=> 0x0000000000401044 <+38>: sub $0x2,%eax
0x0000000000401047 <+41>: cmp $0x2,%eax
0x000000000040104a <+44>: jbe 0x401051 <phase_4+51>//if unsigned eax <= 2
0x000000000040104c <+46>: callq 0x401554 <explode_bomb>
0x0000000000401051 <+51>: mov 0xc(%rsp),%esi
0x0000000000401055 <+55>: mov $0x7,%edi
0x000000000040105a <+60>: callq 0x400fe6 <func4>
0x000000000040105f <+65>: cmp 0x8(%rsp),%eax //comparing eax to 0
0x0000000000401063 <+69>: je 0x40106a <phase_4+76>
0x0000000000401065 <+71>: callq 0x401554 <explode_bomb> //explode if output != 0
0x000000000040106a <+76>: add $0x18,%rsp
0x000000000040106e <+80>: retq
Func4
0x0000000000400fe6 <+0>: push %r12
0x0000000000400fe8 <+2>: push %rbp
0x0000000000400fe9 <+3>: push %rbx
0x0000000000400fea <+4>: mov %edi,%ebx
0x0000000000400fec <+6>: test %edi,%edi
0x0000000000400fee <+8>: jle 0x401014 <func4+46> //if input <= 0
0x0000000000400ff0 <+10>: mov %esi,%ebp
0x0000000000400ff2 <+12>: mov %esi,%eax
0x0000000000400ff4 <+14>: cmp $0x1,%edi
0x0000000000400ff7 <+17>: je 0x401019 <func4+51>
0x0000000000400ff9 <+19>: lea -0x1(%rdi),%edi
0x0000000000400ffc <+22>: callq 0x400fe6 <func4>
0x0000000000401001 <+27>: lea (%rax,%rbp,1),%r12d
0x0000000000401005 <+31>: lea -0x2(%rbx),%edi
0x0000000000401008 <+34>: mov %ebp,%esi
0x000000000040100a <+36>: callq 0x400fe6 <func4>
0x000000000040100f <+41>: add %r12d,%eax
0x0000000000401012 <+44>: jmp 0x401019 <func4+51>
0x0000000000401014 <+46>: mov $0x0,%eax //make return val 0
0x0000000000401019 <+51>: pop %rbx
0x000000000040101a <+52>: pop %rbp
0x000000000040101b <+53>: pop %r12
0x000000000040101d <+55>: retq
이진 폭탄이 무엇인지 설명하고 해결 방법에 대한 접근 방식과 왜 작동하지 않는지에 대해 설명하십시오. – Qix
[Binary Bomb - Phase 4]의 가능한 복제본 (http://stackoverflow.com/questions/19640148/binary-bomb-phase-4) –
@BoPersson 위상 4는 유사하지만 func 4는 다릅니다. 내 경우 func4 재귀 피보나치 함수를 믿습니다. 그리고 나는 두 번째 입력이> = 2이어야 함을 알고 있습니다. – helloworld