Всем добрый вечер. Сегодня я хочу написать об античитах. На данный момент я не спеша пишу мод для проекта и озадачился написанием античита. Вэтой статье .. хотя нет.. пожалуй статьёй это назвать сложно.. дисскуссия пойдет о том, как же написать античит на тот или иной чит? У меня есть пару размышлений, которыми я хотел бы с вами поделиться. Я конечно могу быть и не прав, я не скачивал никаких античитов и не смотрел по какому принципу все они работают, поэтому то, что я напишу ниже, может оказаться устаревшими и ненадежными методами защиты, которые ни на что не годятся, и в существующих античитах может быть более лучшие методы, о которых я не знаю, но очень хотел бы узнать. Буду раз любой адекватной не сильно агрессивной критике по поводу моих идей и любым дополнениям и корректировкам. Все таки мы стараемся для самих себя)
Итак, начнем. 1. Античит на деньги. Я думаю самый лучший античит на деньги, это не выводить их командой GivePlayerMoney (или как-то так.. даже сам забыл за ненадобностью), а оставить в серверной переменной. Таким образом, все операции с деньгами будут проводиться исключительно внутри кода сервера и с этим ничего нельзя будет поделать, потому что надеюсь читов, оперирующих с пакетами для сампа в отличие от л2 не сделали...
2. Античит на оружее Итак, нам надо запретить появление у игрока какого-либо оружия любым способом, не придусмотренным игровым модом. Допустим на сервере у игрока может появиться оружие только если он купит его у другого игрока, если он достанет его из багажника автомобиля или сейфа дома. Тогда при всех этих операциях мы например переменную LegalTakeWeapon[playerid] изначально равную нулю, меняем на единицу на 1.5 секунды, после чего она опять становится равной нулю. И создаем таймер ежесекундный, который сравнивает весь набор оружий игрока с прошлой проверки (секунду назад). Таким образов если у игрока появилась какая то пушка, переменная LegalTakeWeapon даст нам знать, легально ли оно появилось, если же переменная равна 0, то тут делайте с жуликом что хотите. Поскольку переменная равна единице на провежутке полторы сек. в отличие от таймера, думаю проблем не будет с пересечением этих двух событий... 3. Античит на патроны Думаю тут принцип тот же самый почти, но посложнее. Античит на патроны должен состоять из 2 частей: первая проверяет их на то, чтобы они заканчивались во время стрельбы, а второй - чтобы они не появились из ниоткуда при стрельбе и просто. С первым все легко - если человек стреляет (как определить? ну думаю проверка на наличие оружия в руках и нажатия кнопки action_fire или как то так) то мы просто берем промежуток в секунду и сравниваем значение патрон соответственно того оружия, из которого стреляют, если значения не изменяются = бан. Что касается появления патрон из неоткуда - все тоже самое, что и с оружием, а чтобы в этом случае уменьшение патрон во время стрельбы не определялось как чит, надо сделать например условие, чтобы не банило, если патрон изменилось за секунду менее чем на.. скажем 10 - думаю за 1 секунду больше 10 патрон расстрелять невозможно.. тогда другая проблема - можно будет во время стрельбы читерить себе потихой по 10 патрон.. но думаю пока человек догадается что именно так можно читерить патроны, он уже получит бан ... да и по 10 патрон читерить долго и нудно...
4. Античит на спидхак и телепорт Ну тут все легко.. Определяем тип транспорта, в котором находится игрок, если машина - максимальная скорость пусть будет 250, если самолет - пусть будет 400 (хз скока гидра летит например). Проверка на скорость - если больше то бан. Если человек не на машине, то тут я не уверен можно ли определить скорость его бега как в случае с машиной поэтому я бы сделал так: сверяем его местоположение через секунду и если больше ну скажем 15 метров, то это чит. ТОгда вы спросите что делать со входом в дом и бизнес - там человек мгновенно перемещается в пространстве хз куда... можно сделать проверку на интерьер.. если за эту секунду интерьер изменился, то не баним, если не изменился - баним. Ну думаю это подойдет так же как и защита от телепорта.
5. Защита от флайхака Честно говоря, по поводу этого у меня идей нет, только если можно было бы как то измерить расстояние игрока до земли. Если оно скажем больше 10 метров и игрок не на летающем транспорте то его можно смело банить, но тут проблема с падением например со скалы или трамплинами всякими могут возникать конфликты... вобщем идей нет...
6. Защита от бессмертия
Недавно на каком-то форуме (может и на этом даже) наткнулся на такую тему, и так сказали что /explosion самая лучшая проверка на ГодМод.. но она вредна для окружающих игроков и у ней еще один минус - автоматизировать её не получится... по этому поводу идей у меня тоже нет.
7. Защита от починки авто
Делаем таймер ежесекундный, допустим хп машины изменилось вверх, проверяем принимал ли игрок услуги механиков ( думаю как это проверить - не надо разъянять) или не чинился ли он в обычном paint'n'spray - (проверка по положению) если нет - то возращаем старое значение хп машине, ну или можно забанить игрока, чтобы не замышлял чего еще...
8. Защита от тюнинга авто единственное не знаю улавливает ли паблик OnVehicleMod тюнинг читом, поэтому лучше перестраховаться и в тот же самый наш любимый таймер добавить проверку на изменение компонент авто, если чето добавилось, то проверяем положение игрока в тюн боксе и изменение его денег - если ушли в минус на значение цены поставленной части то норм.(можно так не заморачиваться, а просто проверить на убыль средств, не важно на сколько)
Заключение Ну вроде самые распространенные виды хакерства я разобрал (хотя мог упустить что-то даже очень очевидное хехе) и написал принципы, которые по моему не очень опытному мнению можно использовать для защиты. Расписал думаю все понятно и человек, который знаком немного с принципами программирования, поймет сразу как что делать. Еще раз скажу, что эти методы могут быть далеко не новыми и даже устаревшими и ненадежными, так как я писал чисто то, что мне пришло в голову, не смотря в код не к одному античиту, поэтому если у кого-то возникнут претензии, идеи и предложения по тому,как можно лучше сделать ту или иную защиту, я и думаю не только я буду рад увидеть здесь эти идеи и предложения... спасибо за внимание, сильно не кричите))
Еще хотелось бы узнать мнение опытных людей по поводу такого античита как junkbuster некоторые пишут - что самый лучший из паблика среди скриптовых античитов. И да.. если уж об этом заговорили, пожалуйста не лейте в этой теме воду о том, что лучший античит - это который НЕ скриптовый, это и ежу понятно, но только как мне известно - НЕ скриптовый разрабатывает DarkByte и более менее пригодную к эксплуатации версию он еще не выкладывал...
LifeVegas: vk.com/lvgta - Покори вершины Лас-Вегаса в новом РП проекте. COMING SOON Продаю РП мод: подробнее тут Решаю задачи по техническим дисциплинам, подробнее тут
Сообщение отредактировал _BigSm0ke_ - Воскресенье, 08.07.2012, 00:58
Защита от флайхака Проверка на анимку. Защита от годмода
Запись хп в переменную, + постоянно проверять
проверка по положению тогдя можно будет читтерить в том месте
игрока в тюн боксе и изменение его денег у тюн бокса и пэинт спрэй забираются деньги с помощью GivePlayerMoney тоесть получается что у игрока деньги отбиратся не будут.
1. Античит на деньги. Я думаю самый лучший античит на деньги, это не выводить их командой GivePlayerMoney (или как-то так.. даже сам забыл за ненадобностью), а оставить в серверной переменной. Таким образом, все операции с деньгами будут проводиться исключительно внутри кода сервера и с этим ничего нельзя будет поделать, потому что надеюсь читов, оперирующих с пакетами для сампа в отличие от л2 не сделали...
Античит на деньги это самое простое, что можно сделать. Достаточно просто не считывать деньги через функцию GetPlayerMoney(playerid), а создать свою функцию, где он будет выводить значение переменной с деньгами. Ну и соответственно создать функции, в которых будет происходить запись в эту переменную.
а приведите кто-нибудь примеры хороших методов? хотябы для античита на оружее и патроны?
LifeVegas: vk.com/lvgta - Покори вершины Лас-Вегаса в новом РП проекте. COMING SOON Продаю РП мод: подробнее тут Решаю задачи по техническим дисциплинам, подробнее тут
кстати, искал везде антигодмод так нигде почти ничего и не нашел...единственное что можно отталкиваться от того, что при годмоде как и при афк не вызывается onplayertakedamage ... тогда допустим при onplayergivedamage например damage[damagedid] = 1; далее в onplayertakedamage damage[playerid]--; и гденибудь в таймере чрез секунду после onplayergivedamage проверяем если damage=0 то норм, если меньше нуля то либо афк либо год мод.... какие признаки афк есть еще чтобы исключить его отсюда? или вообще все что я написал байда?))
LifeVegas: vk.com/lvgta - Покори вершины Лас-Вегаса в новом РП проекте. COMING SOON Продаю РП мод: подробнее тут Решаю задачи по техническим дисциплинам, подробнее тут
Античит на деньги это самое простое, что можно сделать. Достаточно просто не считывать деньги через функцию GetPlayerMoney(playerid), а создать свою функцию, где он будет выводить значение переменной с деньгами. Ну и соответственно создать функции, в которых будет происходить запись в эту переменную.
а и АнтиГодМод через взрыв тоже не всегда поможет, я узнал, что в собейте есть функция игнора createExplosion... какие у кого еще есть идеи АнтиГМ ? где то читал что при входе в игру с собейтом или активируется анимка CJ_RUN (или как то так) и по ней можно определить, но это тоже можно в настройках собейта отключить.... кароче даже идей ...неужели никого не интересует АнтиГМ?
LifeVegas: vk.com/lvgta - Покори вершины Лас-Вегаса в новом РП проекте. COMING SOON Продаю РП мод: подробнее тут Решаю задачи по техническим дисциплинам, подробнее тут
при получении урона .. это если OnPlayerTakeDamage, то опять же он не вызывается когда включен годмод... в связи с этим что ты думаешь по поводу поста №9?
LifeVegas: vk.com/lvgta - Покори вершины Лас-Вегаса в новом РП проекте. COMING SOON Продаю РП мод: подробнее тут Решаю задачи по техническим дисциплинам, подробнее тут