В каких случаях GetDC и GetWindowDC возвращают ошибку?

Тема в разделе "WASM.WIN32", создана пользователем Flasher, 8 фев 2010.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Интересует вопрос, можно ли сделать так чтобы GetDC и GetWindowDC не смогли получить DC моего окна. Возможно-ли это? :)
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    http://msdn.microsoft.com/en-us/library/dd144871(VS.85).aspx
    разве тут не написано, что она может вернуть ошибку. когда - не важно, главное проверить корректность значения, которое она вернула. в случае ошибки она возвращает 0.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flasher
    Да перенесите свой античит уже в режим ядра, сколькео можно извращаться в юзермоде..
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Clerk, так не интересно :)
    Попробую обнулить параметры gdi* и gl* в структуре TEB, могет что и выйдит ;)
     
  5. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    А что должно выйти? Если мне не изменяет память, функции эти лезут за инфой в ядро (надо проверить, дома гляну), TEB тут не при чем.

    Да и вообще, ты бы описал конкретнее чего ты хочешь добиться. Что-то мне подсказывает, что есть более разумные методы, нежели хуки функций и порча TEB ;)
     
  6. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Хочу чтобы на моём окне не могли рисовать через GetDC\SetPixel.
    С TEB ничего не вышло.
     
  7. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Ну давай порассуждаем. Чтобы рисовать на твоем окне его надо сначала найти. Кто и по каким признакам сможет это сделать?
     
  8. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    прямой наводкой и без остановок. можно даже к апи не обращаться
     
  9. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    :) А апи прослойки тут вообще нет. Вот куда кажет экспортируемая GetDCEx:
    Код (Text):
    1. .text:77D24516 _NtUserGetDCEx@12 proc near             ; CODE XREF: AnimateWindow(x,x,x)+AFp
    2. .text:77D24516                                         ; SoftModalMessageBox(x)+181p ...
    3. .text:77D24516
    4. .text:77D24516 hWnd            = dword ptr  4
    5. .text:77D24516 hrgnClip        = dword ptr  8
    6. .text:77D24516 flags           = dword ptr  0Ch
    7. .text:77D24516
    8. .text:77D24516                 mov     eax, 11A5h
    9. .text:77D2451B                 mov     edx, 7FFE0300h
    10. .text:77D24520                 call    dword ptr [edx]
    11. .text:77D24522                 retn    0Ch
    12. .text:77D24522 _NtUserGetDCEx@12 endp
     
  10. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    По classname либо по caption легко можно найти "моё" окно.
    А функции NtGdiSetPixel\NtGdiGetDCDword в юзермод не спускаются за инфой?
     
  11. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Twister
    ну дык. и большинство остальных остальных функов гди (не гди+) кажут тудаже. надо или из ядра ловить. или клерк тут советовал как из юзера (не разбирался ешше)
    http://wasm.ru/forum/viewtopic.php?pid=366709
     
  12. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Ну да, его способ вполне реализуем и доля смысла в нем есть, ибо хоть как ты не сплайсь функции, а сервис все-равно можно вызвать напрямую.

    Код (Text):
    1. По classname либо по caption легко можно найти "моё" окно.
    Ну вот мы и пришли к истине. Нафига хучить что-то? Перед созданием окна пробегись по существующим уже окнам, выбери какое-нить легальное имя класса (рандомное тоже палевно немного) и забубень себе такое же. Caption окну не выставляй, рисуй в заголовке текст. Позаботься о том, чтоб в модуле не светились открытым текстом какие-то строки-сигнатуры. И все, твое окно никто никогда не найдет.
     
  13. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    А как быть с названием процесса? По названию процесса можно найти окно.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Twister
    Смысл в том, что обращение к последней странице выполняется в сегменте данных, как например у вас в #9. Усикаем сегмент, тогда обращения к этой странице будут вызывать сепшены.
     
  15. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Flasher
    подумай ) Просто для примера, разовьем идею Twister 'а берем одно приложение, оно переименовывает модуль другого и запускает, при этом берет имя уже из списка запущенных ибо
     
  16. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    гы. а можно еще выводить через оконный ДД. даже если найдут и нарисуют/прочитают - нифига не будет видно. а еще можно ДД использовать без окна. и все функции теже, кроме блиттинга. еще вкусность есть в том, что можно элементарно прочесть экранную инфу (и изменить тоже)
     
  17. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Ну тут малость геморройно постоянно переименовывать exe. Мало того, не всегда есть права на запись в свой же каталог. Если у проги есть установщик, то лучше давать рандомное имя при установке, так поступает RkU. Я считаю, что ни один "здравый" программынй модуль не будет производить поиск по имени exe. Это слишком ненадёжно.
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flasher
    Вот вы компилите экзешники и думаете что там может быть есчо какаято защита. Некоторые также просто компилят драйвера, где понятия защиты нет. Если есть обьект, то он будет найден. Если есть окно, при желании на нём будут рисовать. И имя процесса совсем не имеет значения, нормально такого типа приложение должно загрузить всё что нужно из памяти и почистить все следы. Выполняет ваш поток какието движения, например обратился он к шадову - по этому поток будет найден, выделяете вы последоватеьно блоки памяти - по логу поток найдётся, есть у вас в памяти какаято строка - она найдётся.. А скрывать от системы её обьекты както бессмысленно.
     
  19. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Речь вить не идет о непробиваемой защите, или программе-невидимке, просто хочеться насколько это возможно отбить охоту среднестатистическому кодеру подкопаться и тестить свои штучки над моим тварением. :)
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flasher
    Вам следует отказаться от патча, для вашей тулзы(UCP или как там, давно смотрел), то что показывает рку является исходным пунктом для ресерча и отлома.