Приветствую всех. Напоролся я случайно на переполнение буфера. Др. ватсон писал вот что: Код (Text): eax=00000000 ebx=008c8848 ecx=0012ed30 edx=2e2e2e2e esi=00560ed4 edi=00000111 eip=2e2e2e2e esp=0012e6c0 ebp=2e2e2e2e iopl=0 nv up ei pl zr na po nc cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00200246 (Переполнялся буфер "." с кодом 0x2e). Это же именно оно, раз eip перезаписало? C MSVC в качестве отладчика писало, произошла ошибка по адресу 0x2e2e2e2e блаблабла. Если да, то вопрос: как это дело отладить и довести до рабочего шеллкода? Успел заметить, что адреса, по которым переполняющая строка лежит, каждый раз имеет новый адрес.
ololoe Легко и просто, блин. надо в EIP записать адрес твоей команды(функции или чего ещё) . Сначала посмотри, как именно переполнение происходит..например записывый данные не 0x2e ,а 1 2 3 4 .. 99999 Потом посмотри на содержание EIP увидишь какие именно данные произовдят переполнение.. затем в подоваемую строку, вместо этих данных(которые затирают EIP) запишешь нужный адрес...и всё Кстати замечу..для полнейших "начинающих"!!! есть такие книги как, ХАКИНГ - искусство эксплойта. А для тех кто, чуть выше начинающих..есть книга, "Разработка средств безопасности и эксплойтов"
Как реализовывать эксплойтики в винде, есть хорошее описание(для начинающих) в книге "Защита от взлома: сокеты, эксплойты и shell-код" так какрас показано MSVC
Какие именно? Если совсем конкретные - в приват. Ну тебе может, блин, легко и просто Как найти место, в котором происходит переполнение? Ну вылетела программа с эксепшеном, как вернуться взад и посмотреть, в каком участке кода это произошло? Нашел trace в OllyDbg, но он работает как-то странно, да и состояние регистров / памяти не сохраняет, что совсем не есть гуд.
Лучше будет, если ты случайно потеряешь это переполнение. Чтобы ощутить всю прелесть шелл-кода, скачай готовый и запори себе компьютер, а потом подумай, что ты собрался создать и каково это будет пользователю. И вообще не рой яму другому.
ololoe Olly всё сохраняет..и бектрейс достаточно хорош. Научись пользоваться этим дебагером =) .. на wasm.ru есть статьи , введение в крекинг с нуля. Там, в самом начале, рассказывается об интерфейсе данного отладчика.
Я бы делал так : esp в сообщении об ошибке разумный. Смотрим что на стеке - там должны быть адреса возвратов, а значит можно найти и call. Далее элементарно. А трейс - это для профи, а не для тех кто книжки норовит с середины читать
Да я ж абсолютно не против "адекватных" методов, только расскажите, какие они. А то приходится пользоваться первым, что нашел в интерфейсе. А насчет адреса возврата я не понял - мы же адрес возврата перезаписываем?
Ты такой термин дерево вызовов (call tree) слышал. Я и не сказал, что тебе сразу на блюдечке будет функция, которая потерла. Кстати про трассу я погорячился - оно тут как раз к месту. ================== Но судя по твоему вопросу и теме про DEP, ты сам затираешь стек "прямыми" командами. А это не есть "переполнение буфера". Тогда нечего ловить черную кошку в темной комнате Или дай больше информации.
ololoe Первый совет, прежде чем захламлять форум вопросами с минимальной периодичностью на каждую озникшую проблему, необходимо самостоятельно изучить доступную информацию, прочитать существующую инфу по интересующей теме, и уже потом если всеравно нихрена не получается есть 3 варианта: 1) Хороше подумать а может нуего. 2) Попробовать пройтись ещераз и ещераз по информации и попытаться таки разобратся с проблемой (поотлаживать готовые решения шелкоды и.т.д. посмотреть реализацию). Если не получилось опять вернутся к пункту 1 а потом уже перейти к 3ему. 3) Теперь грамотно сформулировать проблему на форуме а не копипастить вывод ошибки доктора ватсона !!!. П.С. Поставь OllyDbg как отладчик по умолчанию и когда выскочит ерор нажми дебаг, и смотри что в регистре что в памяти какие параметры, стек, функция и.т.д.
Еще рекомендую почитать информацию по ассемблеру а именно что такое стек, что такое стековый клстер. что такое локальный буфер (онже стековый) потом про организацию памяти и.т.д. Такие заметки "Успел заметить, что адреса, по которым переполняющая строка лежит, каждый раз имеет новый адрес." не будут вызывать удивление.