Хотелось бы узнать Ваше мнение, о этом методе, возможности его обхода из user mod'a, при условии невозможности перехвата createfile и других функций, использованых в функции fill_proc_buffer, а также использовании не 5 и более байт функции, а всего тела функции, полученной из dll. Здесь уже немного обсуждалась данная проблема : www.rootkit.com. посмотреть исходный код можно тут : www.coders.zp.ua.
После столь страстной фразы посмотрел. И что я увидел? Да вообще ничего особенного. Или ты думаешь, что твоя NtQuery - это последний писк моды? Молодец. Хорошая игрушка. Но пока - не более того.
Согласен, что америку не открыл, но критика должна быть конструктивной. Этот пост не способ похвастаться или еще чего. Как обойти такой метод? Я пока не придумал ничего путного, поэтому и спрашиваю более опытных людей. Володя! дайте же ответ, что с этим делать и моя душа успокоиться.
Скажи в чём основная фича и где её в исходнике искать, а то времени всё внимательно смотреть нету. Может я и посмотрю.
Володя! Может я тебя не понял, а может Вам стоит выражаться яснее! "Берешь, и хукаешь эту твою NtQuery" как хукаешь? методом Когсвелла и Руссиновича, методом подменны некоторых членов SERVICE_DESCRIPTOR_TABLE, а имеено адресов обработчиков вызовов? Конечно получится, но написано USER MODE ANTIHOOKING! весь вопрос в том, как из режима пользователя обмануть. Ставим hook, записываю int 3 и обрабатывая исключения или записываем jmp XXX или другие инструкции перехода. Вызываю NtQuery покупаемся за 3 копейки, а моя хрень читает файл ntdll и находя тело функции NtQuery дизасмит и копирует инструкции >= 5 байт Дальше вызывает свои функцию NtQuery которая выполняет эти "правильные" байты и дальше jmp на адрес функции (+ >= 5)NtQuery в ntdll. Таким макаром и не удаеться перехватить наш вызов, при том, что установленные хуки так и остаються установленными. Если интересно поиграйся с зомбиным stealth'om и посмотри выдит ли procviewer его процесс, и видит ли его например proccess explorer или taskmgr, а под 9x дурим и invisibility by yoda. А что если записать jmp или int 3 не в начало, а где-то в середине? Так можно тогда восстанавливать не >= 5 байт, а всю функцию. Метод мне кажеться хорошим, так как такие финты можно и в ring0 крутить. еще поиграться... (main.exe для MS Windows 2000) поставь SICE'ом bpx GetWindowTextW и запускай main.exe. Поймал? _1543307979__sources.zip
Теперь уже я не очень понимаю... Видимо, мы говорили на разных языках. Итак, вопрос. В чем проблема-то? В том, чтобы увидеть процесс, несмотря на все проблемы? Или в том, чтобы любой ценой не дать себя увидеть?
Этот procviewer демонстрация антидебаг и антихукинг метода. Зашибись метод, но это прошлый шаг. Новый шаг, это как его обмануть, этого я не придумал, и это мне не дает покоя, и никто ничего толкового не предлагает, (это я так сужу из постов на rootkit'e). Хотя мне кажеться что так могут вызывать функции и упаковщики, хотя не уверен, так как с упаковщиками я не на "ты". З.Ы. Я думаю уже есть и такие, кто в ring0 перехватывают вызовы не методом Руссиновича(это уже попса), а вставляя в ntoskrnl.sys инструкции типа jmp и прочие счастья, будет нехило и их выводить на чистую воду, но это уже в будущем, а procviewer(он же для юзер мода, но метод получения "правильных байт тот же") это предтеча.
[ Saint German: <font color="indigo]а моя хрень читает файл ntdll и находя тело функции NtQuery дизасмит и копирует инструкции >= 5 байт</font><!--color--> ] Если не ошибаюсь, именно так поступают многие протекторы и уже очень давно.
"Если не ошибаюсь, именно так поступают многие протекторы и уже очень давно." Вот мне и интересно какие, и как, а Володя инфой делиться не хочет или не понимает, о чем это я. to Four-F : А что ты думаешь про ring0, попадались уже тебе такие хуки типа jmp in ntoskrnl.sys?
[ Saint German: <font color="indigo]попадались уже тебе такие хуки типа jmp in ntoskrnl.sys?</font><!--color--> ] Конечно. Например, DbgView так делает.
Вот! а как же их обойти, но при этом не убирать их? Читая, теперь только, не из ntdll, а из ntoskrnl.sys. А теперь вопрос( в который раз уже ) : как обмануть обход хуков?
Кажется, я понял, о чем ты. Ты совершенно прав, утверждая, что можно хитрым образом передавать управление на код нужной API-функции. Минуя пролог, допустим, или как-нибудь еще. Поэтому можно спуститься ниже - на уровень ntdll.dll и хватать функции там. Правда и программа может быть написана кем-нибудь обезбашенным и передавать управление тут же в ntdll.dll, опять таки, минуя пролог. Или, вообще, напрямую задавать sysenter/int 2e. Ну и как ты это отслеживать собрался? В юзермоде-то?
"Минуя пролог, допустим, или как-нибудь еще" (хе-хе) - исполняя все тело, зная число передаваемых параметров, например messageboxa/w - 4*4, дизасмить, искать retn 16. и исполнять от push ebp - до retn 16, тогда как ? "программа может быть написана кем-нибудь обезбашенным и передавать управление тут же в ntdll.dll, опять таки, минуя пролог. Или, вообще, напрямую задавать sysenter/int 2e" - согласен в user mod'e отдыхает, но так кто мешает дизасмить ntoskrnl и исполнять тело нужной функции. Я все больше убеждаюсь, что нет общего решения, как не давать обходить хуки.
Хорошо ты пошутил. Это в юзермоде-то? Если какой-нибудь r0 хук подменяет содержимое ntdll.dll при чтении, то хуки ты не сможешь обойти. Вот мой пост про ядровый антихукинг, где все более серьезно: Kernel mode antihooking by building our own kernel
"Хорошо ты пошутил. Это в юзермоде-то?" нет естесвенно "Если какой-нибудь r0 хук подменяет содержимое ntdll.dll при чтении, то хуки ты не сможешь обойти. " Нет факт, что поймает при чтении файла, а почему бы не определить тела нужных функций (для разных версий win понятное дело), а потом зашить их, и исполнять и не надо читать, ntdll (в user mode ) или ntoskrnl.sys (понятно где ) Согласен, что это не очень красиво, зато возможно. А пост ядренный, это я сразу скажу, даже не читая