Página 1 de 1

REGISTRO NO WINDOWS

Enviado: 04 Out 2006 09:17
por Pablo César
Alguem poderia me dizer, como seria útil fazer alguma indicação no REGISTRY do WINDOWS ?.

Eu particularmente, acharia que seria útil para autenticar a validade de execução do nosso software quando instalado corretamente. Talvez, mencionando alguma caracteristicas que o nosso sistema precise (como o endereço onde foi gravado, nome scriptado da empresa/cliente, código do cliente, validade do sistema, etc).

Gostaria de saber se alguém ja desenvolveu algo assim e que pudesse contribuir com idéias sobre isto.

Um clip-abraço
:| :f

Re: REGISTRO NO WINDOWS

Enviado: 06 Out 2006 05:46
por Maligno
Pablo César escreveu:Alguem poderia me dizer, como seria útil fazer alguma indicação no REGISTRY do WINDOWS ?.
O Registry do Windows é um enorme contâiner de dados. Nele você pode armazenar tudo o que for necessário para o funcionamento do seu programa. Sejam dados para configuração propriamente, ou mesmo para licenciamento. Aproveitando o fato de ser gigantesco, você poderia facilmente esconder informações nele. Dificilmente alguém encontraria.
Lembra quando comentei que tinha um amigo me pedindo esses comandos de acesso ao Registry? Pois a intenção dele é justamente criar um sistema de licenciamento e proteção de software.
Mas você também pode interferir na configuração dos parâmetros de outros programas ou mesmo do próprio Windows.

[]'s
Maligno
http://www.buzinello.com/prg

REGISTRO NO WINDOWS

Enviado: 07 Out 2006 20:15
por Pablo César
Pois é MALIGNO, acho que essa função do WAPI irá ser útil para fazer autenticação de softwares na sua instalação. Mas, ainda não tenho idéia de como começar. Sei que pedir que postem exemplos, seri pedir muito. Pois ninguém quer oferecer a receita do seu bolo. Mas o que gostaria de saber, masi ou menos o quê deveria declarar ?.

Uma idéia seria, declarar no REGISTRO uma variavel (escripatada) para que não seja alterada facilmente, onde possa indicar a quanto tempo o software está rodando e se é uma cópia ORIGINAL.

De todas formas seria muito legal, enriquecer esta idéias e se puessem compartilhar algumas indicações, como pelo menos para começar. Eu inicialmente, não me sinto muito confortável mexer no REGISTRO do WINDOWS.

Espero que surjam novas idéias e que possa ser compartilhadas aqui no FORUM.

Um clip-abraço
#-)

Re: REGISTRO NO WINDOWS

Enviado: 08 Out 2006 02:38
por Maligno
Pois é MALIGNO, acho que essa função do WAPI irá ser útil para fazer autenticação de softwares na sua instalação. Mas, ainda não tenho idéia de como começar. Sei que pedir que postem exemplos, seri pedir muito. Pois ninguém quer oferecer a receita do seu bolo. Mas o que gostaria de saber, masi ou menos o quê deveria declarar ?.
O ideal, pra gente discutir isso, é pensar na coisa desde o princípio. Vamos filosofar a respeito:

Na minha opinião, proteger software demanda, primeiramente, pensar em três pontos importantes:
1) Definir como serão os dados de controle, o que conterão, como serão gerados e como serão protegidos (encriptação).
2) Definir onde serão armazenados esses dados, para evitar que o cliente chegue até eles, ou uma forma de tornar impossível que eles sejam alterados, mesmo que estejam visíveis.
3) Definir como a licença do programa será renovada, no caso de aluguel, ou reimplantada, no caso de venda (uma reformatação do HD pode fazer com que ela se perca).

Em resposta:
1) Acho que o primeiro pensamento que nos vem à cabeça é gerar os dados de controle a partir das características da máquina hospedeira. O número de série de fábrica do HD (o WAPI informa, apesar desse número não estar disponível em algumas situações), o número de série de formatação (é um dado a mais, afinal), CheckSum do BIOS (incluindo talvez o BIOS da placa de vídeo), o número de qualificação da motherboard (há quem pense que é número de série, mas não é), etc. Todos esses dados podem ser combinados para formar um grande número. Este número, por sua vez, poderá ser misturado com um bloco de lixo, por um algoritmo de scrambling qualquer.

2) Esconder ou não, eis a questão. A primeira coisa que se pensa é em esconder, mas na verdade, isso nem é tão importante. Há muitos anos eu montei um esquema de proteção que era um coisa bem simples. Algo assim:

Código: Selecionar todos

E71A4BFA
DATA_BLOQUEIO=10/11/2006
O cliente vê isso e vai seco em cima pra alterar a data de bloqueio. Mas há um problema. O CRC32 de assinatura, gerado por um algoritmo modificado. Se essa data fosse alterada, o bloqueio seria instantâneo, pela invalidação do arquivo. É uma ótima forma de saber qual cliente é picareta. :)))

Isso é pra você ter uma idéia de que nem sempre é necessário esconder. Mas esconder o bloco de controle da licença é também uma boa alternativa. E pode ser feita tanto por meio do Registry quanto por meio de um simples arquivo escondido dentro do diretório do Windows, por exemplo. O Registry, como eu disse antes, é perfeito para esconder dados. Mas o problema está nos sistemas multiusuários. Por rede não dá pra acessar o Registry de uma máquina remota. Há uma solução para esse problema. Mas isso demandaria um programa extra rodando em background na máquina hospedeira. Eu faria em C um programa bem pequeno, mas você pode também fazer um programa um pouco maior, em XHarbour, por exemplo. Acho que ele deve acessar o Registry também. O bloco de controle em arquivo já não tem esse problema. É tudo uma questão de conveniência e disponibilidade da sua parte. Você deve analisar e decidir o que é melhor para o seu caso.

3) Mais complicada é a renovação da licença. Em caso de aluguel de software, periodicamente você terá de renová-la. Como o seu programa já acessa o bloco de dados de controle, nele próprio pode existir uma opção de menu para atender essa finalidade. O problema mesmo está em como informar essa renovação. Se pessoalmente, resolvido o problema. Você estará lá e resolverá tudo. Mas isso gera um custo que muitas vezes é proibitivo. E seu lucro vai embora. O ideal é utilizar uma forma de comunicação barata: telefone, eMail, sinal de fumaça, etc. Eu próprio, agora programando em C++ no Builder, vou não só fazer atualização automática dos softwares, como também renovação de licença por meio de WebService. O cliente pagou, eu envio pro meu site os dados da renovação e o programa, no momento em que achar mais apropriado, automaticamente acessa a área onde armazenarei esses dados e pega o bloco do cliente, conforme a identificação dele. Em Clipper até dá pra fazer isso perfeitamente, também por meio de um programa à parte. O problema pra mim é que isso demanda um certo tempo pra codificar (nunca mexi com sockets). Se o XHarbour tiver funções pra isso, fica a idéia pra você: um programa à parte, apenas para renovação de licença e/ou atualização.
Agora, no tocante à reimplantação (remota) de licença, no caso de uma reformatação de HD ou mesmo substituição, você também precisa dispor de uma chave especial, que preferencialmente não contenha dados de HD. O cliente liga, passa esse número, e você envia pra ele uma contra-senha. O cliente, por algum meio, informa seu programa que contra-senha é essa. O programa valida e entende que deve ser reimplantada a licença. Simples. Acho que é uma boa alternativa.

Talvez existam mais alguns detalhes que não me vieram à cabeça no momento em que escrevo esta mensagem. Mas os colegas podem ajudar, criticando e dando sugestões.
De todas formas seria muito legal, enriquecer esta idéias e se puessem compartilhar algumas indicações, como pelo menos para começar. Eu inicialmente, não me sinto muito confortável mexer no REGISTRO do WINDOWS.
É sempre bom tomar cuidado com tudo o que se faz em programação. Mas usar o Registry não é tão perigoso quanto parece. Vai mais do bom senso. Você não vai, por exemplo, querer testar o WAPI apagando algumas chaves do Windows, vai? :))

[]'s
Maligno
http://www.buzinello.com/prg

REGISTRO NO WINDOWS

Enviado: 09 Out 2006 09:18
por Pablo César
Obrigado MALIGNO pelas suas dicas. Bem interessante a sua questão de validação em rede. Realmente, não vejo como fazer o controle de uso (digamos) de quantas e quais terminais estão acessando o sistema no servidor. Outra questão que acho interessante, seria de declarar no REGISTRO o título do sistema que deveria ter o ícone, desta forma iria haver uma indicação inclusive que poderia servir para o switch -SETAPPTITLE do WAPI.

Outra questão que tenho: Em qual das chaves, seria conveniente fazer as minhas declarações para validar meu sistema, por exemplo ?. É dizer, no WINDOWS (pelo que sei do WIN98), normalmente tem 6 CHAVES:

-HKEY_CLASSES_ROOT
-HKEY_CURRENT_USER
-HKEY_LOCAL_MACHINE
-HKEY_USERS
-HKEY_CURRENT_CONFIG
-HKEY_DATA

Como você MALIGNO disse: Você não vai, por exemplo, querer testar o WAPI apagando algumas chaves do Windows, vai ?, sei da importância de manter o REGISTRO o mais original possivel nas declarações do WINDOWS. Tem que haver bonsenso, mas também não é um bicho de sete cabeça. E para entender melhor, encontrei alguns assuntos que seria interessante serem vistos:

http://ryan.com.br/registro_chaves.htm

http://www.babooforum.com.br/idealbb/vi ... cID=161953

Outra ponto importante, é a questão de atualização. Espero que surjam mais exemplos, eu vou pesquisar mais ainda sobre este assunto e agradeço a colaboração recebida dos colegas.

Um clip-abraço
-:]

Enviado: 09 Out 2006 14:30
por Stanis Luksys
Olá,

Pela estrurtura mais comum do registro, o padrão seria gravar suas entradas em:

HKLM > Software > SuaEmpresa > SeuPrograma

Aí dentro desta chave você pode incluir vários valores, desde preferências como cores do sistema, cálculos de icms e impostos personalizados, impressoras cadastradas, até mesmo a tal validação por data etc...

Enfim, podendo acessar o registro, qualquer "parametro de sistema" que se pense em cadastrar em dbf poderia ser colocado alí, porém não sei se traria grandes vantagens, é questão de estudar a viabilidade.

Acho interessante, mas como eu disse, já se foram os tempos em que o registro era um mistério. Hoje em dia é mais fácil alguem interessado achar suas chavinhas no registro do que decriptar seu dbf.