Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анализ работы другого приложения 
:(
    Опции темы
dronte
Дата 28.5.2014, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
может еще что-то, сейчас не вспомнил, в институте по проге всегда получал зачеты в начале семестра, и курс уже закончился, ну в общем я как-то последнее время не прикасался с напильником к ЭВМ, так сказать smile , тут еще распределение было ну и я ни в коем случае не хотел попасть на программистское направление, хотя и семинарист, и лектор хотели меня там видеть но от проги как от профессии меня воротит за три километра, неделю сутками посидеть за прогой можно, пару недель если тебе самому интересно тоже, максимум вытерпеть месяц постоянного придумывания всяких алгоритмов и их осуществления, потом у меня начинается просто жесточайший батхерт на эту тему, в прочем это все оффтоп  smile 

Ну и наконец цели от написания данного поста:
1) узнать какими конкретными средствами программирования под виндой можно добиться данных результатов (какие средства каких библиотек/API)
2) узнать результаты других людей, у которых возникали подобные задачи и их решения.
3) ну вообще куда мне тыкаться, что делать.


Это сообщение отредактировал(а) dronte - 29.5.2014, 10:16
PM MAIL   Вверх
GremlinProg
Дата 29.5.2014, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Смахивает на читерство. Как-то не очень вяжется с Вашим нежеланием попасть на "программистское отделение". Вам кто-то сказал, что ломать легче, чем строить или Вы до этого сами дошли? В IT давно уже все не так, и выгодные коммерческие проекты хорошо защищают от халявщиков. Ну покопаетесь Вы пару недель, распотрошите уязвимость, так ведь со следующим обновлением все начинать по новой smile


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
dronte
Дата 29.5.2014, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.5.2014

Репутация: нет
Всего: нет



Хммм, возможно я как-то неправильно понят, уязвимости никакие мне не нужны, мне нужно написать прогу, которая бы отсылала некоторые уведомления, которые уже не имеют никакого контакта с исследуемым приложением, при происхождении этого события, только и всего.
Суть поста именно в нахождении конкретных методов _опознания_ события, только и всего.

Т.е. например, я себе просто не представляю как юзерскому приложению вылезти за пределы своего виртуального пространства памяти в чужое, без предварительной подготовки входа в целевом приложении. Тут нужны уже какие-то методы "воззваний к ядру", ну по крайней мере перевод ЦП в root режим, а это обычно позволено только ядру, ну короче думаю я описал  smile 

P.S. да, я на мехмате и шел туда ради математики, а не красноглазенья, ваш КО smile 

Это сообщение отредактировал(а) dronte - 29.5.2014, 14:35
PM MAIL   Вверх
500mhz
Дата 29.5.2014, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 3
Всего: 14



ЦП в root режим - это круто )))

ТС по моему тебе рановато за это браться. Что под винду что под линукс.
А так погугли
- IDA PRO + HEX RAY
- WINDBG
- process injection


--------------------

PM MAIL ICQ   Вверх
dronte
Дата 29.5.2014, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.5.2014

Репутация: нет
Всего: нет



1) не знаю, что тебе не понравилось в "root режиме ЦП", ну пусть будет "режим супервизора ЦП", имхо неважно как назвать, суть одна и вроде понятно.
см. Wiki

2) про иду слышал, но пока еще не пробовал, да и если честно, то я шарю только в заголовках в формате elf, в прочем что там шарить, они же мелкие 56 в 32-битной и 64 в 64-битной системе
в прочем уже забыл о ней, это спасибо smile )
а вот в винде как начал читать мануал по заголовку бинарника, то пока понял только то, что там заглушка на заглушке и заглушкой погоняет, в прочем, если это надо будет знать для реализации этого, то изучу.

что ты имел в виду под process injection, до запуска? ну да можно вставить маяки, которые будут сигналы подавать о том, что пройден этот участок, но сначала лучше попробовать без этого smile 
а если во время запуска, то это интересно, что ты имел ввиду?

UPDATE: Стоп, блин спасибо, а это уже первая идея, раньше она мне не пришла почему-то в голову smile , надо будет только разобраться как работают в винде шимы (да,да, будем говорить культурно, "разделяемая память" smile ), тогда можно будет заинъектить такой код в "исследуемый" бинарник, вот только для этого надо значит всеже разобраться в формате заголовка .... да и на асме написать этот участок будет жестоко, но это уже первая идея, за это спасибо smile 

Это сообщение отредактировал(а) dronte - 29.5.2014, 18:46
PM MAIL   Вверх
vol4ek
Дата 29.5.2014, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



Цитата(dronte @  28.5.2014,  20:02 Найти цитируемый пост)
графическое уведомление об этом событии в том окне появляется всегда в одном и том же месте

здесь подробнее если можно

PM MAIL ICQ   Вверх
dronte
Дата 30.5.2014, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.5.2014

Репутация: нет
Всего: нет



хмм ... ну т.е. всегда посередине относительно горизонтали и пикселей 200 от верхней границы вниз, размер самого уведомления квадратный и тоже постоянный, растровый, если научиться делать эти самые скрины изображения окна (желательно и тогда, когда оно в свернутом состоянии), то найти конкретные координаты того, какую область проверять будет уже не сложно, хоть просто в gimp'e

Это сообщение отредактировал(а) dronte - 30.5.2014, 08:44
PM MAIL   Вверх
xvr
Дата 30.5.2014, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(dronte @  29.5.2014,  18:38 Найти цитируемый пост)
тогда можно будет заинъектить такой код в "исследуемый" бинарник,

Посмотрите на Detours, там это все уже сделанно

PM MAIL   Вверх
vol4ek
Дата 30.5.2014, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



как-то довелось мне делать автокликер для одной ранее популярной онлайн игры. вмешиваться в работу клиента было нельзя. на окне была красная полоска "уровня жизни", так вот я выбрал самый прьстой вариант:
ищем нужное окно FindWindow(), проверяем, свернуто ли оно IsIconic(), потом получаем DC клиентской области GetDC(), а затем цвет пикселя (начало красной полоски) GetPixel(). в цикле проверялась ее длинна и если длинна была меньше заданного значения, производилась иммитация нажатия клавиши клавиатуры.

PM MAIL ICQ   Вверх
vol4ek
Дата 30.5.2014, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



так вот,было замечено, что GetPixel() на зазных машинах возвращал разное значение. тоесть цвет и там и там был красный. от чего это зависит настроек, видиокарты или драйвера я разбираться не стал. сначала запускался клиент игры, затем не сворачивая окна клиента запускалась моя программа, получал цвет пикселя по заданным координатам и затем запускался поток который проверял количество красных пикселей по горизонтали.
класс окна для функции FindWindow() можно посмотреть в Spy++ который входит в VS или задать его как NULL. также желательно сделать скрин приложения клиента и посмотреть его скажем в Paint'е. там выводятся координаты пикселей. делать скрин и сравнивать с образцом будет долго и ресурсоемко. простите за неформатированный текст, пишу с телефона.
PM MAIL ICQ   Вверх
xvr
Дата 30.5.2014, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(vol4ek @  30.5.2014,  13:26 Найти цитируемый пост)
ищем нужное окно FindWindow(), проверяем, свернуто ли оно IsIconic(), потом получаем DC клиентской области GetDC(), а затем цвет пикселя (начало красной полоски) GetPixel().

Для DirectX это не сработает  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.