Устанавливаю ловушку WH_GETMESSAGE на определённый поток в чужом процессе. Как сделать так, чтобы чужой процесс гарантированно не мог ничего об этом узнать? Насколько я понимаю, при установке хука моя dll-ка загружается в адресное пространство чужого процесса. Поэтому, чтобы заподозрить неладное, чужому процессу достаточно получить список модулей (dll), которые загружены в его адресное пространство, и если там есть какие-то чужие dll, то значит, что установлены какие-то ловушки. Пока мыслю в сторону перехвата API-функции, отвечающей за информацию о загруженных модулях. Как я понимаю, эту API-функцию надо модифицировать так, чтобы если её вызывает чужой процесс, то она не возвращала бы никакой информации о моей dll. Есть вопросы: 1. Возможно ли вообще такое сделать? 2. Какую именно API функцию стоит перехватывать? 3. Кроме сокрытия загруженной dll от процесса, надо ли ещё что-то делать? 4. Может быть есть более простые способы.
да... наверное LdrGetDllHandle... но лучше пройтись по базе данных загрузщика и удалить свою либу из двусвязного списка... NT_TIB -> TEB -> PEB -> PEB_LDR_DATA и так далее... в интернете куча примеров... можно найти ловушк, установленную на WH_GETMESSAGE (как противодействие - не использовать хуки)... можно найти PE-файлу, котоых нет в базе данных загрузщика и выгружать их (как противодействие - трешить PE-заголовок после загрузки)... можно похукать загрузку модулей или какой-нить BaseThreadStart так, что инжект у вас не пройдет... да много чего можно придумать...
Спасибо за советы. Буду думать. Не ожидал такой быстрой реакции У меня задача такая. Я ловлю определённые (нестандартные) сообщения, которые сам "чужой процесс" посылает в свои окна, и при получении одного из таких сообщений считываю данные из памяти "чужого процесса". Т.е. привязка по времени критична - мне необходимо считать данные из памяти до того, как сообщение будет обработано. Можно ли такую задачу решить без использования хуков?
можно скрыть через пеб длл, но это не решает проблемы, нужно копать - перекапывать шадов, как это делает рку...
не советую, могут вылезти побочные эффекты - есть подозрение что и хуки не будут доставляться тогда этой либе, к тому же некоторые тулзы определяют hidden module
вообще, если ничего не путаю, то GWL_WNDPROC может установить только тот поток, с которым ассоциировано окно (в общем случае поток, который создал окно)...
SCRTR А ты напиши простейший вызов мессажбокса на асме так чтобы там стопудово ничего лишнего не было, запусти его и посмотри тем же Процесс Эксплорером сколько туда будет всякой всячины напихано. Так что имхо такая параноидальность захватываемого процесса тупо приведёт к его неработоспособности на большинстве машин.