Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Com Seguranca. Estamos No Sal...


Guest - Felipee -

Pergunta

Guest - Felipee -

Problema com seguranca

Amigos,

Vi hoje um problema com seguranca no sistema. unsure.gif

Tenho um sistema de locadora e o cliente instalou um outro terminal, ou seja, pagar mais uma licenca. smile.gif

O sistema é bloquado pelo numero de serie do hd. Se ele copiasse o sistema para o outro computador, ele não funcionaria porque o numero serial deste outro seria diferente. wink.gif

Porem, o kara que fez o servico fz uma "formatação espelhada" do hd onde o sistema está instalado.

Portanto, o sistema está funcionando perfeitamente no outro computador... sad.gif

Como não permitir isso? Fiquei confuso... dry.gif

Se for assim, estamos no sal. Nunca mais clientes vao precisar comprar uma nova licenca. É só espelhar... ohmy.gif

abrs,

Felipee.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

cara é o seguinte:

Tenta armazenar em váriaveis não só o nº de série do HD mas tb o código de fornecedor, sei lá armazena mais informações. Agora existe um outro problema não sei se quando é feito a formatação espelhada se o que esta recebendo a imagem fica com todas as informações do outro hd isso é, mesmo que ele tenha uma outro código de fornecedor ele recebe o do hd que esta emitindo a imagem...

Outra forma de você evitar isso é obrigando o usuário a utilizar um servidor para o seu sistema e os terminais irão acessa-lo por rede ...

falou

Espero ter ajudado...

Qualquer dúvida posta ai

Alexandre

Link para o comentário
Compartilhar em outros sites

  • 0

Aproveitando o embalo do Felipee, como é que eu faço pra travar o programa pelo número de série do HD, porque tem uns clientes engraçadinhos que compram nossos sistemas a acabam depois vendendo pra colegas do mesmo ramo.

Link para o comentário
Compartilhar em outros sites

  • 0
Aproveitando o embalo do Felipee, como é que eu faço pra travar o programa pelo número de série do HD, porque tem uns clientes engraçadinhos que compram nossos sistemas a acabam depois vendendo pra colegas do mesmo ramo.

Boa pergunta! Estou precisando disso.

Falou.

Link para o comentário
Compartilhar em outros sites

  • 0

Aproveitando o embalo do Felipee, como é que eu faço pra travar o programa pelo número de série do HD, porque tem uns clientes engraçadinhos que compram nossos sistemas a acabam depois vendendo pra colegas do mesmo ramo.

Olá Arlon,

Pra travar, primeiro você vai ter que pegar o nº de série, ai vai uma função que faz isso.

Function SerialNum(FDrive:String) :String;
Var
Serial:DWord;
DirLen,Flags: DWord;
DLabel : Array[0..11] of Char;
begin
Try GetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0);
Result := IntToHex(Serial,8); 
Except Result :='';
end;
end;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Felipee -

Amigos,

Respondendo ao vivendoeaprendendo, o computador não está em rede. Está em outra unidade do kara!! mad.gif

Tive uma ideia. smile.gif

Tem como pegar a data e hora da BIOS? wink.gif

Uma poderiamos também pegar um outro registro fisico do computador do kara. Numero da placa de modem, sei la.

Seria muita coincidencia uma mesma placa com mesma data e hora... biggrin.gif

Aguardo e agradeco e ajuda.

Felipee.

Link para o comentário
Compartilhar em outros sites

  • 0

Prezado Progr'amador,

como seria o uso da função que você colocou no código.

Por exemplo para colocar o numero do meu hd num label1 através de um clique num botão, como seria?

Colocando label1.Caption := SerialNum(Result);

não dá certo.

label1.Caption := Result; também não dá certo!

Como se usaria esta função?

Você ou alguém poderia dar uma luz de como usar a função como pedi acima?

Obrigado

Paulo Nobre

Link para o comentário
Compartilhar em outros sites

  • 0

Nos meus sistemas eu faço o seguinte:

Na primeira utilização do sistema ele mostra uma tela de desbloqueio, com dois numeros, a hora atual e um edit:

O primeiro numero é o nº de série do HD / Memória RAM / velocidade do pocessador

O segundo é um resultado de um algoritimos qeu eu criei baseado no nº do HD e na hora da tentativa de abertura do sistema

A hora é a do sistema mesmo, normalz:

Eu forneço um telefone para que meus clientes liguem, eu cadastro

os dados : nº de série do HD / Memória RAM / velocidade do pocessador, e mesmo que os dados sempre batam, eu pergunto "Houve alguma alteração no HardWare?". Eles sempre respondem que não... se mudarem de computador vai mudar, provavelmente, a velocidade do processador ou a quantidade de memória, ai eles me ligam para ativar o produto e eu saberei que não é o mesmo computador...

Depois do produto ativado eu gravo no registro do sistema q o software foi registrado, e toda vez que o sistema é aberto ele faz a verificação do registro pra evitar q depois do destravamento seja feita uma cópia fiel e enviada para outro comp.!!!

Depois dessa notícia estou pensando em adquirir mais dados do computador do cliente para dificulte ainda mais esse tipo de trapaça!

Link para o comentário
Compartilhar em outros sites

  • 0

Tem a forma simplificada de fazer isso!

procedure TForm1.FormCreate(Sender: TObject);
Var
Serial:DWord;
DirLen,Flags: DWord;
DLabel : Array[0..11] of Char;

begin
Try
GetVolumeInformation(PChar('C:\'),dLabel,12,@Serial,DirLen,Flags,nil,0);
label1.Caption:= IntToStr(Serial);
Except
label1.Caption:= 'Não foi possível executar a operação!';
end;
end;

Outra dica importante é fazer com que o sistema trave todo o mes, e peça uma nova atualização, issto também dá um controle maior sobre as ações do software.

Tem um componente chamado TimeStop que faz isso e na data especificada ele trava o sistema!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Felipee -

Amigos,

Mais dados para verificacao:

Captura data da bios!!

procedure TForm1.Button1Click(Sender: TObject);

begin

Label1.Caption := 'Data da Bios: '+String(PChar(Ptr($FFFF5)));

end;

Extrair o tamanho de um arquivo.

function TForm1.TamArquivo(Arquivo: string): Integer;

begin

with TFileStream.Create(Arquivo, fmOpenRead or fmShareExclusive) do

try

Result := Size;

finally

Free;

end;

end;

Utilize a função assim:

procedure TForm1.Button1Click(Sender: TObject);

begin

edit1.text:= inttostr(TamArquivo('CAMINHONOMEDOARQUIVO'));

end;

Seo kara alterar o arquivo, vai alterar o tamanho... aí...(este não vai ajudar muito no espelhamento, mas ajuda)

Pegar informações de Executavel

function FileVerInfo(const FileName: string;var FileInfo: TStringList): Boolean;

//

// Obtem diversas informações de um arquivo executável

//

// Requer um StringList criado antes de executar a função

// deve ser declarado na clausula Var no inicio da Unit

// StrLst := TStringList.Create;

//

//

const

Key: array[1..9] of string =('CompanyName',

'FileDescription',

'FileVersion',

'InternalName',

'LegalCopyright',

'OriginalFilename',

'ProductName',

'ProductVersion',

'Comments');

KeyBr: array [1..9] of string = ('Empresa..........................',

'Descricao........................',

'Versao do Arquivo...........',

'Nome Interno...................',

'Copyright..........................',

'Nome Original do Arquivo.',

'Produto.............................',

'Versao do Produto............',

'Comentarios...............:');

var

Dummy : THandle;

BufferSize, Len : Integer;

Buffer : PChar;

LoCharSet, HiCharSet : Word;

Translate, Return : Pointer;

StrFileInfo, Flags : string;

TargetOS, TypeArq : string;

FixedFileInfo : Pointer;

i : Byte;

begin

Result := False;

If not FileExists(FileName) then

begin

showmessage('Arquivo não encontrado');

Result := False;

exit;

end;

BufferSize := GetFileVersionInfoSize(PChar(FileName), Dummy);

if BufferSize <> 0 then

begin

GetMem(Buffer, Succ(BufferSize));

try

if GetFileVersionInfo(PChar(FileName), 0, BufferSize,Buffer) then

begin

if VerQueryValue(Buffer, 'VarFileInfoTranslation', Translate, UINT(Len)) then

begin

LoCharSet := LoWord(Longint(Translate^));

HiCharSet := HiWord(Longint(Translate^));

for i := 1 to 9 do

begin

StrFileInfo := Format('StringFileInfo%x0%x%s',[LoCharSet, HiCharSet, Key]);

if VerQueryValue(Buffer,PChar(StrFileInfo), Return,UINT(Len)) then

begin

FileInfo.Add(KeyBr + ': ' + PChar(Return));

end;

end;

if VerQueryValue(Buffer,'',FixedFileInfo, UINT(Len)) then

with TVSFixedFileInfo(FixedFileInfo^) do

begin

Flags := '';

if (dwFileFlags and VS_FF_DEBUG) = VS_FF_DEBUG then

begin

Flags := Concat(Flags,'*Debug* ');

end;

if (dwFileFlags and VS_FF_SPECIALBUILD) = VS_FF_SPECIALBUILD then

begin

Flags := Concat(Flags, '*Special Build* ');

end;

if (dwFileFlags and VS_FF_PRIVATEBUILD) = VS_FF_PRIVATEBUILD then

begin

Flags := Concat(Flags, '*Private Build* ');

end;

if (dwFileFlags and VS_FF_PRERELEASE) = VS_FF_PRERELEASE then

begin

Flags := Concat(Flags, '*Pre-Release Build* ');

end;

if (dwFileFlags and VS_FF_PATCHED) = VS_FF_PATCHED then

begin

Flags := Concat(Flags, '*Patched* ');

end;

if Flags <> '' then

begin

FileInfo.Add('Atributos: ' + Flags);

end;

TargetOS := 'Plataforma (OS): ';

case dwFileOS of

VOS_UNKNOWN : TargetOS := Concat(TargetOS, 'Desconhecido');

VOS_DOS : TargetOS := Concat(TargetOS, 'MS-DOS');

VOS_OS216 : TargetOS := Concat(TargetOS, '16-bit OS/2');

VOS_OS232 : TargetOS := Concat(TargetOS, '32-bit OS/2');

VOS_NT : TargetOS := Concat(TargetOS, 'Windows NT');

VOS_NT_WINDOWS32, 4: TargetOS := Concat(TargetOS, 'Win32 API');

VOS_DOS_WINDOWS16: TargetOS := Concat(TargetOS, '16-bit Windows ','sob MS-DOS');

else

TargetOS := Concat(TargetOS, 'Fora do Padrão. Código: ', IntToStr(dwFileOS));

end;

FileInfo.Add(TargetOS);

TypeArq := 'Tipo de Arquivo: ';

case dwFileType of

VFT_UNKNOWN : TypeArq := Concat(TypeArq,'Desconhecido');

VFT_APP : TypeArq := Concat(TypeArq,'Aplicacao');

VFT_DLL : TypeArq := Concat(TypeArq,'Dynamic-Link Lib.');

VFT_DRV : begin

TypeArq := Concat(TypeArq,'Device driver - Driver ');

case dwFileSubtype of

VFT2_UNKNOWN : TypeArq := Concat(TypeArq,'Desconhecido');

VFT2_DRV_PRINTER : TypeArq := Concat(TypeArq,'de Impressao');

VFT2_DRV_KEYBOARD : TypeArq := Concat(TypeArq,'de Teclado');

VFT2_DRV_LANGUAGE : TypeArq := Concat(TypeArq,'de Idioma');

VFT2_DRV_DISPLAY : TypeArq := Concat(TypeArq,'de Vídeo');

VFT2_DRV_MOUSE : TypeArq := Concat(TypeArq,'de Mouse');

VFT2_DRV_NETWORK : TypeArq := Concat(TypeArq,'de Rede');

VFT2_DRV_SYSTEM : TypeArq := Concat(TypeArq,'de Sistema');

VFT2_DRV_INSTALLABLE : TypeArq := Concat(TypeArq,'Instalavel');

VFT2_DRV_SOUND : TypeArq := Concat(TypeArq,'Multimida');

end;

end;

VFT_FONT : begin

TypeArq := Concat(TypeArq,'Fonte - Fonte ');

case dwFileSubtype of

VFT2_UNKNOWN : TypeArq := Concat(TypeArq, 'Desconhecida');

VFT2_FONT_RASTER : TypeArq := Concat(TypeArq,'Raster');

VFT2_FONT_VECTOR : TypeArq := Concat(TypeArq,'Vetorial');

VFT2_FONT_TRUETYPE : TypeArq := Concat(TypeArq,'TrueType');

end;

end;

VFT_VXD : TypeArq := Concat(TypeArq,'Virtual Device');

VFT_STATIC_LIB: TypeArq := Concat(TypeArq,'Static-Link Lib.');

end;

FileInfo.Add(TypeArq);

end;

end;

end;

finally

FreeMem(Buffer, Succ(BufferSize));

Result := FileInfo.Text <> '';

end;

end;

end;

estrair estes dados do win.exe(tb não ajuda no espelhamento, mas acredito que com estes dados vai dar mais trabalho para o kara que tentar decifrar a validacao)

alguém tem a funcao que retorna o tamanho do hd?

Obrigado e aguardo.

Felipee.

abrs,

Felipee.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Felipee -

Amigos,

Peço desculpas por minha precipitacao... unsure.gif

As funcao para pegar a data da bios e para ver o tamanho do hd não funcionam...

Sei que algumas pessoas tem intencao de ajudar, mas porque colocar uma funcao que não funciona?... dry.gif

Peco desculpas novamente,

Felipee.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá,Felipee.

Concordo com voce.

Acho que todos antes de postar um código deveriam testar antes.

Ainda mais estes códigos obtidos através dos famosos CTRL+C e CTRL + V.

Havia testado o código para obtençãoda data da BIOs e obtido um erro.

Mas,como não é muito importante para mim, pelo menos por enquanto, deixei para lá.

O do tamanho do HD não havia testado.

Mas, não precisa se desculpar não, pois sua intenção foi das melhores; passar para nós algo novo.

Isso é que vale.

Link para o comentário
Compartilhar em outros sites

  • 0
Amigos,

Peço desculpas por minha precipitacao... unsure.gif

As funcao para pegar a data da bios e para ver o tamanho do hd não funcionam...

Sei que algumas pessoas tem intencao de ajudar, mas porque colocar uma funcao que não funciona?... dry.gif

Peco desculpas novamente,

Felipee.

Valeu mesmo assim Felipe! Se você encontrar alguma rotina que funcione corretamente, dá um toque.

Abs.

Link para o comentário
Compartilhar em outros sites

  • 0

Prezado Prog'amador

Eu não estou vendo diferença entre o código que você postou e o código que deu erro postado pelo Felipee.

Ambos não são iguais a

Label1.Caption := 'Data da Bios: '+String(PChar(Ptr($FFFF5))); ?

ou não estou conseguindo ver a diferença?

Link para o comentário
Compartilhar em outros sites

  • 0
Prezado Prog'amador

Eu não estou vendo diferença entre o código que você postou e o código que deu erro postado pelo Felipee.

Ambos não são iguais a

Label1.Caption := 'Data da Bios: '+String(PChar(Ptr($FFFF5))); ?

ou não estou conseguindo ver a diferença?

HeHeHe biggrin.gif

é mesmo!!!

caramba, estou muito desatento wacko.gif , desculpa, vou procurar ficar mais atento agora. dry.gif

foi mal........

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

procedure TForm1.Button1Click(Sender: TObject);

begin

  Label1.Caption := 'Data da Bios: '+String(PChar(Ptr($FFFF5)));

end;

Tentei isso aki no meum computador mais deu erro e num funciona nem a pau! huh.gif

É incopetencia minha, ou isso só funciona em alguns casos? dry.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Ae Galera, então teste esse código ai, testei em dois computadores e o resultado foi o mesmo: 01/03/02.

CODE 

procedure TForm1.Button1Click(Sender: TObject);

begin

  Label1.Caption := 'Data da Bios: '+String(PChar(Ptr($FFFF5)));

end;

Foi com esse código mesmo que você conseguiu a data da Bios, progr'amador?

Link para o comentário
Compartilhar em outros sites

  • 0

Foi com esse código mesmo que você conseguiu a data da Bios, progr'amador?

Paulo,

Retornou uma data sim, só que eu fiz o teste em duas máquimas e o resultado foi o mesmo: Data da Bios: 01/03/02

Por isso, não posso garantir que esse código ta correto. Ok! wink.gif

____________________________________________________________

hencker,

Que erro deu ae???

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0
Esse aki:

Project Project1.exeraised exception class EAcessViolation with message 'Access violation at address 0040400F in module Project1.exe. Read of address 0000FFFF5.' Process stoped. Use Step or Run to continue.

sad.gif

Ps.: Estou usando o D7...

hencker,

eu tambem to usando o D7, e funciona legal.

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest José Roberto

Simples ... cria um valor do HD ... fixo em uma tabela na hora da instalação ... e outro váriavel em outra tabela quando o programa é aberto ... e manda fazer a comparação. Se o HD for diferente do micro em q estava o programa ,,, na comparação ele verá que o programa estah tentando rodar em outra máquina.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...