Перехват send

Тема в разделе "WASM.NETWORKS", создана пользователем Charm0nt, 19 июл 2010.

  1. Charm0nt

    Charm0nt New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2010
    Сообщения:
    22
    Приветствую!
    Эта тема имеет некоторое отношение к этой:
    http://wasm.ru/forum/viewtopic.php?id=37983

    Я перехватываю Winsock функцию send и хочу изменить некоторые данные для отправки. Сейчас мне нужен реально ваш совет. В общем, поскольку я хочу изменить данные, то размер нового потока данных мне не известный, - он может быть больше или меньше первоначального. Подскажите, пожалуйста, как мне правильно сформировать новый поток данных, который может быть намного больше чем первоначальный, тот, который я буду отправлять уже, чтобы не возникало никаких конфликтов в работе основной программы?

    Пишу на Delphi, хотя нету особой разницы мне, помогите советом. Работаю в чужом процессе, подгрузив библиотеку.
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Charm0nt
    изменяй так, что бы не завалить внутренний протокол той проги
     
  3. Charm0nt

    Charm0nt New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2010
    Сообщения:
    22
    wsd
    Протокол не завалиться. Но размер новых передаваемых данных может быть больше или меньше. Что делать в таком случае? Нужно, как я понимаю, сначала надо как то выделить память и начать с ней работать. Как изменять (увеличивать или уменьшать) потом размер выделенной памяти?
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Выделяй буфер. В чём проблема?
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Определяешь где храниться адрес буфера, пишешь туды свой адрес и т.д.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Или найти место где выделяется память и поменять размер на тот который достаточен. Вариантов масса.
     
  7. Charm0nt

    Charm0nt New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2010
    Сообщения:
    22
    Да, именно это я и должен делать. С помощью каких функций я могу правильно выделять и изменять размер буффера? Как реализовать это? Я раньше читал про некоторые функции, но у них есть ограничение в размере буффера и они долго работают. Я просто перехватываю данные, которые отправляет send и накапливаю их в свой буффер. Следовательно, каждый раз, как выполняется send, мой буффер должен увеличиваться в размере.
     
  8. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    если так то пиши перехваченные данные в файл , или используй VirtualAlloc (или ищи по форуму "резиновый буфер")
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Charm0nt
    Тут вообще-то не форум по паскалю и дельфи. ^) Гугли про динамические массивы.
     
  10. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    GetMem, Move, FreeMem.

    Проще один раз выделить мегабайт, чем тыщу раз по килобайту.
     
  11. Charm0nt

    Charm0nt New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2010
    Сообщения:
    22
    karabas_barabas
    В файл писать не буду, производительность теряется. Про "резиновый буфер" поищу.

    Booster
    Кстати, пробовал реализовывать динамические массивы в чужой программе, - постоянно выскакивает Access Violation. Использовал SetLength.

    CyberManiac
    Хорошо, учту это.

    Спасибо всем!!!

    Если можете еще что то добавить, - пишите.
     
  12. felize

    felize New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    39
    может не по теме, но все же: найди либу hooklib от z0mbie и посмотри примеры 6 и 7, там тоже перехватывается send и дампит их
     
  13. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    выдели буфер большого размера , при достижении данных к границе буфера - скидывай в файл, и заново пиши в буфер (обнулив его), если все данные строковые то проверяй lstrlen(buff) с sizebuff
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Charm0nt
    Это исключение должно возникать. Вы его откатываете и расширяете буфер. Аналогично как расширяется стек.
     
  15. Charm0nt

    Charm0nt New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2010
    Сообщения:
    22
    Всем спасибо.
    Еще такой вопрос: если библиотеку внедряем во все процессы, то лучше полученные данные обрабатывать в каждом процессе, или из каждого процесса передавать данные в основной процесс загрузчика библиотеки на обработку? Как считаете? Хотя я склоняюсь к первому варианту.
     
  16. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Charm0nt
    Если нужно только от одного процесса то определенно 1 иначе 2
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Charm0nt
    Локально быстрее. Удалённо могут проблемы возникнуть, например описатели копировать нужно и пр.
    Вобще это для подмены выдачи в поисковиках нужно ?
    В таком случае способ не жизнеспособный.
     
  18. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Clerk
    Зачем же сразу все на VX спихивать?
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    punxer
    Первая мысль была просто.
    Вобще я уже несколько раз линк давал на семпл. Никто не откатал :dntknw:
    Вылаживаю в аттаче(пересобрал сейчас, поправил лдасм). Результат на XP:
    [​IMG]
    Ничем не детектится перехват, ну это само собой рузумеется.
     
  20. Charm0nt

    Charm0nt New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2010
    Сообщения:
    22
    Clerk
    Я учусь сейчас, набираюсь опыта, поэтому хочу спросить: почему если для подмены выдачи поисковиков, то способ не является жизнеспособным? И о каком именно способе идет речь?

    Также, что вы можете сказать о библиотеке от Ms-Rem для перехвата API? Актуальна ли она? Я читал здесь на форуме, что у людей возникали некоторые проблемы (под осью Vista, или Windows 7, не помню точно).