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

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

mpfeitosa
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 05 Mai 2008 09:40

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

Mensagem 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.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

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

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

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

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

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

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

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

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

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

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Manuel Luis Modernel
Usuário Nível 2
Usuário Nível 2
Mensagens: 66
Registrado em: 02 Mar 2008 20:40
Localização: São José do Rio Preto - SP

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

Mensagem 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 !
OI Aqui é o Veio Modernel
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

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

Mensagem 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ó !.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

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

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

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

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

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

Mensagem 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.
Água mole em pedra dura tanto bate que até espirra!
Responder