Membros Pro bnobre Postado Terça as 13:15 Autor Membros Pro Postado Terça as 13:15 (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 Terça as 13:16 por bnobre
Membros Pro bnobre Postado Terça as 13:27 Autor Membros Pro Postado Terça as 13:27 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: 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 bnobre Postado Terça as 14:05 Autor Membros Pro Postado Terça as 14:05 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:
Fundadores Daniel Simoes Postado Terça as 14:29 Fundadores Postado Terça as 14:29 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... 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Membros Pro bnobre Postado Terça as 14:34 Autor Membros Pro Postado Terça as 14:34 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 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 Daniel Simoes Postado Terça as 14:48 Fundadores Postado Terça as 14:48 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 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Membros Pro bnobre Postado Terça as 15:39 Autor Membros Pro Postado Terça as 15:39 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 bnobre Postado Terça as 15:59 Autor Membros Pro Postado Terça as 15:59 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?
lmdsistemas Postado Terça as 16:48 Postado Terça as 16:48 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. 1
Membros Pro bnobre Postado Terça as 16:59 Autor Membros Pro Postado Terça as 16:59 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???
lmdsistemas Postado Terça as 17:15 Postado Terça as 17:15 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. 1
Membros Pro Solution bnobre Postado Terça as 17:29 Autor Membros Pro Solution Postado Terça as 17:29 (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!!! Editado Terça as 17:37 por bnobre
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora