Bomb Lab, с malloc в сборке. Я уверен, что понял это правильно;что случилось? - PullRequest
0 голосов
/ 09 ноября 2019

Итак, я работаю в лаборатории бомб, где я должен прочитать код в ассемблере и выяснить, какую строку я должен ввести, чтобы эта сборка не запускала строку "explode_bomb" (используясравните).

Итак, это разборка моей фазы:

 8048c3c:    83 ec 1c                 sub    esp,0x1c
 8048c3f:    c7 04 24 4b a3 04 08     mov    DWORD PTR [esp],0x804a34b
 8048c46:    e8 70 04 00 00           call   80490bb <string_length>
 8048c4b:    83 c0 01                 add    eax,0x1
 8048c4e:    89 04 24                 mov    DWORD PTR [esp],eax
 8048c51:    e8 aa fb ff ff           call   8048800 <malloc@plt>
 8048c56:    c7 00 42 61 63 6b        mov    DWORD PTR [eax],0x6b636142
 8048c5c:    c7 40 04 70 61 63 6b     mov    DWORD PTR [eax+0x4],0x6b636170
 8048c63:    c7 40 08 20 66 6f 72     mov    DWORD PTR [eax+0x8],0x726f6620
 8048c6a:    c7 40 0c 20 6d 79 20     mov    DWORD PTR [eax+0xc],0x20796d20
 8048c71:    c7 40 10 61 70 70 6c     mov    DWORD PTR [eax+0x10],0x6c707061
 8048c78:    c7 40 14 65 20 6a 75     mov    DWORD PTR [eax+0x14],0x756a2065
 8048c7f:    c7 40 18 69 63 65 2e     mov    DWORD PTR [eax+0x18],0x2e656369
 8048c86:    c6 40 1c 00              mov    BYTE PTR [eax+0x1c],0x0
 8048c8a:    c6 40 1a 68              mov    BYTE PTR [eax+0x1a],0x68
 8048c8e:    89 44 24 04              mov    DWORD PTR [esp+0x4],eax
 8048c92:    8b 44 24 20              mov    eax,DWORD PTR [esp+0x20]
 8048c96:    89 04 24                 mov    DWORD PTR [esp],eax
 8048c99:    e8 3c 04 00 00           call   80490da <strings_not_equal>
 8048c9e:    85 c0                    test   eax,eax
 8048ca0:    74 05                    je     8048ca7 <phase_3+0x6b>
 8048ca2:    e8 cc 06 00 00           call   8049373 <explode_bomb>
 8048ca7:    83 c4 1c                 add    esp,0x1c
 8048caa:    c3                       ret   

Итак, исходя из моего понимания, при вызове malloc я выделяю 4 байта для каждого DWORD PTR. Поскольку он выделяется до 0x1c, я выделяю 28 байтов.

Найдя, что находится внутри адреса 0x804a34b, я вижу:

0x804a34b:  66 'B'  97 'a'  99 'c'  107 'k' 112 'p' 97 'a'  99 'c'  107 'k'
0x804a353:  32 ' '  102 'f' 111 'o' 114 'r' 32 ' '  109 'm' 121 'y' 32 ' '
0x804a35b:  97 'a'  112 'p' 112 'p' 108 'l' 101 'e' 32 ' '  106 'j' 117 'u'
0x804a363:  105 'i' 99 'c'  101 'e' 46 '.'

Это ровно 28 символов (или 28 байтов). ). Теперь в разборке есть также строка: BYTE PTR [eax+0x1a],0x68 Эта строка явно является операцией по замене 0x1a на 0x68. 0x68 - это «h» в шестнадцатеричном коде ascii. 0x1a - это 26-й символ в строке.

Итак, моя последняя строка должна быть "Backpack in my apple juihe". Но моя бомба все еще взрывается. Любая помощь? : 0

...