LINUX.ORG.RU

Предсказуемость математики и луа

 ,


1

1
function hashStr (nome)
	hours, minutes = GetGameTime()
	count1=hours* 3,1415926535
	count2=minutes* 3,1415926535
	count3=count1*count2
	count3=string.sub(count3, 1, 3)
	count3=string.format("%03d",count3)
	hNik=string.byte(nome,1)
	hNik2=string.byte(nome,2)
	hNome=hNik*hNik2
	hNome=string.sub(hNome, 1, 3)
	hNome=string.format("%03d",hNome)
	r1=string.sub(count3, 1, 1)
	r2=string.sub(hNome, 1, 1)
	r3=string.sub(count3, 2, 2)
	r4=string.sub(hNome, 2, 2)
	r5=string.sub(count3, 3, 3)
	r6=string.sub(hNome, 3, 3)
	r=r1 .. r2 .. r3 .. r4 .. r5 .. r6
	return r
end

hours, minutes = GetGameTime() получает текущие час и минуту в формате: 01 22

Скармливаем слово на одном компе - получаем предсказуемо одинаковый результат. Скармливаем на другом компе получаем тоже предсказуемо одинаковый результат, но не такой, как на предыдущем компе. Это как вообще? Данные одинаковые. Ник один и тот же. Время одно и то же. Результат всегда разный. Это вообще законно?! Время возвращается серверное - одинаковое и там и там.

Перемещено Dimez из general

★★★★★

Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от LightDiver

Ну так в серверной части функция расшифровывает хэш, основываясь на правилах. И проверяет заодно, чтобы он был уникальным.

То есть смысл в том, чтобы нельзя было пользоваться функциональностью серверной части аддона, не устанавливая клиентскую, а клиентская часть раздается только кому надо, не находится в свободном доступе?

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Nervous

https://cdn.discordapp.com/attachments/811217303378329643/1099366207485902958/qvst.png

Короче вот. Тыкаю кнопку, получаю квест. Выполняю квест - тыкаю кнопку и квест сдается. Все просто. Получаю награду.

Установить клиентскую часть может кто угодно. Моя задача автоматизировать все так, чтобы возможности считерить не было.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от Nervous

Я вроде седалал. На первый взгляд все работает. Надо теперь читерить попробовать.. Хмм. У меня с каждым днем вроде все быстрее и лучше получается.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от Nervous

Ну вот видишь чат? Я могу взять первые шесть цифер (это хэш), добавить кодовую фразу сдачи квеста. Типа я сделал квест. И отправить. Если хэш примется, то квест будет считаться выполненным, независимо от того, сделал ли ты его.

Вот чтобы такоого не было, я сделал хэш уникальным в пределах суток. Чтобы хэш принялся, клиентская часть должна сгенерировать его уникальным и главное - правильным.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Чтобы хэш принялся, клиентская часть должна сгенерировать его уникальным и главное - правильным.

А клиентская часть хэш не сгенерирует, если квест не выполнен? А что мешает пользователю заставить ее это сделать независимо от условий (отключить проверку)?

А сам сервер позволит сдать невыполненный квест? Никакой проверки нет на этот случай?

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

Неа, не сгенерирует.Вон видишь кнопки серые? Пока квест не выполнен, кнопки в принципе не станут доступны. Конечно можно ввести команду вручную. Но тогда клиентская часть будет проверять: а выполнил ли игрок квест. Если выполнил - сгенерирует все правильно и отправит. Сервер это увидит и квест пример. Если не выполнил, так и напишет.

А вот отключить проверку.. Ну попробуй.

https://github.com/Vladgobelen/GuildChat

Вот тебе серверная часть.

https://github.com/Vladgobelen/NSQC

А вот клиентская.

Если найдется уникум, который 1) Разберется как это работает 2) Сможет этим воспользоваться, я очень сильно удивлюсь для начала.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Вон видишь кнопки серые? Пока квест не выполнен, кнопки в принципе не станут доступны.

Можно отсюда начать, подшаманить условия, чтобы кнопка «сдать квест» всегда была доступной. Скажем, установить completed принудительно в true.

Аддон ведь у пользователя на машине находится, может редактировать исходник как хочет?

            id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch = GetAchievementInfo(testComplit)
            if completed ~= true then
                btn[2]:Disable()
                btn[2]:SetText("Ачивка не выполнена")
                btn[1]:Disable()
                btn[1]:SetText("Ачивка не выполнена")
            else
                btn[2]:Enable()
                btn[2]:SetText("Сдать квест")
            end
Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

Это отображение кнопок просто для удобства пользователя. Изначально кнопки всегда были активны, а проверкой всего занимался сервер. Если выполнено - одно всообщение, не выполнено другое, квест не взят - третье. Потом предложили отображать прогресс на кнопках и я сделал их активными-неактивными.

Так что, если сделать активной кнопку, просто можно отправить корманду сдачи квеста. Но проверять то эту сдачу всеравно будет сервер. Не сдал - скажет делать дальше. А если сдал, тут уже извини - ты должен хэш знать.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Но проверять то эту сдачу всеравно будет сервер. Не сдал - скажет делать дальше. А если сдал, тут уже извини - ты должен хэш знать.

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

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

А сервер не может. Проверить статус свой можешь только ты сам. Никто другой удаленно этого сделать не может чисто физически. Именно для этого в принципе нужен клиент.

Изначально клиента вообще не было. Все было на командах текстовых и доверии. Я просил показать и игрок показывал ачивку - сделана или не сделана. И тогда сделал клиент, который сам автоматически проверяет это выполнение. Клиент может проверить «себя» - и показать в зависимости от результатапроверки определенное сообщение.

Вот клиент проверяет себя и видит что ачивка выполнена. Тогда он генерирует хэш и отправляет сообщение определенного формата. Это видит сервер и понимает, что игрок задание выполнил.

Если же аддон клиента видит, что задание не выполнено, он такое сообщение не сформирует, Вот и все.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

проверять то эту сдачу всеравно будет сервер.

А сервер не может.

Все интереснее и интереснее %)

Если же аддон клиента видит, что задание не выполнено, он такое сообщение не сформирует, Вот и все.

Так что помешает пользователю отредактировать аддон клиента так, чтобы он не видел лишнего? Рассчитывать исключительно на лень и тупость пользователей это такое, неприятные сюрпризы неизбежны. Тем более что у тебя там даже не бинарник, тупо исходник лежит, правь — не хочу.

Хотя хорошо мотивированного пользователя, понятное дело, даже бинарник не остановит.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

https://cdn.discordapp.com/attachments/811217303378329643/1099391482051432579/WoWScrnShot_042323_004838.jpg

Вот, я начал с этого. Я сначала запилил в клиент автоматическое отображение ачивки пользователя. Даешь команду, клиент просто линкует ачивку. А там видно - выполнена она или нет. А уже потом я сделал на основе этого чтобы клиент сам проверял ее выполнение. Вот и все.

Тепрь клиент првоеряет ачивку, если квест выполнен, формирует хэш и сообщает результат. И вот тут самое интересно. Из всего этого нужно сделать так, чтобы этот автоматический ответ нельзя было подделать.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

клиент просто линкует ачивку

Так он ведь эту информацию об ачивках с сервера берет, не? И если у тебя серверный аддон работает на сервере, он тоже может получить эту информацию и побрить читера? Зачем хэши?

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Нет, показать свою ачивку удаленно может только игрок. Он может или вручную отправить эту инфу или же это сделает аддон, который игрок установит добровольно и осознанно. Вот этот адон и есть - клиентская часть.

Игрок ставит клиентскую часть и та показывает его статистику в чат. Но кто мешает подделать эту инфу? Вот саму возможность такой подделки я и пытаюсь пресечь.

Серверная часть аддона это не игровой сервер. Это просто аддон, который стоит у гильд-мастера. То есть у меня.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

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

То есть сервер ВоВа верит своим клиентам, когда они докладывают ему о своих ачивках? О взятых/сданных квестах? О количестве денег в инвентаре? %)

Или это вообще левая система ачивок, которая к самому ВоВу отношения не имеет и их нужно отслеживать самостоятельно?

;; В ВоВ не играл, пронесло, слава яйцам

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от LightDiver

Нет, показать свою ачивку удаленно может только игрок. Он может или вручную отправить эту инфу или же это сделает аддон, который игрок установит добровольно и осознанно. Вот этот адон и есть - клиентская часть.

То-есть достаточно в коде аддона заменить вот эти две функции на обертки которые меняют значения не выполнено на выполнено и все можно фармить квесты со скоростью нажатия кнопок «Взять квест»/«Сдать квест»:

GetAchievementCriteriaInfo
GetAchievementLink
V1KT0P ★★
()
Ответ на: комментарий от Nervous

Не надо путать сервер вова и серверную часть аддона, которую написал я. Смотри схема:

Пользователь просит квест:

  1. ГМ, дай мне квест!!!

я вижу это (точнее мой аддон видит команду и автоматически просит пользователя в чат же:

  1. Пользователь, а покажи мне ачивку номер 17.

Это видит аддон пользователя, отправляет запрос игровому серверу для проверки ачивки и уже затем автоматически линкует ачивку в чат:

  1. ГМ, смотри, у моего пользователя эта ачивка не выполнена, но он может ее выполнить!!!

Мой аддон это видит и говорит через чат пользователю:

  1. Пользователь, ну, раз ачивка еще не выполнена, то выполни ее.

И квест считается взятым. Когда пользователь выполнит ачивку, он мне ее показывает определенной командой:

  1. ГМ, смотри, я выполнил ачивку!!!

Мой аддон это видит и говорит:

  1. Пользователь, ну, ты молодец, держи награду.
LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Это видит аддон пользователя, отправляет запрос игровому серверу для проверки ачивки и уже затем автоматически линкует ачивку в чат:

Меняем функцию запроса ачивки на свою которая сама делаяет запрос и в ответе меняет статус «не выполнено» на «выполнено» и возвращает результат. В итоге в чат пишется уже подправленный ответ от сервера о статусе ачивки.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Вот, ты начинаешь понимать проблему! На самом деле нет, нельзя. Это просто отправит в чат статус ачивки пользователя.

Аддон, который пользователь себе установит, читает этот статус и на основе этого генерирует команду: Выполнил ли пользователь ачивку или не выполнил. Чтобы мне вручную это не нужно было делать.

И вот именно тут возникает спорный момент. Этот результат можно подделать. Никто не мешает пользователю вручную сформировать такую команду, будто он ачивку выполнил. Просто вручную написать такую команду в чат. И тут нам помогает хэш. Пользователь то не знает как его сгенерировать правильно. Это раз. Но пользователь может посмотреть предыдущий хэш и подставить этот результат в новую команду. Если нет проверки на уникальность хэша, это проканает. Именно поэтому нужна уникальность хэша.

До этого я делал иначе. Я генерировал хэш на основе юникс-тайма и ника игрока. Тогда хэш сам по себе был уникальным и хер подделаешь. Это было очень ненадежно. В 20% случаев происходил сбой из за разнрицы во времени и команда тупо не принималась. Приходилось спамить команду несколько раз.

Тогда я пришел в последнему методу генерации хэша как сейчас. Генерирую сложный хэш на основе ника и рандома и проверяю егол уникальность и все.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от V1KT0P

Вот! Именно. Чтобы пользователь не мог подправить этот запрос и нужен хэш. И не просто хэш, а уникальный хэш, который нельзя повторять. Это я и сделал…вроде как. Только теперь тестировать надо. Непонятно пока сработает ли та рекурсия выше и вообще правильно ли я все написал.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Чтобы пользователь не мог подправить этот запрос и нужен хэш.

Смотри я бы пошел по простому пути и сделал бы аддон. Этот аддон создает две функции, а они глобальные для всех аддонов:

HackGetAchievementCriteriaInfo
HackGetAchievementLink

Затем я заменяю в твоем клиентском аддоне все вызовы оригиналов на свои.

Эти методы в зависимости от переключателя на экране делают две вещи:

  1. Если переключатель отключен то просто возвращают результат оригинальных функций.
  2. Есди переключатель включен то меняют статус выполнения ачивки с «не выполнено» на «выполнено» и возвращают результат.

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

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Так это не мои функции. GetAchievementCriteriaInfo - это серверная апи функция, которая просто показывает статус ачивки. Мне на него,если честно, вообще по боку. Я могу глянуть его и глазами и вручную принять квест у пользователя. В таком случае ты его вообще никак не подделаешь.

Но я же хочу автоматизации. Чтобы моя часть аддона сама принимала этот результат и назначала награду. А моему аддону вообще похрену на статус твоей ачивки. И вот тут ты хрен подделаешь. Ты можешь именно что сформировать запрос, который типа должен быть похож на правильный. А как ты его подделаешь то? Нужно разобраться что именно проверят моя часть аддона. А она не проверяет статус твоей ачивки! В этом и фича. Она проверяет само правильное формирование запроса от тебя. Сам запрос должен быть определенного вида. В этом и помогает хэш.

Ты же не знаешь как формируется хэш, а потому не сможешь его подделать. Если ты возмьешь просто один из старых хэшей, я сделал на это проверку, такой уже не будет принят. Нужно формировать новый.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

В этом и фича. Она проверяет само правильное формирование запроса от тебя. Сам запрос должен быть определенного вида. В этом и помогает хэш.

Еще раз мне не важно как генерируется хеш или логику работы аддона все что мне надо это поменять строки в твоем клиентском аддоне с вот такой строки:

SendChatMessage(hshStran3C .. " #zzk " .. " Я сделал " .. j .. " пунктов ачивки " .. msg1 .. " " ..  GetAchievementLink(msg1) .. " из " .. mozhnoLiSdatChislo, "OFFICER", nil, 1)

на вот такую:

SendChatMessage(hshStran3C .. " #zzk " .. " Я сделал " .. j .. " пунктов ачивки " .. msg1 .. " " ..  HackGetAchievementLink(msg1) .. " из " .. mozhnoLiSdatChislo, "OFFICER", nil, 1)

И все, логика работы вообще побоку если я могу подделать результат «GetAchievementLink» или «GetAchievementCriteriaInfo» просто подменив её в твоем клиенском коде.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Ну, это уже имеет шансы на успех,кстати. Но ты меняешь чисто декоративное.

То что ты меняешь это отображение ачивки для удобства пользователя. Чтобы он видел что сдает, не более. На самом деле его аддон задолго до этого проверяетстатус выполнения.

Да, правка аддона это проблема. Аддон можно модифицировать и подделать. Благо мало кто на это способен и кто этим заморочится, как мне кажется.

Нужно подумать как проверить уникальность аддона. Хм.. Вот это задачка.

Знаешь, а в крайнем случае то что ты пытаешься менять - изменить нельзя. Это именно апи сервера и ты его тупо не подделаешь. Мне достаточно глазами увидеть твой поддельный запрос и все. Я сразу пойму, что это подделка. То есть это легко палится.

Однако, автоматика это примет, да.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 3)
Ответ на: комментарий от LightDiver

На самом деле его аддон задолго до этого проверяетстатус выполнения.

Вот поэтому я и написал что нужен переключатель на экране, при выключенном состоянии возвращает оригинал что нужен для взятия квеста, при включенном правит результат что нужен для сдачи квеста.

И вот проверку уникальности аддона то-же можно поправить так как код на стороне клиента. И ты заблуждаешься если думаешь что мало кто может сделать. Есть целые сайты посвященные взлому программ даже с кучей защит.

Все что нужно игроку это найти такого взломщика и заплатить ему небольшую сумму денег за взлом, умение программировать игроку не нужно только наличие денег.

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

V1KT0P ★★
()
Ответ на: комментарий от LightDiver

Знаешь, а в крайнем случае то что ты пытаешься менять - изменить нельзя. Это именно апи сервера и ты его тупо не подделаешь. Мне достаточно глазами увидеть твой поддельный запрос и все. Я сразу пойму, что это подделка. То есть это легко палится.

Как ты поймешь что это подделка если оригинальный результат и подделаный отличается только цифрой finished, там конечно еще есть дата и критерии но их то-же не сложно подделать.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

У меня есть три слоя защиты. Первый слой защиты от непрофессионального игрока. Такой игрок не знает програмирования, не знает как изменять аддоны. Он может просто попытаться в чат написать поддельный запрос. Именно от этого помогает хэш. Этого хватит в 99% случаев.

Второе - я могу глазами отследить поддельную строку. Ты никак не сможешь подделать апи сервера. Это от полупрофессиональных пользователей, которые настолько гребанутые, что сделают подделку аддона.

Ну и третье - это просто фановая гильдия, где народ делает эти квесты ради лулзов. Мой третий слой защиты - никому особо нет смысла заморачиваться в более сложной подделке. Так что хватит и хэша.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от V1KT0P

А очень просто пойму. Смотри:

https://cdn.discordapp.com/attachments/811217303378329643/1099404737859821648/WoWScrnShot_042323_014136.jpg

Желтый текст в чате это линк на ачивку. Я на нее кликаю. И что я вижу? Игровой сервер мне покажет прогресс выполнения этой ачивки. Это ты никак не подделаешь. Если ты подделаешь сам текст, он перестанет быть ссылкой и поменяет цвет даже. И все - это все видят.

Автоматика такой ответ примет. Она не может проверить - ссылка ли там. А вот живые игроки вокруг все увидят сразу.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 2)
Ответ на: комментарий от LightDiver

Ага. То есть у нас тут есть

  1. Пользователь — хуман с ушами.
  2. Сервер — сервер ВоВ. Хранит всю информацию, касающуюся игры, в том числе о всех Пользователях, их взятых/выполненных квестах и ачивках. Чтобы получить информацию о себе, своих ачивках и квестах, Пользователю нужно аутентифицироваться через Клиент. Другой Пользователь этого сделать не может (по крайней мере, если он не администратор Сервера).
  3. Клиент — клиент ВоВ. Позволяет устанавливать пользовательские скрипты (Аддоны), которые имеют доступ ко всей информации, доступной Пользователю непосредственно в Клиенте.
  4. Спонсор — Пользователь, который из своего кармана раздает награды другим Пользователям за выполнение ачивок/сдачу квестов, для этого в его Клиент установлен Аддон (серверная часть), который слушает его приватные сообщения и реагирует на Сообщения определенного вида (Команды).
  5. Спонсируемый — пользователь, который может получить награду от Спонсора. Для этого он должен послать Команду Спонсору, который для подтверждения права на награду может запросить информацию об ачивках/квестах Спонсируемого в виде отдельного Сообщения определенного вида — Подтверждения. Для автоматической отсылки Подтверждений в Клиент Спонсируемого установлен Аддон (клиентская часть), который слушает его приватные сообщения и реагирует на некоторые Команды (запросы на Подтверждения). При получении такой Команды клиентская часть Аддона проверяет, что Спонсируемый действительно выполнил условия для получения награды и, если проверка была успешной, создает и отсылает Подтверждение.
  6. Сообщение — текстовое сообщение от одного Пользователя другому. TODO: какие атрибуты есть у сообщения (имя автора, время отправки и т.д.)? Может ли автор их подделать?
  7. Команда — TODO: описать формат
  8. Подтверждение — TODO: описать формат

Проблема: Спонсируемый может отправить Команду на получение незаслуженной награды и подделать Подтверждение (например, модифицировав клиентскую часть Аддона или используя свою собственную версию), в итоге Спонсор рискует остаться без штанов.

Предлагаемое решение: клиентская часть Аддона включает в Подтверждение Токен, который серверная часть Аддона может валидировать и принять решение о выдаче награды. Токен генерируется на основе имени пользователя Спонсируемого и текущего времени (чего-то еще?)

Примерно так все обстоит?

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от LightDiver

Второе - я могу глазами отследить поддельную строку. Ты никак не сможешь подделать апи сервера. Это от полупрофессиональных пользователей, которые настолько гребанутые, что сделают подделку аддона.

Еще раз я не говорю генерировать поддельные данные, я говорю что нужно вызвать API сервера WOW и уже ответ сервера подправить. Там не будет отличий, вот что возвращает сервер:

achievement:achievementId:characterId:finished:month:day:year:criteria1:criteria2:criteria3:criteria4

Вот ответ от сервера если ачивка выполнена сегодня:

achievement:achievementId:characterId:1:4:22:23:criteria1:criteria2:criteria3:criteria4

Вот ответ если не выполнена:

achievement:achievementId:characterId:0:0:0:0:criteria1:criteria2:criteria3:criteria4

Меняем статус и день из предыдущего и получаем то-же самое что вернул бы сервер еслиб мы получили ачивку:

achievement:achievementId:characterId:1:4:22:23:criteria1:criteria2:criteria3:criteria4

Как ты на глаз отличишь оригинал и подделку?

V1KT0P ★★
()
Ответ на: комментарий от Nervous

Короче. Сам линк на ачивку ты не подделаешь никак. Вообще никак. Это выдает только игровой сервер. Достаточно кликнуть на линк и видно - выполнил ли ты квест.

Свой ник на чужой ты тоже никак не подделаешь. Да и смысла в этом нету. Все остальное можно подделать, да.

Автоматику мою обмануть можно, но сложно и это палится живыми игроками с первого взгляда.

Вопрос затрат труда и получаемого результата. То как можно обмануть мою автоматику, просто не имеет смысла в рамках задачи.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Желтый текст в чате это линк на ачивку. Я на нее кликаю. И что я вижу? Игровой сервер мне покажет прогресс выполнения этой ачивки. Это ты никак не подделаешь. Если ты подделаешь сам текст, он перестанет быть ссылкой и поменяет цвет даже. И все - это все видят.

Но ведь ссылка это и есть текст, а ты уверен что сервер делает запрос серверу по ссылке а не берет информацию из чата? Ведь если берет из чата то можно подделать результат и у тебя будет показываться что ачивка выполнена а в реальности нет. Это надо опытным путем проверить.

Если клиент делает запрос на сервер, это значит что на клиенте можно проверить статус ачивки любого игрока, в этом случае нет смысла заморачиваться защитой просто делаешь эту проверку по клику на ссылку автоматической и все.

V1KT0P ★★
()
Ответ на: комментарий от LightDiver

Попробуй сформируй это в команду отправки в гильдию. Через SendChatMessage

Я никогда не играл в wow поэтому не могу проверить. Еще раз, SendChatMessage принимает СТРОКУ, и уже эту строку он парсит на наличие ссылки и подсвечивает её, там есть формат этой ссылки, сделай проверку как я написал и проверь он реально делает запрос или берет результаты из сообщения, так как не зря ведь ссылка содержит в себе все данные о статусе ачивки, как по мне это специально сделано чтоб снизить нагрузку с сервера. А значит можно подделать.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Я не уверен что нельзя сформировать линк на поддельную ссылку. Но я пока не видел таких поддельных ссылок сам, так что не знаю можно ли это сделать.

Блин, да и это лишь стартовые квесты для нубов. Я при помощи аддона формирую различные типы заданий. Чтобы подделать все, нужно затратить труда чуть ли не столько же, скоько я трачу на написание всего этого. Это просто не имеет смысла.

Например квест на поиск точки в локации.Тут автоматика нужна просто для удобства. Чтобы выдала сама награду пользователю, когда он найдет место.

Или чтобы показала, что пользователь вышел с маршрута. Тут работает та же система хэшей. Проверка клиентом координат и выход за них формирует специальное сообщение. А есть и текстовые квесты вообще другого типа. У меня тут задумок на десять лет вперед, блин.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от V1KT0P

Тут еще сервер нестандартный. Это глубоко модифицированная вариация, где многое из того что ты перечислил в прицнипе невозможно. Отключена возможность играться с цветами в чате. Отключены многие стандартные аддоны - забанены на уровне сервера.

Отключены многие функции апи. А за кое что и банят автоматически. Все не так страшно, как кажется.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Тут работает та же система хэшей.

Я просто к тому что ты не должен слишком на этот хеш полагаться. Квест на поиск так-же взламывается подделкой координат =).

V1KT0P ★★
()
Ответ на: комментарий от Nervous

Прелесть моей системы в том, что это работа на репутацию и карьеру. Ты не сможешь получить много и сразу. Сама суть квестов - затянуть игрока в систему и подольше оставить в гильдии. А там уже смотреть приживется или не приживется.

И вот у прижившихся игроков в итоге есть шанс получить что то ценное.

Да и многие типы квестов игроку просто интересно самому выполнить. Но вот их как раз я еще пока не реализовал. Начал с простого.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Тут еще сервер нестандартный.

Это совершенно не важно. Общение между аддоном клиентом и аддоном сервером идет с помощью текста. Игрок может поменять в твоем киенте всё что угодно, ему не надо знать что разрешено на сервере а что запрещено, ему лишь надо написать обертки на api wow вызовами что использует твой аддон и подделывать результат когда надо вот и всё.

V1KT0P ★★
()
Ответ на: комментарий от LightDiver

Прелесть моей системы в том, что это работа на репутацию и карьеру.

Если я подделаю результат ачивки или место положение то это не повлияет на репутацию, так как никто не узнает что я это сделал ибо нет способа проверить правдивость ачивки или того что я действительно был в нужном месте.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Это очень важно. бан цвета в чате уже отсеивает 90% таких подделок. Любая подделка сразу будет видна. Короче,посмотрим.

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

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от Nervous

Если проще6 моя задача забанить самые тупые и простые способы читов. Остальными врамках данной задачи просто нет смысла заморачиваться.

Ну и в рамках чисто спортивного интереса - придумать как решить такую задачу и реализовать ее - мне это очень интересно.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Это очень важно. бан цвета в чате уже отсеивает 90% таких подделок. Любая подделка сразу будет видна. Короче,посмотрим.

А чего смотреть, вот документация по ссылке на ачивку:

|cffffff00|Hachievement:2186:00000000002FDDE9:1:12:19:8:4294967295:4294967295:4294967295:4294967295|h[The Immortal]|h|r
    "|cffffff00" - Colorizes the link (see itemLink)
    "|H" - Hyperlink introduction
    "achievement:1284:00000000002FDDE9:0:0:0:-1:65529:0:0:0" – Read more at Achievement String.
    "|h" - Hyperlink data concluded, text follows
    "[Outland Dungeonmaster]" - Display text
    "|h" - Hyperlink conclusion
    "|r" - Returns color to normal

Вот для примера другая ссылка на предмет:

|cff9d9d9d|Hitem:3299::::::::20:257::::::|h[Fractured Canine]|h|r
    |cff9d9d9d - Colorizes the link with a medium grey color (hex color code)
        The first two characters after '|c' may be the alpha level, where 'ff' is fully opaque.
        The next three sets of two characters represent the red, green, and blue levels, just like HTML.
    |H - Hyperlink link data starts here
    item:7073:0:0:0:0:0:0:0:0:0:0:0:0 or item:7073:::::::::::: - the item string. See itemString.
    |h - End of link, text follows
    [Broken Fang] - The actual text displayed
    |h - End of hyperlink
    |r - Restores color to normal

Видим что текст «|c» означает цвет текста, но даже если он забанен, то текст «|H» - означает начало ссылки, «|h» - означает конец ссылки и начало текста ссылки или конец текста ссылки.

А защита просто от искушения считерить - не более.

Мне наоборот интереснее было бы взламывать квесты чем выполнять их. Выполнение квесто это почти всегда монотонные действия, а взлом это битва разумов, тут уже не против компа играешь а против человека =).

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Message: [string «SendChatMessage(|cffffff00|Hachievement:2186:00000000002FDDE9…»]:1: unexpected symbol near ‘|’ Time: 04/23/23 12:14:04 Count: 1 Stack: [C]: in function `RunScript’

Я лично хз как такое отправить в гильдейский чат. Через сенд Мессейдж оно ругается. Так что хз реализуемо ли это. Если нет - значит я все сделал правильно.

Технически это работает только с отправкой в канал. То есть увидишь это толькоты и те кто рядом с тобой. Но аддон работает с гильдчатом.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 2)
Ответ на: комментарий от V1KT0P

Ахаххаха… Это не требуется. На самом деле не нужно подставлять никаких ачивок и модифицировать. Просто переписываем функцию, которая проверяет выполненность ачивки и заставляем ее всегда говорить, что ачивка выполнена.. Блин. Ладно, против настолько дотошных игроков защиту сделать нельзя.

LightDiver ★★★★★
() автор топика