Encriptar Códigos

1,698 views
Skip to first unread message

Demonbholder XTibia

unread,
Jan 30, 2012, 11:53:51 PM1/30/12
to Lua BR
Olá, gostaria de saber se existe algum jeito de encriptar códigos lua
sem alterar nada na sua execução.

Já procurei, mas não achei nada conclusivo.

Fico no aguardo, desde já, obrigado.

Alex Queiroz

unread,
Jan 31, 2012, 4:52:22 AM1/31/12
to lua...@googlegroups.com
Olá,

2012/1/31 Demonbholder XTibia <demonb...@xtibia.com>:


> Olá, gostaria de saber se existe algum jeito de encriptar códigos lua
> sem alterar nada na sua execução.
>
> Já procurei, mas não achei nada conclusivo.
>

Antes de mais nada, o básico: Você sabe que vai ter que enviar a
chave para descriptografar o código junto com o programa de alguma
forma, e que não vai ser possível garantir a "segurança" do seu
código, certo?

--
-alex
http://www.artisancoder.com/

Demonbholder XTibia

unread,
Jan 31, 2012, 5:18:33 AM1/31/12
to Lua BR
Estou ciente que nenhuma segurança é 100%.

Quanto a chave para descriptografar, desde que não consigam utilizar
essa mesma chave para descriptografar o código, - o que faria da
proteção do código inútil - tudo bem.

Obrigado pela atenção.

On 31 jan, 07:52, Alex Queiroz <asand...@gmail.com> wrote:
> Olá,
>
> 2012/1/31 Demonbholder XTibia <demonbhol...@xtibia.com>:

Alex Queiroz

unread,
Jan 31, 2012, 5:27:18 AM1/31/12
to lua...@googlegroups.com
2012/1/31 Demonbholder XTibia <demonb...@xtibia.com>:

> Estou ciente que nenhuma segurança é 100%.
>
> Quanto a chave para descriptografar, desde que não consigam utilizar
> essa mesma chave para descriptografar o código, - o que faria da
> proteção do código inútil - tudo bem.
>

Mas foi exatamente o que eu disse. A chave vai ter que estar no
binário em algum lugar. Você pode dificultar que achem a chave, mas
nunca impedir. Uma idéia é espalhar os bytes da chave pelo programa e
reconstruir a chave em tempo de execução. Então, tendo isso em mente,
minha sugestão é estudar a API da biblioteca OpenSSL, que é rica, bem
testada e tem uma licença bem permissiva.

Por exemplo:

http://stackoverflow.com/questions/1152555/encrypting-decrypting-text-strings-using-openssl-ecc

--
-alex
http://www.artisancoder.com/

Luiz Henrique de Figueiredo

unread,
Jan 31, 2012, 5:32:08 AM1/31/12
to lua...@googlegroups.com
> Ol�, gostaria de saber se existe algum jeito de encriptar c�digos lua
> sem alterar nada na sua execu��o.

Encripte do modo que voc� quiser. Para executar um programa Lua encriptado,
escreva um "reader" que decripta ao carregar:
http://www.lua.org/manual/5.1/manual.html#lua_Reader

Use luaL_loadfile como exemplo:
http://www.lua.org/source/5.1/lauxlib.c.html#luaL_loadfile

Use um loader/searcher, se for usar require:
http://www.lua.org/manual/5.1/manual.html#pdf-package.loaders

Demonbholder XTibia

unread,
Jan 31, 2012, 6:08:35 AM1/31/12
to Lua BR
Entendi. Acho que não vale a pena ter esse trabalho, pois se o cara
entender o "reader" ele pode simplesmente fazer o mesmo processo que o
interpretador vai fazer.

Creio que é melhor deixar sem encriptar mesmo. Obrigado.

On 31 jan, 08:32, Luiz Henrique de Figueiredo <l...@tecgraf.puc-

Bruno Drago

unread,
Jan 31, 2012, 6:22:46 AM1/31/12
to lua...@googlegroups.com
Nao sei se minha abordagem esta correta, mas qual o problema de compilar o codigo lua JUNTO com o interpretador lua distribuir como se fosse um binario? Digo, altera o lua em C/C++.

Algum tempo atras adotei uma solucao parecida com uma linguagem script: peguei o codigo e dentro do leitor, coloquei uma funçao que lia um formato binario que eu criei (coisa como mudar letras, essas coisas so mente para evitar o obvio e compactei com gzip) e depois converti o codigo txt nesse formato. Usei isso por muitqo tempo ate nao usar mais essa linguagem...

Abs,
Bruno

Enviado via iPad

> --
> Lua BR - http://groups.google.com/group/lua-br

Victor Oliveira

unread,
Jan 31, 2012, 8:06:13 AM1/31/12
to lua...@googlegroups.com
Apesar de não ser um encriptador, existe o Lua Src Diet, que é um compressor de código, semelhante ao jquery, que dificulta a leitura do código. Acho que vale a pena dar uma olhada.

http://luasrcdiet.luaforge.net/

Abs
--
Victor Oliveira
victoroliveira.eng.br
21 8330-9999

Demonbholder XTibia

unread,
Feb 1, 2012, 12:29:40 AM2/1/12
to Lua BR
O problema que eu estou tendo é o seguinte:

eu mando uma string via socket do cliente para o servidor com as
informações de id e senha e de uma conta. O servidor checa e confere
se está correto, se estiver, ele retorna uma outra string para o
cliente.

Qualquer um que conseguir entender isso pode conseguir todas as senhas
das contas.

Claro que se ele não ler o código, não vai conseguir saber qual string
o servidor manda e como o cliente manda.

Alguém sabe de alguma solução? Como os outros programas fazem?
Obrigado desde já.

On 31 jan, 11:06, Victor Oliveira <victor.oliveira....@gmail.com>
wrote:
> Apesar de não ser um encriptador, existe o Lua Src Diet, que é um
> compressor de código, semelhante ao jquery, que dificulta a leitura do
> código. Acho que vale a pena dar uma olhada.
>
> http://luasrcdiet.luaforge.net/
>
> Abs
> --
> Victor Oliveira
> victoroliveira.eng.br
>  <http://victoroliveira.eng.br>21 8330-9999begin_of_the_skype_highlighting            21 8330-9999
>
> Em 31 de janeiro de 2012 09:22, Bruno Drago <bsdr...@gmail.com> escreveu:
>
>
>
>
>
>
>
> > Nao sei se minha abordagem esta correta, mas qual o problema de compilar o
> > codigo lua JUNTO com o interpretador lua distribuir como se fosse um
> > binario? Digo, altera o lua em C/C++.
>
> > Algum tempo atras adotei uma solucao parecida com uma linguagem script:
> > peguei o codigo e dentro do leitor, coloquei uma funçao que lia um formato
> > binario que eu criei (coisa como mudar letras, essas coisas so mente para
> > evitar o obvio e compactei com gzip) e depois converti o codigo txt nesse
> > formato. Usei isso por muitqo tempo ate nao usar mais essa linguagem...
>
> > Abs,
> > Bruno
>
> > Enviado via iPad
>
> > Em 31/01/2012, às 09:08, Demonbholder XTibia <demonbhol...@xtibia.com>

Breno Ramalho Lemes

unread,
Feb 1, 2012, 1:11:12 AM2/1/12
to Lua BR
Criptografia nos dados transmitidos, não no código. Geralmente para
senhas se usa criptografia de via única (unidirecional ou
irreversível). A senha criptografada é armazenada no servidor, o
cliente digita a senha que é criptografada e enviada ao servidor, se a
senha criptografada bater com a senha armazenada (também
criptografada) o sistema autentica.

Uma forma de tornar a criptografia unidirecional é usar a própria
senha como chave. Assim mesmo que alguém possa ler seu código não
poderá descriptografar os dados transmitidos, porque a chave não fica
armazenada em lugar nenhum.

Não sou especialista no assunto, mas se a ideia for algo simples eu já
usei MD5 [1]. É bem fácil e me serviu perfeitamente para o que eu
precisava.

[1] http://www.keplerproject.org/md5/

Bruno Silvestre

unread,
Feb 1, 2012, 6:04:52 AM2/1/12
to lua...@googlegroups.com
2012/2/1 Demonbholder XTibia <demonb...@xtibia.com>:

>
> Alguém sabe de alguma solução? Como os outros programas fazem?
>

Se vc quiser proteger alguma coisa localmente, o que muitas aplicações
fazem é usar algoritmos como 3DES ou AES para guardar um arquivo de
senhas criptografadas no disco. O usuário tem uma senha mestre que
descriptografa o arquivo de senhas e aí é possível ler a senha remota
de dentro desse arquivo. Acho que o lcrypt dá suporte a esses
algoritmos.

Já na parte remota, vc pode usar conexões SSL/TLS para estabelecer
canais seguros. O cliente só precisa ter o certificado público do
servidor. Como o certificado é público, não tem problema de ficar no
disco e alguém ler, o problema é se alguém trocar ele por outro.
(LuaSec é um binding que provê essa funcionalidade)

Depois da conexão segura estabelecida, vc pode confiar que está tudo
ok e trafegar a senha "aberta". Mas se vc acredita que a conexão ainda
assim não é tão segura (alguém trocou o certificado...), vc pode
tentar a abordagem de "desafio", onde a senha não trafega na rede. [1]

abs
--
bruno

[1] http://en.wikipedia.org/wiki/Challenge-response_authentication#Simple_Example_mutual_authentication_sequence

Alex Queiroz

unread,
Feb 1, 2012, 6:06:45 AM2/1/12
to lua...@googlegroups.com
Olá,

2012/2/1 Demonbholder XTibia <demonb...@xtibia.com>:


> O problema que eu estou tendo é o seguinte:
>
> eu mando uma string via socket do cliente para o servidor com as
> informações de id e senha e de uma conta. O servidor checa e confere
> se está correto, se estiver, ele retorna uma outra string para o
> cliente.
>

Bem, você imaginou a solução mais errada possível para a
situação. A senha "plain-text" nunca deve passar pelo socket. Procure
por "password message digest" no Google.

--
-alex
http://www.artisancoder.com/

Demonbholder XTibia

unread,
Feb 8, 2012, 10:46:43 AM2/8/12
to Lua BR
Obrigado pela ajuda de todos.

Resolvi limitando o número de pedidos por ip, já muitos grandes sites
utilizando está solução.

Mais uma vez, obrigado.

On 1 fev, 09:06, Alex Queiroz <asand...@gmail.com> wrote:
> Olá,
>
> 2012/2/1 Demonbholder XTibia <demonbhol...@xtibia.com>:
Reply all
Reply to author
Forward
0 new messages