Во время работы приложения, кто-то перехватывает вызовы API через сплайсинг. А каким образом можно вернуть нормальное функционирование этой API? (отделаться от сплайсинга) API — из Winsock. PS. я читал это — http://www.wasm.ru/print.php?article=sasapi но похоже, что это не работает для winsock библиотеки.
Igor_bb ПУНТКТ 1 Не факт что сплайс находится в первых 10 байтах Как вариант 1. Скопируй в темп директорию библиотеку под новым именем и загрузи ее 2. Через VirtualProtect установи на всю секцию кода копии либы права PAGE_EXECUTE_READWRITE 3. Пересчитай релоки, как будто копия либы загружена по базе оригинала 4. Сравнивай секции кода побайтно ПУНКТ 2 В более тяжелых случаях - перехваты чекаются и восстанавливаются через определенный промежуток времени В этом случае (если не помог прием 1) тебе прийдется брать отладчик в руки, ставить бряк "на запись в ячейку памяти" и смотреть, что за зверь ставит перехватчики. Если возможности работы с отладчиком нет, тогда в загруженной копии либы, - релоки не фиксишь, а получаешь нужные адреса через GetProcAddress и юзаешь. ПУНКТ 3 В очень тяжелых случаях, если есть антиотладка и антидамп - сперва разбираешься с защитой. Потом переходишь к предыдущему пункту
Спасибо за отличное объяснение. В моем случае простой сплайсинг — сплайс находиться в начале, т.е в 10 байтах. Получается единственное противодействие такому методу — это использование дополнительной физической копии необходимой библиотеки, я правильно понял?
Если не прибегать к KernelMode методам то самое простое будет просто анхукнуть, вот тут рабочий код.. _http://forum.antichat.ru/thread48514.html Если не анхукать ещё можно подгрузить свою Winsock настроить релоки и так далее и юзать её. Можно заинжектить во все процессы свою длл и перехватить NtWriteVirtualMemory и запрещать запись в свой прцоесс по определенным адресам. Но это не спасет если кто-то внедрится в наш процесс скрытым образом и похукает.
Igor_bb правильно Нет, можно сделать проще. Зачем каждую АПИшку получать через GetProcAddress? Можно пофиксить в ехе-шнике таблицу импорта 1. Заменить адреса оригинальной WinSock на адреса копии (от силы 10 строк сишного кода) 2. Выделить память через VIrtualAlloc и засунуть туда перехватчик GetProcAddress (от силы 4-6 строк сишного кода выйдет). Все. Теперь можно юзать апи, как и юзали раньше Не вызывая предварительно GetProcAddress и прочий гемор
Сделать IAT патчинг оригинала на подгруженную копию. Сплайсинг останется, но никогда не будет вызван, простое и эффективное решение. После чего я вызову ту же функу прямым сисколом и весь ваш изврат пойдет гулять.
Malwara Читайте внимательнее я и написал: Syscall из UM никак не словишь. Разве что через NtDebugSystemControl переписать msr и то обработчик в KM будет выполняться.