sexta-feira, 2 de março de 2007

OnGuard: Proteção Contra Cópias

Atualmente a preocupação com a proteção da propriedade intelectual é grande entre as empresas que possuem produtos já consolidados no mercado ou que, mesmo iniciando, atuam em nichos muito específicos e onde as perdas por pirataria podem ser fatais para a empresa.

Mesmo a Microsoft, que durante muitos anos "incentivou" de forma velada a cópia de seus programas para crescer sua participação no mercado (usava seriais simples e fáceis de quebrar), passou agora a adotar métodos mais complexos de proteção, como ativação pela internet, entre outros.


No mercado existem várias opções pagas (a da
Aladdin é a mais conhecida) para proteção de aplicativos e algumas gratuitas. Para sistemas em Delphi ou C++ Buider, uma boa opção é o OnGuard, que é grátis e vem com fontes disponíveis no Source Forge. No caso do Delphi, onde a compatibilidade é somente até a versão 7, é necessário baixar um package complementar criado pela Active Delphi se utilizar versões posteriores.

O
OnGuard é um componente de propriedade intelectual da TurboPower Software, que encerrou suas atividades em janeiro de 2003 e disponibilizou o código-fonte no Source-Forge. Foi criado um projeto para portá-lo para Lázarus, mas que está em versão beta desde dezembro de 2003 (último post em 2004). Isso significa que deve-se realizar testes de compatibilidade antes de definir sua adoção.

O
OnGuard trabalha com o conceito de keys para restringir funcionalidades da aplicação e release codes para libera-las. As Keys são gravadas de forma criptografada dentro da própria aplicação e indicam quais são as funcionalidades que serão restringidas, enquanto que os Release Codes indicam o que será liberado. Alguns dos métodos de proteção previstos pelo OnGuard para a aplicação:
  • Validação de Datas: bloqueio para execução fora do período estipulado;
  • Número de Dias: controle do uso por uma quantidade específica de dias (não precisam ser contíguos);
  • Limitação de Rede: bloqueio para uso em um domínio específico ou limitação para um número máximo de usuários simultâneos na rede;
  • Registro Simples : é exigida uma string de texto para registro (exemplo: nome do usuário ou empresa);
  • Registro Especial: um conjunto de informações específicos libera a aplicação ;
  • Número de Série: o desbloqueio das restrições ocorre após a informação do serial;
  • Contador de Uso : limitação de funcionalidades após ser utilizado um número de vezes;
Os métodos acima podem ser combinados entre si para atender a estratégia da empresa ou necessidades de clientes. É gerado também um checksum do executável para garantir a integridade do mesmo contra modificações feitas por hackers.

As
releases code do OnGuard são uma estrutura do tipo record de 8 bytes. Os 2 primeiros bytes indicam o tipo de proteção. Os 6 seguintes são de uso específico para armazenar dados específicos para cada tipo de código. Os dados, entretanto, estão separados em 2 "campos": a primeira parte usa 2 bytes e a segunda os 4 restantes. Para prevenir que a release code não seja alterada por terceiros, ela é criptografada usando a key do OnGuard.

Existem também os
modifiers (modificadores), que fazem parte da key e são utilizados para alterá-la baseado em um informação que possa ser reproduzida. Por exemplo, se uma release code é gerada para uma máquina específica, o modificador é gerado somente para aquela máquina, através da função GenerateMachineModifier().

O produto vem com um manual de 125 páginas que apresenta, além da especificação das funções, exemplos didáticos e os conceitos de
shadowing. Existem também programas (simples) para gerenciar a geração/distribuição das keys e release codes.

As 53 funções existentes fazem todo o "trabalho braçal" para o programador, tais como gerar/validar cada uma das keys, modifiers e release codes, modificar o executável gerado, etc. Dentro da aplicação final o programador precisa apenas chamar as funções relacionadas ao tipo de proteção implementada.

Desvantagens/
Limitações Encontradas
  • Não existem funções prontas para acessar remotamente um computador e gravar a release code diretamente na aplicação ou enviar enviá-las por e-mail. Essas limitações, porém, podem ser contornadas facilmente usando código encontrado na internet;
  • Não existe suporte oficial para o produto e o fórum está praticamente sem discussões desde 2003. Encontrei relatos em outros lugares de programadores que utilizam o produto e não tem encontrado problemas;
  • A interface das ferramentas de gerenciamento de chaves são simples demais para uso por uma empresa que venda um volume razoável de aplicações e precisariam ser redesenhadas. Novamente, como os fontes estão disponíveis, essa tarefa não deve ser complicada;
  • Não ha suporte à segurança por hardware, o que deixa a proteção um pouco mais frágil. Se o seu produto for muito visado, talvez tenha que optar por proteção mais forte. Em um software que tenha atualizações constantes, entretanto, essa restrição pode ser inócua, já que o hacker teria que refazer seus cracks para cada nova versão;
  • Não há suporte pra DLL's, apenas para executáveis;
  • Foram reportados alguns problemas com o Windows XP no ano de 2003 e não encontrei soluções em mensagens posteriores;
Vantagens:
  • É grátis. Isso pode significar uma boa redução no preço final do seu produto;
  • Possui os fontes. Não depende de uma empresa, que pode quebrar e deixar você na mão;
Acredito que, mesmo com algumas desvantagens em relação aos produtos comerciais, vale a pena avaliá-lo...

Em tempo: É preciso realizar testes de compatibilidade com o Windows Vista.