Интерфейсы и с чем их едят

В этой статье буду рассмотрены основные моменты при использовании интерфейсов.
Перед прочтением рекомендуется ознакомиться с наследованием классов и преобразованиями типов объекта.
Статья
23 9.3K
29
Каким образом это будет объявлено без интерфейсов?
6
Как не видел смысла в интерфейсах, так и не вижу. Там где нужна та или иная реализация в классе, она там и будет. Даже если несколько объектов, должны уметь делать что-то одно, это будет объявлено и без интерфейсов.
19
спасибо за статью, просто и по полочкам, квик гайд фо даммиз лайк ми. Более развернуто, чем в "с# за 31 день"
29
RealizationABC
Может все-таки Implementation?
Да. Исправил.
35
А чего никто не комментирует?)
Столкнулся со специфичной проблемой безопасности при написании аддона для WoW.
ПО состоит из трёх уровней:
  1. Сам аддон, Lua.
  2. Клиент, Java.
  3. Веб-сервис.
Аддон (1) создаёт и поддерживает лог на компьютере игрока. Лог содержит рекорды и игровую статистику. Клиент (2) читает созданный аддоном лог и посылает…
Вопрос
7 2.2K
22
все обращения к WoW API придется оставить не обфусцированными
Я как-то упустил этот момент. Благодарю за наводку.
обфускация имееет смысл только на больших объемах кода
Попробую декларировать десяток другой чуши в исходнике.
Закрою вопрос когда закончу с реализацией; пару недель. Спасибо за помощь.
24
Zahanc:
Вариант с md5 хешем каждой записи или всего лога позволит остановить часть хомячков с той-же надежностью, что и "шифрование" xor-ом - оба способа одинаково обходятся заглянув в код Lua.
Обеспечить одинаковую работу рандома достаточно просто - там же на самом деле псевдорандом и seed видоизменяется после каждой операции заранее заданым способом - достаточно обеспечить одинаковость этой операции и рандом будет выдавать одинаковые значения хоть на джаве, хоть на брейнфаке. Другое дело что это так-же бесполезно, как и хеш данных - обходится идентично за счет доступа к Lua-имплементации в открытом виде.
обфускатор штука хорошая и задержит небольшое кол-во хомяков, но во-первых все обращения к WoW API придется оставить не обфусцированными, а во вторых обфускация имееет смысл только на больших объемах кода - иначе найти нужное место в коде не составит большого труда.
22
Я тоже думаю в этом направлении. Вот только не могу придумать как это сделать точно.
Я рассуждал, мол, каждая запись в лог сопровождается md5 хэшем: токен+данные записи. Клиент пересчитывает хэш во время чтения и сопоставляет. Вот только токен можно подсмотреть в исходниках Lua, так что это не работает.
Между прочим понял что неизменяемость файла Lua не играет роли. Враг может скопировать Lua, модифицировать копию и таким образом воспроизвести любую логику.
Когда думал писать свой алгоритм, то упираюсь в разницу в имплементации. Можно ли как-то гарантировать что RNG будет вести себя одинаково в Java и Lua?
+
Наверное буду "шифровать" XOR'ом или что-то вроде. Чтобы нужно было-бы по крайней мере понимать Lua, чтобы понять что происходит.
+
Lua таки можно компилировать в байткод: www.lua.org/manual/4.0/luac.html Проверял на luac53. Вот только WoW не загружает такие файлы (ожидаемо). Может ещё что раскопаю.
К тому же существуют obfuscator'ы. Не могу запустить ни один, правда.
+
Рабочий obfuscator: github.com/jkusner/LuaObfuscator Не уверен работает ли он с 30300 WoW API. Не могу проверить прямо сейчас.
24
Zahanc, есть простое решение, которое остановит часть хомяков - запилить свой алгоритм рассчета хеша на основе данных и писать этот хеш тоже в лог, тогда тупые изменения файла данных уже ничего не дадут т.к. надо будет пересчитывать хеш как-то, а клиент сможет на основе данных проверять валидность хеша
но это не спасет от возможности подсмотреть алгоритм генерации хеша и/или шифрования и воспользоваться этими знаниями в своих целях, вплоть до использования скопированного оттуда кода хеширования/шифрования для автоматической генерации данных в том формате в каком их ожидает клиент
и я даже не говорю о возможности декомпиляции клиента - это не уровень хомячков