Igor
Какой-нибудь хацк бравлстарса на гейм гуардиане, наверное
Igor
Или что там сейчас популярно
Hello, World! 🎄
Никак.
Вообще можно, но через жопу
Highly Likely
Какой-нибудь хацк бравлстарса на гейм гуардиане, наверное
Во, геймгардиан. Не мог вспомнить название
Snusmumriken
Он что, самоудалился?
Igor
Походу
Snusmumriken
Serdy запили что угодно, хоть шифр цезаря. На сишной стороне ловки напишешь декодер.
Igor
Те в файловой системе ловки AES256 проксю встроили
Snusmumriken
В любом случае, для защиты ловки придётся или обфусцировать, или делать моды на саму ловку.
Igor
Так точно
Igor
Интересно
Igor
Обиделся чтоль?
Hello, World! 🎄
Обиделся чтоль?
Да, обидели наверно. Со своими приколами про продажу читов школьников :)
Snusmumriken
Ещё как элементарная защита: примонтировать запароленный zip-архив с сорцами к physfs, пороль вшивается в ловку.
Snusmumriken
Шифровать-то зачем? Единственное зачем может понадобиться шифрование — защита коммерческой фигни. У тебя есть коммерческая фигня? Ещё гипотетически можно конвертнуть луа в байткод, но защитит только от школьников.
Snusmumriken
Ну, просто так — не нужно вообще ничего, это основы.
Igor
Не на шутку разозлился...
Snusmumriken
Карочи, я предложил список вариантов. Решай.
Snusmumriken
Что "вот"? Список вариантов давно висит.
Highly Likely
Карочи, я предложил список вариантов. Решай.
Так он не справится с предложенным
Snusmumriken
Убирай логику с клиента. От читеров такое не защитит вообще. Никакое шифрование.
Highly Likely
Или у него игра онлайн и вся логика на клиенте)
Делать авторитарный сервер или смириться
Snusmumriken
Шифровать нет смысла, только логика на сервере, в противном случае игра будет наводнена читерами. И даже с авторитарным сервером же, можно напилить ботов.
Snusmumriken
А слабо было с самого начала сказать зачем?
Snusmumriken
Тут люди вообще-то шарящие в теме. Имеют немножко больше опыта.
Alexey
что ж вы накинулись на человека? ) Если коротко, то все что на стороне клиента ВСЕГДА взламывается. даже если логика на asm написана, а не на Lua вопрос только в мотивации взломщика )
Highly Likely
что ж вы накинулись на человека? ) Если коротко, то все что на стороне клиента ВСЕГДА взламывается. даже если логика на asm написана, а не на Lua вопрос только в мотивации взломщика )
У нас фраза «как зашифровать …» в этом чате — как красный флаг. Обычно после этого в течение пары часов тебе выносят мозг, пытаясь зашифровать свой взлом бравлстарса
Highly Likely
И иногда еще расшифровать хотят
Snusmumriken
Чтобы потом зашифровать но уже КРУЧЕ, чтобы на этот раз никто не взломал.
Highly Likely
Так что да, иногда невинные теперь тоже страдают
Igor
Ну вот если написать на брейнфаке, ситуация может стать лучше…
Вообще интересно, есть ли хоть одна игра с логикой на брейнфаке?...
Alexey
Ну вот если написать на брейнфаке, ситуация может стать лучше…
вопрос только в мотивации взломщика. Если захочет взломает. Если логика на клиенте, то чаще всего достаточно покопаться в памяти и лезть в код не нужно.
Hello, World! 🎄
Никак.
function encode(text) array = "{" for i = 1, #text do array = array..(text:sub(i, i):byte()+1).."," end return array..'}' end function get_encode_text(t) text = "" for i = 1, #t do text = text..string.char(t[i]) end return text end function decode(text) array = "" for i = 1, #text do array = array..string.char((text:sub(i, i):byte())-1) end return array end print(encode("Govno Encoder")) print(get_encode_text({72,112,119,111,112,33,70,111,100,112,101,102,115,})) print(decode("Hpwop!Fodpefs"))
Snusmumriken
Называется примерно так: -- я крутейший хакер local source = decode(readfile("script.lua")) writefile("script.lua.decoded", source)
Hello, World! 🎄
У всего этого есть одна смешная проблема
Да, легко получить исходники
Hello, World! 🎄
Но он же в итоге получит китайские символы)
Snusmumriken
На самом деле это ловушка. Хочется наслоить десять тысяч шифрований одного в другое в третье, но это ни разу не повышает надёжность.
Hello, World! 🎄
И тем более я щас понял, что теряются символы
Hello, World! 🎄
Из-за того, что символа не существует при смещении
Snusmumriken
))0
Hello, World! 🎄
В lua же была какая-то функция, которой можно передать строку и она её выполнит?
Snusmumriken
loadstring/load
Hello, World! 🎄
loadstring/load
load('print("Hellofdjfjdl")')
Igor
))0
А ещё можно для смещения math.random() использовать
Hello, World! 🎄
load('print("Hellofdjfjdl")')
Типо так чтоб выводило. Передавать строку и она как код выполняется.
Igor
Но тогда код платформозависим станет))
Hello, World! 🎄
У меня нету loadstring
Hello, World! 🎄
У меня нету loadstring
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
Igor
У меня нету loadstring
load(code, chunkname, env)
Hello, World! 🎄
load(code, chunkname, env)
Да, заработало
Snusmumriken
load(code, chunkname, env)
Кстати, chunkname это очень интересная штука. Её основная задача — показывать в трейсе ошибки из конкретного файла. И у меня на работе, например, require делает подгрузку скриптов из гитов разных пользователей (иногда одновременно), и там в chunkname — username@scriptname, что прекрасно позволяет контролировать место подгрузки.
Hello, World! 🎄
test1.txt k*G*? l*G*;: m*G*<: z|sx~2k5l5m3 main.lua function decode(text) array = "" for i = 1, #text do array = array..string.char((text:sub(i, i):byte())-key) end return array end file = io.open('test1.txt', 'r') t = file:read("*all") load(decode(t))() output: 35
Удалённый аккаунт
Огромное спасибо.
Hello, World! 🎄
Огромное спасибо.
Какое спасибо
Hello, World! 🎄
Тут нету самой функции шифрования)
Удалённый аккаунт
Хах
Snusmumriken
test1.txt k*G*? l*G*;: m*G*<: z|sx~2k5l5m3 main.lua function decode(text) array = "" for i = 1, #text do array = array..string.char((text:sub(i, i):byte())-key) end return array end file = io.open('test1.txt', 'r') t = file:read("*all") load(decode(t))() output: 35
function decode(text) out = {} for i = 1, #text do out[i] = string.char((text:byte(i))-key) end return table.concat(out) end То же самое но худо-бедно оптимизировано.
Snusmumriken
Hello, World! 🎄
Hello, World! 🎄
Hello, World! 🎄
main.lua key = 10 function decode(text) array = "" for i = 1, #text do array = array..string.char((text:sub(i, i):byte())-key) end return array end file = io.open('main.code', 'r') t = file:read("*all") load(decode(t))()
Hello, World! 🎄
в main code не читаемая фигня
Удалённый аккаунт
Спасибо