![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| dronte |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 28.5.2014 Репутация: нет Всего: нет |
хммм ... Всем здрасть!
Итак, у меня есть непонимание как подобраться к данной поставленной мною самим самому себе задачи, практическое решение которой иными методами увы не решается. Что дано: Некоторое графическое приложение на DirectX, код которого посмотреть иначе как в ассемблерном виде нет возможности, но и то делать не стоит имхо, короче обусловимся, что это некий бинарник XXX. Общая постановка задачи: Нужно реагировать на некоторое (бинарное) событие в этом приложении, возможные варианты его опознания: 1) графическое уведомление об этом событии в том окне появляется всегда в одном и том же месте, соответственно по таймауту брать скрин окна и на нем проверять этот участок полученного изображения на совпадение с зарание сохраненными матрицами, сравнить два изображения по маске, которые уже есть в конкретных двух массивах, довольно просто, вопрос тут как получить, это изображение в массив. 2) как-то сниффать его на изменения в оперативной памяти приложения, но ничего больше, чем это слово "снифать" и то, что теоретически есть такая прога как Shark, я по данному пункту не знаю. 3) сниффать TCP/IP стек, опять же все чисто теоретически, но возможно, ибо извещение об этом событии поступает из сети. Собственно навыки и умения ТС: Скажу сразу, моя среда обитания linux, поэтому под "винду" никогда ничего не писал особо сложного. А в остальном, что имеется, пожалуй сначала что-то более общее, потом более узкое: 1) очень основательное знание C и C++ (ну понятно, что в исполнении gcc и g++ соответсвенно) 2) просто хорошее знание ASM (транслятор NASM) 3) когда-то для графики использовал QT 4.8, внутренне себя оцениваю по ней на 3++ из 5, если учитывать ее целиком. 4) ну что ... всякие линуксовые прибамбасы для общения и с ними связанные фитчи пайпы/сообщения/сокеты(и UNIX, и NET)/шимы/мютексы/семафоры/условные переменные/ну и конечно потоки в общем большую часть из того, что напихано в библиотеку pthread.h может еще что-то, сейчас не вспомнил, в институте по проге всегда получал зачеты в начале семестра, и курс уже закончился, ну в общем я как-то последнее время не прикасался с напильником к ЭВМ, так сказать Ну и наконец цели от написания данного поста: 1) узнать какими конкретными средствами программирования под виндой можно добиться данных результатов (какие средства каких библиотек/API) 2) узнать результаты других людей, у которых возникали подобные задачи и их решения. 3) ну вообще куда мне тыкаться, что делать. Это сообщение отредактировал(а) dronte - 29.5.2014, 10:16 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Смахивает на читерство. Как-то не очень вяжется с Вашим нежеланием попасть на "программистское отделение". Вам кто-то сказал, что ломать легче, чем строить или Вы до этого сами дошли? В IT давно уже все не так, и выгодные коммерческие проекты хорошо защищают от халявщиков. Ну покопаетесь Вы пару недель, распотрошите уязвимость, так ведь со следующим обновлением все начинать по новой
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| dronte |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 28.5.2014 Репутация: нет Всего: нет |
Хммм, возможно я как-то неправильно понят, уязвимости никакие мне не нужны, мне нужно написать прогу, которая бы отсылала некоторые уведомления, которые уже не имеют никакого контакта с исследуемым приложением, при происхождении этого события, только и всего.
Суть поста именно в нахождении конкретных методов _опознания_ события, только и всего. Т.е. например, я себе просто не представляю как юзерскому приложению вылезти за пределы своего виртуального пространства памяти в чужое, без предварительной подготовки входа в целевом приложении. Тут нужны уже какие-то методы "воззваний к ядру", ну по крайней мере перевод ЦП в root режим, а это обычно позволено только ядру, ну короче думаю я описал P.S. да, я на мехмате и шел туда ради математики, а не красноглазенья, ваш КО Это сообщение отредактировал(а) dronte - 29.5.2014, 14:35 |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
ЦП в root режим - это круто )))
ТС по моему тебе рановато за это браться. Что под винду что под линукс. А так погугли - IDA PRO + HEX RAY - WINDBG - process injection -------------------- |
|||
|
||||
| dronte |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 28.5.2014 Репутация: нет Всего: нет |
1) не знаю, что тебе не понравилось в "root режиме ЦП", ну пусть будет "режим супервизора ЦП", имхо неважно как назвать, суть одна и вроде понятно.
см. Wiki 2) про иду слышал, но пока еще не пробовал, да и если честно, то я шарю только в заголовках в формате elf, в прочем что там шарить, они же мелкие 56 в 32-битной и 64 в 64-битной системе в прочем уже забыл о ней, это спасибо а вот в винде как начал читать мануал по заголовку бинарника, то пока понял только то, что там заглушка на заглушке и заглушкой погоняет, в прочем, если это надо будет знать для реализации этого, то изучу. что ты имел в виду под process injection, до запуска? ну да можно вставить маяки, которые будут сигналы подавать о том, что пройден этот участок, но сначала лучше попробовать без этого а если во время запуска, то это интересно, что ты имел ввиду? UPDATE: Стоп, блин спасибо, а это уже первая идея, раньше она мне не пришла почему-то в голову Это сообщение отредактировал(а) dronte - 29.5.2014, 18:46 |
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
||||
|
||||
| dronte |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 28.5.2014 Репутация: нет Всего: нет |
хмм ... ну т.е. всегда посередине относительно горизонтали и пикселей 200 от верхней границы вниз, размер самого уведомления квадратный и тоже постоянный, растровый, если научиться делать эти самые скрины изображения окна (желательно и тогда, когда оно в свернутом состоянии), то найти конкретные координаты того, какую область проверять будет уже не сложно, хоть просто в gimp'e
Это сообщение отредактировал(а) dronte - 30.5.2014, 08:44 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
как-то довелось мне делать автокликер для одной ранее популярной онлайн игры. вмешиваться в работу клиента было нельзя. на окне была красная полоска "уровня жизни", так вот я выбрал самый прьстой вариант:
ищем нужное окно FindWindow(), проверяем, свернуто ли оно IsIconic(), потом получаем DC клиентской области GetDC(), а затем цвет пикселя (начало красной полоски) GetPixel(). в цикле проверялась ее длинна и если длинна была меньше заданного значения, производилась иммитация нажатия клавиши клавиатуры. |
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
так вот,было замечено, что GetPixel() на зазных машинах возвращал разное значение. тоесть цвет и там и там был красный. от чего это зависит настроек, видиокарты или драйвера я разбираться не стал. сначала запускался клиент игры, затем не сворачивая окна клиента запускалась моя программа, получал цвет пикселя по заданным координатам и затем запускался поток который проверял количество красных пикселей по горизонтали.
класс окна для функции FindWindow() можно посмотреть в Spy++ который входит в VS или задать его как NULL. также желательно сделать скрин приложения клиента и посмотреть его скажем в Paint'е. там выводятся координаты пикселей. делать скрин и сравнивать с образцом будет долго и ресурсоемко. простите за неформатированный текст, пишу с телефона. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
![]()
|
| Правила форума "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. |