Итак, я работаю в лаборатории бомб, где я должен прочитать код в ассемблере и выяснить, какую строку я должен ввести, чтобы эта сборка не запускала строку "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