[WinXP] ws2_32.dll -> подмена системной .dll (Отслеживание)

Тема в разделе "WASM.WIN32", создана пользователем MuForum, 30 мар 2010.

  1. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Доброго времени суток.
    Есть программа 1.exe, которая подменяет системную библиотеку ws2_32.dll на свой экземпляр с экспортированными функциями.
    Если нужно обрабатывать функцию, то подменная библиотека обрабатывает, если не нужно, то отсылает оригинальной библиотеке.


    # Вопрос: Как можно защитится от подмены файла "ws2_32.dll" ?
    - Как вариант думал проверять Size, CRC32 и MD5 файла, но оказалось что таких файлов такое огромное множество, что я устал добавлять данные в библиотеку.
    - Причём у разных страх разная контрольная сумма файла WS2_32.DLL; (Точнее если разный язык ОС)


    P.S. -> Буду рад помощь или советам.
     
  2. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Как вариант: дату создания файла проверить, она должна совпадать с остальными системными dll.

    минусы:
    Этот способ довольно просто обойти, хотя многие про это забывают или не знают.
    Возможны ложные срабатывания.

    Добавь не оригинальные ws2_32.dll а подмененые.
     
  3. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Вариант с проверкой даты создания/изменения файла не подходит.
    Во-первых: Легко обойти.
    Во-вторых: Дата создания/изменения системных файлов не совпадают.
    - Только что проверил на 3 ОС. (Разница варирует в 5 минут...)

    Вариант с проверкой левых .DLL хорош, но они появляются как гавно... Нужен какой-то более достойный вариант.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    собрать побольше этих гуан-библиотек и сделать сигнатуру... потом определять их по сигнатуре...
     
  5. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Достовернее контрольной суммы оригинальных dll ничего не придумаешь.
    А ты смотрел чем отличаются одинаковые версии одной dll для разных языковых версий ос? Возможно лишь секцией данных или ресурсов, имхо секция кода должна быть одинаковой, тогда контрольную сумму лучше брать не от всего файла.
     
  6. PowerASM

    PowerASM New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    59
    Попробуйте считать CRC отдельных секций/функций (особенно критически важных), проверять в ресурсах версию и copyright.
     
  7. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Проверяй контрольную сумму не всей ws2_32.dll, а отдельных её экспортов. Можно даже не КС, а просто сигнатуры. Список таких сигнатур будет вразы меньше, чем список контрольных сумм всех возможных файлов. Все возможные файлы практически невозможно охватить.
     
  8. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    %)
    оригинальная длл уже лежит в папке system32, с ней и надо сравнивать то что находится в памяти с именем 'ws2_32'
     
  9. PowerASM

    PowerASM New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    59
    GoldFinch
    ну это если система сообразила, что ее подменили и восстановила оригинал.
     
  10. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    ну хз. имхо обычно ws2_32 кидают в папку приложения, а не в системную
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Захотят подменить - сделают это и никак не помешаете. Лучший вариант - не использовать этот модуль.
     
  12. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    А от куда система восстанавливает файлы если "сообразила. что ее подменили"?
     
  13. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    C:\WINDOWS\system32\dllcache

    если и там подменили, то все )
     
  14. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    все же я сомневаюсь что серьезные люди будут качественно подменять ws2_32, есть более удобные способы.
    особенно если тот кто подменяет длл хорошо изучил вашу программу.

    можно попробовать сделать так:
    передать в функцию ws2_32 нулевой указатель, который вызовет исключение. перехватить это исключение, и посмотреть стек вызовов.
    либо перехватить функцию другой длл, которую должна вызывать какая-то функция ws2_32, и посмотреть какой модуль эту функцию вызывает
     
  15. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    я все же не верю что найдется тот кто полностью реализует ws2_32 только чтобы перехватить трафик чьей-то проги
     
  16. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Имхо, гавно вопрос ) если сделать так: переименовать оригинальную ws2_32, свою dll скопировать на место оригинальной. В экспорте своей dll добавить все те же функции что и в оригинале, обработчики функций в коде своей dll сделать только для интересующих нас функций, все остальные будут переходники, которые будут загружать оригинальную dll и передавать управление туда.
     
  17. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Flint_ta
    в том то и дело, что это не "полностью". такое палится на раз.
     
  18. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    instrinct ??
     
  19. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    GoldFinch
    тогда дайте пример с чем вы боретесь, оригинальную dll и измененную.
     
  20. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Никто в здравом уме заменять системную либу не будет - ето чревато. Поэтому для подгрузки прокси либы её кидают в папку с приложением откуда она и подхватывается.
    Элементарное решение №1: сравнить путь загруженной либы с обычным системным путём (C:\Windows\system32\ws2_32.dll).
    №2: Выгружаем загруженную либу или анмапим её, загружаем нужный оригинал по нужному пути.
    №3: Таскаем в ресурсах/оверлее нужное с собой и заружаем через кастомный лоадер без добавления в записи системного загрузчик, получится юзаем тока мы её и никто не пропалит сей способ (имеется ввиду без геморойных ухищрений, к примеру Клерк ессно чё-нить придумал бы).
    №4: Считать хэш пролога и пару команд за ним нужных функций в оригинале, а затем сравнить с загруженным в памяти (наиболее перспективно).