C++ Вопрос Защита от замораживания

Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
Забаненный
Статус
Оффлайн
Регистрация
22 Апр 2020
Сообщения
731
Реакции[?]
752
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Можешь почитать тему от colby57 (https://yougame.biz/threads/238361/)
Вполне можно заюзать для того что ты хочешь. Правда GetTickCount64 в идеале заменить )

1643529243141.png
 
Разработчик
Статус
Оффлайн
Регистрация
18 Мар 2020
Сообщения
442
Реакции[?]
872
Поинты[?]
197K
раз уж тут меня упомянули, то дам совет по поводу детекта заморозки процесса/потока, допустим, что есть точка кода А и точка кода Б, это как кольцевая трасса (выполняется в цикле), ты знаешь, что при любом расскладе круг она сделает скажем, не больше чем за 2-3 секунды ( как пример простой реквест на сервер ), отсчитывать время можно по разным функциям, просто условный GetTickCount хукается сциллой, я вот юзал std::time для отмера времени. Можно использовать структуры и т.д., но лучше будет если ты самостоятельно напишешь функу для отмера времени и унесёшь её под виртуализацию
 
Олдфаг
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
2,996
Реакции[?]
1,275
Поинты[?]
5K
раз уж тут меня упомянули, то дам совет по поводу детекта заморозки процесса/потока, допустим, что есть точка кода А и точка кода Б, это как кольцевая трасса (выполняется в цикле), ты знаешь, что при любом расскладе круг она сделает скажем, не больше чем за 2-3 секунды ( как пример простой реквест на сервер ), отсчитывать время можно по разным функциям, просто условный GetTickCount хукается сциллой, я вот юзал std::time для отмера времени. Можно использовать структуры и т.д., но лучше будет если ты самостоятельно напишешь функу для отмера времени и унесёшь её под виртуализацию
Я видел простую хитрость для проверки заморозки потока, можно замораживать поток из своей программы и если он замораживается, то поток еще живой и следственно потом его разморозить, не знаю насколько это эффективно, хочу узнать твое мнение по этому поводу.
 
Эксперт
Статус
Оффлайн
Регистрация
16 Ноя 2017
Сообщения
1,570
Реакции[?]
1,266
Поинты[?]
4K
если он замораживается, то поток еще живой
Каво
Я видел простую хитрость для проверки заморозки потока, можно замораживать поток из своей программы и если он замораживается, то поток еще живой и следственно потом его разморозить, не знаю насколько это эффективно, хочу узнать твое мнение по этому поводу.
Немного вставлю свои "5 копеек":
Ты заморозил поток - поток заморожен.
Для защиты потока так называемого "watchdog-a" (ну наш таймер, который проверят на фриз процесса), достаточно реализовать общение между ним и основным потоком программы. После такого трюка ты не сможешь просто взять и заморозить поток таймера.
Перестало идти общение между основным потоком и вотчдогом - значит поток вотчдога каким-то магическим образом был приостановлен, а так как этого в чистом виде быть не может (если в потоке не напихан говнокод бтв) - значит кто-то специально его стопанул - значит юзер полез не туда и его можно пробанить например
 
Разработчик
Статус
Оффлайн
Регистрация
18 Мар 2020
Сообщения
442
Реакции[?]
872
Поинты[?]
197K
Я видел простую хитрость для проверки заморозки потока, можно замораживать поток из своей программы и если он замораживается, то поток еще живой и следственно потом его разморозить, не знаю насколько это эффективно, хочу узнать твое мнение по этому поводу.
я так понял ты имеешь в виду этот трюк
Пожалуйста, авторизуйтесь для просмотра ссылки.

я никогда не встречал на практике такой трюк, но в теории могу сказать, что если он также по простому вызывается как и на примере, то можно хукать или NtSuspendThread** проверяя на 0xFFFFFFFE*, или же хукать NtCreateThreadEx и проверять флаги создания потока

Ты заморозил поток - поток заморожен.
это немного не так работает, если твой поток был создан с флагом 0x40
 
Последнее редактирование:
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как вариант хукать NtSuspendProcess и не давать выполняться функции или отдельный модуль dll инжекчем (MMAP )в другой системный процесс
 
StalCraft PWNER
Начинающий
Статус
Оффлайн
Регистрация
28 Дек 2021
Сообщения
8
Реакции[?]
6
Поинты[?]
0
Если тебе нужно просто проверить есть ли заморозка, то вызывай ResumeThread на каждый поток в своём приложении. Если результат вызова будет отличаться от 0, то поток был заморожен. Ну а если поток замораживали и размораживали, то только проверкой времени исполнения кода.
 
Сверху Снизу