Página 1 de 1

Evitar cópia do sistema na mesma máquina.

Enviado: 05 Mai 2008 10:04
por mpfeitosa
Oi Amigos,

Aconteceu em um cliente que um usuario bandido, fez uma copia do sistema para uma pasta dentro do micro do caixa, e recebeu prestacoes nesta copia. Autenticou o carne, emitiu recibos e depois apagou a copia.
Para eitar problemas como este, criei um bat que lista executaveis do meu sistema ( dir c:\OT.EXE /s > lista.txt).
No executavel verifico de o valor é maior que um, se for a operacao é abortada.
Isso funciona bem. O problema é que esse processo é muito lento e alguns clientes estão reclamando muito.
Outro problema é que se fizer a copia em uma maquina da rede, o sistema deixa passar.
Alguem tem uma dica ?
Desde já agradeço.

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 05 Mai 2008 10:22
por Toledo
Márcio, você já pensou em verificar no início do seu programa em qual pasta (diretório) o programa está sendo executando?

Abraços,

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 05 Mai 2008 10:54
por Maligno
O Toledo matou a xarada com algo muito simples: force a execução do seu programa a partir de um diretório específico, incluindo o drive. Como em alguns clientes as letras dos drives podem precisar ser diferentes, isso pode ser resolvido armazenando a letra do drive necessário num arquivo texto comum, gravado como oculto num diretório que todos normalmente têm. Exemplo: c:\windows.

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 05 Mai 2008 11:35
por Toledo
Maligno, o Márcio pode usar a função DIRNAME() da CATools, que retorna apenas o nome da pasta, sem a letra da unidade.

exemplo:

Código: Selecionar todos

IF DIRNAME() != "\NOMEPASTA"
  ALERT("Erro ao executar o Programa!")
 QUIT
ENDIF
Abraços,

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 05 Mai 2008 11:54
por Maligno
Sim. Eu até já usei essa função. Essa informação é muito simples e consta na relação de argumentos de execução do programa, que é padrão do DOS. Infelizmente, pelo Clipper, diretamente, não é possível recuperá-la, já que ela reside numa variável de acesso interno. Por isso, fiz então uma função C pra recuperar o caminho de execução do EXE. Provavelmente a CATools usa o mesmo esquema. Veja como o fonte é simples:

Código: Selecionar todos

CLIPPER AppOrigin(void) {
    extern char **__argv;
    _retc(*__argv);
    return;
}
Caso alguém se interesse e não queira usar a CATools só pra isso, é só pegar essa função aqui. Ao executá-la, pra suprimir a identificação do drive, basta remover os dois primeiros caracteres.

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 05 Mai 2008 21:31
por Pablo César
Também acho que o jeito mesmo é saber se é na máquina (pode ser também verificado o numero serial do HD e nome da estação) + DRIVE e mais diretório para esse caso. E ainda para alertar quando ocorrer alguma discordância desse procedimento fazer com que mande um alerta ao gerente de forma silenciosa para pegar o individuo. Puxa essa, parece coisa do FBI... também quem diria que o carinha fizera trambique dessa forma ?

Para complementar, eu acostumo pega o dirve da seguinte forma com a CT.LIB:

VVOL:=SUBSTR(ALLTRIM(EXENAME()),1,2)

E para pega o nome do diretório:

VDIR:=DIRNAME()

POde também ser feito um LOG que seja acionado quando houver discordância de execução, guardando nome da estação, dia, hora e nome do usuário logado para documentar e ferrar de vez com o trambiqueiro.

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 05 Mai 2008 21:37
por Manuel Luis Modernel
Para evitar invasões não autorizadas eu já usei a função netname() que me dava o nome da estação que estava sendo utilizada dai fazia comparações autorizando ou não a abertura.

Usei também um arquivo M4.DBF (serve qualquer nome.DBF) com senhas o qual eu denominava M4.sys (serve qualquer extensão) o fato principal que ele mesmo renomeado e com outra extensão, ele continua TRABALHANDO como um DBF e fica bem escondido numa pasta qualquer, assim dificilmente um usuário iria procurar e copiar este arquivo "Fundamental" para o funcionamento do programa ao fazer uma copia pirata.

Jogadas BOBAS mais funcionavam, ao menos contra leigos hihihihi !

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 05 Mai 2008 21:57
por Pablo César
Oi Manuel,

Se o seu método era para limitar a pirataria, serve até um certo ponto para outras situações (como tudo em informática e como você mesmo disse ao menos para leigos), no entanto não creio que sirva para atender a essa situação do colega. Pois esse procedimento não evitaria de ter uma SEGUNDA cópia do programa em outro diretório. O que possibilitou esse usuário poder meter mão nos recebimentos do caixa, imagine só !.

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 08 Mai 2008 12:27
por rochinha
Amiguinho

Não deixe o usuario perceber isto, pois provavelmente ele continuara fazendo.

Crie em seu sistema uma tabela para auditoria, coloque alguns campos que acha importantes como:

- numero da prestação
- hora do movimento
- data
- usuario(mesmo que use outro)
- valor da transação e nome da pasta de execução(pasta onde a copia esta sendo executada).
- contador de transações

Esta tabela deverá sempre na pasta c:\auditoria\TePeguei.dbf(exemplo).

Deixe seu sistema como esta, mas force que o mesmo grave cada movimento feito nesta tabela.

Mesmo que o sistema esteja sendo executado em duas pastas ele sempre ira guardar um registro nesta tabela, não deixando buracos.

Defina para cada movimento feito um numero sequencial(contador de moviementos) e grave este contador em alguma tabela(use minha função de autonumeração da sessão codigo fonte).

De vez em quando compare este contador com os buracos existentes na tabela principal de lancamentos e veja o que falta, depois verifique na tabela TePeguei, quais os lançamentos extras que não compoem o principal e qual a pasta(com um aplicativo especifico é possivel recuperar a pasta dletada).

Com a prova do crime, mostre ao seu cliente, que seu sistema não possue falhas de programação, mas sim brechas de operação.

O usuario que faz algo assim não é um reles usuario, tem conhecimento e esperteza, então use a experteza dele contra ele, assim diria o sábio Steven Segal.

Evitar cópia do sistema na mesma máquina.

Enviado: 08 Mai 2008 13:23
por Pablo César
rochinha escreveu:Com a prova do crime, mostre ao seu cliente, que seu sistema não possue falhas de programação, mas sim brechas de operação.
Eu aconselho a não dizer que meu sistema tem BRECHAS. Diria que diante de usuários de conhecimento avançado, criei uma rotina de LOG e detectou este PROBLEMA.

Não é bom declarar que o sistema tem portinhas abertas e sim explicar (se perguntarem) como em tudo em informática, sempre haverá um jeito de driblar um ou outra situação.

Re: Evitar cópia do sistema na mesma máquina.

Enviado: 08 Mai 2008 16:59
por MARCELOG
Oi amigo,
a função exename() resolve parcialmente o seu problema.
A zebra é que o sistema vai ter que ser personalizado para o cliente.
Supondo que o executável do sistema chamasse TESTE.EXE e ficasse na pasta TESTE do servidor de nome SERVIDOR.

IF 'C:\TESTE\TESTE.EXE' == UPPER(EXENAME())
\\ ok - Estou no servidor
ELSEIF '\\SERVIDOR\C\TESTE\TESTE.EXE' == UPPER(EXENAME())
\\ ok - Mas não estou no servidor
ELSE
\\ Há algo errado
ENDIF

Conforme se vê, se estiver no servidor não vão existir duas pastas de nome TESTE, contendo o arquivo TESTE.EXE .
Por outro lado, na rede, não vai existir um outro computador com o nome de SERVIDOR né.
Logo, parece que o esquema vai funiconar.

MarceloG

Ps: Não use acesso mapeado.
Não sei se EXENAME() tem no Clipper ou é de alguma de suas bibliotecas.