0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 10
|
|||||||||||
1 | |||||||||||
Адрес инструкции CALL ESP20.06.2016, 04:16. Показов 5943. Ответов 22
Метки нет (Все метки)
Здравствуйте, подскажите пожалуйста, как найти адрес инструкции CALL ESP в библиотеке kernel32.dll? Учусь пользоваться IDA'ой но никак не получается. Открываю библиотеку с помощью IDA'ы, дальше Hex View и ищу FF D4. Но дело в том, что подобных сочетаний там много, чистого FF D4 нигде нет, есть 41 FF D4. Да и их адреса почему-то постоянно меняются. В начале показывает 00000001800BCA20, потом после переключения на IDA View и обратно показывает 00000001800BCA27, после переключения на Structures и обратно показывает 00000001800BCA28.
Добавлено через 1 час 0 минут И ещё. Был написан шелл-код, который должен удалять ключ реестра. Может кто проверить, правильно ли он написан?
0
|
20.06.2016, 04:16 | |
Ответы с готовыми решениями:
22
call [ESP] как найти? Инструкции mov ss:[esp], eax и push eax - одно и тоже? Падает функция CryptAcquireContext "The value of ESP was not properly saved across a function call" Что такое блоки и инструкции, вложенные инструкции и главные инструкции? |
stzer
|
20.06.2016, 11:35
#3
|
Не по теме: Ferrari F1, если ничего не можете сказать по теме - пройдите мимо без слов "возьми учебник". Тут человек просит не написать код, а проверить. Разницу чувствуете?
0
|
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 10
|
|
20.06.2016, 11:42 [ТС] | 4 |
Дело в том, что это лабораторная работа. Вообще она про переполнение буфера, но в остальное понятно.
И при всём моём желании(летом книги по ассемблеру буду читать), за 2 недели разобраться проблематично. Особенно когда задачу поставили, а как делать не объяснили... Но это так, о наболевшем. Кстати, если не сложно, посоветуйте учебник "с нуля". Ну и всё-таки, как найти адрес инструкции CALL ESP?
0
|
20.06.2016, 12:00 | 5 |
Дело в том, что таких инструкций по ходу выполнения программы может быть хоть сколько, как я считаю.
Команда call обычно используется для вызовов процедур (вместе с этим проделываются кое-какие операции со стеком и eip, но щас не об этом). call esp означает что будет произведен переход по адресу, который содержится в регистре esp(указатель стека). Из этого можно считать, что таких команд (call esp) в коде может быть сколь угодно много...
1
|
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
|
20.06.2016, 12:05 | 6 |
0
|
134 / 104 / 60
Регистрация: 26.10.2013
Сообщений: 312
|
|
20.06.2016, 12:16 | 8 |
Где связь между моим сообщением и вашим? Покажите...
Разница в том, что если человек выкладывает код C++, ему помогают. Если выложил ассемблерный код - его посылают книги сразу читать. То, что человек написал не в той теме - ну ошибся, с кем не бывает. И еще, некоторые программисты C++ знают ассемблер. Хотя бы на уровне __asm.
0
|
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 10
|
|
20.06.2016, 12:36 [ТС] | 9 |
Ночью пост создавал, если можно, то перенесите в аналогичную тему в форуме ассемблера.
0
|
Неэпический
|
|
20.06.2016, 12:39 | 10 |
Не все, не всем, не всегда.
По c++ тоже отсылают, что ж теперь, без этого никак Но в данном случае, Вы тоже не помогли еще, так что же на других кидаетесь? Бывает, исправили
0
|
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 10
|
|
20.06.2016, 12:56 [ТС] | 11 |
Как мне кажется, в строке где надо указать адрес возврата надо указать адрес, который должен передать управление шелл-коду, но так как шелл-код находится в стеке, и при этом стек перезаписан, то надо просто указать на стек. А это вроде как регистр EBP. Т.е достаточно вызвать EBP, т.е CALL EBP. Эта инструкция должна быть в kernel32.dll, ей соответствует последовательность байт FF D4. Но "чистой" последовательности FF D4 там нет, есть 41 FF D4. И это не CALL ESP. Я подозреваю, что я делаю какой-то бред, но какой - не понимаю.
0
|
Эксперт Hardware
|
|
20.06.2016, 14:22 | 12 |
Не забывай, что ты сидишь под отладчиком, а он для своей работы юзает стек.
Поэтому и плывёт у тебя ESP: Код
В начале показывает - 1800BCA20, После переключения - 1800BCA27, После переключения - 1800BCA28,
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
|
|||||||||||||||||||||
20.06.2016, 14:58 | 13 | ||||||||||||||||||||
странный комментарий
вообще то это обнуляет регистр eax и комментарии в ассемблере начинаются с точки с запятой вот так
вместо простейшего
значит все это на языке Си будет выглядеть как
тут годами сидишь и то не все всегда понятно указатель вершины стека это esp, а ebp это вспомогательный регистр, да его используют как вспомогательный указатель стека, но можно и использовать как просто регистр
1
|
Модератор
|
|
20.06.2016, 15:13 | 14 |
Я только краем уха слышал, что при создании шелл-кода нельзя применять настоящий 0x00, т.к. число 0 является признаком конца строки. Отсюда и все манипуляции с числами для ухода от прямого нуля в строках.
0
|
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 10
|
|
20.06.2016, 15:14 [ТС] | 15 |
Я исследую системную библиотеку. В ней пытаюсь найти адрес инструкции CALL ESP. Но дело в том, что я сомневаюсь, что адрес найден правильно. Адрес начала образа kernel32.dll в памяти я знаю. Если я не ошибаюсь, их надо сложить, чтобы получился адрес инструкции CALL ESP в системе. Почему менялся, до меня вроде как дошло(мозг надо включать). Теперь просто хочу узнать, правильный адрес это 6B8BBE28?
Да, надо указать на регистр ESP. Надеюсь, очепятка.
0
|
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 10
|
|
20.06.2016, 15:30 [ТС] | 17 |
Ну если верить всевозможным статьям из интернета, то она должна быть там. Но самое подробное описание это:
"Одна из DLL, которые использует наша программа - KERNEL32.DLL. Попробуем найти в ней инструкцию CALL [ESP] или JMP [ESP]. Этим инструкциям соответствуют последовательности байтов 0xff 0xd4 и 0xff 0xe4. Для поиска можно использовать дебагер вроде SoftICE и просмотреть всё адресное пространство программы в области, где загружена KERNEL32.DLL (эта область начинается с Image Base, указанного в файле DLL). А можно искать просто в файле KERNEL32.DLL. Тогда лучше использовать какой-нибудь специльный HEX-редактор вроде HIEW, который указывает не только смещения байтов в файле, но и адреса, по которым они будут загружены в память. Положим что инструкция CALL [ESP] нашлась по адресу 0xbff794b3 (В общем этот адрес зависит от используемой версии KERNEL32.DLL)"
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
|
|
20.06.2016, 16:11 | 18 |
Сообщение было отмечено MeJlaMoPu как решение
Решение
это не совсем то, что
точнее совсем не то
первая вызывает функцию адрес которой лежит в стеке,вторая функцию которая сама лежит в стеке рекомендую ознакомится с автором Крис Касперски в частности книги "Искусство дизасемблирования", и "Фундаментальные основы хакерства" беда в том что х86 построен по архитектуре фон Немана, которая в отличии от гарвардской, позволяет держать коды и данные в одном месте, и смешение на 1 байт даст совершенно другой листинг
1
|
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 10
|
|
20.06.2016, 16:25 [ТС] | 19 |
ОГРОМНОЕ спасибо, летом буду эти книжки читать. Как я понял, адрес CALL [ESP] из системной библиотеки извлечь проблематично, если не х86?
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
|
|
20.06.2016, 16:29 | 20 |
конечно потому что там может просто не быть этого регистра
но тут одна тонкость, я не знаю такой винды, которая работает не на х86
0
|
20.06.2016, 16:29 | |
20.06.2016, 16:29 | |
Помогаю со студенческими работами здесь
20
Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX Как возможно выйти в инструкции switch в начало самой инструкции при нажатии "не правильной" кнопки Нужно засунуть код инструкции в 4 char'a так, чтобы в памяти это был код инструкции. cannot call methods on dialog prior to initialization; attempted to call method 'close' Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |