Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

  • Membros Pro
Postado (editado)

Ainda pra complementar o meu entendimento até o momento com a leitura de todos os comentários e observações.

Vejamos o próprio exemplo do amigo @Daniel Simoes, onde é usado a função StrCrypt do ACBrUtil.FilesIO, que possui a seguinte assinatura:

Citar

function StrCrypt(const AString, StrChave: AnsiString): AnsiString;

Eu sou obrigado a passar a String que quero criptografar, além da chave criptográfica, como por exemplo executando o código abaixo em RunTime:

Citar

senha := StrCrypt('senha', '123');


Nesse momento não tem jeito, antes de efetuar a criptografia tenho que informar os dados de forma literal e eles irão para a tabela Resources, agora não sei se vai dar para ler pelo bloco de notas(exemplo do OLÁ EU SOU UMA STRING) ou não (como no meu caso que relatei). Supondo que não se consiga ler pelo bloco de notas, ainda dá pra ler em memória como o amigo @TiagoTecchio observou e isso mesmo compactando pelo UPX.
 

Editado por bnobre
  • Membros Pro
Postado
15 horas atrás, BigWings disse:

Se o teu Delphi é 2009 ou acima, as strings são gravadas em unicode, 2 bytes por caractere.

Ainda assim é bem fácil localizar:

image.png

Olá meu amigo,

Estava testando aqui... Quando atribuo pelo Object Inspector o valor aparece literal no bloco de notas, porém quando atribuo no *.pas em Runtime, ao contrário do que pensei ele continua aparecendo, não mais de forma literal, porém em Unicode conforme você relatou... Caramba!!!

  • Membros Pro
Postado

Realizei outro teste aqui com o uso de caracteres em ASCII conforme sugerido, mas não mudou em nada, continua exibindo como se tivesse escrito a String de forma direta:

image.thumb.png.0a765cdbfa778e809ed0652a9d0a40be.png

  • Fundadores
Postado

A chave em si... não precisa ser uma String fixa... ela poderia ser "espalhada" em várias Strings e constantes em ASC...  e em algum método, você concatena tudo, aplica outros modificadores, e retorna a chave...

  • Obrigado 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado
1 minuto atrás, Daniel Simoes disse:

A chave em si... não precisa ser uma String fixa... ela poderia ser "espalhada" em várias Strings e constantes em ASC...  e em algum método, você concatena tudo, aplica outros modificadores, e retorna a chave...

Isso aí ficou legal hein @Daniel Simoes :-D

Mas a questão das constantes em ASCII é irrelevante, visto que conforme eu mostrei acima o resultado final escrevendo literalmente ou em ASCII dá na mesma.

  • Fundadores
Postado
13 minutos atrás, bnobre disse:

Mas a questão das constantes em ASCII é irrelevante,

Mas use chaves, que não sejam legíveis por humanos.. assim elas se "misturam" um pouco mais no código...

Chave = #23+#45+#155+#129+#2+#76

  • Obrigado 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado
50 minutos atrás, Daniel Simoes disse:

Mas use chaves, que não sejam legíveis por humanos.. assim elas se "misturam" um pouco mais no código...

Chave = #23+#45+#155+#129+#2+#76

Hummmmm...

Você está usando valores ASCII que não tem representação no teclado tradicional, exceto pelo #(45) = "-" e #(76) = "L".

Eu não me atentei que podia usar valores ASCII que representassem símbolos. https://www.ascii-code.com/

Agora ficou legal!!! 

  • Membros Pro
Postado

Porém agora me surgiu outra dúvida... Tenho que ter essa preocupação com valores Inteiros também ou essa exposição só ocorre para os tipos String?

Postado

Eu uso parte string, parte em inteiros, gerando uma nova string que reparto em n partes, trocando a posição das partes. Não resolve tudo, pois existem ferramentas de debug que conseguem analisar em execução.
Mas afasta os "hackers" básicos.

  • Curtir 1
  • Membros Pro
Postado
5 minutos atrás, lmdsistemas disse:

Eu uso parte string, parte em inteiros, gerando uma nova string que reparto em n partes, trocando a posição das partes. Não resolve tudo, pois existem ferramentas de debug que conseguem analisar em execução.
Mas afasta os "hackers" básicos.

Olá meu amigo, tudo bom?

Eu só não entendi o momento da aplicação desse teu exemplo.

Como a String com conteúdo sensível fica exposta o objetivo é ocultá-la, daí a necessidade de criptografá-la, pois o conteúdo exposto ficará ilegível. Porém toda a criptografia precisa de uma chave e ela também ficaria exposta pelo fato de ser String, daí a dica interessante do @Daniel Simoes de usar símbolos fora do alfabeto com o padrão ASCII para a chave e quebrar a mesma em várias partes, pois mesmo ela ficando exposta se misturaria com o resto do código dificultando os hackers básicos... Em que momento você aplica essa técnica que você mencionou acima???

Postado

Até onde eu entendo, não existe solução 100% confiável pois se o individuo que for atacar teu código usar uma ferramenta do tipo IDA PRO, em algum momento a senha estará em memória para ser usada para desencriptar ou liberar acesso ao banco. 
Eu uso igual o Daniel sugeriu com #, jogo alguns inteiros para bagunçar e com a nova string troco posições. Você poderia colocar XOR ou outras brincadeiras a mais.

Para enganar os curiosos, crie algumas strings falsas, para despistar onde realmente a senha está... gerando frustação aos curiosos.

Mas no final, sempre vai ter o IDA Pro. 

Acredito que para os processos triviais, tudo que foi falado é o suficiente. Mas dependendo do valor dos teus dados, talvez possa usar a busca de senhas em servidores externos ou junção de várias técnicas.

  • Curtir 1
  • Membros Pro
  • Solution
Postado (editado)
21 minutos atrás, lmdsistemas disse:

Até onde eu entendo, não existe solução 100% confiável pois se o individuo que for atacar teu código usar uma ferramenta do tipo IDA PRO, em algum momento a senha estará em memória para ser usada para desencriptar ou liberar acesso ao banco. 
Eu uso igual o Daniel sugeriu com #, jogo alguns inteiros para bagunçar e com a nova string troco posições. Você poderia colocar XOR ou outras brincadeiras a mais.

Para enganar os curiosos, crie algumas strings falsas, para despistar onde realmente a senha está... gerando frustação aos curiosos.

Mas no final, sempre vai ter o IDA Pro. 

Acredito que para os processos triviais, tudo que foi falado é o suficiente. Mas dependendo do valor dos teus dados, talvez possa usar a busca de senhas em servidores externos ou junção de várias técnicas.

Sim sim... O foco realmente é dificultar para a visualização no Bloco de Notas, com ferramentas profissionais e escaneamento da memória não tem jeito, vai passar.

Mas com o foco no Bloco de Notas, creio que o caminho é uma criptografia para embaralhar a string e dificultar o acesso a chave da criptografia, com as técnicas citadas pelo @Daniel Simoes (tabela ASCII com símbolos).

Acho que é isso!!! :-D

 

Editado por bnobre

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...