2014-03-04 1 views
0

도와주세요, 나는 다 보았고, 나는 아무것도 찾을 수없는 것 같습니다.바이너리 폭탄 페이즈 4 - 알아낼 수 없다

Dump of assembler code for function phase_4: 
    0x08048d81 <+0>: push %ebp 
    0x08048d82 <+1>: mov %esp,%ebp 
    0x08048d84 <+3>: sub $0x28,%esp 
    0x08048d87 <+6>: lea -0xc(%ebp),%eax 
    0x08048d8a <+9>: mov %eax,0x8(%esp) 
    0x08048d8e <+13>: movl $0x8049a68,0x4(%esp) 
    0x08048d96 <+21>: mov 0x8(%ebp),%eax 
    0x08048d99 <+24>: mov %eax,(%esp) 
    0x08048d9c <+27>: call 0x8048788 <[email protected]> 
    0x08048da1 <+32>: cmp $0x1,%eax 
    0x08048da4 <+35>: jne 0x8048dac <phase_4+43> 
    0x08048da6 <+37>: cmpl $0x0,-0xc(%ebp) 
    0x08048daa <+41>: jg  0x8048db1 <phase_4+48> 
    0x08048dac <+43>: call 0x8049236 <explode_bomb> 
    0x08048db1 <+48>: mov -0xc(%ebp),%eax 
    0x08048db4 <+51>: mov %eax,(%esp) 
    0x08048db7 <+54>: call 0x8048b50 <func4> 
    0x08048dbc <+59>: cmp $0x262,%eax 
    0x08048dc1 <+64>: je  0x8048dc8 <phase_4+71> 
    0x08048dc3 <+66>: call 0x8049236 <explode_bomb> 
    0x08048dc8 <+71>: leave 
    0x08048dc9 <+72>: ret 






Dump of assembler code for function func4: 
    0x08048b50 <+0>: push %ebp 
    0x08048b51 <+1>: mov %esp,%ebp 
    0x08048b53 <+3>: sub $0x18,%esp 
    0x08048b56 <+6>: mov %ebx,-0x8(%ebp) 
    0x08048b59 <+9>: mov %esi,-0x4(%ebp) 
    0x08048b5c <+12>: mov 0x8(%ebp),%ebx 
    0x08048b5f <+15>: mov $0x1,%eax 
    0x08048b64 <+20>: cmp $0x1,%ebx 
    0x08048b67 <+23>: jle 0x8048b83 <func4+51> 
    0x08048b69 <+25>: lea -0x1(%ebx),%eax 
    0x08048b6c <+28>: mov %eax,(%esp) 
    0x08048b6f <+31>: call 0x8048b50 <func4> 
    0x08048b74 <+36>: mov %eax,%esi 
    0x08048b76 <+38>: sub $0x2,%ebx 
    0x08048b79 <+41>: mov %ebx,(%esp) 
    0x08048b7c <+44>: call 0x8048b50 <func4> 
    0x08048b81 <+49>: add %esi,%eax 
    0x08048b83 <+51>: mov -0x8(%ebp),%ebx 
    0x08048b86 <+54>: mov -0x4(%ebp),%esi 
    0x08048b89 <+57>: mov %ebp,%esp 
    0x08048b8b <+59>: pop %ebp 
    0x08048b8c <+60>: ret 

나는 두 숫자가 있다고 생각해 봤는데 그 중 하나는 0x08048dbc < 59> (610) 이후입니다 : 당신이 보면 $ 0x262은 610

+0

당신이 생각하는 것과이 일이 무엇인지에 대한 좀 더 자세한 정보가 필요합니다 ... 그대로, 이것은 실제로 "질문"이 아닙니다. – Floris

+0

GDB를 사용하여 실제로 어떤 일이 일어나는지 살펴보아야 할 것입니다. 보통이 과제의 핵심은 디버거를 사용할 때 매우 효율적이되는 것입니다. – Requiem

+0

글쎄, 나는 그것이 원하는 두 개의 숫자가 있다고 생각했다. 나는 마지막 폭발물과 비교해서 마지막 시험에 이르렀지만 계속 폭발한다. 내가 1과 610을 사용할 때까지는 그렇게 느껴지지만 마지막 테스트를 통과 할 수는 없습니다. – user2396030

답변

0

% EAX 인 0x262 CMP sscanf에 전달 된 형식 문자열은 %d 지시문을 볼 수 있습니다. +32 라인은 sscanf이 정확히 1 개의 숫자를 읽었는지 확인합니다. 그렇지 않으면 폭탄이 폭발합니다. 당신이 func4 등이 610 다시 줄 것이다 먹이를 어떤 수를 알아 내야하므로 라인 +59

610에 대해 func4의 반환 값을 확인하고 있습니다.

너무 많은 것을주지 않고서는 func4이 잘 알려진 시퀀스의 간단한 재귀 적 구현이라고 말해 보겠습니다. 어셈블리 코드에서 재귀 수식을 찾을 수 있어야합니다. 그러면 아마 수식을 인식하게 될 것입니다.