• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

triplexim32

Qual o melhor

16 mensagens neste tópico

Desde o inicio da semana que peguei no C# e comecei a fazer o meu "programazilho" para um projecto que tenho em curso e a certa altura lembrei-me:

Ora deixa ca ver se há descompiladores para C# (e para meu desagrado há!!!)

Chama-se .net reflector e é freeware -.-

abri-o, e, para meu meu maior desagrado: consigui reverter todas as classes, ver todos os métodos, funções etc etc etc

Ou seja: já me correu mal o dia hoje -.-'

------

O problema nem e muito o facto de ter o código exposto "ao publico", é mesmo os dados que serão partilhados entre a aplicação e o site.

Ou seja, eu estou a fazer um aplicativo que vai receber dados para este se ligar a um FTP e fazer download de ficheiros... o programa pede ao site para devolver a String de conexão e eu já mais posso deixar isso publico assim!

As minhas pergunta são:

>Qual a melhor linguagem para não ser "descompilada"

>Há maneira de fazer com que a minha aplicação (feita em c#) não tenha reverso? (se sim: como?)

>Há alguma maneira de receber a string de conexão Cifrada (a partir do site), o programa conseguir reverte-la e mesmo tendo o código todo revertido não valer de nada?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não há nenhuma maneira segura para guardar dados criticos em C#.

Qualquer passagem de dados criticos deve ser feita utilizando ssl.

Se tens uma aplicação c# q acede a uma base de dados noutro local não deves passar a connection string para a aplicação c#.

Em vez disso, quem estiver responsável por atender o pedido q obtém os dados da base de dados é que deve guardar as connection strings.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não há nenhuma maneira segura para guardar dados criticos em C#.

Qualquer passagem de dados criticos deve ser feita utilizando ssl.

Se tens uma aplicação c# q acede a uma base de dados noutro local não deves passar a connection string para a aplicação c#.

Em vez disso, quem estiver responsável por atender o pedido q obtém os dados da base de dados é que deve guardar as connection strings.

Pois mas a ideia era cada utilizador receber os dados do FTP via HTTPwebRequest.

Uma pergunta:

Se eu usar SSL para receber os dados do FTP: se alguem "descompilar" o código não vai conseguir simular o mesmo processo e receber os dados direitinhos a mesma?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se guardares dados criticos compilados no c# tens sempre uma falha de segurança, mesmo q utilizes obfuscadores de código.

Passwords não devem estar compiladas na aplicação c#.

O login e a password dos utilizadores deve ser enviada por eles. Se não for uma coisa mto importante, pode vir em aberto, se forem dados criticos, têm q vir via ssl.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se guardares dados criticos compilados no c# tens sempre uma falha de segurança, mesmo q utilizes obfuscadores de código.

Passwords não devem estar compiladas na aplicação c#.

O login e a password dos utilizadores deve ser enviada por eles. Se não for uma coisa mto importante, pode vir em aberto, se forem dados criticos, têm q vir via ssl.

O login ta a ser enviado o User e Password para o site depois o site retorna 0(zero) (login falhou) ou 1 (login feito)

O problema surge quando o site envia os dados do FTP, desde:

User, password, ip, porta, etc

Ora se eu envio isto (mesmo que cifrado) a malta vai conseguir tem sempre acesso indevido ao FTP

Com SSL resolve alguma coisa?

E sobre a outra pergunta? Qual a melhor linguagem para não ser revertida?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O site não deve enviar os dados do FTP.

O endereço pode ser conhecido, user e password não e não devem ser enviados pelo site.

O envio de user e password é sempre enviado do cliente para o servidor, e o servidor deve guardar esses dados encriptados na bd.

Nenhuma linguagem deve guardar user e password qd compilada, n há garantias q isso seja seguro.

O envio de dados do cliente para o servidor via ssl é seguro, pq só o servidor tem a chave necessária para descodificar a mensagem. Mesmo q a msg seja interceptada por terceiros, o algoritmo de codificação do ssl é o suficiente para ser considerado seguro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O site não deve enviar os dados do FTP.

O endereço pode ser conhecido, user e password não e não devem ser enviados pelo site.

O envio de user e password é sempre enviado do cliente para o servidor, e o servidor deve guardar esses dados encriptados na bd.

Nenhuma linguagem deve guardar user e password qd compilada, n há garantias q isso seja seguro.

O envio de dados do cliente para o servidor via ssl é seguro, pq só o servidor tem a chave necessária para descodificar a mensagem. Mesmo q a msg seja interceptada por terceiros, o algoritmo de codificação do ssl é o suficiente para ser considerado seguro.

A parte de login tá segura, nem muito menos existem conexões à BD a partir da aplicação.

Só que a ideia era mesmo cada membro receber os dados do FTP a partir do servidor e a aplicação usa-los...

Não sei como vou fazer isto :\

Ideias?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se dizes q a parte de login está segura, que mais dados precisas?

O login e a password são os unicos dados que precisam estar seguros.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se dizes q a parte de login está segura, que mais dados precisas?

O login e a password são os unicos dados que precisam estar seguros.

Eu explico melhor:

A minha ideia é:

Vai existir um site que tem vários ficheiros para download, cada ficheiro encontra-se num FTP.

Com o programa que estou a fazer:

>O utilizador loga-se no programa para confirmar a sua autenticação.

>Depois escolhe o que quer sacar e o site (neste caso o servidor feito em PHP) envia os dados do FTP e o ficheiro a sacar.

>Com isto queria criar contas Premium em que sacavam sem limites de velocidade.

O grande problema e que assim não tenho como enviar os dados do FTP porque depois apanham isso e usam como querem e basicamente são "premium" quando bem lhes interessar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou seja, eu estou a fazer um aplicativo que vai receber dados para este se ligar a um FTP e fazer download de ficheiros... o programa pede ao site para devolver a String de conexão e eu já mais posso deixar isso publico assim!

Qualquer socket sniff revela isso em 1 minuto. Por isso tens de repensar a tua arquitectura em questões de segurança...

O envio de user e password é sempre enviado do cliente para o servidor, e o servidor deve guardar esses dados encriptados na bd.

Então qualquer pessoa também os consegue ver com um debugger.

Nenhuma linguagem deve guardar user e password qd compilada, n há garantias q isso seja seguro.

Provavelmente é tão seguro como pedir a um servidor os dados.

Acho que tens de pensar bem o que queres proteger. Se não queres que mensagens interceptadas por terceiros sejam lidas facilmente, tens de usar encriptação. Mas o problema que tu queres resolver, acho que é criar uma autênticação segura. Lembra-te também que o que quer que seja que o teu programa faça, outro programa também o pode fazer, por isso nunca podes fazer algo 100% seguro.

http://en.wikipedia.org/wiki/Key_exchange

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O grande problema e que assim não tenho como enviar os dados do FTP porque depois apanham isso e usam como querem e basicamente são "premium" quando bem lhes interessar...

Não uses FTP. Usa HTTP e só deixas aquele IP sacar assim que envia os dados correctos (autenticação). Podes usar um algoritmo de key exchange criptográfico para esses dados não serem facilmente interceptados. Ou usa SSL no HTTP para fazer a autenticação, é mais fácil. Além disto, podes ainda implementar um sistema de timeout (por exemplo 1 dia). Assim o cliente tem de se re-autenticar para poder voltar a sacar daquele IP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
"Qualquer socket sniff revela isso em 1 minuto. Por isso tens de repensar a tua arquitectura em questões de segurança..."

Eu ai podia cifrar isso de enumeras maneiras, ate podia fazer um algoritmo, o problema e que o programa teria que ter o algoritmo para reverter a string e como o codigo fica a vista de todos não vale de nada

Então qualquer pessoa também os consegue ver com um debugger.

Não porque e o mesmo que tu fazes num browser, tu escreves o teu user e PW e o servidor diz-te se ta certo ou não.

"Não uses FTP. Usa HTTP e só deixas aquele IP sacar assim que envia os dados correctos (autenticação). Podes usar um algoritmo de key exchange criptográfico para esses dados não serem facilmente interceptados. Ou usa SSL no HTTP para fazer a autenticação, é mais fácil. Além disto, podes ainda implementar um sistema de timeout (por exemplo 1 dia). Assim o cliente tem de se re-autenticar para poder voltar a sacar daquele IP."

Mas para isso preciso de um servidor apache no FTP.

So se eu fizer com que o PHP acrescente ao FTP uma lista de IP's permitidos após o login bem realizado.

Fazendo deste modo com que o FTP tenha uma lista exclusiva de IP's permitidos...

Mas isso uih tou tramado oO

Edit: pois mas não valia de nada, eles efectuavam o login para terem o IP na lista de IP's permitidos e depois acediam com um cliente de FTP normal e teriam acesso premium á mesma :\

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não porque e o mesmo que tu fazes num browser, tu escreves o teu user e PW e o servidor diz-te se ta certo ou não.

Por isso mesmo. Consegues ver qualquer password que escreves no browser...

Mas isso uih tou tramado oO

Tas tramado porque não sabes bem o que queres fazer... Mas eu já te expliquei uma solução, por isso o meu trabalho está feito neste tópico. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por isso mesmo. Consegues ver qualquer password que escreves no browser...

Mas nisso não há mal porque o programa apenas serve para os membros sacarem, ou seja: Cada um usa a sua conta no programa e o programa não faz mais do que downloads e a ideia é cada programa ficar individual em cada maquina de cada utilizador.

Tas tramado porque não sabes bem o que queres fazer... Mas eu já te expliquei uma solução, por isso o meu trabalho está feito neste tópico. :P

tens razão quando dizes que a melhor ideia era usar HTTP controlado por php mas isso seria fazer um rapidshare\megaupload e não era essa a minha ideia base. E não é possivel porque os FTP's com que trabalho não têm apache.

Sobre a encriptação: Para o programa poder ler os dados recebidos tem que ter uma função para os desencriptar, ou seja: O meu decifrador vai-se encontrar algures no codigo da aplicação (o qual vai ser visivel)

E mesmo que use uma palavra para cifrar, essa palavra vai tar sempre do lado do "client" e pode ser vista e usada....

Penso que era isto que te referias, mesmo que seja avisa porque se não fico na duvida se haveria algo que me falhou.

: )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

encontrei este aplicativo na net:

Eazfuscator.NET

parece que já me resolve o assunto  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A solução não é esconder o código, porque isso mais cedo ou mais tarde vai haver um programa que consegue fazer o reverse engineering na mesma.

A solução é utilizar um mecanismo de segurança, como por exemplo troca de chaves, sendo a chave do cliente gerada com base no nome de utilizador e password. Assim se não souberes o nome de utilizador e a password não tens uma chave válida, logo não serve de nada conhecer o código fonte.

Ao apenas esconderes o código ficas sujeito a um perigo MUITO maior que é alguém ter um sniffer e ver passar a informação em claro. É de longe mais fácil isto do que fazer reverse-engineering à tua aplicação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora