Анти-перехват API

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

  1. Igor_bb

    Igor_bb New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    3
    Во время работы приложения, кто-то перехватывает вызовы API через сплайсинг. А каким образом можно вернуть нормальное функционирование этой API? (отделаться от сплайсинга)
    API — из Winsock.

    PS. я читал это — http://www.wasm.ru/print.php?article=sasapi но похоже, что это не работает для winsock библиотеки.
     
  2. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Igor_bb

    ПУНТКТ 1
    Не факт что сплайс находится в первых 10 байтах
    Как вариант
    1. Скопируй в темп директорию библиотеку под новым именем и загрузи ее
    2. Через VirtualProtect установи на всю секцию кода копии либы права PAGE_EXECUTE_READWRITE
    3. Пересчитай релоки, как будто копия либы загружена по базе оригинала
    4. Сравнивай секции кода побайтно


    ПУНКТ 2
    В более тяжелых случаях - перехваты чекаются и восстанавливаются через определенный промежуток времени
    В этом случае (если не помог прием 1) тебе прийдется брать отладчик в руки, ставить бряк "на запись в ячейку памяти" и смотреть, что за зверь ставит перехватчики.

    Если возможности работы с отладчиком нет, тогда в загруженной копии либы, - релоки не фиксишь, а получаешь нужные адреса через GetProcAddress и юзаешь.

    ПУНКТ 3
    В очень тяжелых случаях, если есть антиотладка и антидамп - сперва разбираешься с защитой. Потом переходишь к предыдущему пункту
     
  3. Igor_bb

    Igor_bb New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    3
    Спасибо за отличное объяснение.
    В моем случае простой сплайсинг — сплайс находиться в начале, т.е в 10 байтах.

    Получается единственное противодействие такому методу — это использование дополнительной физической копии необходимой библиотеки, я правильно понял?
     
  4. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Если не прибегать к KernelMode методам то самое простое будет просто анхукнуть, вот тут рабочий код..
    _http://forum.antichat.ru/thread48514.html

    Если не анхукать ещё можно подгрузить свою Winsock настроить релоки и так далее и юзать её.
    Можно заинжектить во все процессы свою длл и перехватить NtWriteVirtualMemory и запрещать запись в свой прцоесс по определенным адресам.
    Но это не спасет если кто-то внедрится в наш процесс скрытым образом и похукает.
     
  5. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Igor_bb
    правильно


    Нет, можно сделать проще.
    Зачем каждую АПИшку получать через GetProcAddress?
    Можно пофиксить в ехе-шнике таблицу импорта

    1. Заменить адреса оригинальной WinSock на адреса копии (от силы 10 строк сишного кода)

    2. Выделить память через VIrtualAlloc и засунуть туда перехватчик GetProcAddress (от силы 4-6 строк сишного кода выйдет).

    Все.
    Теперь можно юзать апи, как и юзали раньше
    Не вызывая предварительно GetProcAddress и прочий гемор
     
  6. Malwara

    Malwara New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2008
    Сообщения:
    30
    Сделать IAT патчинг оригинала на подгруженную копию. Сплайсинг останется, но никогда не будет вызван, простое и эффективное решение.

    После чего я вызову ту же функу прямым сисколом и весь ваш изврат пойдет гулять.
     
  7. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Malwara
    Читайте внимательнее я и написал:
    Syscall из UM никак не словишь. Разве что через NtDebugSystemControl переписать msr и то обработчик в KM будет выполняться.