Proteção e licenciamento
| Seguro, fácil e rápido.
SDK
no seu software.
Manual do Desenvolvedor v 2.0.4
NeoKey
NeoKey SDK versão 2.0.4
ÍNDICE .......................................................................................................................................................... 4
LINKS RÁPIDOS .......................................................................................................................................... 5
NEOKEY ....................................................................................................................................................... 6
SISTEMAS OPERACIONAIS SUPORTADOS ...................................................................................................... 7
MÍNIMO HARDWARE REQUERIDO .................................................................................................................. 7
CARACTERÍSTICAS FÍSICAS .......................................................................................................................... 7
DEVTOOL ..................................................................................................................................................... 8
TABELA A (ERROS NO DEVTOOL) ................................................................................................................. 8
PROTEÇÃO AUTOMÁTICA....................................................................................................................... 21
NEOKEY MASTER ..................................................................................................................................... 22
NEOKEY NOW ........................................................................................................................................... 24
CLIENTAPI ................................................................................................................................................. 25
TABELA 1 (ERROS NA CLIENTAPI) .............................................................................................................. 25
NEOKEYCALL............................................................................................................................................ 29
TABELA 2 (COMANDOS) ............................................................................................................................. 30
Login - cmd = 1 ................................................................................................................................... 31
Gravar na Memória (DWORD) - cmd = 2........................................................................................... 32
Ler da memória (DWORD) - cmd = 3 ................................................................................................. 32
Criptografar - cmd = 4 ......................................................................................................................... 33
Descriptografar - cmd = 5 ................................................................................................................... 33
Ler a licença - cmd = 7 ........................................................................................................................ 34
Gravar na Memória (WORD) - cmd = 8 ............................................................................................. 34
Ler da memória (WORD) - cmd = 9 ................................................................................................... 35
Ler ID do Hardware - cmd = 10 ........................................................................................................... 35
Ler uma página da memória - cmd = 11 ............................................................................................. 36
Gravar uma página na memória - cmd = 12 ....................................................................................... 36
Buscar próximo NeoKey - cmd = 14 ................................................................................................... 36
Reiniciar busca - cmd = 15 ................................................................................................................. 37
Logout - cmd = 16 ............................................................................................................................... 37
Ler o código de atualização (CDC) - cmd = 31 ................................................................................... 37
Aplicar atualização via código (CPC) - cmd = 32 ............................................................................... 38
Aplicar atualização via arquivo (CPC) - cmd = 33 .............................................................................. 38
SetSinc - cmd = 53 .............................................................................................................................. 38
SincOTP - cmd = 50 ............................................................................................................................ 39
LoginOTP - cmd = 51 .......................................................................................................................... 39
FUNÇÕES NEOKEY_ .................................................................................................................................. 41
NeoKey_Login OU NeoKey_LoginOTP .............................................................................................. 41
NeoKey_SincOTP ............................................................................................................................... 42
NeoKey_Logout .................................................................................................................................. 42
NeoKey_Write ..................................................................................................................................... 43
NeoKey_Read ..................................................................................................................................... 43
NeoKey_Login_Next ........................................................................................................................... 43
NeoKey_Crypt ..................................................................................................................................... 44
NeoKey_Decrypt ................................................................................................................................. 45
2
NeoKey SDK versão 2.0.4
NeoKey_GetLicense ........................................................................................................................... 45
CLIENTAPI – ARQUIVO DE CONFIGURAÇÃO ................................................................................................ 46
NEOKEYNETSERVICE .............................................................................................................................. 49
NEOKEYNETSERVICE – ARQUIVO DE CONFIGURAÇÃO................................................................................. 49
3
NeoKey SDK versão 2.0.4
Índice
A
Atualização Remota ......................................... 18
C
Características Físicas ....................................... 7
ClientAPI .......................................................... 25
ClientAPI – Arquivo de Configuração .............. 46
Criar um projeto ............................................... 10
M
Memória ........................................................... 13
Mínimo Hardware Requerido ............................. 7
N
F
NeoKey .............................................................. 6
NeoKey Master ................................................ 22
NeoKey NOW .................................................. 24
NeoKey+Net ...................................................... 6
NeoKeyCall ...................................................... 29
NeoKeyNetService........................................... 48
NeoKeyNetService – Arquivo de Configuração
..................................................................... 48
Funções NeoKey .............................................. 40
P
G
Proteção Automática ....................................... 21
Gerar as APIs ................................................... 16
S
L
Salvar e Gravar ................................................ 14
Sistemas Operacionais Suportados .................. 7
D
Desafio-Reposta e Criptografia ........................ 11
DevTool .............................................................. 8
Licenças ........................................................... 11
LoginOTP .......................... 31, 38, 39, 40, 41, 42
4
NeoKey SDK versão 2.0.4
Links Rápidos
www.neoprot.com
[email protected]
[email protected]
NeoKey



Sistemas Operacionais Suportados
Mínimo Hardware Requerido
Características Físicas
DevTool
NeoKey NOW
Proteção Automática
NeoKey Master
ClientAPI


Função NeoKeyCall
Função NeoKey_
NeoKeyNetService
5
NeoKey SDK versão 2.0.4
NeoKey
Recursos
Driver Less
Memória 4 KBytes
Exemplos e APIs
Hardware ID
Criptografia AES256
Bloqueio de senha
Anti-Debug
64 licenças
Chave Master
Multi-thread
Atualização
Remota
NeoKey+Net
O NeoKey é um pequeno dispositivo USB (similar a um pendrive) que funciona como uma
chave para execução do software protegido. Se o NeoKey estiver conectado em uma porta
USB o software protegido funciona normalmente, mas se o NeoKey não estiver conectado o
software protegido não funciona.
O NeoKey é um hardware compatível HID, portanto não há necessidade de instalação de
qualquer “device driver” adicional para o seu funcionamento, pois todos os drivers necessários
para o seu funcionamento já estão instalados no próprio sistema operacional.
O NeoKey+Net é uma variação do NeoKey, mas que pode ser usado através de uma rede,
usando o NeoKeyNetService.
O NeoKey NOW é um sistema de atualização remota através da Web que permite que as
atualizações da sua licença referentes ao número de execuções, data de expiração e
quantidade de usuários em rede em seus clientes possam ocorrer sem que ele precise enviar
arquivos ou mesmo entrar em contato com sua empresa, bastando somente que ele tenha
acesso a internet. Veja o capítulo NeoKey NOW
O DevTool é um aplicativo que permite ao desenvolvedor configurar/personalizar o NeoKey
para integrá-lo ao seu aplicativo, nele estão contidas todas as funcionalidades do sistema de
proteção e licenciamento.
Pelo DevTool você vai gerar um projeto que deverá ser gravado no NeoKey, neste projeto há
informações: para autenticar o NeoKey, das licenças de uso da chave e o conteúdo da
memória, gerar as APIs, proteger automaticamente seu aplicativo e realizar atualizações
remotas no NeoKey.
O NeoKey Master, é um NeoKey especial e permite ao desenvolvedor acessar as
funcionalidades do DevTool.
A integração do seu aplicativo ao NeoKey é realizado por uma API, que é um conjunto de
funções acessadas pelo seu software a fim de interagir com o hardware, realizando diversas
operações como login, gravação, leitura, atualização remota, etc .
As APIs são geradas pelo DevTool, aplicativo que é instalado pelo instalador do NeoKey SDK e
são denominadas como ClientAPI, sendo seu nome diferenciado de acordo com o sistema
6
NeoKey SDK versão 2.0.4
operacional. A API deve fazer parte da instalação do seu aplicativo, sendo copiada no diretório
do seu aplicativo, no diretório de sistema ou qualquer diretório com um caminho especificado e
conhecido do seu aplicativo.
Consulte o capítulo do DevTool para maiores detalhes de como gerar a ClientAPI.
Consulte o capítulo da NeoKeyMaster para maiores detalhes sobre os recursos do NeoKey
Master.
Consulte o capítulo da ClientAPI para maiores detalhes de como acessar a ClientAPI.
Consulte o capítulo da Proteção Automática para maiores detalhes de como proteger seu
software de forma automática sem a necessidade de alterar o seu código fonte.
Consulte o capítulo da NeoKeyNetService para maiores detalhes de como acessar o hardware
através de uma rede.
Sistemas Operacionais Suportados
Atualmente são suportados os sistemas operacionais:
Windows 32bit e 64bit (ClientAPI32.dll e ClientAPI64.dll)
XP, Vista, 7, 8, 2003 ou 2008.
Linux 32bit e 64bit (libClientAPI32.a e libClientAPI64.a)
Kernel 2.6: Ubuntu, Fedora, Debian e RedHat
MacOS 64bit (libClientAPI64Mac.a)
Mínimo Hardware Requerido
Plataforma PC ou ARM (consulte o suporte técnico), memória 1GB, USB 1.x, 2.x, 3.x e espaço
livre em disco 100MB
Características Físicas
Dimensões: 40 x 20 x 8 mm, Peso: 7 g
Consumo de energia: <= 50mA, Voltagem Operacional Mínima: 5V
Temperatura de Armazenagem e umidade: –5 a 70ºC e 0 a 70% (sem condensação)
Invólucro: Plástico injetável
Retenção de dados em memória: Mínimo 10 anos
Regravação das células de memória: Mínimo 100.000 vezes/célula.
Notas:
"Este produto inclui software desenvolvido pelo OpenSSL Project para uso no OpenSSL
Toolkit. (http://www.openssl.org/)"
"This product includes software developed by the OpenSSL Project for use in the OpenSSL
Toolkit. (http://www.openssl.org/)"
7
NeoKey SDK versão 2.0.4
DevTool
O DevTool é um aplicativo que permite ao desenvolvedor configurar/personalizar o NeoKey
para integrá-lo ao seu programa, nele estão contidas todas as funcionalidades do sistema de
proteção e licenciamento. (Criar projetos, Gerar APIs, Implementar a Proteção e Atualizar
remotamente o NeoKey)
Todas as funcionalidades relativas ao projeto necessitam de um NeoKey Master
conectado.
Consulte o capítulo da NeoKey Master para maiores detalhes sobre os seus recursos.
A integração do seu aplicativo com o NeoKey, deve passar por 3 etapas básicas:
1) Criar um projeto
2) Gerar as APIs
3) Proteger o aplicativo Via API, consulte os exemplos.
Criar um projeto
Gerar as APIs
Proteger seu Software
Defina o licenciamento
Gere as APIs e distribua
com o seu produto
Automático, selecione o
arquivo a ser protegido
Salve e grave o projeto
Teste o projeto gravado
Via API, consulte os
exemplos.
Tabela A (Erros no DevTool)
Descrição
Erro de leitura
Erro na gravação
Erro no Login
Erro no comando
Master não conectado
NeoKey não conectado
Possíveis causas para os erros acima:
Os erros -1 e -2 ocorrem, pois os parâmetros iniciais de
criptografia de acesso ao NeoKey não foram
adequadamente inicializados ou foram corrompidos e
por isso ao tentar fazer qualquer acesso no NeoKey o
mesmo não consegue decifrar os comandos causando
estes erros.
Erro
-5001
-5002
-5003
-5004
-5006
-5007
8
NeoKey SDK versão 2.0.4
Verifique se o projeto foi gravado corretamente.
Verifique se está “logado” no NeoKey.
O desafio está correto?
O NeoKey está conectado?
O Led (luz) do NeoKey está aceso?
Caso não esteja o NeoKey pode ter sido danificado ou o
computador não o reconheceu.
Tente reconectar o NeoKey novamente.
Verifique se a porta USB está funcionando
corretamente, com um mouse ou teclado USB.
APIs básicas não encontradas
Os sistema operacional não está adequadamente
instalado e não será possível acessar o NeoKey.
Master sem previlégio
O Master que está usando está com privilégios de
acesso limitados, para realizar uma tarefa.
NeoKey inválido
O NeoKey não possui as características necessárias de
configuração para que este SDK e Master.
CDC inválido
Os dados enviados pelo cliente estão incorretos, tente
verificar junto ao cliente se ele antou corretamente.
MasterII não conectado
O Segundo master requerido para esta operação não
pode ser localizado, verifique se o mesmo está
conectado, com led aceso.
Não foi possível salvar o arquivo
Erro ao gravar arquivo de Backup
Arquivo de atualização não encontrado
Os erros acima são causados geralmente for falta de
permissão ao usuário que está acessando o sistema,
verifique com seu administrador se há direitos de
acesso às pastas do sistema.
Web update (NeoKey NOW) não está respondendo
corretamente.
Web update (NeoKey NOW) está bloqueado.
Web update, a conexão com o computador local não pode ser
inicializada.
-5008
-5009
-5010
-5025
-5026
-5101
-5300
-5450
-5460
-5461
-5462
Possíveis causas para os erros acima:
Há algum problema de conexão com a web ou nossos
servidores estão indisponíveis, verfique se nosso site
www.neoprot.com.br pode ser acessado e se há conexão
para internet.
Web update (NeoKey NOW), erro de sintaxe.
-5464
Possíveis causas para o erro acima:
Esta é uma falha interna em nossos sistemas, verifique junto
ao suporte se há atualização do serviço e das APIS.
9
NeoKey SDK versão 2.0.4
Web update (NeoKey NOW), usuário master não autorizado.
-5465
Possíveis causas para o erro acima:
Para usar o serviço é necessário se cadastrar, solicite junto
ao suporte o seu cadastro neste serviço.
Web update (NeoKey NOW), erro geral na pagina.
-5466
Possíveis causas para o erro acima:
Esta é uma falha interna em nossos sistemas, verifique junto
ao suporte se há atualização do serviço e das APIS.
Web update (NeoKey NOW), limite máximo permitido de
NeoKeys na WEB atingido.
-5467
Possíveis causas para o erro acima:
Verifique junto ao suporte qual é a quantidade máxima de
NeoKeys permitida e cadastrada para você no serviço de
Web update.
Criar um projeto
É no projeto que definimos as informações que ficarão armazenadas do NeoKey como:
desafio-resposta (para autenticar a aplicação), a chave de criptografia, licenças de uso do
aplicativo e o conteúdo da memória.
Para criar um projeto basta clicar no botão (Novo), um Wizard vai orientá-lo pelos 4 passos da
criação do projeto.
10
NeoKey SDK versão 2.0.4
Desafio-Reposta e Criptografia
Aqui configuramos a senha/desafio e a resposta, que será enviado ao hardware posteriormente
pela API, se a chave estiver conectada e a senha/desafio estiver correto, o NeoKey envia a
Resposta, conforme você configurar nesta tela. A chave de criptografia é usada durante o
comando de criptografar e descriptografar.
Gerar Randômicos, ao clicar nele são geradas automaticamente as informações do desafioresposta e a chave de criptografia.
Licenças
Neste passo podemos configurar as características das licenças.
11
NeoKey SDK versão 2.0.4
As licenças são enumeradas de 0 até 63 e acessadas ao realizar um Login, é através da
licença que podemos determinar a data de expiração, o número de execuções e o número de
licenças de rede que seu aplicativo será licenciado.
*Lembre-se de habilitar pelo menos uma licença para que o Login ocorra com sucesso.
Permitindo criar até 64 formas diferentes de licenciamento em um único projeto, este recurso é
muito útil quando há mais de uma aplicação a ser protegida, e você quer usar o mesmo
NeoKey para proteger todas elas. Para realizar esta tarefa basta você determinar qual dos
módulos do seu aplicativo irá acessar cada uma das licenças. Ex: Aplicação de faturamento
acessa a 0, o CRM acessa a 1, o controle de estoque acessa a 2, etc.
Ao clicar em editar ou sobre a linha da licença a tela seguinte é aberta.
Em expiração configuramos se vamos habilitar uma Data de Expiração, podendo ser uma data
pré-determinada ou em número de dias e o número de execuções que é decrementado
somente no primeiro acesso do comando Login, quando a aplicação é carregada.
Em controle de licenças de rede, configuramos quantas instâncias em rede da sua aplicação o
NeoKey permitirá acessá-lo, e se o valor for igual à zero, o acesso pela rede será bloqueado.
Ao selecionar Instância Única, somente uma instância do seu aplicativo por IP será
contabilizada ao acessar esta licença.
Ao selecionar a Desabilitar acesso local, o NeoKey passará a não funcionar localmente na
máquina que estiver conectado, use esta opção somente para o NeoKey+Net quando quiser
forçar seu acesso somente pela rede e desabilitar os acesso locais. Se usar este recurso o seu
NeoKey (comum - acesso mono usuário) esta licença deixará de funcionar.
12
NeoKey SDK versão 2.0.4
Ao selecionar a opção Desabilitar compartilhamento, resultará que a licença não poderá ser
compartilhada por múltiplas aplicações localmente, ou seja, se mais de uma instância tentar
acessar uma determinada licença somente a primeira funcionará, as demais resultarão em
erro.
Memória
Nesta tela podemos editar o conteúdo da memória. O NeoKey possui um total de 1K DOUBLE
WORDS, endereçados de 0 a 1023.
Lembrando que uma DOUBLE WORD (DWORD) possui 4 bytes, totalizando então 4KBytes
disponíveis para leitura e gravação no NeoKey.
Ao clicar em Editar dados da memória, o editor é habilitado permitindo a edição em Hex
(Hexadecimal) ou Ascii dos endereços desejados. Ao clicar em aplicar modificações o conteúdo
da caixa de texto é transferido para o painel do lado direito.
Ao clicar em Zerar dados, o conteúdo do painel do lado direito passará a conter zeros em todos
os endereços.
13
NeoKey SDK versão 2.0.4
Salvar e Gravar
Este é último passo, primeiro salve o projeto, num diretório de sua preferência e então clique
em gravar para transferir o projeto para o NeoKey.
Lembre-se que o NeoKey Master será solicitado a cada evento relacionado ao Projeto.
14
NeoKey SDK versão 2.0.4
Por esta interface é possível associar um NeoKey com determinado cliente, se clicar em sim
um arquivo de log .neokey é gerado na pasta Database, pasta esta localizada na mesma pasta
em que o DevTool está sendo executado. Este arquivo poderá ser consultado posteriormente
para integração com ERPs e sua estrutura de dados possui a seguinte característica de dados
separados por vírgula.
número_do_hardware,nome_do_cliente,id_do_cliente,email,extra_info,data_e_hora,validação
Antes de iniciar a gravação é questionado ao usuário se deseja gravar os dados da memória,
ao responder Sim os 4K bytes referentes ao Passo 3 serão gravados no Neokey, o que deixa o
processo de inicialização mais demorado, se não estiver usando os dados da memória em seu
projeto pode responder Não, deixando o processo mais rápido.
15
NeoKey SDK versão 2.0.4
No menu principal, ao clicar no botão Abrir, você poderá visualizar um projeto criado.
No menu principal, ao clicar no botão Gravar, você poderá gravar no NeoKey, a partir do
arquivo de um projeto já criado.
No menu principal, ao clicar no botão Ler, você poderá visualizar o projeto gravado dentro de
um NeoKey conectado e salvá-lo em uma pasta.
Gerar as APIs
16
NeoKey SDK versão 2.0.4
Para gerar as APIs basta clicar em Gerar, então o conjunto de APIs será gerado na pasta APIs.
Este processo precisa ser realizado uma única vez ou quando for realizada alguma atualização
do SDK ou do pacote de APIs através do Menu APIs. O NeoKey Master será solicitado para
esta operação.
Clique em Abrir pasta para acessar a pasta onde as APIs são geradas.
Para testar o acesso ao NeoKey, clique em testar, isso vai carregar um exemplo e onde são
acessados todos os recursos disponíveis pela ClientAPI.

Os Exemplos oferecem suporte às Linguagens:
o C, C++, C#, VC, VB, Delphi, VB.NET, Java e CAD
Proteger o Aplicativo
Existem 3 formas de proteger seu aplicativo: via o acesso direto às APIs, Automático ou a
combinação destes dois métodos, lembrando que um não inibe a funcionalidade do outro.
Se você optar pela forma automática, não será necessário modificar o código fonte do
aplicativo, basta somente clicar no botão Automático, selecionar o aplicativo, configurar a
licença que será acessada e então proteger. Consulte o capítulo da Proteção Automática
para maiores detalhes.
Se sua opção for pelo acesso via API, então clique no botão Exemplos e acesse os códigos
fontes em diversas linguagens de programação. Caso sua linguagem não esteja disponível
envie um e-mail ao nosso suporte técnico ([email protected]). Teremos o maior prazer
em desenvolver novos exemplos.
17
NeoKey SDK versão 2.0.4
Uma boa estratégia de proteger seu software significa uma maior dificuldade para usuários mal
intencionados em remover a proteção, para fazer isso aconselhamos, quando possível, usar a
proteção automática em combinação com o acesso via APIs, sempre procure realizar no
mínimo as seguintes etapas.
- O seu programa antes de carregar a API deve gerar um hash (ex:sha1) do arquivo da
ClientAPI a ser acessada, para ser verificado com um valor que gerou antes de distribuir o
programa, isso para identificar a originalidade do arquivo.
- Fazer o Login OTP, utilizando a função SetSinc
- Executar chamadas de criptografia usando o AES-256-ECB e comparar valores que o
Hardware gera. O AES 256 possui código aberto e pode ser acessado de qualquer linguagem,
idealmente deve-se gerar um valor e enviar ao Neokey para ser cifrado, o mesmo deve ser feito
pelo seu programa usando uma função interna AES, e a mesma chave configurada no projeto,
e então comparar os valores.
-Quando não for possível usar a proteção automática deve ser usado “obfuscadores” de
código.
Atualização Remota
Através desta interface você poderá alterar qualquer informação de um NeoKey remotamente.
O sistema de atualização é baseado num esquema de mensagens trocadas entre o cliente e o
desenvolvedor, essas mensagens são denominadas: CDC (Código do cliente) e CPC (Código
para o cliente).
18
NeoKey SDK versão 2.0.4
O CDC é um conjunto de 32 bytes, código recebido do cliente, gerado pela ClientAPI, único
para cada processo de atualização e deve ser enviado ao desenvolvedor do software, para que
este, através do DevTool gere o CPC (Código para o cliente) que contém as informações de
atualização.
O CPC pode ser um conjunto de 32 bytes ou um arquivo, único para cada processo de
atualização e deve ser enviado ao cliente pelo desenvolvedor do software.
O arquivo .CPC deve ser usado com cuidado, pois ele permite a atualização do NeoKey sem
associar a um número de série (Hardware ID) específico, fazendo com que essa atualização
passe a valer para todos os NeoKeys em campo.
Pelo CDC é possível determinar o número de série (Hardware ID) e saber qual NeoKey em
campo está sendo atualizado, preenchendo o campo CDC e clicando em Validar código.
Clicando em Buscar Cliente com um HardwareID é possível verificar dados de um cliente caso
o tenha associado ao NeoKey quando gravou o projeto ou ainda é possível através do nome do
cliente verificar o número do hardware a ele associado.
Há diversas opções de atualização, que podem ser realizadas para diversos recursos do
NeoKey, como somente uma licença específica ao selecionar as opções (Data e Número de
execuções) ou (Usuários de Rede), todas as licenças ao selecionar Licenças, Memória ou Tudo
para todo o contúdo do NeoKey, inclusive o desafio e a resposta.
O mais comum dos casos de atualização é quando queremos somente atualizar a
característica de uma licença exclusiva, para isso é necessário gerar o CDC através da
ClientAPI no cliente, e preencher o seu valor no campo indicado e selecionar as opções (Data e
Número de execuções) ou (Usuários de Rede). Neste método não é gerado um arquivo de
atualização, mas somente um código CPC de 32 bytes, que é automaticamente associado a
19
NeoKey SDK versão 2.0.4
um número de série (Hardware ID) do CDC e que poderá ser enviado ao cliente, por email,
telefone, etc. Aplicar atualização via código (CPC) – cmd = 32
Todos os outros métodos geram um arquivo .CPC que podem ou não ser associados a um
número de série, após este arquivo ser enviado ao cliente a atualização deve ocorrer pela
função específica da ClientAPI. Aplicar atualização via arquivo (CPC) – cmd = 33
É possível também gerar um CDC para um determinado NeoKey por seu número de série
(HardwareID), ou seja sem o CDC, bastando preencher número no campo apropriado, para
gerar o CPC.
A opção do NeoKey NOW permite a você atualizar remotamente, pela internet, sem que seu
cliente precise enviar qualquer informação por telefone ou email durante o processo de
atualização. Ao clicar em Remover o update, a atualização através do NeoKey Now deixará de
ocorrer. Veja mais detalhes no capítulo dedicado ao NeoKey NOW
Em campo caso você não programe acesso à API para as funções de atualização é possível
ainda usar o NeoKeyUpdate.exe que está dentro da pasta update para a tarefa de atualizar o
NeoKey. É importante que a ClientAPI esteja no diretório deste aplicativo.
20
NeoKey SDK versão 2.0.4
Proteção Automática
Este é o método mais simples de proteger seu aplicativo, bastando selecionar o executável ou
dll a ser protegido, o número da licença e o intervalo entre as checagens e então clicando em
Proteger. Lembre-se de copiar a ClientAPI32.dll para a pasta do aplicativo protegido, para
testar.
Atualmente este método é suportado apenas para executáveis e dlls Windows 32 Bit e não
.Net.
21
NeoKey SDK versão 2.0.4
NeoKey Master
No sistema NeoKey há um hardware especial que chamamos de NeoKey Master, responsável
por guardar todas as credenciais para a utilização do NeoKey, por isso deve ser armazenado
em local seguro. Ele permite, por exemplo, o acesso às configurações de um projeto, geração
de APIs e ao menu de atualização.
O Master possui um PIN (senha) para acessá-lo, introduzindo o conceito de autenticação com
duplo fator para acesso ao DevTool e por padrão esta senha é: vazio, mas pode ser alterada a
qualquer momento pelo DevTool, no menu Master.
É possível ainda configurar um outro NeoKey Master, para isso será necessário comprar um
adicional, a fim de a limitar/desabilitar o acesso aos recursos do DevTool ou simplesmente
como backup. Veja abaixo as opções.
É muito comum que seja designado uma pessoa que não é o Desenvolvedor ou dono da
empresa, para gravar o NeoKey recebido da Neoprot e ainda não inicializado, por isso você
pode limitar por exemplo este novo Master a somente permitir o acesso a determinadas
funções, por exemplo: função de gravar/inicializar NeoKeys.
22
NeoKey SDK versão 2.0.4
Ou ainda você gostaria que pessoa somente conseguisse realizar atualizações.
Durante a configuração de um segundo Master, será necessário o Master original. A senha do
Master a ser configurado será reiniciada para o padrão de fábrica: vazio.
23
NeoKey SDK versão 2.0.4
NeoKey NOW
O NeoKey NOW (NeoKey Over Web) é um sistema de atualização remoto através da Web que
permite que as atualizações da sua licença referentes ao número de execuções, data de
expiração e quantidades de usuários em rede em seus clientes possam ocorrer sem que ele
precise enviar arquivos ou mesmo entrar em contato com sua empresa, bastando somente que
ele tenha acesso ao site www.neoprot.com.br pela internet. Não há a necessidade de liberar
portas no firewall, mas somente que o site www.neoprot.com.br esteja acessível pelo seu
navegador.
O procedimento de atualização é bastante simples, através do DevTool clicando em Update é
possível gerar os códigos de atualização associado ao número de série (HardwareID) do
NeoKey. Pelo menu opções ao selecionar o NeoKey NOW no final do processo de gerar o CPC
(código de atualização a ser enviado ao seu cliente) é perguntado pelo DevTool se você
gostaria de usar este serviço, clicando em Sim a atualização será submetida diretamente para
nossos servidores e distribuída para o seus clientes de maneira totalmente transparente.
A atualização somente ocorre caso o NeoKey esteja com uma opção de expiração habilitada e
o arquivo de configuração da ClientAPI (ClientAPI32.ini ou ClientAPI64.ini) estiver com a opção
de Webupdate habilitada, por padrão a atualização ocorrerá automaticamente 7 dias antes de
expirar ou quando o número de execuções atingir o valor 20, contudo estes valores também
poderão ser modificados através do arquivo de configuração (ClientAPIxx.ini), veja mais
detalhes em ClientAPI – Arquivo de Configuração
Para usar o serviço entre em contato com o nosso departamento de vendas e veja como
habilitar sua conta. [email protected]
24
NeoKey SDK versão 2.0.4
ClientAPI
A integração do seu aplicativo ao NeoKey é realizada por uma API, que é um conjunto de
funções acessadas pelo seu software a fim de interagir com o hardware, realizando diversas
operações como login, gravação, leitura, atualização remota, etc .
As APIs são geradas pelo DevTool, aplicativo que é instalado pelo instalador do NeoKey SDK e
são denominadas como ClientAPI, sendo seu nome diferenciado de acordo com o sistema
operacional. A API deve fazer parte da instalação do seu produto, sendo esta copiada no
diretório do seu aplicativo, no diretório de sistema ou qualquer diretório com um caminho
especificado e conhecido do seu aplicativo.
Nesta versão do nosso SDK disponibilizamos somente a ClientAPI32.dll que pode ser usada
por aplicativos 32 bit, em Windows 32 ou 64 bit.
A ClientAPI não permite que seu aplicativo seja “debugado”, mesmo no instante do
desenvolvimento, por isso é disponibilizada, no diretório APIs, a ClientAPI32Dbg.dll e o
DBGServer. A ClientAPI32Dbg.dll deve ser acessada no lugar da ClientAPI32.dll somente
quando estiver testando os acessos ao NeoKey e se precisar “debugar” seu aplicativo e
NUNCA deve ser distribuída para seu clientes.
A ClientAPI possui três grupos de funções configuradas de modo a facilitar a integração do seu
aplicativo e para cada modo há um grupo diferente de Exemplos:
a) Função única e diversos parâmetros (função NeoKeyCall)
b) Múltiplas funções e diversos parâmetros (funções –NeoKey_Login, NeoKey_Write,
NeoKey_x..)
c) Função Única e parâmetro único (função N_UN) (em breve)
Retorno
(inteiro) Ambas as funções retornam um inteiro informando se o comando foi realizado
com sucesso com o valor “0” zero ou um valor negativo para erro. Ver Tabela 1. (Erros).
Tabela 1 (Erros na ClientAPI)
Descrição
Erro
Erro de leitura no NeoKey
-1
Erro na gravação no NeoKey
-2
Erro interno no NeoKey
-4
NeoKey não encontrado
-9
Possíveis causas para os erros acima:
Os erros -1 e -2 ocorrem, pois os parâmetros iniciais de criptografia de acesso
ao NeoKey não foram adequadamente inicializados ou foram corrompidos e por
isso ao tentar fazer qualquer acesso no NeoKey o mesmo não consegue
25
NeoKey SDK versão 2.0.4
decifrar os comandos causando estes erros.
Verifique se o projeto foi gravado corretamente.
Verifique se está “logado” no NeoKey.
O desafio está correto?
O NeoKey está conectado?
O Led (luz) do NeoKey está aceso?
Caso não esteja o NeoKey pode ter sido danificado ou o computador não o
reconheceu.
Tente reconectar o NeoKey novamente.
Verifique se a porta USB está funcionando corretamente, com um mouse ou
teclado USB.
Re-entrada de função
-29
Parâmetro menor que o esperado
-41
Função inválida
-42
Possíveis causas para os erros acima:
Verifique em nossos exemplos e manuais como são feitas as chamadas para
cada função. Provavelmente é esperado um tipo de parâmetro e está sendo
enviado um com a característica incorreta, como por exemplo, tamanho,
verifique que não preencheu um ponteiro com Zeros, onde é esperado uma
string e o tamanho informado para o ponteiro não corresponde ao esperado ou
algum parâmetro de função não suportado foi passado.
Sistema básico não encontrado
-43
Possíveis causas para os erro acima:
Não foram encontradas APIs do sistema operacional que são necessárias para
o funcionamento do produto, provavelmente será necessário reinstalar o
sistema operacional.
NeoKey Bloqueado
-44
Possíveis causas para o erro acima:
O NeoKey foi bloqueado por mais de 10 tentativas de login com senha/desafio
errados, para desbloquear será necessário regravar o projeto.
NeoKey inválido para uso em rede
-45
Possíveis causas para o erro acima:
Este é um NeoKey sem o recurso para funcionar em rede, será necessário
comprar um NeoKey + Net
Função não suportada
-46
Está função não é suportada no modo em que está sendo operada
A licença do NeoKey não pode ser compartilhada por múltiplos aplicativos
-47
Servidor de Debug com falha
-301
Comando de Debug não enviado
-302
Trafego de Debug violado
-303
26
NeoKey SDK versão 2.0.4
Dados no Debug inválidos
-304
Possíveis causas para os erros acima:
O sistema de debug não está funcionando adequadamente, verifique se há
alguma atualização disponível junto ao suporte técnico.
CPC Inválido
-430
Não foi possível criar CDC
-440
Arquivo de update não encontrado
-450
Possíveis causas para os erros acima:
Verifique se os dados utilizados para a atualização estão incorretos, verifique se
tem permissão de gravação na pasta onde está a CliantAPI, verifique a
procedência do arquivo CPC, se o Master utilizado para gerar o CPC é o
mesmo que criou o projeto gravado, se está corrompido o arquivo ou se o CPC
corresponde àquele dispositivo.
Servidor de rede não encontrado
-1001
Comando de rede não enviado
-1002
Tráfego bloqueado
-1003
Dados corrompidos
-1004
Possíveis causas para os erros acima:
Verifique se o NeoKeyNetService está ativo na lista de processos de seu
servidor, ele é necessário somente se o acesso for realizado através da rede,
com o NeoKey + Net.
Caso o aceso tenha sido realizado pelo tipo 0 local ou rede, interprete estes
erros como NeoKey não encontrado.
Caso o NeoKeyNetService esteja sendo executado, verifique se há algum
firewall impedindo que os pacotes trafeguem de entre os computadores, realize
um ping do cliente para o servidor para ver se a rede está funcionando, caso
tenha mais de uma placa de rede lembre-se de verificar as opções no arquivo
de configuração.
Licença expirada por data
-2000
Licença expirada por número de execuções
-2001
Possíveis causas para os erros acima:
A licença expirou, verifique a licença em seu projeto e observe os parâmetros
de expiração por data, o erro ocorre quando data configurada está inferior à
data corrente ou o número de execuções chegou até Zero.
Data do sistema está inválida
-2002
Possíveis causas para os erros acima:
A data configurada internamente no NeoKey não corresponde a vigente pelo
sistema operacional do cliente, verifique a data do sistema operacional do
cliente, corrige-a e se o erro persistir atualize o NeoKey remotamente, como
uma nova data de expiração, para corrigir a data do sistema interno.
27
NeoKey SDK versão 2.0.4
NeoKey indisponível
-2100
Possíveis causas para o erro acima:
O NeoKey não pode ser acessado, reconecte-o ao computador.
Necessário fazer Login
-2103
Possíveis causas para o erro acima:
Para executar algumas funções é necessário realizar o login primeiramente.
Atingido Limite de usuários de rede
-2110
Possíveis causas para o erro acima:
O número máximo de usuário em de rede para aquela licença foi atingido,
verifique a quantidade definida em seu projeto.
Somente uma Instância por IP permitida
-2120
Possíveis causas para o erro acima:
O número máximo de instancias em de rede para aquele IP atingido, verifique
esta opções em seu projeto.
Necessário fazer Logout
-2160
Possíveis causas para o erro acima:
Para executar algumas funções é necessário realizar o logout primeiramente.
Licença indisponível
-2300
Possíveis causas para o erro acima:
A licença que está tentando acessar está desabilitada, verifique em seu projeto.
Parâmetro Inválido
-2310
Possíveis causas para os erros acima:
Verifique em nossos exemplos e manuais como são feitas as chamadas para
cada função. Provavelmente é esperado um tipo de parâmetro e está sendo
enviado um com a característica incorreta, como por exemplo, tamanho,
verifique que não preencheu um ponteiro com Zeros, onde é esperado uma
string ou o tamanho informado para o ponteiro não corresponde ao esperado.
OTP Inválido
-2801
Necessário realizar Sincronismo OTP
-2802
Possíveis causas para os erros acima:
A senha OTP que está usando não está correta, verifique se as chaves K1 e K2
estão corretas, elas geradas na pasta OTPKEYS toda vez que o projeto é
salvo.
Antes de iniciar a validação OTP função (51), é necessário realizar a função de
sincronismo (50).
28
NeoKey SDK versão 2.0.4
Web update não está respondendo corretamente.
-5460
Web update está bloqueado.
-5461
Web update, a conexão com o computador local não pode ser inicializada.
-5462
Possíveis causas para os erros acima:
Há algum problema de conexão com a web ou nossos servidores estão indisponíveis,
verfique se nosso site www.neoprot.com.br pode ser acessado e se há conexão para
internet.
Web update, erro de sintaxe.
-5464
Possíveis causas para o erro acima:
Esta é uma falha interna em nossos sistemas, verifique junto ao suporte se há
atualização do serviço e das APIS.
Web update, usuário master não autorizado.
-5465
Possíveis causas para o erro acima:
Para usar o serviço é necessário se cadastrar, solicite junto ao suporte o seu cadastro
neste serviço.
Web update, erro geral no serviço.
-5466
Possíveis causas para o erro acima:
Esta é uma falha interna em nossos sistemas, verifique junto ao suporte se há
atualização do serviço e das APIS.
Web update, limite máximo permitido de NeoKeys na WEB atingido.
-5467
Possíveis causas para o erro acima:
Verifique junto ao suporte qual é a quantidade máxima de NeoKeys permitida e
cadastrada para você no serviço de Web update.
NeoKeyCall
A API possui uma função de acesso chamada “NeoKeyCall” que realiza todas as operações e
comandos disponíveis pelo hardware.
Protótipo da função:
int APIENTRY NeoKeyCall (
int cmd, // Comando ( veja a tabela de comandos abaixo)
LPSTR param1, // Parâmetro 1 (Ponteiro BYTE)
int p1, //Tamanho do Parâmetro 1 ou parâmetro auxiliar
LPSTR param2, //Tamanho do Parâmetro 2 (Ponteiro BYTE)
int p2, //Tamanho do Parâmetro 2 ou parâmetro auxiliar
29
NeoKey SDK versão 2.0.4
LPSTR param3, //Tamanho do Parâmetro 3 (Ponteiro BYTE)
int p3, //Tamanho do Parâmetro 3 ou parâmetro auxiliar
struct LicenseParameters * Licparam // Estrutura de licenças do NeoKey.);
Parâmetros:
int cmd
(Inteiro) É o comando a ser realizado pelo NeoKey, veja a Tabela 2. (Comandos)
Tabela 2 (Comandos)
Descrição
Login
Gravar na memória (DWORD)
Ler da memória (DWORD)
Criptografar
Descriptografar
Ler a licença
Gravar na memória (WORD)
Ler da memória (WORD)
Ler ID do Hardware
Ler uma página da memória
Gravar uma página da memória
Buscar próximo NeoKey
Reiniciar busca
Logout
Ler o código de atualização (CDC)
Aplicar atualização via código (CPC)
Aplicar atualização via arquivo
Sicronizar OTP (SincOTP)
Login OTP
SetSinc
Comando
1
2
3
4
5
7
8
9
10
11
12
14
15
16
31
32
33
50
51
53
LPSTR param1, LPSTR param2, LPSTR param3
(Ponteiro de BYTES) São parâmetros usados pelos comandos.
int p1, int p2, int p3
(inteiro) Informa o tamanho do ponteiro de bytes ou é um parâmetro auxiliar do
comando.
struct LicenseParameters * Licparam
30
NeoKey SDK versão 2.0.4
É o ponteiro da estrutura utilizada pela API para informações relativas a licença.
typedef struct LicenseParameters
{
unsigned char Enable; // Se a licença está habilitada
unsigned char SingleInstance; //Se somente uma instância do aplicativo por IP na rede
unsigned char Netusers; // Usuários de Rede
unsigned char ExpireDate[8]; //Data de expiração
unsigned char Counter[2]; // Número de execuções de execuções
unsigned char ID; // Identificação da licença (0 até 63)
unsigned char Reserved[2]; // Reservado para o futuro.
}LicenseParameters;
Descrição dos Comandos
Login - cmd = 1
Este dever ser o primeiro comando a ser executado, para que os outros comandos possam
funcionar. (Veja também a opção mais segura – LoginOTP).
O comando (1) login, é utilizado para encontrar o NeoKey conectado e responsável pelo “login”
da licença, possui como premissa um esquema de desafio-resposta (challenge-response) que
é configurado no seu projeto através do DevTool, ele utiliza somente um parâmetro (param1)
com o desafio/Senha (challenge) e neste mesmo parâmetro é retornado uma resposta
(response), quando o hardware é conectado.
O tamanho do desafio e da resposta é 16 Bytes, podendo este ser qualquer caractere.
O NeoKey possui um mecanismo de segurança que bloqueia sua utilização caso seja feito o
login com o Challenge (Desafio/Senha) errado, por mais de 10 vezes. Para desbloquear será
necessário gravar novamente o projeto no NeoKey via o DevTool.
Na estrutura de licença (LicenseParameters) deve ser informado na variável ID o número da
licença que vai ser feito o Login e na variável Enable o modo de acesso ao Hardware (0,1 ou 2)
e que informa após o acesso ao NeoKey, no caso (Enable=0), se o acesso foi local ou pela
rede, sendo que:
LicenseParameters.ID=0 // Ou qualquer número de 0 até 63
LicenseParameters.Enable = 0 // Local ou Rede
LicenseParameters.Enable = 1 //Somente Local
LicenseParameters.Enable = 2 //Somente Rede
31
NeoKey SDK versão 2.0.4
Exemplo:
LicenseParameters.ID=0
LicenseParameters.Enable=0
Senha = “1234567890123456”
Int ret =NeoKeyCall (1, senha, senha.Length, NULL, 0, NULL, 0, LicenseParameters)
If ret = 0 Sucesso ou If ret <> 0 Erro
Print (senha) Resposta = “abcdefghijlmnopq” e LicenseParameters.Enable=1 (acesso local)
Gravar na Memória (DWORD) - cmd = 2
O comando (2) grava dados na memória do NeoKey, que possui uma capacidade total 1K
DOUBLE WORDS, 4096 BYTES, endereçados de 0 a 1023. Lembrando que uma DOUBLE
WORD (DWORD) possui 4 bytes, totalizando então 4KBytes disponíveis para gravação no
NeoKey.
Exemplo:
Queremos gravar a informação: “1234” que contém 4 bytes ou 1 DWORD no endereço da
memória
Meudado=“1234”
Endereço=0
Int ret =NeoKeyCall (2, Meudado, Endereço, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Ler da memória (DWORD) - cmd = 3
O comando (3) lê da memória uma DWORD.
Exemplo:
Queremos ler a informação, no endereço 0 da memória.
Meudado=“XXXX”
Endereço=0
Int ret =NeoKeyCall (3, Meudado, Endereço, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável meudado é retornado o valor lido da memória.
Print (Meudado) >“1234”
32
NeoKey SDK versão 2.0.4
Criptografar - cmd = 4
O comando (4) criptografar permite cifrar/criptografar uma informação.
O NeoKey, possui um mecanismo de criptografia AES, com chave de 256 bits, que é
considerado um dos mais fortes mecanismos existentes no mercado hoje e sua chave de
criptografia é definida no projeto, através do DevTool.
Esta função pode ser usada, por exemplo, para criptografar dados sigilosos em bases de
dados, arquivos de configuração, etc.
O AES criptografa informações formatadas com tamanho múltiplo de 16 bytes, sendo
importante dimensionar a variável de acordo com essa premissa antes de acessar o comando.
Exemplo:
Queremos criptografar a informação: “1234567890123456” que contém 16 bytes
Meudado=“1234567890123456”
tamanho=16
Int ret =NeoKeyCall (4, Meudado, tamanho, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável meudado é retornado o valor criptografado.
Print ( Meudado) > “:/<)*t#Fj!xB{iMn”
Descriptografar - cmd = 5
O comando (5) descriptografar, permite decifrar/descriptografar uma informação.
Esta função pode ser usada, por exemplo, para descriptografar dados sigilosos em bases de
dados, arquivos de configuração, etc, que foram criptografados pelo comando 4.
O AES descriptografa informações formatadas com tamanho múltiplo de 16 bytes, sendo
importante dimensionar a variável de acordo com essa premissa antes de acessar o comando.
Exemplo:
Queremos criptografar a informação: “:/<)*t#Fj!xB{iMn” que contém 16 bytes e retornado o
comando (4)
Meudado=“:/<)*t#Fj!xB{iMn”
tamanho=16
33
NeoKey SDK versão 2.0.4
Int ret =NeoKeyCall (5, Meudado, tamanho, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável meudado é retornado o valor descriptografado.
Print (Meudado) > “1234567890123456”
Ler a licença - cmd = 7
O comando (7) lê as informações relativas à licença que está “logado”.
Exemplo:
Queremos ler o estado da licença ID = 0.
LicenseParameters=0
Int ret =NeoKeyCall (7, NULL, 0, NULL, 0, NULL, 0, LicenseParameters)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável LicenseParameters é retornado o valor lido da licença.
Licençahabilitada=LicenseParameters.Enable
Data= LicenseParameters.ExpireDate
Contador = LicenseParameters.counter (número de execuções)
Usuárioderede=LicenseParameters.Netusers
InstanciaUnica= LicenseParameters.SingleInstance
Gravar na Memória (WORD) - cmd = 8
O comando (8) gravar na memória uma WORD, ou seja, é utilizado para gravar dados na
memória do NeoKey, e este possui um total de 2K WORDS, endereçados de 0 a 2047.
Lembrando que uma WORD (DWORD) possui 2 bytes, totalizando então 4KBytes disponíveis
para gravação no NeoKey.
Exemplo:
Queremos gravar a informação: “12” que contém 2 bytes ou 1 WORD no endereço 0 da página
0 da memória
Meudado=“12”
34
NeoKey SDK versão 2.0.4
Endereço=0
Int ret =NeoKeyCall (8, Meudado, Endereço, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Ler da memória (WORD) - cmd = 9
O comando (9) lê da memória uma WORD.
Exemplo:
Queremos ler a informação, no endereço 0 da memória.
Meudado=“XX”
Endereço=0
Int ret =NeoKeyCall (9, Meudado, Endereço, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável meudado é retornado o valor lido da memória.
Print ( Meudado) >“12”
Ler ID do Hardware - cmd = 10
O comando (10) lê o HardwareID, que é o número de identificação exclusivo daquele NeoKey,
este número é único, ou seja cada NeoKey possui um HardwareID diferente do outro.
Este ID, possui uma informação de 8 Bytes.
Exemplo:
HardwareID=“XXXXXXXX”
tamanho=8
Int ret =NeoKeyCall (10, HardwareID, tamanho, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável meudado é retornado o valor lido da memória.
Print (HardwareID) > 25700001
35
NeoKey SDK versão 2.0.4
Ler uma página da memória - cmd = 11
O comando (11) lê uma página/bloco inteiro da memória, permitindo uma leitura mais rápida da
memória e lendo de uma só vez 1024 Bytes.
Exemplo:
Queremos ler a página/bloco 0 da memória.
Meudado=“XX...X” //Esta variável deve ter 1024 bytes de tamanho, caso contrário pode causar
uma corrupção da variável
Pagina/Bloco=0,1,2 ou 3
Int ret =NeoKeyCall (11, Meudado, 0, NULL, Pagina, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável meudado é retornado o valor lido da memória.
Print ( Meudado) >“12….”
Gravar uma página na memória - cmd = 12
O comando (12) grava uma página/bloco inteiro na memória, permite uma gravação mais
rápida da memória, gravando de uma só vez 1024 Bytes.
Exemplo:
Queremos gravar a página/bloco 0 da memória, com o dado “ABCD...”, podendo ser qualquer
valor.
Meudado=”ABCDABCD...A” //Esta variável deve ter 1024 bytes de tamanho, caso contrário
pode causar um corrupção da variável
Pagina/Bloco=0,1,2 ou 3
Int ret =NeoKeyCall (12, Meudado, 0, NULL, Pagina, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Buscar próximo NeoKey - cmd = 14
O comando (14) permite buscar outro NeoKey conectado no PC (para acessos via rede este
comando é ignorado).
Neste comando, quando já tiver sido feito o Login em um NeoKey, deverá ser realizado um
Logout deste primeiro, então execute o comando (14) e finalmente um novo Login deve ser
realizado no segundo NeoKey para ter acesso aos outros comandos.
36
NeoKey SDK versão 2.0.4
Exemplo:
Int ret = NeoKeyCall (14, NULL, 0, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Reiniciar busca - cmd = 15
O comando (15) permite reiniciar a busca de NeoKey conectado no PC, por exemplo quando o
comando 14 é executado, e você gostaria de acessar o primeiro NeoKey novamente.
Neste comando quando já tiver sido feito o Login em um outro NeoKey, deverá ser realizado
um Logout deste segundo, então execute o comando (15) e finalmente um novo Login deve ser
realizado no primeiro NeoKey para ter acesso aos outros comandos.
Exemplo:
Int ret = NeoKeyCall (15, NULL, 0, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Logout - cmd = 16
O comando (16) finaliza os acessos a uma licença no NeoKey, impedindo que qualquer
comando possa ser executado.
Exemplo:
Int ret = NeoKeyCall (16, NULL, 0, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Ler o código de atualização (CDC) - cmd = 31
O comando (31) instrui o NeoKey a gerar um CDC (código do cliente) que é o código gerado
para realizar uma atualização, sem este código não é possível atualizar os dados do NeoKey.
O CDC é um conjunto de 32 bytes, único para cada processo de atualização e deve ser
enviado ao desenvolvedor do software, para que este, através do DevTool gere o CPC (código
para o cliente) que contém as informações de atualização.
Exemplo:
CDC=”XXXX…X” //Esta variável deve ter 32 bytes de tamanho, caso contrário pode causar
uma corrupção da variável
Int ret =NeoKeyCall (31, CDC, 32, NULL, 0, NULL, 0, NULL)
37
NeoKey SDK versão 2.0.4
If ret = 0 Sucesso ou If ret <> 0 Erro
Print(CDC)
Aplicar atualização via código (CPC) - cmd = 32
O comando (32) instrui o NeoKey, através de um CPC (código para o cliente), a atualizar dados
relativos exclusivamente a uma licença, permitindo atualizar o número de usuários de rede,
número de execuções e data de expiração, remotamente.
O CPC é um conjunto de 32 bytes, único para cada processo de atualização e deve ser
enviado ao cliente do desenvolvedor do software.
Exemplo:
CPC=”12345678901234567890123456789012” //Esta variável deve ter 32 bytes de tamanho,
caso contrário pode causar uma corrupção da variável
Int ret =NeoKeyCall (32, CPC, 32, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
Aplicar atualização via arquivo (CPC) - cmd = 33
O comando (33) instrui o NeoKey, através de um arquivo .CPC (código para o cliente), a
atualizar todos os dados gravados no hardware, permitindo atualizar o desafio-resposta, chave
de criptografia, licenças e a memória, remotamente.
O arquivo .CPC deve ser usado com cuidado, pois ele permite a atualização sem associar a
um CDC ou a um HardwareID específico.
Exemplo:
ArquivoCPC=”c:\atualiza.cpc” //Esta variável deve ter no máximo 255 bytes de tamanho, caso
contrário pode causar uma corrupção da variável
Tamanho=15
Int ret =NeoKeyCall (33, ArquivoCPC, Tamanho, NULL, 0, NULL, 0, NULL)
If ret = 0 Sucesso ou If ret <> 0 Erro
SetSinc - cmd = 53
Este comando dever ser executado antes de acessar a função (50) SincOTP para que seja
criado o mecanismo de sincronização seguro entre o Hardware e seu programa, você deve
criar um número aleatório e enviar para o dispositivo, que retorna de volta um código que você
deve validar, e se não corresponder ao valor esperado deverá terminar a validação. Este
38
NeoKey SDK versão 2.0.4
número aleatório pode ser gerado como lhe for conveniente, procure gerá-lo da forma mais
segura possível.
A validação deve ocorrer da seguinte forma.
ArrayRandom = Gerar um array de 8 bytes – randômico
Chamar a função 53 e enviar os dados randômicos ao Hardware
Chamar a função 50 SincOTP
Comparar os 8 primeiros bytes da resposta recebida do Hardware, sendo que
a. Resposta do Hardware = HASH_SHA1(K1(20 bytes) + ArrayRandom(8 bytes))
5. Se a resposta não for correta deve-se parar o programa.
1.
2.
3.
4.
SincOTP - cmd = 50
Este dever ser o comando a ser executado, antes de acessar a função (51) LoginOTP para que
seja criado o mecanismo de sincronização entre a API, o Hardware e seu programa, para
realizar uma autenticação segura.
Na estrutura de licença (LicenseParameters ) deve ser informado o modo de acesso ao
Hardware, na variável Enable sendo:
LicenseParameters.Enable = 0 // Local ou Rede
LicenseParameters.Enable = 1 //Somente Local
LicenseParameters.Enable = 2 //Somente Rede
Exemplo:
LicenseParameters.Enable = 0
SINC = “xxxxxxxxxxx”
Int ret =NeoKeyCall (50, SINC, 8, NULL, 0, NULL, 0, dev)
If ret = 0 Sucesso ou If ret <> 0 Erro
LoginOTP - cmd = 51
Este dever ser o primeiro comando a ser executado, para que os outros comandos possam
funcionar (exceto o SincOTP).
O comando (51) LoginOTP, é utilizado para encontrar o NeoKey conectado e responsável pelo
“login” da licença, possui como premissa um esquema de desafio-resposta (challengeresponse) baseado em uma senha que é modificada para cada acesso, conhecido como OTP
(ONE TIME PASSWORD), incrementando muito a fator segurança. O OTP possui duas chaves
K1 e K2, que são derivadas do desafio-resposta configurado no seu projeto, através do
39
NeoKey SDK versão 2.0.4
DevTool, e para calculá-lo será necessário chamar as funções SincOTP(50) e SetSinc(53) para
obter os dados de sincronização.
Esta função utiliza somente um parâmetro (param1) com o desafio/Senha (challenge) e neste
mesmo parâmetro retorna uma resposta (response), quando o hardware está conectado.
O desafio deve ser calculado da seguinte forma (consulte os exemplos para entender melhor):
OTP=HASH_SHA1(SINC + K1)
O tamanho do desafio e da resposta é 16 Bytes, sendo ignorado os últimos 4 bytes gerados do
HASH, e podendo este ser qualquer caractere.
Para verificar que a resposta está correta, devemos verificar da seguinte forma:
OTP_Check=HASH_SHA1(SINC + K2)
Se (OTP_Check = Response-retornado da chamada da função (51) (param1)) então está tudo
OK.
K1 e K2 são gerados em arquivos para serem usados pelos exemplos, cada vez que um
projeto é salvo, e ficam armazenados no diretório (OTPKEYS). (Os exemplos devem ser
“recompilados”).
O NeoKey possui um mecanismo de segurança que bloqueia sua utilização casos seja feito o
login com o Challenge(Desafio/Senha) errado, por mais de 10 vezes. Para desbloquear será
necessário gravar novamente o projeto no NeoKey via o DevTool.
Na estrutura de licença (LicenseParameters ) deve ser informado o número da licença, que vai
ser feito o Login, na variável ID e o modo de acesso ao Hardware, na variável Enable sendo:
LicenseParameters.ID=0 // Ou qualquer número de 0 até 63
LicenseParameters.Enable = 0 // Local ou Rede
LicenseParameters.Enable = 1 //Somente Local
LicenseParameters.Enable = 2 //Somente Rede
Exemplo:
LicenseParameters.ID=0
LicenseParameters.Enable = 0
Senha = “1234567890123456”
Int ret =NeoKeyCall (51, senha, senha.Length, NULL, 0, NULL, 0, dev)
If ret = 0 Sucesso ou If ret <> 0 Erro
40
NeoKey SDK versão 2.0.4
Funções NeoKey_
NeoKey_Login OU NeoKey_LoginOTP
Protótipo:
int NeoKey_Login(unsigned char *message, unsigned int size,unsigned int licenseID, unsigned
int Type,unsigned char *HardwareID)
OU
int NeoKey_LoginOTP(unsigned char *message, unsigned int size,unsigned int licenseID,
unsigned int Type,unsigned char *HardwareID)
Este dever ser o primeiro comando a ser executado, para que os outros comandos possam
funcionar.
Esta função é utilizada para encontrar o NeoKey conectado e é responsável pelo “login” da
licença, possui como premissa um esquema de desafio-resposta (challenge-response) que é
configurado no seu projeto através do DevTool, ele utiliza o parâmetro (message) com o
desafio/Senha (challenge) e neste mesmo parâmetro é retornado uma resposta (response),
quando o hardware é conectado, no parâmetro size deve ser informado o tamanho da senha
(16), no parâmetro licenseID deve ser informado o número de licença que será utilizada o valor
deve ser (0 até 63), no parâmetro Type deve ser informado o modo de acesso à chave sendo
(0 = Local e rede, 1 = somente local e 2 =somente rede), no parâmetro HardwareID é retornado
o número de identificação do Hardware(8 Bytes), antes de chamar a função lembre-se de
dimensionar o parâmetro HardwareID com 8 bytes, para evitar corrupção da memória.
O tamanho do desafio e da resposta é 16 Bytes, podendo este ser qualquer caractere.
O NeoKey LoginOTP, é baseado em uma senha que é modificada para cada acesso,
conhecido como OTP (ONE TIME PASSWORD), incrementando muito a fator segurança. O
OTP possui duas chaves K1 e K2, que são derivadas do desafio-resposta configurado no seu
projeto, através do DevTool, e para calculá-lo será necessário, antes, chamar a função
NeoKey_SincOTP para obter os dados de sincronização.
O desafio deve ser calculado da seguinte forma (consulte os exemplos para entender melhor):
OTP=HASH_SHA1(SINC + K1)
O tamanho do desafio e da resposta é 16 Bytes, sendo ignorado os últimos 4 bytes gerados do
HASH, e podendo este ser qualquer caractere.
Para verificar que a resposta está correta, devemos verificar da seguinte forma:
OTP_Check=HASH_SHA1(SINC + K2)
Se (OTP_Check = Response-retornado da chamada da função (51) (param1)) então está tudo
OK.
41
NeoKey SDK versão 2.0.4
K1 e K2 são gerados em arquivos para serem usados pelos exemplos, cada vez que um
projeto é salvo, e ficam armazenados no diretório (OTPKEYS). (Os exemplos devem ser
“recompilados”).
O NeoKey possui um mecanismo de segurança que bloqueia sua utilização caso seja feito o
login com o Challenge(Desafio/Senha) errado por mais de 10 vezes. Para desbloquear será
necessário gravar novamente o projeto no NeoKey via o DevTool.
Exemplo:
Senha = “1234567890123456”
HardwareID=”xxxxxxxx”
Int ret = NeoKey_Login(Senha, 16,0, 0, HardwareID)
If ret = 0 Sucesso ou If ret <> 0 Erro
Print (senha) Resposta = “abcdefghijlmnopq”
Print (HardwareID) Resposta = “00000001”
NeoKey_SincOTP
int NeoKey_SincOTP(unsigned char *Sinc, unsigned int Type)
Este dever ser o comando a ser executado, antes de acessar a NeoKey_LoginOTP para que
seja criado o mecanismo de sincronização entre a API, o Hardware e seu programa, para
realizar uma autenticação segura baseada em OTP.
Em “Type” deve ser informado o modo de acesso à chave, sendo (0 = Local e rede, 1 =
somente local e 2 =somente rede)
Exemplo:
Type = 0
SINC = “xxxxxxxxxxx”
Int ret =NeoKeyCall (SINC,Type)
If ret = 0 Sucesso ou If ret <> 0 Erro
NeoKey_Logout
int NeoKey_Logout(void)
Finaliza os acessos a uma licença no NeoKey, impedindo que qualquer comando possa ser
executado.
Exemplo:
Int ret =NeoKey_Logout ()
42
NeoKey SDK versão 2.0.4
If ret = 0 Sucesso ou If ret <> 0 Erro
NeoKey_Write
int NeoKey_Write(unsigned char *message, unsigned int size, unsigned int offset)
É utilizado para gravar dados na memória do NeoKey, no parâmetro message devem ser
passados os dados a serem gravados, lembrando que, esta informação de ter um tamanho
múltiplo de 4, ou seja 4,8,16,20,etc bytes, o parâmetro “size” é o tamanho de dados, o
parâmetro offset é o endereço inicial onde serão gravados os dados.
O NeoKey possui um total 1K DOUBLE WORDS, endereçados de 0 a 1023.
Exemplo:
dados = “1234567890123456”
Int ret = NeoKey_Write(dados, 16,0)
If ret = 0 Sucesso ou If ret <> 0 Erro
NeoKey_Read
int NeoKey_Read(unsigned char *message, unsigned int size, unsigned int offset)
É utilizado para ler dados da memória do NeoKey, no parâmetro message deve estar
dimensionado de acordo com os dados a serem lidos, lembrando que, esta informação de ter
um tamanho múltiplo de 4, ou seja 4,8,16,20,etc bytes, no parâmetro ”size” é o tamanho de
dados, o parâmetro offset é o endereço inicial de onde serão lidos os dados.
O NeoKey possui um total 1K DOUBLE WORDS, endereçados de 0 a 1023.
Exemplo:
dados = “xxxxxxxxxxxxxxxx”
Int ret = NeoKey_Read(dados, 16,0)
If ret = 0 Sucesso ou If ret <> 0 Erro
Print (dados) Resposta = “1234567890123456”
NeoKey_Login_Next
int APIENTRY NeoKey_Login_Next(unsigned char *message,unsigned int size, unsigned int
licenseID, unsigned int Type,unsigned char *HardwareID)
Esta função é utilizada para encontrar outro (próximo) NeoKey conectado, (para acessos via
rede este comando é ignorado), quando já há um primeiro conectado e assim como a função
NeoKey_Login é responsável pelo “login” da licença, possui como premissa um esquema de
desafio-resposta (challenge-response) que é configurado no seu projeto através do DevTool,
ele utiliza o parâmetro (message) com o desafio/Senha (challenge) e neste mesmo parâmetro é
43
NeoKey SDK versão 2.0.4
retornado uma resposta (response), quando o hardware é conectado, no parâmetro size deve
ser informado o tamanho da senha (16); no parâmetro licenseID de ser informado o número de
licença que será utilizada, o valor deve ser (0 até 63); no parâmetro Type deve ser informado o
modo de acesso à chave sendo (0 = Local e rede, 1 = somente local e 2 =somente rede); no
parâmetro HardwareID é retornado o número de identificação do Hardware(8 Bytes), antes de
chamar a função lembre-se de dimensionar o parâmetro HardwareID com 8 bytes, para evitar
corrupção da memória.
O tamanho do desafio e da resposta é 16 Bytes, podendo este ser qualquer caractere.
O NeoKey possui um mecanismo de segurança que bloqueia sua utilização caso seja feito o
login com o Challenge(Desafio/Senha) errado, por mais de 10 vezes. Para desbloquear será
necessário gravar novamente o projeto no NeoKey via o DevTool.
Exemplo:
Senha = “1234567890123456”
HardwareID=”xxxxxxxx”
Int ret = NeoKey_Login_Next(Senha, 16,0, 0, HardwareID)
If ret = 0 Sucesso ou If ret <> 0 Erro
Print (senha) Resposta = “abcdefghijlmnopq”
Print (HardwareID) Resposta = “00000002”
NeoKey_Crypt
int NeoKey_Crypt(unsigned char *message, unsigned int size)
Permite cifrar/criptografar uma informação.
O NeoKey, possui um mecanismo de criptografia AES, com chave de 256 bits, que é
considerado um dos mais fortes mecanismos existentes no mercado hoje e sua chave de
criptografia é definida no projeto, através do DevTool.
Esta função pode ser usada, por exemplo, para criptografar dados sigilosos em bases de
dados, arquivos de configuração, etc.
O AES criptografa informações formatadas com tamanho múltiplo de 16 bytes, sendo
importante dimensionar a variável de acordo com essa premissa antes de acessar o comando.
Exemplo:
Queremos criptografar a informação: “1234567890123456” que contém 16 bytes
Meudado=“1234567890123456”
44
NeoKey SDK versão 2.0.4
tamanho=16
Int ret = NeoKey_Crypt (Meudado, tamanho)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável meudado é retornado o valor criptografado.
Print ( Meudado) > “:/<)*t#Fj!xB{iMn”
NeoKey_Decrypt
int NeoKey_Decrypt(unsigned char *message, unsigned int size)
Permite decifrar/descriptografar uma informação.
O AES criptografa informações formatadas com tamanho múltiplo de 16 bytes, sendo
importante dimensionar a variável de acordo com essa premissa antes de acessar o comando.
Exemplo:
Queremos criptografar a informação: “:/<)*t#Fj!xB{iMn”que contém 16 bytes que foi
criptografada pelo NeoKey.
Meudado=“:/<)*t#Fj!xB{iMn”
tamanho=16
Int ret = NeoKey_Decrypt (Meudado, tamanho)
If ret = 0 Sucesso ou If ret <> 0 Erro
Na variável meudado é retornado o valor descriptografado.
Print ( Meudado) > =“1234567890123456”
NeoKey_GetLicense
int APIENTRY NeoKey_GetLicense(
unsigned char ID, //IN
unsigned char * Enable,//OUT
unsigned char * SingleInstance,//OUT
unsigned char * Netusers,//OUT
unsigned char * ExpireDate,//OUT
unsigned int * Counter//OUT
)
45
NeoKey SDK versão 2.0.4
Esta função lê informações relativas a uma licença.
Exemplo:
Queremos ler o estado da licença ID = 0.
ID=0
Enable=x
SingleInstance=x
Netusers=x
ExpireDate=”xxxxxxxx” (8 bytes)
Counter=x
Int ret = NeoKey_GetLicense (ID, Enable, SingleInstance, Netusers, ExpireDate, Counter)
If ret = 0 Sucesso ou If ret <> 0 Erro
Em cada parâmetro é retornado o valor lido da licença.
Em ExpireDate, é retornado o dia da expiração no formato (dd/mm/yy).
ClientAPI – Arquivo de Configuração
A ClientAPI, permite ao desenvolvedor parametrizar o comportamento da API, através de um
arquivo de configuração que deverá estar no mesmo diretório que ela, e com o mesmo nome,
mudando somente a extensão para .ini, não sendo sua presença obrigatória mesmo para
acesso via Rede e sendo opcional todos os itens descritos abaixo.
[SETTINGS]
port=30005
//indica a porta a ser usada para a comunicação via REDE
broadcast_enable=1
//Permite a localização automática do servidor de rede em que o NeoKey está conectado.
net_enable=1
//Permite acessar o NeoKey pela Rede
log=1
// Habilita o LOG dos acessos
[SERVER]
46
NeoKey SDK versão 2.0.4
net_timeout=1000
//Permite definir o valor do TIMEOUT (em mili segundos) para acessos na rede
name_or_ip=192.168.1.101
//Informa o IP ou nome do servidor de rede em que o NeoKey será conectado.
[LOCAL]
Ip_ok=192.168.1.101
//Quando há mais de uma de rede no PC, deve-se informar por qual rede os dados vão
trafegar.
[UPDATE]
alarm_message_counter= Seu sistema está quase expirando. Número de execuções=
alarm_message_days = Faltam alguns dias para expirar sua licença. Número de dias=
//Aqui definimos a mensagem ao usuário do NeoKey para os controles de expiração.
alarm=1
//Aqui habilitamos se a mensagem de será apresentada
counter=100
//Permite definir a partir de qual valor de contador do número de execuções as mensagens de
atualização serão apresentadas, caso não seja especificado o valor padrão é quando o
contador for igual a 20.
days=10
//Permite definir a partir de quantos dias antes de expirar o NeoKey as mensagens de
atualização serão apresentadas, caso não seja especificado o valor padrão é 7 dias.
[WEBUPDATE]
enable=1
//Habilita a atualização do NeoKey pela internet usando o NeoKey NOW, (NeoKey Over The
Web)
alarm_message=Erro ao realizar Webupdate
//Aqui definimos a mensagem de erro caso o NeoKey NOW não possa ser acessado.
47
NeoKey SDK versão 2.0.4
alarm=1
//Aqui habilitamos se a mensagem de erro será apresentada caso o NeoKey NOW não possa
ser acessado.
counter=100
//Permite definir a partir de qual valor de contador do número de execuções as checagens de
atualização automáticas serão ativadas.
days=10
//Permite definir a partir de quantos dias antes de expirar o NeoKey, as checagens de
atualização automáticas serão ativadas.
48
NeoKey SDK versão 2.0.4
NeoKeyNetService
O NeoKeyNetService é o software responsável por realizar os acessos ao NeoKey através da
Rede.
Quando uma aplicação faz o Login na ClientAPI, se e os recursos de rede estiverem
habilitados, tenta localizar automaticamente um servidor na Rede onde esteja sendo
executado o NeoKeyNetService, para então iniciar os acessos ao NeoKey+Net através da Rede.
O NeoKeyNetService pode ser executado a partir de qualquer pasta como uma aplicação
normal bastando um duplo clique sobre ele ou ainda instalá-lo como um serviço.
Para mostrar todas as mensagens inclusive o log, execute o comando: NeoKeyNetService -d
Para instalar o serviço do NeoKeyNetService execute o comando: NeoKeyNetService -i
Para desinstalar o serviço do NeoKeyNetService execute o comando: NeoKeyNetService -u
Para fechar/terminar o aplicativo utilize a tecla “t”.
Através do log é possível verificar quais máquinas estão acessando o Serviço e estado das
licenças.
Ainda é possível visualizar a utilização das licenças via browser: http://<ip_do_servidor>:porta,
ex: http://192.168.0.10:30005
NeoKeyNetService – Arquivo de Configuração
A NeoKeyNetService, permite ao desenvolvedor parametrizar seu comportamento, através de
um arquivo de configuração que deverá estar no mesmo diretório que ele, e com o mesmo
nome, mudando somente a extensão para .ini, não sendo sua presença obrigatória e sendo
opcional todos os itens descritos abaixo.
[SETTINGS]
port=30005 //indica a porta a ser usada para a comunicação via REDE
log=1 // Habilita o LOG dos acessos
[LOCAL]
ip_ok=192.168.1.101 //Quando há mais de uma rede no PC, podemos informar por qual rede
os dados vão trafegar.
É possível ainda usar o TELNET do Windows ou Linux (verifique como habilitar ou instalar no
manual do seu sistema operacional) ou o PUTTY, programa gratuito que pode ser encontrado
na internet, para obter informações e visualizar o estado das licenças no NeoKeyNetService
através da rede, para isto, você deve executar o putty.exe e abrir uma conexão Telnet para o IP
49
NeoKey SDK versão 2.0.4
onde está instalado o NeoKeyNetService usando a porta ex: 30005, logo que se conectar,
digite qualquer tecla e deverá aparecer uma mensagem “#ServerReady” e para iniciar a
visualização basta digitar no terminal o texto “cmd” [enter], neste instante será listada todas as
conexões por número de processo e IP e logo após os acessos que estão ocorrendo.
Ex: c:\>telnet 192.168.0.30 30005
[UPDATE]
alarm_message_counter= Seu sistema está quase expirando. Número de execuções=
alarm_message_days= Faltam alguns dias para expirar sua licença. Número de dias=
//Aqui definimos a mensagem ao usuário do NeoKey para os controles de expiração.
alarm=1
//Aqui habilitamos se a mensagem de será apresentada
counter=100
//Permite definir a partir de qual valor de contador do número de execuções, que as mensagens
de atualização serão apresentadas, caso não seja especificado o valor padrão é quando o
contador for igual a 20.
days=10
//Permite definir a partir de quantos dias antes de expirar o NeoKey as mensagens de
atualização serão apresentadas, caso não seja especificado o valor padrão é 7 dias.
[WEBUPDATE]
enable=1
//Habilita a atualização do NeoKey pela internet usando o NeoKey NOW , (NeoKey Over The
Web)
alarm_message=Erro ao realizar Webupdate
//Aqui definimos a mensagem de erro caso o NeoKey NOW não possa ser acessado.
alarm=1
//Aqui habilitamos se a mensagem de erro será apresentada caso o NeoKey NOW não possa
ser acessado.
counter=100
50
NeoKey SDK versão 2.0.4
//Permite definir a partir de qual valor do contador de número de execuções, que as checagens
de atualização automáticas serão ativadas, caso não seja especificado o valor padrão é
quando o contador for igual a 20
days=10
//Permite definir a partir de quantos dias antes de expirar o NeoKey, as checagens de
atualização automáticas serão ativadas, caso não seja especificado o valor padrão é 7 dias.
51
Download

Manual - NeoKey