Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

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

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

1643529243141.png
 
раз уж тут меня упомянули, то дам совет по поводу детекта заморозки процесса/потока, допустим, что есть точка кода А и точка кода Б, это как кольцевая трасса (выполняется в цикле), ты знаешь, что при любом расскладе круг она сделает скажем, не больше чем за 2-3 секунды ( как пример простой реквест на сервер ), отсчитывать время можно по разным функциям, просто условный GetTickCount хукается сциллой, я вот юзал std::time для отмера времени. Можно использовать структуры и т.д., но лучше будет если ты самостоятельно напишешь функу для отмера времени и унесёшь её под виртуализацию
 
раз уж тут меня упомянули, то дам совет по поводу детекта заморозки процесса/потока, допустим, что есть точка кода А и точка кода Б, это как кольцевая трасса (выполняется в цикле), ты знаешь, что при любом расскладе круг она сделает скажем, не больше чем за 2-3 секунды ( как пример простой реквест на сервер ), отсчитывать время можно по разным функциям, просто условный GetTickCount хукается сциллой, я вот юзал std::time для отмера времени. Можно использовать структуры и т.д., но лучше будет если ты самостоятельно напишешь функу для отмера времени и унесёшь её под виртуализацию
Я видел простую хитрость для проверки заморозки потока, можно замораживать поток из своей программы и если он замораживается, то поток еще живой и следственно потом его разморозить, не знаю насколько это эффективно, хочу узнать твое мнение по этому поводу.
 
если он замораживается, то поток еще живой
Каво
Я видел простую хитрость для проверки заморозки потока, можно замораживать поток из своей программы и если он замораживается, то поток еще живой и следственно потом его разморозить, не знаю насколько это эффективно, хочу узнать твое мнение по этому поводу.
Немного вставлю свои "5 копеек":
Ты заморозил поток - поток заморожен.
Для защиты потока так называемого "watchdog-a" (ну наш таймер, который проверят на фриз процесса), достаточно реализовать общение между ним и основным потоком программы. После такого трюка ты не сможешь просто взять и заморозить поток таймера.
Перестало идти общение между основным потоком и вотчдогом - значит поток вотчдога каким-то магическим образом был приостановлен, а так как этого в чистом виде быть не может (если в потоке не напихан говнокод бтв) - значит кто-то специально его стопанул - значит юзер полез не туда и его можно пробанить например
 
Я видел простую хитрость для проверки заморозки потока, можно замораживать поток из своей программы и если он замораживается, то поток еще живой и следственно потом его разморозить, не знаю насколько это эффективно, хочу узнать твое мнение по этому поводу.
я так понял ты имеешь в виду этот трюк
Пожалуйста, авторизуйтесь для просмотра ссылки.

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

Ты заморозил поток - поток заморожен.
это немного не так работает, если твой поток был создан с флагом 0x40
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как вариант хукать NtSuspendProcess и не давать выполняться функции или отдельный модуль dll инжекчем (MMAP )в другой системный процесс
 
Если тебе нужно просто проверить есть ли заморозка, то вызывай ResumeThread на каждый поток в своём приложении. Если результат вызова будет отличаться от 0, то поток был заморожен. Ну а если поток замораживали и размораживали, то только проверкой времени исполнения кода.
 
Назад
Сверху Снизу