Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Обсуждение защиты от ботов, хаков, кликеров и etc
Zubastic;419383 Написал:Этот аутист начинает утомлять. Он никак не может понять, что кликер невозможно отличить от обычного клика пользователя со стороны сервера.
Зачем, что - то различать?

Ты точить можешь, только в направлении:

Рассчет времени на выполнение,
Открыл инвентарь,
Есть точки,
Нажал точку,
Выбираем пуху,
Точим,
Чистим,
<- по кругу.

Что тебя в этом смущает? Ну и пусть точит, так-как сервер обрабатывает запрос.
А то как у него будет происходить пролеты кликов, сервер промолчит, следующие клики будут от результата времени выполнения, ему не захочется так точить.

Я хочу сказать, только одно, пусть лучше неординарно работают все эти вещи, чем утверждать, что существует защита, еще и на клиенте, вы издиваетесь?)

Emperor;419394 Написал:Вот сейчас ты так говоришь, а завтра он выпустит свою защиту, которая не использует клиентский модуль и блочит адреналин с вероятностью 100%, без возможности обхода. Вот тогда попляшешь.

Уже много раз говорил, что выложу, как закончу, тоже на продажу, но сервер полностью оригинальный =)
Он подойдет как-раз для таких кто ставит для заработка.

Я поменял всю логику ядра, так-как было нужно мне.
То как вы наворотите и наполните после меня, мне на радость. Smile

В краце....

Переписана конфигурация (настройки).
Изменена логика алгоритма диалоговых окон. Сделан специальный рекурсивный шаблонизатор для html'ok - в коде нет нигде гипер-текста, все формируем и контролируется в html, тегами и условной конструкцией if, очень удобно (за место 5 файлов Chat, будет 1 с if'ами и тегами, переключатель тоже ).
Переписан кешер.
Переписан алгоритм соединения с mysql - теперь организованный пул-потоков, висит на одном соединении, за место того, чтобы постоянно его закрывать и снова открывать.
Переписан пакетник.
Преписан логин сервер и вход в игру.
Переписана мотивация и интеллект (персонаж, мирный житель, слуга, монстр, босс)...
Переписан телепорт, а также мы можем указывать любые ресурсы, без надобности внедрять костыли.
Не доделана гео-дата, не все маршруты еще есть...
Не доделаны умения и эффекты.
Не буду перечислять еще есть над чем поработать.
Скоро найду времени, допилю.
Очень много уходит на это времени, но желание допиливать ресурс есть, что собственно, потихоньку, не спеша, делаю.Smile
Ну конечно же в онлайне сервер предоставлю, как открою доступ всем. kappa
Потом только, о сделке будет речь. А пока, наслаждайтесь Akumo .i. бесконечным трепом.
Ответ
Anikey Написал:Зачем, что - то различать?

Ты точить можешь, только в направлении:

Рассчет времени на выполнение,
Открыл инвентарь,
Есть точки,
Нажал точку,
Выбираем пуху,
Точим,
Чистим,
<- по кругу.

Что тебя в этом смущает? Ну и пусть точит, так-как сервер обрабатывает запрос.
А то как у него будет происходить пролеты кликов, сервер промолчит, следующие клики будут от результата времени выполнения, ему не захочется так точить.

Я хочу сказать, только одно, пусть лучше неординарно работают все эти вещи, чем утверждать, что существует защита, еще и на клиенте, вы издиваетесь?)
Какие нахрен "пролеты кликов". Ты думаешь сложно добавить остановки (даже для пакетного бота это 10 минут работы с перерывом на чай).
Твоя статистика это мусор и определенные проблемы в виде ложных срабатываний.
Anikey Написал:Уже много раз говорил, что выложу, как закончу, тоже на продажу, но сервер полностью оригинальный =)
Он подойдет как-раз для таких кто ставит для заработка.

Я поменял всю логику ядра, так-как было нужно мне.
То как вы наворотите и наполните после меня, мне на радость. Smile

В краце....

Переписана конфигурация (настройки).
Изменена логика алгоритма диалоговых окон. Сделан специальный рекурсивный шаблонизатор для html'ok - в коде нет нигде гипер-текста, все формируем и контролируется в html, тегами и условной конструкцией if, очень удобно (за место 5 файлов Chat, будет 1 с if'ами и тегами, переключатель тоже ).
Переписан кешер.
Переписан алгоритм соединения с mysql - теперь организованный пул-потоков, висит на одном соединении, за место того, чтобы постоянно его закрывать и снова открывать.
Переписан пакетник.
Преписан логин сервер и вход в игру.
Переписана мотивация и интеллект (персонаж, мирный житель, слуга, монстр, босс)...
Переписан телепорт, а также мы можем указывать любые ресурсы, без надобности внедрять костыли.
Не доделана гео-дата, не все маршруты еще есть...
Не доделаны умения и эффекты.
Не буду перечислять еще есть над чем поработать.
Скоро найду времени, допилю.
Очень много уходит на это времени, но желание допиливать ресурс есть, что собственно, потихоньку, не спеша, делаю.Smile
Ну конечно же в онлайне сервер предоставлю, как открою доступ всем. kappa
Потом только, о сделке будет речь. А пока, наслаждайтесь Akumo .i. бесконечным трепом.
Каждый топовый разработчик первым делом пишет конфиги. Чем больше конфигов тем лучше :redlol:
Шаблонизатор html который будет выглядеть как библия в 1 файле? Крч обычный мусор, который потом замучаешься редактировать и искать где этот горе разраб что-то поменял.
Как можно переписать пакетку? Че порядок байт будет другим? :redlol:
Кароче какой-то бред из серии "вы ничего не понимаете, а у меня топовый сервер".
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
Zubastic;419433 Написал:Какие нахрен "пролеты кликов". Ты думаешь сложно добавить остановки (даже для пакетного бота это 10 минут работы с перерывом на чай).
Твоя статистика это мусор и определенные проблемы в виде ложных срабатываний.
А кто сказал, что при таймаутах он не работает?
Я всегда говорил, что не от них защищаться надо, они становятся бесполезными.

Zubastic;419433 Написал:Каждый топовый разработчик первым делом пишет конфиги. Чем больше конфигов тем лучше
Ты реально в это веришь, что нормальный так сделает? Жесть:redlol:

Zubastic;419433 Написал:Шаблонизатор html который будет выглядеть как библия в 1 файле? Крч обычный мусор, который потом замучаешься редактировать и искать где этот горе разраб что-то поменял.
:redlol: Ты в своем уме? Вот ты сейчас сказал, про всех, кто - это делает, то, что вы зашиваете в ядре html'ки, вот как-раз, потом хер найдешь, какой там горе разраб, наставил append'ов.
И как поменять ссылки на кнопки или текстуры в целом - только просить его (ну конечно разработчика данного сервера, он же сука не подумал, что мне нужны все мирные жители под один вид кнопочек и прочих плюшечек, а может и вовсе захочу другую разметку данного жителя).

Zubastic;419433 Написал:Как можно переписать пакетку? Че порядок байт будет другим?
Переписал взаимодействие пакетов, удалил все файлы с пакетами, что сейчас у лыж, написал новую релизацию уже показал выше, больше нет никаких файлов кроме этих.

Zubastic;419433 Написал:Кароче какой-то бред из серии "вы ничего не понимаете, а у меня топовый сервер".
Не еще пока не топовый =)
Ответ
А что, в теории можно прикрутить нейронку и обучить её по определенным сигнатурам (Например бот из коробки не будет зря перемещать перса - либо стоит на месте, либо прицепом. Человек же сделает лишних движений типа кликов в землю). Хотя что бы запилить и довести это до ума нечто подобное походу надо как минимум всем ЗГ засесть и то не думаю что без клиент сайда обойдется. А это значит что оратор выше балаболSmile
Aka Stels
Ответ
Anikey, и в чем сложность и уникальность препроцессинга html? Уже, как минимум 2 года у меня все гоняется через velocity:
Код:
<html><body>
<title>NPC Droplist</title>
<br>
#if(!$npcObjectId || !$playerId)
    #stop
#end

#set($NULL = $VelocityTool.getNull())

#set($npc = $L2World.findObject($npcObjectId))
#if(!$npc || $VelocityTool.isNull($npc))
    <center>#color("ff0000" "NPC не найден.")</center>
    </body></html>
    #stop
#end
<center>#color("LEVEL" "NPC: $npc.getName()")</center>

#set($npcTemplate = $npc.getTemplate())
#if(!$npcTemplate || $VelocityTool.isNull($npcTemplate))
    <br><center>#color("ff0000" "Шаблон NPC не найден.")</center>
    </body></html>
    #stop
#end

#set($player = $L2World.getPlayer($playerId))
#if(!$player || $VelocityTool.isNull($player))
    <br><center>#color("ff0000" "Ошибка запроса.")</center>
    </body></html>
    #stop
#end

#if(!$page || $page < 1)
    #set($page = 1)
#end

#set($dropGroupList = $npcTemplate.getDropGroupList())
#if(!$dropGroupList || $VelocityTool.isNull($dropGroupList))
    <br><center>#color("ff0000" "У данного NPC нет дропа.")</center>
    </body></html>
    #stop
#end

#set($dropGroups = $dropGroupList.getGroups())
#if(!$dropGroups || $VelocityTool.isNull($dropGroups))
    <br><center>#color("ff0000" "У данного NPC нет дропа.")</center>
    </body></html>
    #stop
#end

<!-- group per page -->
#set($groupsOnPage = 2)

<!-- drop chance scaling -->
#set($dropChanceScaling = 2)

<!-- page scaling -->
#set($pageScaling = 2)

#set($groupCount = $dropGroups.size())
#set($maxPages = $VelocityTool.getMaxPages($groupsOnPage, $groupCount))
#if($page > $maxPages)
    #set($page = $maxPages)
#end

#set($minPage = $page - $pageScaling)
#if($minPage < 1)
    #set($minPage = 1)
#end

#set($maxPage = $page + $pageScaling)
#if($maxPage > $maxPages)
    #set($maxPage = $maxPages)
#end
#set($pages = [$minPage..$maxPage])

#set($startIndex = $VelocityTool.getStartElementIndexByPage($page, $groupsOnPage))
#set($endIndex = $VelocityTool.getEndElementIndexByPage($page, $groupsOnPage, $groupCount))
#set($endIndex = $endIndex - 1)
#set($indexes = [$startIndex..$endIndex])

<center><table width=120><tr>
#if($minPage > 1)
    <td><center><a action="bypass -h default/droplist.htm?npcObjectId=$npcObjectId&playerId=$playerId&page=1">1</a></center></td>
    <td><center>...</center></td>
#end
#foreach($currentPage in $pages)
    #if($currentPage == $page)
        <td><center>#color("LEVEL" "$currentPage")</center></td>
    #else
        <td><center><a action="bypass -h default/droplist.htm?npcObjectId=$npcObjectId&playerId=$playerId&page=$currentPage">$currentPage</a></center></td>
    #end
#end
#if($maxPage < $maxPages)
    <td><center>...</center></td>
    <td><center><a action="bypass -h default/droplist.htm?npcObjectId=$npcObjectId&playerId=$playerId&page=$maxPages">$maxPages</a></center></td>
#end
</tr></table></center>

#foreach($index in $indexes)
    #set($group = $dropGroups.get($index))
    #set($groupChance = $group.getChance())
    #set($maxGroupRate = 100.0 / $groupChance)
    #set($groupRate = $RateManager.getGroupRate($group, $npc, $player, false))
    #set($groupChance = $groupChance * $groupRate)
    #set($groupChance = $VelocityTool.dMin(100, $groupChance))
    #color("00ff00" "Group $index: $VelocityTool.dRound($groupChance, $dropChanceScaling)%")
    
    #if($groupRate < $maxGroupRate)
        #set($grate = 1)
    #elseif($maxGroupRate <= 1)
        #set($grate = $groupRate)
    #else
        #set($grate = $groupRate - $maxGroupRate)
        #set($grate = $VelocityTool.dFloor($grate))
        #set($grate = $VelocityTool.dMax($grate, 1))
    #end
    
    <center><table width=260>
    #set($groupItems = $group.getItems())
    #foreach($groupItem in $groupItems)
        #set($itemId = $groupItem.getItemId())
        <tr>
        <td width=32 height=32><img src="$IconTable.getIcon($itemId)" width=32 height=32></td>
        <td width=95>$ItemTable.getItemName($itemId)</td>
        #set($itemChance = $RateManager.rateItem($grate, $groupItem, $npc, $player, false))
        #set($itemChance = $VelocityTool.dMin(100, $itemChance))
        #set($itemChance = $VelocityTool.dMax($itemChance, 0.01))
        
        #set($itemRounds = $group.getItemsChance($npc, $player, false, $grate) / 100)
        #set($itemRounds = $VelocityTool.dRound($itemRounds))
        #if($itemRounds < 1)
            #set($itemRounds = 1)
        #end
        
        #set($minCount = $groupItem.getMinCount())
        #set($dMaxCount = $groupItem.getMaxCount() * $itemRounds)
        #set($maxCount = $VelocityTool.double2int($dMaxCount))
        #if($minCount == $maxCount)
            <td width=70><center>$VelocityTool.number2game($minCount)</center></td>
        #else
            <td width=70><center>$VelocityTool.number2game($minCount)-$VelocityTool.number2game($maxCount)</center></td>
        #end
        <td width=65><center>$VelocityTool.dRound($itemChance, $dropChanceScaling)%</center></td>
        </tr>
    #end
    </table></center><br>
#end
</center>


</body></html>
Да, удобнее; да, круто. Но смысла перепиливать везде на это - особого нету.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
Anikey Написал::redlol: Ты клоун, однако. Хоть настроение поднял.
Что ты мелишь, своей метлой? Кликер не сможет работать быстрее сервера и минуя сервер, делать, что захочется.
Только если клиент будет работать с нулевой отдачей, что в принципе не реально в реалиях клиента л2(даже минуя клиент, не минует локалхост), даже если он будет стоять на сервере.
Или кликер наклацывает в твоей параллельной вселенной быстрее отклика сети ?
Это сюр, правда если у тебя фамилия не Балженов и у тебя в тайном подвале не стоит квантового архиватора.

Добавлено через 24 минуты
n3k0nation Написал:Anikey, и в чем сложность и уникальность препроцессинга html? Уже, как минимум 2 года у меня все гоняется через velocity:
Код:
<html><body>
<title>NPC Droplist</title>
<br>
#if(!$npcObjectId || !$playerId)
    #stop
#end

#set($NULL = $VelocityTool.getNull())

#set($npc = $L2World.findObject($npcObjectId))
#if(!$npc || $VelocityTool.isNull($npc))
    <center>#color("ff0000" "NPC не найден.")</center>
    </body></html>
    #stop
#end
<center>#color("LEVEL" "NPC: $npc.getName()")</center>

#set($npcTemplate = $npc.getTemplate())
#if(!$npcTemplate || $VelocityTool.isNull($npcTemplate))
    <br><center>#color("ff0000" "Шаблон NPC не найден.")</center>
    </body></html>
    #stop
#end

#set($player = $L2World.getPlayer($playerId))
#if(!$player || $VelocityTool.isNull($player))
    <br><center>#color("ff0000" "Ошибка запроса.")</center>
    </body></html>
    #stop
#end

#if(!$page || $page < 1)
    #set($page = 1)
#end

#set($dropGroupList = $npcTemplate.getDropGroupList())
#if(!$dropGroupList || $VelocityTool.isNull($dropGroupList))
    <br><center>#color("ff0000" "У данного NPC нет дропа.")</center>
    </body></html>
    #stop
#end

#set($dropGroups = $dropGroupList.getGroups())
#if(!$dropGroups || $VelocityTool.isNull($dropGroups))
    <br><center>#color("ff0000" "У данного NPC нет дропа.")</center>
    </body></html>
    #stop
#end

<!-- group per page -->
#set($groupsOnPage = 2)

<!-- drop chance scaling -->
#set($dropChanceScaling = 2)

<!-- page scaling -->
#set($pageScaling = 2)

#set($groupCount = $dropGroups.size())
#set($maxPages = $VelocityTool.getMaxPages($groupsOnPage, $groupCount))
#if($page > $maxPages)
    #set($page = $maxPages)
#end

#set($minPage = $page - $pageScaling)
#if($minPage < 1)
    #set($minPage = 1)
#end

#set($maxPage = $page + $pageScaling)
#if($maxPage > $maxPages)
    #set($maxPage = $maxPages)
#end
#set($pages = [$minPage..$maxPage])

#set($startIndex = $VelocityTool.getStartElementIndexByPage($page, $groupsOnPage))
#set($endIndex = $VelocityTool.getEndElementIndexByPage($page, $groupsOnPage, $groupCount))
#set($endIndex = $endIndex - 1)
#set($indexes = [$startIndex..$endIndex])

<center><table width=120><tr>
#if($minPage > 1)
    <td><center><a action="bypass -h default/droplist.htm?npcObjectId=$npcObjectId&playerId=$playerId&page=1">1</a></center></td>
    <td><center>...</center></td>
#end
#foreach($currentPage in $pages)
    #if($currentPage == $page)
        <td><center>#color("LEVEL" "$currentPage")</center></td>
    #else
        <td><center><a action="bypass -h default/droplist.htm?npcObjectId=$npcObjectId&playerId=$playerId&page=$currentPage">$currentPage</a></center></td>
    #end
#end
#if($maxPage < $maxPages)
    <td><center>...</center></td>
    <td><center><a action="bypass -h default/droplist.htm?npcObjectId=$npcObjectId&playerId=$playerId&page=$maxPages">$maxPages</a></center></td>
#end
</tr></table></center>

#foreach($index in $indexes)
    #set($group = $dropGroups.get($index))
    #set($groupChance = $group.getChance())
    #set($maxGroupRate = 100.0 / $groupChance)
    #set($groupRate = $RateManager.getGroupRate($group, $npc, $player, false))
    #set($groupChance = $groupChance * $groupRate)
    #set($groupChance = $VelocityTool.dMin(100, $groupChance))
    #color("00ff00" "Group $index: $VelocityTool.dRound($groupChance, $dropChanceScaling)%")
    
    #if($groupRate < $maxGroupRate)
        #set($grate = 1)
    #elseif($maxGroupRate <= 1)
        #set($grate = $groupRate)
    #else
        #set($grate = $groupRate - $maxGroupRate)
        #set($grate = $VelocityTool.dFloor($grate))
        #set($grate = $VelocityTool.dMax($grate, 1))
    #end
    
    <center><table width=260>
    #set($groupItems = $group.getItems())
    #foreach($groupItem in $groupItems)
        #set($itemId = $groupItem.getItemId())
        <tr>
        <td width=32 height=32><img src="$IconTable.getIcon($itemId)" width=32 height=32></td>
        <td width=95>$ItemTable.getItemName($itemId)</td>
        #set($itemChance = $RateManager.rateItem($grate, $groupItem, $npc, $player, false))
        #set($itemChance = $VelocityTool.dMin(100, $itemChance))
        #set($itemChance = $VelocityTool.dMax($itemChance, 0.01))
        
        #set($itemRounds = $group.getItemsChance($npc, $player, false, $grate) / 100)
        #set($itemRounds = $VelocityTool.dRound($itemRounds))
        #if($itemRounds < 1)
            #set($itemRounds = 1)
        #end
        
        #set($minCount = $groupItem.getMinCount())
        #set($dMaxCount = $groupItem.getMaxCount() * $itemRounds)
        #set($maxCount = $VelocityTool.double2int($dMaxCount))
        #if($minCount == $maxCount)
            <td width=70><center>$VelocityTool.number2game($minCount)</center></td>
        #else
            <td width=70><center>$VelocityTool.number2game($minCount)-$VelocityTool.number2game($maxCount)</center></td>
        #end
        <td width=65><center>$VelocityTool.dRound($itemChance, $dropChanceScaling)%</center></td>
        </tr>
    #end
    </table></center><br>
#end
</center>


</body></html>
Да, удобнее; да, круто. Но смысла перепиливать везде на это - особого нету.

А можно и реплейсами что как по мне куда удобнее
http://image.zone-game.info/images/2016/10/06/fn4K3.png
Ответ
smeli Написал:а как вы узнали что игроки с l2phx нечестные

теперь я понял в чём успех смартгварда:
у игроков остаётся надежда что они смогут обойти смартгаврд
и получат доступ к дырявому серверу, а тогда они насладятся по полной

похоже и нам придётся приобретать смартгвард
игроки подумают что за ним стоит дырявая как дуршлак сборка и придут к нам играть

% читеров на проекте - ничтожен (я говорю не про школьников, посмотревших пару роликов ютуба). Грамотный читер ломанет сервак либо по заказу либо себе в прок.
Давая возможность школьникам "учиться" на незащищенном сервере, вы тем самым не поднимете онлайн, а сфэйлите проект, после нескольких фраз в чате "-да тут, пакетники работают... - Да, тут бот бесплатный пашет... - а, все ясно - можно валить с сервера... - А, пойдемте вот на этот сервер". И после таких нескольких предложений, даже включение защиты уже вряд ли спасет онлайн.
Хотя если сервер закажут для взлома, его вряд ли спасет и защита (к сожалению)
Ответ
Shayne, бот не всегда сможет додуматься, что нужно было сделать, если конечно это не клон-клиента в целом.

n3k0nation, Какой смысл делать из гипертекста, программирование и мешанину?

d0kt0r;419737 Написал:Хотя если сервер закажут для взлома, его вряд ли спасет и защита (к сожалению)

Взлом - это отдельная тема.
Защита от клиент -> сервер манипуляций, никак не защищает от взлома там где расположен сервер - админ нуб и не подумал о безопасности где будет располагаться сервер.
Ответ
Anikey, а какой смысл был изобретать Web 2.0? А какой смысл в использовании JavaScript? И почему же, сурьозные ребята, которые гремят тяжелыми цепями ынтырпрайза, сожрали, прожевали и выплюнули обрубок гипертекста, который научился динамике и "программированию" через препроцессинг и, о боже, дополнительную виртуальную машину, которая работает внутри другой виртуальной машины?
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
n3k0nation, Ой, да ну хватит уже. Все уже уяснили, что товарищ просто толстит и ждёт бана на очередном форуме.
Нет ни пруфов, ни внятных ответов. С более или менее серьёзного спора, когда оппонент начинает задавливать - он соскакивает.

Он мне конечно симпатизирует как личность, которая с серьёзным лицо несёт ахинею, но я просто не могу смотреть на то, как вы распинаетесь и пишете ему в ответ целые тирады.

Он пишет:
-Клиентская защита г*вно".
-Вы ему целый абзац из "Войны и Мира".

Он продолжает:
-Да г*вно ваша защита на уровне клиента, ха-ха.
-Вы продолжаете доказывать очевидное.

И так по замкнутому кругу.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  неудобная тема про ботов которую нетрогают smeli 11 3,299 03-23-2020, 06:01 PM
Последний пост: Hack
  SG 3.0 обсуждение kolibri 65 17,193 05-17-2018, 03:41 AM
Последний пост: Anikey
  Выбор защиты для л2 VadikO 59 15,675 02-01-2017, 12:53 AM
Последний пост: Brother
  Ищу пвп хф сервер без защиты Zubastic 3 1,951 09-21-2016, 10:26 PM
Последний пост: Emperor
  Очередное обсуждение скриптов valsha 128 22,064 08-20-2016, 05:35 PM
Последний пост: L2scripts-Guard
  django cms (Обсуждение) mifive 4 2,377 06-12-2014, 10:17 PM
Последний пост: Atanvar
  Система защиты - как обстоят дела? SilentNight 1 1,479 05-03-2014, 12:25 PM
Последний пост: Zeratyl
  Реально ли - обсуждение сервера классики и денег nn03 13 3,209 04-15-2014, 07:59 AM
Последний пост: Sisi
  Скрипт защиты от дудоса Twinker 6 5,070 10-20-2013, 12:57 PM
Последний пост: valsha
  Уникалььная программа защиты от Dos/Ddos urman 23 4,267 02-02-2013, 06:54 PM
Последний пост: AdamasX

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)