Здрасьте все. Я сегодня вроде разобрался с функцией IsDebuggerPresent, а вот про антиотладку при помощи NtGlobalFlag вообще информации нету. Посмотрите, что нарыл на NtGlobalFlag и как понял IsDebuggerPresent, если вдруг чё неправильно, пните в нужную сторону, ну и насчёт NtGlobalFlag дайте плз покурить: IsDebuggerPresent: функция состоит из 3 строк: Code (Text): MOV EAX,DWORD PTR FS:[18] MOV EAX,DWORD PTR DS:[EAX+30] MOVZX EAX,BYTE PTR DS:[EAX+2] Регистр FS указывает на Thread Environment Block (TEB), по смещению fs:[18] лежит указатель на этот же TEB (то есть то же самое, что и в fs), по смещению 30h в TEB лежит указатель на PEB, и тут смотрят на [peb+2] и если прога отлаживается отладчиком 3 кольца, то в [peb+2] лежит 1, если отладки нет - лежит 0. А эту единицу устанавливает CreateProcess из-за переданного отладчиком параметра DEBUG_PROCESS и если стоя на EP (ну или если юзается TLS на первой команде) обнулить [peb+2] то таким образом нас уже не запалить, чем и пользуются плагины к оле. Про IsDebuggerPresent я правильно понял? NtGlobalFlag: Вот что я по нему нарыл: NtGlobalFlag расположен в PEB по смещению 68h, Это dword. Когда мы не под отладчиком - NtGlobalFlag = 0, когда мы отлаживаем приложение, NtGlobalFlag = 70h. При чём тут реестр я так и не понял (в хелпе к плагину "Olly advanced" что-то написано про реестр), и почему в Olly Advanced'e не рекоммендуется использовать NtGlobalFlag, я тоже не понял. И последнее, что я не понял - кто и почему выставляет этот байт? В случае с IsDebuggerPresent тут выставляет ф-ция CreateProcess из-за параметра, а тут кто и почему? P.S. Если есть, дайте плз почитать/покурить/поучить что-нибудь про антиотладку с помощью Heapflags и Forceflags (желательно на русском)
Asterix, по форуму поискал, самое стоящее что я нашёл - это http://www.wasm.ru/forum/viewtopic.php?id=10118, но это слишком сложно для мну. =( Я же не прошу чего-то съверхестестьеного, просто дайте мне "пинок под зад" в нужную сторону.
не совсем. база FS указывает на начало NT_TIB. а в нем поле Self указывает уже на полноценный TEB, как я помню. в остальном - да.
_Poly_Glot_ Про IsDebuggerPresent более развернутое обсуждение вы найдете в статье про упаковщики от Volodya и NEOX. Там все очень приятно нарисованно и изложенно. Про NtGlobalFlag сейчас нетути сил. Как-нибудь в другой раз ну или меня кто-нить поддержит отседова.
Mental_Mirror, сэкнс, имеешь ввиду две части "Об упаковщиках в последний раз"? Если да, завтра покурю обязательно
Great, а я сколько трейсил у мну FS всегда был равен FS:[18] ??? Ребята, завтра уже настало... =) =) =)
Great, вот смотри: "На Intel Win32 платформе, регистр FS всегда указывает на текущий TIB." Это цитата из http://www.wasm.ru/article.php?article=Win32SEHPietrek1 "Структура TIB существует и в Windows NT+ и называется _NT_TIB (полностью документирована в winnt.h), а структура TEB (недокументирована) включает в себя структуру TIB". А это цитата из http://www.wasm.ru/article.php?article=packers2 Ты по ходу перепутал TEB и TIB. Наверное. Всё, я по ходу понял. Приведу цитату из упаковщиков части 2: Но fs:[18] равен fs и получается, что fs указывает и на начало структуры TEB и на начало структуры NT_TIB, так как NT_TIB входит в TEB. Ты написал: а начало NT_TIB как раз и есть начало полноценного TEB Ну и напоследок картинку для общего понимания: http://www.wasm.ru/pub/23/pic/TEB.gif
Great, прочитай упаковщики, я ж тут даже картинку дал. (и, если окажется, что всё-таки не понял я, наставь мну на путь истинный =) Ну ладно, это не главное, я вообще тему создал с основной целью - понять каким макаром NtGlobalFlag относится к антиотладке, ну и если кому не в лом, расскажите ещё о Heapflags и Forceflags.
_Poly_Glot_ я читал не один раз, спасибо) насчет указателей я и правда напутал, с кем не бывает. но TIB & TEB между собой я не путал, Как ты сказал. короче проехали
йа конешн можт дурак но у меня fs=3bh, fs:[18h]=7FFDD000.. сталобыть fs=3bh на TIB не особо указывает, в отличии от fs:[18h]=7FFDD000... 3b - селектор, который содержет номер дескриптора. а вот база сегмента, который описываецо данным дескриптором какраз йавляецо линейным адресом NT_TIB. кроме того этот адрес лежит по смещению 18h относительно базы fs (NT_TIB.Self)
Freeman Это не моя фраза, это цитата из http://www.wasm.ru/article.php?article=Win32SEHPietrek1 У мну тоже если в оле набрать "? fs", тоже показывает 3bh, просто я ничё не знаю про селекторы, в общем я имел ввиду не fs, а "база сегмента, который описываецо данным дескриптором" Спасибо за то, что указал ошибку...
команду отладчика dt не пробовали? Freeman ну ясно дело что селектор не может быть указателем кстати не всегда а только в юзере :P
Ой, у мну тока Оля, а тут в command bar'e такой команды нет. Хм, ты хочешь сказать, что под админом, проги, использующие регистр fs будут работать по другому? P.S. Народ, расскажите плз про NtGlobalFlag...