Столкнулся со специфичной проблемой безопасности при написании аддона для WoW.
ПО состоит из трёх уровней:
- Сам аддон, Lua.
- Клиент, Java.
- Веб-сервис.
Аддон (1) создаёт и поддерживает лог на компьютере игрока. Лог содержит рекорды и игровую статистику. Клиент (2) читает созданный аддоном лог и посылает команды веб-сервису (3).
Проблема в том, что лог это лишь открытый текстовый файл. Сколько нибудь грамотный игрок легко может подменить записи.
Вопрос: как предотвратить подмену записей?
Мои рассуждения следуют.
- Я знаю, что использую WoW API аддонов не по назначению. Аддоны предназначены для расширения клиента и никак не для Web. И всё-таки?
- Я знаю, что одно из правил гласит, что если злоумышленник получил секретные файлы, даже если они зашифрованы, то информация уже скомпрометирована. Я не пытаюсь сделать совершенно безопасную систему. Достаточно лишь чтобы среднестатистический игрок, ничего не знающий о компьютерах, не мог "скормить" веб-сервису любую информацию.
- Говоря о решении. Я могу вообразить что нужен какой-то токен. Вроде как заставить аддон и клиент генерировать случайные хэши используя одно и тоже семя (seed), и чтобы клиент сопоставлял генерированные хэши когда читает лог. Проблема здесь главным образом в разнице в реализации алгоритмов: аддон написан на Lua, клиент на Java. RNG выдаст разные числа даже с идентичным семенем.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. Zahanc
prog,
Кстати да, я ведь могу клиентом (Java) проверять hash файла Lua. Таким образом можем исходить из того, что Lua не изменяем.
Ред. prog
+
Наверное буду "шифровать" XOR'ом или что-то вроде. Чтобы нужно было-бы по крайней мере понимать Lua, чтобы понять что происходит.
+
Lua таки можно компилировать в байткод: www.lua.org/manual/4.0/luac.html Проверял на luac53. Вот только WoW не загружает такие файлы (ожидаемо). Может ещё что раскопаю.
К тому же существуют obfuscator'ы. Не могу запустить ни один, правда.
+
Рабочий obfuscator: github.com/jkusner/LuaObfuscator Не уверен работает ли он с 30300 WoW API. Не могу проверить прямо сейчас.
Вариант с md5 хешем каждой записи или всего лога позволит остановить часть хомячков с той-же надежностью, что и "шифрование" xor-ом - оба способа одинаково обходятся заглянув в код Lua.