обход winsock

Тема в разделе "WASM.BEGINNERS", создана пользователем 4p_Wik, 10 сен 2006.

  1. 4p_Wik

    4p_Wik New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2006
    Сообщения:
    9
    как забрать данные с сокета в обход winsok/ws_32 ?
     
  2. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    смотря в каком смысле. имеется в виду не вызывая
    recv() из ws2_32.dll ?
    тогда можно например прочитать ws2_32 c диска
    с помощью ReadFile() затем настроить в ней релоки и импорт.
    если все делать аккуратно - то будет рабочая копия
    из которой и вызывать recv()...
    или другой вариант: recv() рано или поздно вызовет
    из ntdll DeviceIoConterolFile() через которую и происходит
    получение данных. можно написать свою реализацию
    winsock которая будет работать напямую с ntdll.
    можно придумать и другие способы наверно...
     
  3. 4p_Wik

    4p_Wik New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2006
    Сообщения:
    9
    Меня интересовало как забрать данные без использования winsock.dll вообще.
    Просто попалась прога,у которой очень нужно было посмотреть принимаемые данные(без установки снифферов типа WinPcap),был написан hook для winsock.dll и ws_32, оказалось что она использует winsock для установки коннекта,а данные берет без его участия...

    З.Ы. спасибо за ответ =)
     
  4. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    вовсе не обязательно. есть еще mswsock.dll
    со всякими там AcceptEx, TransmitFile и конечно
    WSARecvEx ... и вообщебывает извращенный режим
    когда юзается OVERLAPPED IO и соответственно
    для получения данных юзается GetQueuedCompletionStatus.
    а вообще странно чем winpcap не устраивает ?
    что модифицировать данные не дает ? так для этого
    есть WinpkFilter с http://www.ntkernel.com/
     
  5. 4p_Wik

    4p_Wik New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2006
    Сообщения:
    9
    Ну в общем есть сервер, на нем стоит игровой сервак. Для установки WinPcap нужна сакция человека который "далёк от народа"....
    hook под winsock кидаеш в папку программы и все,вот тебе сниффер.
    Но игровой сервер берет игровые данные в обход winsock.
    Он частично юзает winsock для общения с другим сервером, но вот данные касательно игры, он неясно как получает. Сервер писали китайцы, исходников нигде нема.
     
  6. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    да тогда понятно. я тоже писал нечто подобное
    только для wowemu. он сам глючныйи еще запакован
    там тоже пришлось поморочиться. в общем есть пример
    такого перехвата только недоделано и без комментариев.
    http://shardsecurity.com/files/rw_ls_dll.rar
    в твоем случае скорее всего то же самое - WSARecv()
    с использованием OVERLAPPED и затем
    GetQueuedCompletionStatus()
    А че за сервер то ?
     
  7. 4p_Wik

    4p_Wik New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2006
    Сообщения:
    9
    D2gs (Diablo II Game server)

    WSARecv не вызывается.
     
  8. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    тогда WSARecvEx() из mswsock.dll ?
    или может все проще recvfrom()
    WSARecvFrom() (это правда в основном
    для UDP используется...)
     
  9. 4p_Wik

    4p_Wik New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2006
    Сообщения:
    9
    Ну насколько я знаю, все эти длл рано или поздно вызывают recv() из winsock.
     
  10. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    нет необязательно. возможно зависит
    от версий dll но на моей системе это не так.
    посмотри ws2_32.dll в IDA ...
     
  11. 4p_Wik

    4p_Wik New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2006
    Сообщения:
    9
    mswsock.dll D2gs не юзает =(
    через ntdll.dll напрямую он не может брать, т.к. тогда будет запара с дровами.
    А он идет на любом компе... правда с модемами он не дружит,только сетевые карты.
     
  12. wertyman

    wertyman Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    74
    Столкнулся сейчас с подобной проблемой. Хукаю у программы все, что только можно(знаю), ничего не перехватывается, после того, как клиент подключится...
    Клиенты подключаются, перехватываю даже recv\send - типа рукопожатие по протоколу ихнему, а дальше подключение висит, клиент-сервер обмениваются кучей данных, мне ничего не приходит. Какие тут еще могут быть варианты?
    Даже если данные приходят в асинхронном режиме, получать их программа должна все равно через вызов оригинальных функций? То есть вне зависимости от режима, данные я должен перехватить, просто иногда ошибкой вызовы заканчиваются. Сразу говорю, хукаю на уровне последнего провайдера, то есть mswsock, дальше только ntdll-ядро.
     
  13. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    извинияюсь, может глупость сморожу, но нет ли там аналогов WSARecv, которые идут мимо твоих хуков?
     
  14. wertyman

    wertyman Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    74
    Я последний провайдер перехватываю, в него все вызовы в оконцове идут после всех остальных оберток.
    Только что нашел решение проблемы. Я конечно догадывался, что нужно попробовать, но не думал, что найдутся такие люди, которые будут работать с сокетами через Write\ReadFile!!! Пока не прочитал это:

    Оказывается, это мягкие их принудили :dntknw: Столько времени бился над пустяком...
     
  15. 4p_Wik

    4p_Wik New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2006
    Сообщения:
    9
    Аналогично. Хукал кернел в результате :)