Вот накатал скрипт для бана читеров. Используем грейлинк, для того, чтобы банить читеров
Название скрипта: cheats-detector Версия: 1.1 Автор: Setuper Описание: Ловит несоответствия в размере шары. В действиях можно указать бан пользователя. Команды: /checkshare nick - проверка пользовтеля с указанным ником /checkshare - проверка всех пользователей данного хаба /luafile startup.lua - команда запуска скрипта /lua dcpp = nil - команда остановки скрипта
Для работы скрипта в папке lua должны находиться библиотеки lua32.dll и dcutil32.dll (или соответствующие 64 разрядные) Сам скрипт кидаем в папку scripts. Скрипт будет запускаться автоматически при старте клиента.
Открываем файл Settings/CustomMessages.ini и дописываем туда:
Код
/lua dcpp = nil /luafile startup.lua /checkshare
После этого можно будет не запоминать команды, а юзать меню "пользовательские сообщения".
Пока что функционал скриптов не позволяет проверять пользователей при входе на хаб, поэтому для того чтобы проверить пользователя(ей) приходится вводит команды вручную.
local sMsg1 = [[Юзер [NI] с IP: [I4] не балуется читами Тэг: [TAG] Размер файл-листа: [SIZE] байт Шара: [SS] байт ]]
и
Код
function dcpp.OnDownloadFinished(sFile, uid) local iSize, tUser, tList = 0, tAPI:GetUserInfo(uid), dcutil.loadlist(sFile..".xml.bz2") for _, v in pairs(tList) do iSize = iSize + v.size end if iSize < tonumber(tUser.SS) then tAPI:new():SimPublicMessage(tUser.HL, tAPI:ToUtf8(("<%s> "):format(sBot)..SetParams(tUser, sMsg):gsub("%[SIZE%]", iSize))) if sAction then tAPI:new():SendPublicMessage(tUser.HL, tAPI:ToUtf8(SetParams(tUser, sAction))) end else tAPI:new():SimPublicMessage(tUser.HL, tAPI:ToUtf8(("<%s> "):format(sBot)..SetParams(tUser, sMsg1):gsub("%[SIZE%]", iSize))) end end
и проверил, вот что получилось
Цитата
[2009-05-25 20:14] :?? <LUABOT> Проверяю файл-лист пользователя: ustas [2009-05-25 20:17] :?? <LUABOT> Юзер ustas с IP: 127.0.0.1 не балуется читами Тэг: <UstasDC++ V:1.0,M:A,H:0/0/2,S:3,L:5128> Размер файл-листа: 917406161892 байт Шара: 912392882203 байт
размеры разные. Читы отключены проверяет 3 минуты - это нормально? (100 мбит) p.s. 3 минуты из-за большой шары, для шары 50 Мб почти мгновенно баг - после того, как запустил проверку юзера, когда пытаюсь скачать файллист другого юзера, тоже выполняется его проверка
Автор: Delion 25.5.2009, 19:35
Цитата
Ловит несоответствия в размере шары
Непонятно. Что в точности он делает? И будет ли работать в других клиентах с поддержкой LUA?
Автор: Setuper 25.5.2009, 19:47
Размеры разные допускаются. Это происходит из-за того, что при хешировании некоторые файлы (не фильмы) немного сжимаются, поэтому подсчитывая размер всех действительных файлов и размер хешированых файлов, получаем, что последний размер меньше, поэтому условие обнаружения чита - это условие, когда размер файл-листа мельне размера шары.
Можно использовать небольшие читы и детектор не сработает. Он будет срабатывать только при явном завышении шары, при завышении примерно на 3%.
ustas: Насчёт твоей дописки, не вижу в ней смысла. Это только будет не по детски грузить клиент (как раз минуты 3). Нужно выводить сообщение только если найден чит!
Кстати говоря, в сообщении sMsg можно использовать следующие тэги:
Код
[NI] -- ник [I4] -- ip [DE] -- описание [EM] -- email [SS] -- точная шара [SSshort] -- форматированния шара [TAG] -- тэг [TA] -- тэг [VE] -- версия клиента [US] -- тип соединения [CO] -- тип соединения [HN] -- hubs unreg [HR] -- hubs reg [HO] -- hubs op [SL] -- слоты [ST] -- магический байт [AW] -- режим away (== "1" иначе nil) [LOC] -- местоположение [OP] -- статус оператора (== "1" иначе nil) [HL] -- хаб [ME] -- я (== "1" иначе nil) [RG] -- зарегистрирован на данном хабе
В других клиентах с поддержкой lua совершенно другие функции api, поэтому работать не будет однозначно. Сомневаюсь, что другие клиенты с поддержкой lua настолько же богаты api функциями.
Автор: ustas 25.5.2009, 19:50
Цитата(Setuper @ 25.5.2009, 20:44)
Насчёт твоей дописки, не вижу в ней смысла. Это только будет не по детски грузить клиент (как раз минуты 3). Нужно выводить сообщение только если найден чит!
согласен. Просто хотел проверить, как работает.
Автор: Setuper 25.5.2009, 20:00
Цитата(ustas @ 25.5.2009, 20:24)
баг - после того, как запустил проверку юзера, когда пытаюсь скачать файллист другого юзера, тоже выполняется его проверка
Это не баг. Проверка будет выполняться при любом скачивании файл-листа, в противном случае, если делать проверку только по команде, то нагрузка на проверку того, что я качаю файл-лист только для проверки будет значительной.
Безусловно лучше конечно делать проверку юзеров непосредственно при их входе на хаб, однако такой функции пока нет.
Автор: ustas 25.5.2009, 20:16
добавил в грее 100 ГБ
Цитата
[21:14:29] <LUABOT> Юзер ustas с IP: 127.0.0.1 не балуется читами Тэг: <UstasDC++ V:1.0,M:A,H:0/1/1,S:3,L:5128> Размер файл-листа: 1025778261638 байт Шара: 1020764981949 байт
фейк шару не определил
Автор: Setuper 25.5.2009, 20:34
Мда... Под петабайт слишком большая шара. Если у человека расшарено под петабайт, то не думаю, что он будет подделывать шару, и даже если и будет, то это не так важно. В общем из-за сжатия конечно косяк.
Автор: ustas 25.5.2009, 20:44
Цитата(Setuper @ 25.5.2009, 21:34)
Мда... Под петабайт слишком большая шара. Если у человека расшарено под петабайт, то не думаю, что он будет подделывать шару, и даже если и будет, то это не так важно. В общем из-за сжатия конечно косяк.
оставил только фейк шару
Цитата
[21:40:37] <LUABOT> Юзер ustas с IP: 127.0.0.1 не балуется читами Тэг: <UstasDC++ V:1.0,M:A,H:0/1/1,S:3,L:5128> Размер файл-листа: 104857909510 байт Шара: 104857909510 байт
Автор: Setuper 25.5.2009, 20:49
Хехе. Данный скрипт не проверяет подлинность файл-листа, он только сравнивает шару и размер файлов в файл-листе. Для проверки нужно скачать случайный файл, что в принципе можно реализовать в скрипте.
Автор: ustas 25.5.2009, 20:54
Цитата(Setuper @ 25.5.2009, 21:49)
Для проверки нужно скачать случайный файл, что в принципе можно реализовать в скрипте.
допустим у меня реальная шара 50 ГБ + фейков на 50 ГБ. Все файлы качать нереально, тогда как скрипт определит, что вот этот файл фейковый, а этот реальный?
Автор: Setuper 25.5.2009, 21:03
Никак. Повторяю, что данный скрипт предназначен только против настройки "плюс к шаре"! Против подделки файл-листа методов борьбы думаю, что нету.
Автор: ustas 25.5.2009, 21:29
Цитата(Setuper @ 25.5.2009, 22:03)
Никак. Повторяю, что данный скрипт предназначен только против настройки "плюс к шаре"! Против подделки файл-листа методов борьбы думаю, что нету.
Так в грее при использования "+ к шаре" как раз используется фейковая шара. Т.е. грей не отловить. Жаль
Автор: FallenAngel 25.5.2009, 22:28
Обнаружен читер! Ник: [PNZ]Джони IP: IP Тэг: <gl++ V:5.57,M:A,H:6/1/0,S:16> Размер файл-листа: 25097765796 байт Шара: 25946967410 байт
[23:20:33] <[=БОТ=]> *** Ошибка [PNZ]Джони не на хабе.
Потом по IP посмотрел- ник у юзера [PNZ]Джони С этим как бороться? Ну я то его вручную забанил. А эт "на заметку" чтоль..
Автор: Setuper 25.5.2009, 22:49
Исправил баг. Скрипт перезалил.
Автор: FallenAngel 26.5.2009, 7:20
Хм... А как именно определяется несоответствие шар? А то выдает несколько ников- якобы у них шара поддельная, но проверяю сам файлист у них-но шара нормальная вполне. Нету ни одного "лишнего" файла...
Автор: Delion 26.5.2009, 10:04
Цитата
Данный скрипт не проверяет подлинность файл-листа, он только сравнивает шару и размер файлов в файл-листе
Пффф. Без обид,но ты изобрёл велосипед. Очередная неудавшаяся пиар-акция Грея.
Автор: Setuper 26.5.2009, 12:17
Возможно. Возможно данный вариант скрипта не совсем хорош, однако сам факт наличия достаточного lua функционала открывает перед lua прогерами широкие перспективы. Если будут предложения как подругому реализовать обнаружение читеров я готов реализовать.
Автор: Otshelnik-Fm 26.5.2009, 22:26
Всё сделал как написано в первом посте. Запускаю клиент - пишет что скрипт запущен... а дальше ничего не происходитю Как действовать? запускаю командой /checkshare -
Цитата
[02:32:13] <LUABOT> Проверяю файл-листы всех пользователей
- и за сутки ничего в чат так и не выдало. В чем причина? Знаю что из 200 человек один но с обманной шарой.
Сорри - Надо скачать файл листы со всех пользователей!
С виду вроде нормальная шара - ну отличается она на 2 гига от того что написал бот . А другой юзер с 200 гигами fdgjhfjhbgjbndgjkbndjghnb.avi файлов и 50 гигами нормальных файлов - не забанен. так смысл в этой "фишке"?
Стоит не банить юзера а просто выдавать админу в чат что подозрительный юзер на хабе... Закоментировав 27 строку
Код
local sAction = "!ban [NI] Подделка шары"
- я же не буду банить пользователей?
Автор: Setuper 26.5.2009, 22:56
Ещё раз повторяю, что скрипт предназначен против циферного добавления шары. Скрипт не отлавливает подделанные файл-листы.
Для отключения бана нужно просто не ставить действие:
Код
local sAction = nil
или так
Код
local sAction = false
Автор: Otshelnik-Fm 26.5.2009, 23:08
Скрипт можно настроить чтобы он потом анализировал по согласным буквам? по 5 согласным буквам подряд - и если находит - то админу сообщение? примеры из реальной шары: ggvbfdwh hzz uuxr.avi glgphmd tjnljd egmjjyx.avi fatsljge dbznqthud.mkv - а в русском, да и в английском языке я, думаю, что слов с 5 подряд согласными буквами нет... а если есть то для них можно со временем сделать список исключений. А если между согласными символ (Р.С,Ф,С,Р - к примеру) - то такие не отлавливать
Автор: Setuper 26.5.2009, 23:17
Да прямо сейчас могу написать как это сделать)))
Автор: Delion 26.5.2009, 23:24
Цитата
в русском, да и в английском языке я, думаю, что слов с 5 подряд согласными буквами нет
РСДРП RSXPP
Бредовая идея.
Автор: Otshelnik-Fm 26.5.2009, 23:27
Да вопрос не в этом.. можно 7 букв (да и про список исключений не забыть)
Setuper - юмор понял
Автор: Delion 26.5.2009, 23:29
Цитата
можно 7 букв (да и про список исключений не забыть)
Такие аббревиатуры найдутся. И с исключениями ни фига не выйдет - первый же претендент будет спорным. Да и до семи согласных гласная где-нить да проскочит.
Автор: Setuper 26.5.2009, 23:43
В общем можно после строки iSize = iSize + v.size добавить код:
Код
if CheckName(v.name) then tAPI:new():SimPublicMessage(tUser.HL, tAPI:ToUtf8(("<%s> Сработал фильтр."):format(sBot))) if sAction then tAPI:new():SendPublicMessage(tUser.HL, tAPI:ToUtf8(SetParams(tUser, sAction))) end return end
и добавить функцию CheckName:
Код
function CheckName(sName) -- Тут находим в имени sName всё, что угодно. -- Если найденное нас не устраивает, пишем return true end
Это был не юмор!
При помощи lua скриптов на имена файлов можно накладывать любые фильтры. Скрипт располагает следующей информацией о каждом файле в файл-листе: tth, path, name, size
Предлагайте фильтры! А я напишу что нужно.
Автор: Otshelnik-Fm 26.5.2009, 23:46
А в
Код
function CheckName(sName) -- Тут находим в имени sName всё, что угодно.
- сюда что вбивать все возможные совпадения?? или я что то не понял..
Нет не в имени пользователя а в шаре файл кино но с названием fghfrdrity.avi - я про это
Цитата
Такие аббревиатуры найдутся. И с исключениями ни фига не выйдет - первый же претендент будет спорным. Да и до семи согласных гласная где-нить да проскочит.
- для этого его не банить сразу а привлекать внимание администрации - чтобы она анализировала и изменяла фильтр скрипта
Автор: Setuper 26.5.2009, 23:53
sName - это имя файла. На данное имя нужно наложить фильтр. Вот только я не знаю по какому принципу строить этот фильтр. Число согласных не катит, так как во-первых, существуют вполне нормальные слова с несколькими согласными подряд, во-вторых, похоже, что грей генерирует имена файлов случайным образом - и с гласными и с согласными.
Можно попробовать проверять не слишком маленькие и не слишком большие фрагменты английских слов, которые словами не являются.
Автор: Otshelnik-Fm 26.5.2009, 23:59
почему не катит ? Указываем что >6 согласных Ssogl подряд (из списка Ssogl= qwrtpsdfghklzxcvbnm ) - если они встречаются то sendMessage админу -"тревога! возможно читер" - а админ смотрит глазками и действует ( поймите не несколько а много согласных подряд) - сам только что у 4 юзеров глядел из 100 фейковых файлов .avi у 5 файлов как минимум подряд огромное количество согласных!
Автор: Setuper 27.5.2009, 0:23
тогда после строки iSize = iSize + v.size добавляем код
Код
local sName = CheckName(v.name) if sName then tAPI:new():SimPublicMessage(tUser.HL, tAPI:ToUtf8(("<%s> Сработал фильтр. Подозрительное имя файла: %s. Паттерн: %s. Пользователь: %s [%s]"):format(sBot, v.name, sName, tUser.NI, tUser.I4))) return end
И добавляем функцию:
Код
local sCN = "[bcdfghjklmnpqrstvwxz]" local iNumRep = 7 -- число повторений подряд согласных букв в имени файла function CheckName(sName) return sName:match("("..sCN:rep(iNumRep)..")") end
Действительно даже 7 согласных подряд достаточно часто попадаются Поэтому это действительны будет выходом. Сейчас напишу получше реализацию скрипта.
Автор: Otshelnik-Fm 27.5.2009, 0:28
а где в грее лог ошибок можно посмотреть (из файла) - подскажи - вот скрин:
Автор: Setuper 27.5.2009, 0:37
Да. Ошибки только там. Опечатку я сделал, поэтому и ошибка
Код
tUser.I4
точка вместо запятой.
Автор: Otshelnik-Fm 27.5.2009, 0:45
Работает... теперь дополнение - т.к. очень много срабатываний :
tAPI:new():SimPublicMessage(tUser.HL, tAPI:ToUtf8(("<%s> Сработал фильтр. Подозрительное имя
- utf8 надо заменить?
Автор: Setuper 27.5.2009, 0:58
Сейчас всё исправлю.
Вот новая версия. Вроде работает. По умолчанияю отключил бан, так как многие нормальные файлы попадаются + сделал ограничение на число оповещений от одного пользователя (поставил 3 оповещения от каждого пользователя при куче найденных повторах)
Автор: Otshelnik-Fm 27.5.2009, 1:05
много ловит мелких фоток... а по расширению (как выше писал) - так возможно?
Автор: Setuper 27.5.2009, 1:07
По расширению можно. Сейчас сделаю.
Автор: Otshelnik-Fm 27.5.2009, 1:17
заметил что качая 15 файл листов скачиваешь половину а дальше грей виснет. Можно прокрутить список пользователей - а процесс скачки встает. А когда хочешь ещё один файллист скачать - "не отвечает" - так уже происходило когда я со всех 98 юзеров начал качать файллист
Автор: Setuper 27.5.2009, 1:21
Очередная версия.
Сделал ограничения по расширению и по размеру файла.
Да уж. Скачка сразу со всех да ещё и анализ файл-листов - это очень очень нагрузочно всё. Поэтому логичным выходом будет проверка пользователя после его непосредственного входа на хаб, однако это в перспективе, пока что надо сделать ручную проверку. Чтобы не тормозило проверяй по одному, а не всех сразу.
Автор: Otshelnik-Fm 27.5.2009, 1:31
offtop: - ниодного "знакомого" читера с обманной шарой не осталось - вот еще один критерий паразита - скачал и спать выключив комп... А сам шару накрутить не смог - в новом грее обыскался эту функцию и не нашел (если что о ней в личку).
Автор: Setuper 27.5.2009, 12:07
Ты о чём? Кто не мог накрутить?
Автор: Otshelnik-Fm 27.5.2009, 17:30
это я про себя - ночью в грее искал где можно накрутить шару - (помню в старых версиях была функция к основной шаре +виртуальная) - но не увидел. Ну да и ладно - Вечером на живых пользователях проверю в боевых условиях. (кстати в первом посту все еще не измененная версия)
Автор: Setuper 27.5.2009, 18:56
В первом посту обновил версию. Во всех остальных удалил.
Автор: Otshelnik-Fm 27.5.2009, 20:02
Специально скачивал файл лист у читера. эффекта никакого.
Уменьшил до
Код
-- Число повторений подряд согласных букв в имени файла local iNumRep = 5 -- Ограничитель по размеру файла local iFileSize = 10 * 1024 * 1024
Кто там говорил что не катит этот скрипт? - Ведь работает!
Автор: Setuper 27.5.2009, 21:33
Форматированная шара: http://mydc.ru/ipb.html?s=&showtopic=1983&view=findpost&p=15998 Размер папки определить нельзя.
Автор: x-ray 31.5.2009, 8:06
Цитата(Setuper @ 25.5.2009, 17:05)
Для работы скрипта в папке lua должны находиться библиотеки lua32.dll и dcutil32.dll (или соответствующие 64 разрядные)
Setuper выложить библиотеки или ссылку где их найти можешь?
Сам нашел: http://mydc.ru/r/?http://home.tula.net/greylink/lua.rar
Автор: Kulak75 3.6.2009, 6:20
Из первого поста файл -- Ограничитель по расширениям local tExp = {"%.api", "%.mp3"} явная опечатка. И кстати наверно проще искать файлы через поиск (.mp3, .avi), раз при скачке файл-листов грей виснет.
Автор: NEW 24.10.2009, 0:06
подскажите пожалуйста, что не так. скрипт запускается, а вот при команде /checkshare nick или /checkshare пишет *** Неизвестная команда: checkshare. все делалось на грее 5,72.
Автор: Dake 9.10.2010, 22:17
у меня ошибка: [22:16] Синтаксис ...gram Files\PtokaX DC Hub by Dake\scripts\startup.lua:56: attempt to call global 'DC' (a nil value)
Автор: Артём 9.10.2010, 22:29
Dake, c чего взял что все скрипты на этом форуме на птоку? Тему почитай, этот скрипт для DC++ , даже в ошибке написано DC