Mantenha-se informado assinando nossa Newsletter.
| Como proteger o código fonte das aplicações NCL e Lua |
Por: Rafael Carvalho
|
|
No desenvolvimento de aplicações interativas para TV digital mais questões devem ser observadas do que simplesmente a codificação de uma aplicação; podemos citar como exemplo a parte de concepção da aplicação, design, elaboração de conteúdo, ilustração, áudio e vídeo e, claro, codificação. Portanto a criação de uma boa aplicação quase sempre envolverá um grupo multidisciplinar de profissionais. Outra questão que deve ser observada é a segurança, tanto da aplicação como do código fonte. O cenário da TV aberta no Brasil já é bastante concorrido e com o advento da interatividade a concorrência só tende a se acirrar. Questões como essas tornam-se essenciais para o desenvolvimento de uma aplicação interativa e devem estar presentes na mente tanto dos desenvolvedores como dos contratantes da aplicação. NCL e Lua são linguagens que não precisam ser compiladas para depois serem executadas. A princípio tanto o formatador NCL quanto o interpretador Lua executam ações que estão escritas num arquivo de texto comum que pode ser lido e entendido por qualquer pessoa. Por isso no desenvolvimento de aplicações para o Ginga-NCL alguns desenvolvedores e até algumas empresas podem ficar preocupadas com a questão do acesso ao código fonte de sua aplicação. Esse é um fato realmente importante, porém deve-se observar que não será fácil para qualquer telespectador acessar o código das aplicações que está recebendo; porém também não podemos pensar que seja uma tarefa impossível ou um tanto quanto improvável. Neste tutorial iremos abordar uma possível solução para quem deseja ter os arquivos fonte de sua aplicação protegidos. Quando falamos sobre proteção do código fonte estamos nos referindo a uma metodologia para evitar que qualquer telespectador curioso ou até um concorrente mal intencionado tenha acesso ao "algoritmo-segredo" da sua aplicação interativa. Os conteúdos multimídia (áudio, vídeo, imagens e textos) de uma aplicação interativa já são protegidos por leis de direitos autorais, portanto essa não será a nossa grande preocupação quando falamos em proteção do código de uma aplicação. Por outro lado um algoritmo pode ser copiado e re-escrito com grande facilidade, é este ponto que iremos abordar: como modelar e construir uma aplicação de forma a evitar a leitura de seu "algoritmo-segredo". Como mencionei anteriormente NCL e Lua são linguagens que não precisam ser compiladas para depois serem executadas. Porém isso não é tão simples assim. Segue uma livre tradução da introdução do capítulo 8 do livro Programming in Lua, Second Edition: "Lua sempre pré-compila o código fonte para uma forma intermediária antes de executá-lo. Isso pode até parecer estranho para alguns, porém essa etapa é muito usual em muitas linguagens interpretadas. A presença de uma fase de compilação pode soar estranho para uma linguagem interpretada como Lua. Contudo, a característica que distingue as linguagens interpretadas não é o fato de não serem compiladas, mas o compilador ser parte da linguagem em tempo de execução." Além disso, Lua também permite a inclusão de código pré-compilado em uma aplicação. Uma chamada com o comando require pode ser utilizada para importarmos um módulo pré-compilado, como exemplificado abaixo: require "meu-modulo" Para pré-compilarmos um arquivo Lua, em ambiente GNU/Linux, podemos utilizar o programa luac. Direto da man page: "Luac é o compilador Lua, ele traduz programas escritos na linguagem Lua para arquivos binários que podem ser carregados ou executados." Se você é um usuário Windows procure o Lua for Windows. Para convertermos um arquivo Lua para binário utilizando o luac fazemos: luac -o meu-modulo.tmp meu-modulo.lua Com isso o arquivo meu-modulo.lua foi pré-compilado. Mantivemos o seu nome original para garantirmos que outros arquivos que por ventura utilizavam este módulo continuem funcionando. De posse destas informações a estratégia que iremos adotar para proteger o nosso código fonte será modelar nossa aplicação de forma que a inteligência, o "algoritmo-segredo", fique em módulos Lua pré-compilados. Desta forma serão transmitidos apenas os arquivos binários e não o código fonte completo da aplicação. A figura abaixo exemplifica este modelo. Nela vemos o documento NCL fazendo a comunicação com um tratador de eventos Lua. Este tratador é responsável por toda a lógica da aplicação e por fazer a comunicação com o documento NCL, porém ele importa alguns módulos Lua já pré-compilados. São nestes módulos que iremos colocar os algoritmos que desejamos proteger. Com esta abordagem a versão final da aplicação não conterá o código fonte dos módulos.
Para exemplificar esta solução, está disponível para download uma versão do Jogo da Velha com os módulos Lua pré-compilados. Neste post abordamos uma solução para protegermos o código fonte de nossas aplicações interativas. Outras abordagens, até mesmo o aprimoramento desta, poderiam ser elaboradas; esta não é uma solução única e nem pretende ser a solução final. O que apresentamos tem o objetivo de ser apenas a sinalização para um caminho a ser percorrido. Podemos discutir mais detalhes da linguagem, de implementação ou de modelo nos comentários. Aproveitem e façam sugestões e/ou críticas. |