[HELP]Защита dll-ки от сплайсинга и обнаружение LSP

Тема в разделе "LANGS.C", создана пользователем r2max, 17 дек 2011.

  1. r2max

    r2max Женя

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    40
    Адрес:
    Киев
    Всем доброго времени суток!
    Появилась необходимость в защите системной DLL от хуков....
    А именно дллки WS2_32.dll
    Можно не всю, но хотя бы защитить функции Connect и Send\Recv

    Как можно сделать?

    Для чего это:
    Моё приложежение использует именно эти функции, но некоторые умные люди сделали "Бота" который позволяет изменять содержимое пакетов и т д((
    Бот хукает Ws2_32.Connect и тем самым всё сниффает.

    Еще он использует LSP

    Можно ли как то обнаружить эти хуки, и сторонний LSP модуль ?

    Очень надеюсь на вашу помощь.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    много способов, зависит от того как он "хукает"? сплайсинг на первые пять байт например обходится очень легко и удаляется так же...
     
  3. r2max

    r2max Женя

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    40
    Адрес:
    Киев
    В старой версии бота - хукали первые 5 байт.
    В новой заменяют адрес какого то перехода внутри функции + используют LSP модуль
     
  4. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    r2max
    В принципе затея бессмысленная. Закрыв одну дверь, можно юзать другую. В простейшем самом случае, это когда код испорчен вредоносным и не годным приложением, всякие сплайсы и хотпатчи - восстановите проекцию с диска с заменой на проекцию не файловой секции. Это в юзере, в кмоде MmSecureVirtualMemory(). В аттаче семпл.

    В общем восстанавливать тоже не нужно ничего, подобные задачи решаются релоцированием модуля. Тоесть модуль загружается оригинальный, причём таким образом, чтобы фиксапы перенаправлялись в порченую проекцию только для секций данных. Если приложение многопоточное, то смысл имеет поправка в стеке SFC на дельту баз, чтобы сразу все потоки вернулись в восстановленный модуль и также с контекстами, короче это завётся S' & W' маршрутизацией.

    Но повторюсь, защита может работать если только известен механизм её. Против лома нет приёма, если нет другого лома (c) Great.
    Я вообще када последний раз хачил сокеты использовал довольно хитроумный алгоритм, так что никакой код не портятся и структуры провайдера тоже. Очевидно такой способ контроля нельзя обойти восстановлением проекции - она и так целая.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    уходить на более низкие уровни, хотя тоже зависит от бото-писателей... писать драйвер протектор например... или передавать данные через свой драйвер...
     
  6. Argot

    Argot New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2007
    Сообщения:
    14
    зачем "уходить на более низкие уровни" нужно просто трафик шифровать, и защитить свои функции шифрование от реверса.
     
  7. valentin_p

    valentin_p New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    382
    можно конечно переписать... не хватает инклудов. по-моему там много из ntddk ..
     
  8. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    r2max
    Если вы и найдёте способы защиты в ring3 , то умельцы перейдут на ring0 уровень.
    Так что у вас только 1 вариант - шифрование.
     
  9. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Предлагаю бросить безнадёжные попытки написать "невзламываемую" защиту, а бота обнаруживать сигнатурно)) Т.е. скачали новую версию бота - смотрите какие ключи реестра появляются, какой процесс запущен и т.д. - добавляете детект. Ну и далее либо бан, либо ещё какие-то действия, от которых ботоводам худо станет. Да, я предлагаю "антивирус", но тут я считаю свою задачу он решит, т.к. на детект новой версии уйдёт минимум времени, а то и вобще автоматически можно будет.
     
  10. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    r2max
    Если важно, чтобы пакет не меняли - цифровой подписи самопальным алгоритмом более чем достаточно :)
    Если нужно, чтобы и не читали - тогда только шифрование.
     
  11. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    kejcerfcrv, это же код Indy. Неплохой способ, только в x64 не работает, из за флага AT_ROUND_TO_PAGE.

    Относительно шифрования, это довольно геморно, так как надо будет еще и на стороне сервера написать дешифровщик и перенаправление трафика уже в нужный порт.

    Как вариант, с заданным интервалом проверять crc кода процедур connect\send\recv.

    Кстати, в ring3 для ловли трафика не обьязательно хукать функции из ws2_32.dll, достаточно хукнуть ZwDeviceIoControlFile из ntdll.dll, так даже проще.
     
  12. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    Flasher
    Ну конечно это я код запилил давно. А флаг можно убрать.
     
  13. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    kejcerfcrv, о, Indy :)
    Как это флаг можно убрать? Тобишь можно сделать так, чтобы на x64 код тоже выполнял свои обьязанности? :) Как?
     
  14. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    Flasher
    Там по вашему секции не мапяться :lol: ?
     
  15. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    kejcerfcrv, ну речь ведь про флаг AT_ROUND_TO_PAGE
    Какой предлагайте вместо AT_ROUND_TO_PAGE указать? Все остальные
    Возвращают ошибку.
     
  16. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    Flasher
    Нулём заполнить. Этот флаг в общем и не нужен. Вы всёравно указываете адрес проекции. Разберитесь вначале, не следует копипастить код, это не годно.
     
  17. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    kejcerfcrv, да не работает с нулём, я в первую очередь с нулём и пробовал.
     
  18. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    Flasher
    Ну так ознакомтесь с сервисом NtMapViewOfSection, очевидно нужно знать что юзать.