![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
всем доброго дня.
есть список процессов полученный с помощью CreateToolhelp32Snapshot(). отсюда у меня есть имя исполняемого файла, и ID процесса(PROCESSENTRY32::th32ProcessID). подскажите, как мне из того что имеется, получить текст заголовка(title?, caption?) окна? спасибо. |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
EnumThreadWindows() ?
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
Dem_max,
перечисление дочерних окон мне не нужно. тут наверное нужно получить HANDLE основного окна, и уже у него взять текст в заголовке. но я не знаю как это сделать. Добавлено через 6 минут и 52 секунды хотя...
я не знаю как это понимать.. только основные окна? окна без детей? |
||||
|
|||||
| DiGGeRR |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
nonchild - то есть те, у которых нет родителя (точнее, есть - HWND_DESKTOP = NULL). Не факт, что это главное окно. Оно может быть вообще невидимо, и юзаться для получения broadcast сообщений.
К тому же окон может быть несколько, равнозначных для приложения. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
кто-то может внятно объяснить, что нужно сделать чтоб получить текст заголовка основного окна зная ID процесса?
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
GetWindowText
-------------------- |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
500mhz, спасибо.
осталось понять, как зная ID процесса(PROCESSENTRY32::th32ProcessID) получить HWND(HANDLE?) окна. |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
GetWindowHandle )))
-------------------- |
|||
|
||||
| DiGGeRR |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
Никак. У приложения может быть НЕСКОЛЬКО окон, и для системы они все равнозначны.
Можно только с помощью EnumThreadWindows получить список nonchild окон. Если окно видимо (IsWindowVisible) и имеет ненулевые размеры (GetWindowRect), то, скорее всего, это главное окно. |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
двоешники )))
винда какбэ не дает возможности получит handle окна по pid но можно пойти другим путем делаем GetTopWindow получаем handle окна делаем GetWindowThreadProcessId получаем pid ну и сравниваем с интересуюшим нас pid -------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
500mhz, ну в общем да, но как мы вызовем GetTopWindow ? ей же нужно какой-то HWND дать, а у нас как я понял только ProcessId
Я бы сделал это так.
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
заменим на GetActiveWindow или GetForegroundWindow
-------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
||||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
под одним PID'ом будут все окна интересующего приложения я бы смирился с частным вариантом: изучить иерархию окон интересующего приложения (Spy) и получить исходя из нее заголовок :) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
500mhz, а если наше окно не TopWindow?
*произвольное окно в произвольном состоянии* GetWindowRect() тож не показатель - одним тредом, пусть даже единственным в процессе, можно "раздавать" мессаги нескольким "полноценным" окнам.. = главное окно приложения, неверное выражение, т.к. нету такова.) и как говорит GremlinProg, нужно сигнатурки создавать, иногда ищу окна по их классу\положению относительно других окон с определённым класом\стилем\положением (это с дочерными так) А "главное" , да - по имени класса\тексту заголовка оптимальный вариант., темболее есть PID. |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
ASMatic
в целях безопасности в некоторых браузерах и прочем софте классы и имена рандомными стали делать с недавнего времени. -------------------- |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
500mhz, я же говорю - нужно искать сигнатуры, на топ виндов нефиг надеятся..Это дело случая, в одном варианте класс окна пойдёт, во втором нужно перебирать все и по пути к процессу определять кто есть кто.. Да и брасеров окна зачем искать.)
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
мы же не знаем какой софт ТС зохакать решил ))) если браузер то там совсем другой подход, если нотепад то подойдет метод что ему тут написали.
-------------------- |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
boostcoder, в моем варианте функция EnumWindows возвращает только
Изучая "иерархию окон интересующего приложения" вручную, вы точно также найдете именно эти окна. Просто у процесса может быть несколько top-level окон. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
volatile, ну, тогда я в замешательстве...
Добавлено через 59 секунд вообще-то, мне это нужно для "отлова" читерских программ. а они, как правило, однооконные. |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
boostcoder, чит софт по окну определять это самое что может быть примитивное, т.к. окна могут называтся как хош, классы юзать какие хош = вы ща паритесь,а в в итоге толку никакова.
в вашем варианте (если там одно окно) - EnumWIndows( GetWindowThreadProcessId() ) вуаля, как и говориле выше.. Но стоит подумать над тем как по другому его определять (что это чит_софт) 500mhz, я так и не понял что это вы имели ввиду, но я когда пост свой писал - указал вам что TopLevelWindow это не метод поиска окна... |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
ASMatic, у меня реализован перебор всех процессов для подсчета их хеш-суммы, и на основании этого прибивать процессы. но нужно еще и по заголовку отлавливать.
Добавлено через 1 минуту и 49 секунд клиентская часть игрушки, с сервера получает инфу о известных читах. ну а админ добавляет в БД хеши и заголовки окон. |
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Вот немного переписал.
Внятная функция, практически доделывать вам придётся не много. *.h
*.cpp
Попробуйте. |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
volatile, спасибо большое
|
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
неправильно выразился. хеш-сумма исполняемого файла. |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
так и думал, но вот както не пойму как вы можете хешик подсчитать ЦЕЛОГО модуля, когда в нём как минимум есть секция данных (скорей всего), в которой все меняется постоянно... Ага, вы подсчитываете с диска модуль, все ясн теперь..
пс, если не секрет - какую гаму протить будете? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
Aion. но я не игрок. просто попросили помочь. так что вопросы по игре не задавать. я ее всего раз видел. Это сообщение отредактировал(а) boostcoder - 8.6.2011, 13:11 |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
boostcoder, сенкс.
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
как то не правильно на мой взгляд делать такую защиту, не проще ли в своем процессе сделать запрет на
1) OpenProcess (во избежание патчей) 2) фильтр месаджей (во избежании "тыканья по кнопочкам") -------------------- |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
500mhz, вот объясните мне - как это вы собрались защититься сделав запрет в своем процессе на OpenProcess??? И мессаги как это вы собрались фильтровать?
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
ASMatic
задача ТС не допустить 1) внесений изменений в код процесса 2) не допустить "виртуальных нажатий" на конопочки это мое имхо так как точное название того что он защищает мне неизвестно. соответственно по 1 пункту необходимо запретить OpenProcess,WriteProcessMemory и так далее. решаемо хуканьем данных вызовов. по пункту 2 примерно тоже самое, не принимать месаги от сторонних процессов. ничего фантастического тут нет, любой фаер или авп имеет такую защиту. -------------------- |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
это или в ядре или во всех поцессах надо делать... - с ядром туго(обычно), во всех поцессах - ток насмешить читописателей. если бы оно все так было посто, как вы говорите - сначала бы попробовале реализовать чтонебудь подобное,а потом советовали другим что им делать |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
вы о чем? какое ядро? ставлю globalhook openprocess а еще лучше на ZwOpenProcess и проверяю не меня ли хотят открыть, все работает в user mode.
с месагами то же самое. Это сообщение отредактировал(а) 500mhz - 8.6.2011, 20:12 -------------------- |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
500mhz, глобал хук на ZwOpenProcess
а с мессагами - вот покажите код который проверит от какова процесса издался WM_KEYDOWN Это сообщение отредактировал(а) ASMatic - 8.6.2011, 20:27 |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
я вас умоляю ))
вы же прекрасно поняли что я имел ввиду. -------------------- |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
когда вы по всем процессам проинжектитесь и поставите перехваты, получится то о чем я говорил немного выше - читеро_писатель улыбнется и снимит ваши перехваты..точнее я бы прсто их игнорил = не трож гуан, вонять не будет.)
в таких случаях нужно ядро и там обработка всего, но дабы грамотно все написать нужен моск и усилия, т.к. нюансов тыща - защищаться както но он на время будет, чо бы там не писали - неее есть один вариант - саму гаму написать нормально. *да я вас понял, ток "глобальный хук на опен_процесс" != "глобальный захват NtOpenProcess", да и вообщем все это временно, так что изначально окно_неймы, потом хуки, потом перехваты..а там и ядро подтянулось, а толку только временного и финансового |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
с таким же успехом читерописатель подумает и скажет, да <на...
Это сообщение отредактировал(а) GremlinProg - 9.6.2011, 11:34 -------------------- |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
500mhz, ASMatic, господа, не ссорьтесь.
я не силен в системном программировании под win32, посему я хуками заниматься не стану. но за идею спасибо |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |