O que você entende por "proteger"?
> esbarrei na dificuldade de proteger parte do codigo, em especial
> algumas que tratam de envio de pontuacao e coisas semelhantes.
O que você entende por "proteger"?
-- Exemplo de leitura do seu código de pontuação.
local source_lua = decrypt("/caminho do arquivo lua")
loadstring(source_lua)()
É isso mesmo que você deseja?
2009/8/24 Hamilton Lima Jr <hamilt...@gmail.com>:
--
Abs.
Alessandro Cordeiro Hecht
----------------------------------------
É uma questão uma pouco mais complexa na minha opinião =(
2009/8/24 Alessandro Hecht <aless...@fabricadigital.com.br>:
Existem alguns módulos, basta escolher e seguir com um.
2009/8/24 Lucas Hermann Negri <kkn...@gmail.com>:
2009/8/24 Alessandro Hecht <aless...@fabricadigital.com.br>:
O problema é que não basta escolher o módulo. O Lucas tem razão em
perguntar a questão da chave... :o)
De maneira geral, você precisa garantir que a sua chave fique na parte
binária da aplicação e, utilizando esta chave, você pode então
carregar os arquivos encriptados (sejam de código ou de dados).
Note que mesmo isso não protegeria muito sua aplicação, só tornaria
ela menos aberta (o que pode ser suficiente para suas necessidades,
claro).
André
Obs.: Não estava considerando manter seu código seguro, ou qual é a
melhor criptografia para o caso em especifico.
Segurança é uma coisa bem séria, o meu pequeno exemplo de loadstring
não estava considerando isso...
2009/8/25 Hamilton Lima Jr <hamilt...@gmail.com>:
Nesse caso você precisa trocar os 'loaders' -- funções que efetuam a
carga efetiva dos módulos -- por outros que possam carregar módulos
encriptados. Os loaders ficam na table package.loaders[1] e são
executados em ordem; se um loader não conseguir encontrar o módulo
desejado ele passa para o próximo.
Assim você pode encriptar todo o código ou só uma parte, sem precisar
se preocupar com o que está encriptado e o que não está em cada uso.
Por exemplo: suponha que você crie um loader que carregue arquivos lua
encriptados e o coloque na posição 2 (imediatamente depois do cache)
empurando os outros loaders para baixo. Você pode gravar seus arquivos
encriptados com a extensão .xlua e os não encriptados com a extensão
.lua
Quando você fizer [[ require 'core.logic' ]] o seu loader vai tentar
encontrar o arquivo '/core/logic.xlua' -- se não conseguir passará
para o próximo loader, que vai buscar o /core/logic.lua no caminho do
package.path
O único inconveniente desse método é que você tem que implementar
novamente a lógica de busca de arquivos do package.path, pois o Lua
não exporta essa função pra você usar do lado de fora. Tudo bem que é
uma lógica simples, mas redundância de código me dá 'coisas'.. :-)
[]s
Luís Eduardo Jason Santos
[1] http://www.lua.org/manual/5.1/pt/manual.html#pdf-package.loaders
2009/8/25 Alessandro Hecht <aless...@fabricadigital.com.br>:
Sim, o que voce quer fazer é complicado a menos que você saiba especificar
melhor o que quer...
Se você controla o programa que vai rodar os scripts então uma maneira
simples de ter uma boa proteção é pre-compilar os scripts que você quer
proteger usando um ldump.c modificado, que gera arquivos cuja estrutura
é diferente da atual. Você pode também mudar a ordem das instruções na
VM. Houve uma discussão sobre isso em lua-l não faz muito tempo, creio.