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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Prevent SuspendThread() & TerminateThread(), Prevent SuspendThread() & TerminateThrea 
V
    Опции темы
ApolloKiD
Дата 9.9.2011, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток, возникла проблема, я пишу Анти-Чит для онлайн игры, анти-чит работает нормально, но есть уязвимость, можно заморозить поток - SuspendThread или убить его TerminateThread и тогда тред с лупом анти-чита, работать не будет, и читеры смогут играть свободно с читами.
Вот и вопрос: как можно сделать так, чтобы не смогли замораживать или убивать поток?
Если можно приведите примеры.
Спасибо заранее.
PM MAIL   Вверх
Dem_max
Дата 10.9.2011, 05:04 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Хукать SuspendThread и TerminateThread т.е. подменять на свои процедуры. В этих процедурах проверять идет обращение к твоему процесу ???? да - то ничего не делать иначе вызвать настоящие SuspendThread и TerminateThread.


Мне кажется твой процесс проще грохнуть.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
ApolloKiD
Дата 10.9.2011, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



если грохнуть процесс - закроется игра, а пример с хуком можно?
PM MAIL   Вверх
Dem_max
Дата 10.9.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



http://www.rsdn.ru/article/qna/baseserv/hookapi.xml
http://habrahabr.ru/blogs/cpp/90377/

Это сообщение отредактировал(а) Dem_max - 10.9.2011, 14:07


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
ApolloKiD
Дата 11.9.2011, 10:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я читал что надо не хукать, а ставить параметры безопасности при создании потока, с помощью первого параметра LPSECURITY_ATTRIBUTES lpThreadAttributes.
если можно, покажите кто-то пример созданого потока с параметрами безопасности.

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


Эксперт
****


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

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



Цитата(ApolloKiD @  11.9.2011,  10:46 Найти цитируемый пост)
если можно, покажите кто-то пример созданого потока с параметрами безопасности.

Вам надо создать Security Descriptor с запретом для всех (само создание SD абсолютно не зависит от того, где вы собираетесь его применять).
Вот пример создания SD (надеюсь вы сможете адаптировать его под свой случай)

PM MAIL   Вверх
ApolloKiD
Дата 11.9.2011, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прошу прощения, я в C++ не очень разбераюсь, но когда я создаю поток
Код

hThread = CreateThread(&sa,NULL,LPTHREAD_START_ROUTINE(AntiHack),NULL,0,0);

Поток не запускается не знаю почему.

надо просто сделать чтобы не смогли заморозить поток или убить его.

Если вам не трудно и есть пару минут, можете показать что и как, пожалуйста.


Это сообщение отредактировал(а) ApolloKiD - 11.9.2011, 23:29
PM MAIL   Вверх
Earnest
Дата 12.9.2011, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Более эффективно не сопротивляться явно закрытию проверяющего потока, а запустить второй (третий... десятый...) которые будут просто проверять, что проверка работает. А если нет - запускать снова. Ну или карательное что-нибудь, по желанию. Такая тактика обычно эффективнее, чем прямое противодействие, а код, который непосредственно не оказывает влияния на защищаемые сущности, обнаружить сложнее. Проверять, что проверка работает тоже лучше не прямо, а по каким-нибудь косвенным признакам...
Есть еще механизм тайм-бомб. Коротко, суть в том, что запускается таймер, который потихоньку сбрасывает некую переменную. Когда переменная дойдет до 0, делаешь что-то нехорошее (для пользователя). Например убиваешь процесс с разрушением стека. А поток проверки эту нехорошую переменную восстанавливает, кроме прочего. Т.е. работает проверка - все хорошо, перестает - все рушится, но не сразу, а через какое-то время, причем связь эту обнаружить непросто.


--------------------
...
PM   Вверх
ApolloKiD
Дата 12.9.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



WaitForSingleObject(hEvent,1);
ResumeThread(hThread);
От Suspend спасает, а от TerminateThread нет, я незнаю как сделать проверку, если Поток убит, чтобы его запустили снова.
PM MAIL   Вверх
volatile
Дата 12.9.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(ApolloKiD @  12.9.2011,  11:18 Найти цитируемый пост)
как сделать проверку, если Поток убит,

WaitForSingleObject (hThread, ...);

PM MAIL   Вверх
ApolloKiD
Дата 12.9.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(volatile @ 12.9.2011,  11:48)
WaitForSingleObject (hThread, ...);

спасибо, проблему практически решил, но для полной безопасности надо ещё аттрибуты безопасности =/

и ещё 1 проблемка, каждый поток кушает по 20 ЦП - в итоге у меня запущенно 3 потока + игра кушает 50 цп, нельзя както снизить нагрузку со стороны потоков?


Код

void proverka2()
{
    if(WaitForSingleObject(hThread,0) == FALSE)
    {
        ExitProcess(0);
    }
}

Код

void Proverka()
{
again:
    WaitForSingleObject(hEvent,1000);
    ResumeThread(hThread);
    proverka2();
    goto again;
}


Это сообщение отредактировал(а) ApolloKiD - 12.9.2011, 12:55
PM MAIL   Вверх
xvr
Дата 12.9.2011, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ApolloKiD @  12.9.2011,  12:36 Найти цитируемый пост)
    if(WaitForSingleObject(hThread,0) == FALSE)

Поставьте не 0, а что нибудь побольше. Этот цикл (я надеюсь, что это цикл) жрет все 100% CPU

PM MAIL   Вверх
ApolloKiD
Дата 12.9.2011, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо всем за помощь =)
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.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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