Вопрос снова по поводу анти-аттача. Подумал сделать перехват создания потока не в LdrInitializeThunk, а в BaseThreadInitThunk, но в ХР он не экспортируется (если вообще есть). Как нибудь его можно найти надежным образом? желательно кросс-виндовым
http://wasm.ru/forum/viewtopic.php?id=41257 Есть BaseThreadStartThunk() - стаб, вызываемый после завершения стартап апк и дёргает DbgUiRemoteBreakin(), которая генерит брейк. И вообще не нужно ничего перехватывать, будет вызван загрузочный вход модулей в контексте удалённого потока.
инфа 100%? т.е. вызовется DLL_THREAD_ATTACH? до выполнения удаленного потока? в контексте нового потока?
Это обычный поток. Тотже поток создаётся из csrss для UserpActivateDebugger. Скрываются от отладчика только потоки, получающие слепки(RtlQueryProcessDebugInformation()), там вызов ThreadHideFromDebugger. События в таком потоке не доставляются отладчику, но это не имеет отношения к стартап апк - длл будет вызвана.
все круто, но опять проблемы с wow64. В dll_thread_attach я прописал ZwRemoveProcessDebug. В хр Sp3 все срабатывает как надо, на windows 7 x64 - как будто процесс стопится до выполнения dll_thread_attach.
вот еще вопрос - в функции DbgUiRemoteBreakin после проверки BeingDebugged идет сравнение 2го бита какого-то значения. Насколько я помню - в NtGlobalFlag 2-ой бит показывает что процесс под отладкой, но по моему, это не он. Что это за значение? в исходнике ReactOS такой проверки нет. http://gyazo.com/18d73204529f053fc02f32bb353a363d.png
http://doxygen.reactos.org/d9/db6/4_2kdinit_8c_a31651fc970c88598869bce0c090f6be1.html Код (Text): SharedUserData->KdDebuggerEnabled = TRUE; Почему проверяется 2-й бит совершенно не понятно. Возможно это ошибка.
кто-то мне говорил, что Shared User Data нельзя из юзермода изменять и что она общая для всех процессов. Так ли это? и если нельзя просто так, как можно изменить ее? p.s. на хр сп3 х86 и win7 x64 этот адрес одинаковый. можно ли полагать что на всех хп сп0 и выше он будет таким же, включая 64-битные версии?
float USD это фиксированная структура, в описании её есть чёткий комент: Изменяется из ядра: Код (Text): #define KI_USER_SHARED_DATA 0xffdf0000 - страница отображена на юзермод. Зачем вам это не понятно.