2011-06-10 4 views
0

bomb이라는 프로그램이 주어졌습니다. 프로그램이 실행되면 사용자 입력을 요청합니다 (문자열 또는 int 일 수 있음). 사용자가 잘못된 입력을 입력하면 폭발합니다.어셈블리 코드 분석을 돕기

폭탄을 "해제"하려면 올바른 입력을 입력 할 수 있도록 어셈블리 코드를 분석해야합니다.

프로그램은 6 단계로 구성되어 있으며 4 단계를 수행했지만이 다섯 번째 단계는 수행 할 수 없습니다.

앞서 언급 한 것처럼 프로그램은 사용자로부터 입력을 읽습니다. explode_bomb 함수 호출을 피할 수 있도록이 단계에서 입력해야 할 입력은 무엇입니까?

08048db0 <phase_5>: 
8048db0: 55      push %ebp 
8048db1: 89 e5     mov %esp,%ebp 
8048db3: 57      push %edi 
8048db4: 56      push %esi 
8048db5: 53      push %ebx 
8048db6: 83 ec 1c    sub $0x1c,%esp 
8048db9: 8b 5d 08    mov 0x8(%ebp),%ebx 
8048dbc: 89 1c 24    mov %ebx,(%esp) 
8048dbf: e8 8c 01 00 00   call 8048f50 <string_length> 
8048dc4: 83 f8 06    cmp $0x6,%eax 
8048dc7: 74 05     je  8048dce <phase_5+0x1e> 
8048dc9: e8 c3 02 00 00   call 8049091 <explode_bomb> 
8048dce: ba 00 00 00 00   mov $0x0,%edx 
8048dd3: b8 00 00 00 00   mov $0x0,%eax 
8048dd8: b9 80 a1 04 08   mov $0x804a180,%ecx 
8048ddd: 0f be 34 03    movsbl (%ebx,%eax,1),%esi 
8048de1: 83 e6 0f    and $0xf,%esi 
8048de4: 03 14 b1    add (%ecx,%esi,4),%edx 
8048de7: 83 c0 01    add $0x1,%eax 
8048dea: 83 f8 06    cmp $0x6,%eax 
8048ded: 75 ee     jne 8048ddd <phase_5+0x2d> 
8048def: 83 fa 41    cmp $0x41,%edx 
8048df2: 74 05     je  8048df9 <phase_5+0x49> 
8048df4: e8 98 02 00 00   call 8049091 <explode_bomb> 
8048df9: 83 c4 1c    add $0x1c,%esp 
8048dfc: 5b      pop %ebx 
8048dfd: 5e      pop %esi 
8048dfe: 5f      pop %edi 
8048dff: 5d      pop %ebp 
8048e00: c3      ret 


08048f50 <string_length>: 
8048f50: 55      push %ebp 
8048f51: 89 e5     mov %esp,%ebp 
8048f53: 8b 55 08    mov 0x8(%ebp),%edx 
8048f56: b8 00 00 00 00   mov $0x0,%eax 
8048f5b: 80 3a 00    cmpb $0x0,(%edx) 
8048f5e: 74 09     je  8048f69 <string_length+0x19> 
8048f60: 83 c0 01    add $0x1,%eax 
8048f63: 80 3c 02 00    cmpb $0x0,(%edx,%eax,1) 
8048f67: 75 f7     jne 8048f60 <string_length+0x10> 
8048f69: 5d      pop %ebp 
8048f6a: c3      ret 
+0

지금까지 분석 한 내용을 직접 말하면 도움을 얻을 수 있습니다. – Earlz

+1

* "프로그램이 실행되면 사용자 입력을 요청합니다 (문자열 또는 int 일 수 있음). 사용자가 잘못된 입력을 입력하면 폭발 할 것입니다. "* 실제로는 내가 작업 한 모든 어셈블리 할당에 대한 좋은 요약처럼 들립니다. :) –

+0

0x804a180의 16 바이트는 각 문자에 할당 된 값을 보유하는 조회 테이블로 사용됩니다. – ninjalj

답변

0

코드 (& T 구문 내 머리 ...에 난처처럼 AT) 최종 해시 하지 경우, 문자열에 간단한 한 번에 하나씩 조회 해시를 수행하기 위해 나타납니다 0x41, 폭발합니다. 문자열은 길이가 6 자 여야합니다. 그렇지 않으면 폭발합니다.

+0

마지막 해시가 ** ** 0x41이 아닌 경우 ... – ninjalj

0

는 난 그런 내가 응용 프로그램에을 문자열을 실행하고 거기에 분명 뭔가를 검색하려고 할 게으른 사람 :

에서 : man strings

문자열 - 인쇄의 문자열을 인쇄 파일의 문자.

관련 문제