Clerk Это что шутка такая ?) Пипод это как в бейсике? Хотя как в бейсике я плохо представляю. Там этот пикод типа на виртуалке бейсика выполняется? Погуглил, таки да) Только каким боком это тут?))
Clerk думаю на данном этопе можно без этого обойтись! так как всё же убрать эту: unresolved external symbol _memcmp referenced in function "long __stdcall NewZwQuerySystemInformation(unsigned long,void *,unsigned long,unsigned long *)" (?NewZwQuerySystemInformation@@YGJKPAXKPAK@Z)
Ну так ядро ведь не экспортирует memcmp(), конечно что неоткуда взять. Наверно асм вставки не известно как делать, тогда подойдёт чтолибо типа RtlCompareMemory().
вообще незамсловато я убрал это так #pragma intrinsic( memcmp ) щаз буду тестировать, но походу не рабоатет, ну хоть, скомпилировалось, аля отладчик
вообщем не рабоатает, ставлю бряк на функцию NewZwQuerySystemInformation, вызываю диспетчер, в отладчике ни каких эмоций, процесс виден.
onSide Она и в кернел моде загружена, висит в списке модулей. Смысл в том, что можно узнать № системного вызова, стандарнтым методом, считав +1 байт от начала функции.
xenom0rph Попробуй проставить побольше вызовов DbgPrint в разных местах а потом смотреть результат через DebugView
ну тут вроде понятно что не ставится хук на NtQuerySystemInformation, вообщем вот что меня смущает, а исходника что я копаю вот такой код Код (Text): ... #define HOOK_SYSCALL(_Function, _Hook, _Orig ) \ _Orig = (POVID) InterlockedExchange( (PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook) ... ZWQUERYSYSTEMINFORMATION OldZwQuerySystemInformation; ... OldZwQuerySystemInformation =(ZWQUERYSYSTEMINFORMATION)(SYSTEMSERVICE(ZwQuerySystemInformation)); HOOK_SYSCALL( ZwQuerySystemInformation, NewZwQuerySystemInformation, OldZwQuerySystemInformation ); Так вот тут естественоо ошибка в макросе 3 параметр имеет тип PVOID а мы ему пытаемя подсунуть ZWQUERYSYSTEMINFORMATION. Я не долго думая переписал макрос и поставил туда за место PVOID , ZWQUERYSYSTEMINFORMATION! но что то мне подсказывает, что это не правильно и причина в этом. Вот я только пока не могу понять. как тут это всё правильно привести к общему виду?
да и ещё я функцию DrvUnload не написал до конца, т.е. всё что он у меня создает в процессе работы он не выгружает. может быть из за этого проблеммы какие. я имеюю виду что не вообще вообщем, а именно с утсановкой хука?
Помоему весь этот пример из книжки Хогланда "Руткиты". Там все это есть с подробнейшими описаниями, рекомендую ознакомиться ))
onSide не книга у меня только Колисниченоко "Руткиты под Windows", да исходники с rootkit.com вот и весь арсенал) там есть тоже описание, но как то размыто, вроде всё понятно, а на деле всё надо править. может в этом свой прикол, но хоть какие подсказки были)) Вообщем не фига не работает как не крути. вот что расковырял в отладчике если посмотреть что там творится наведением курсором на параметры HOOK_SYSCALL( ZwQuerySystemInformation, NewZwQuerySystemInformation, OldZwQuerySystemInformation ); OldZwQuerySystemInformation - получает адрес функции ZwQuerySystemInformation. А вот сама ZwQuerySystemInformation, если на неё навести пишет одни error.
ну не в какую не хочет, он работать. Я вот даже ради интереса, взял исходники с руткит.ком и скомпилировал их командой build. всё нормально всё работает, компилирую в студии ошибки Код (Text): 1>.\include\hide.cpp(196) : error C2440: '=' : cannot convert from 'PVOID' to 'PVOID *' 1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast 1>.\include\hide.cpp(198) : error C2440: '=' : cannot convert from 'PVOID' to 'ZWQUERYSYSTEMINFORMATION' 1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast Ошибки то элементарные, но почему build их пропускает, а сутдия, нет? Если же всё подправить, что бы компилировалось в студии, так тогда не работает. ппц.