Помогите проанализировать ассемблерный код - PullRequest
0 голосов
/ 10 июня 2011

Мне дали программу под названием bomb. Когда программа запускается, она запрашивает пользовательский ввод (может быть string или 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   

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Я такой ленивый парень, что выполняю строки в приложении и пытаюсь найти там что-то очевидное:

От: man strings

strings - печатать строки печатаемых символов в файлах.

0 голосов
/ 10 июня 2011

Появляется код (синтаксис AT & T для моего мозга подобен запутыванию ...) для выполнения простого одноразового поиска в строке, если окончательный хэш равен , а не 0x41это взрывается.Строка также должна иметь длину 6 символов, иначе она взорвется.

...