elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Cifrar documentos-carpetas con GnuPG en Linux y Windows


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Cifrar de forma segura una Pass en el Source
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Cifrar de forma segura una Pass en el Source  (Leído 5,178 veces)
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Cifrar de forma segura una Pass en el Source
« en: 26 Julio 2013, 14:37 »

Hola buenas, estoy haciendo un sistema para enviar emails desde un form, y tengo que ceder mi contraseña para que se puedan mandar emails correctamente, tengo una duda, hay alguna forma de cargar externamente un recurso si que de problemas?

Es decir, por ejemplo, en mi hosting meto un htaccess y un txt (el htaccess bloquea el acceso según el user-agent (por si alguien se infiltra) y luego que haya alguna forma de que el WindowsForms si pueda sacar ese TXT)..

Edito: Se me ha ocurrido una idea, que es darle permisos dentro de mi FTP... (Con chmod) Voy a ver si hago algo... ;)

Y por si fuera poco pues añado esto:

Código
  1.    Function SendEmail(ByVal Recipients As List(Of String), _
  2.                  ByVal FromAddress As String, _
  3.                  ByVal Subject As String, _
  4.                  ByVal Body As String, _
  5.                  ByVal UserName As String, _
  6.                  ByVal Password As String, _
  7.                  Optional ByVal Server As String = "smtp.gmail.com", _
  8.                  Optional ByVal Port As Integer = 587, _
  9.                  Optional ByVal Attachments As List(Of String) = Nothing) As String
  10.        Dim Email As New MailMessage()
  11.        Try
  12.            Dim SMTPServer As New SmtpClient
  13.            For Each Attachment As String In Attachments
  14.                Email.Attachments.Add(New Attachment(Attachment))
  15.            Next
  16.            Email.From = New MailAddress(FromAddress)
  17.            For Each Recipient As String In Recipients
  18.                Email.To.Add(Recipient)
  19.            Next
  20.            Email.Subject = Subject
  21.            Email.Body = Body
  22.            SMTPServer.Host = Server
  23.            SMTPServer.Port = Port
  24.            SMTPServer.Credentials = New System.Net.NetworkCredential(UserName, Password)
  25.            SMTPServer.EnableSsl = True
  26.            SMTPServer.Send(Email)
  27.            Email.Dispose()
  28.            Return "Email to " & Recipients(0) & " from " & FromAddress & " was sent."
  29.        Catch ex As SmtpException
  30.            Email.Dispose()
  31.            Return "Sending Email Failed. Smtp Error."
  32.        Catch ex As ArgumentOutOfRangeException
  33.            Email.Dispose()
  34.            Return "Sending Email Failed. Check Port Number."
  35.        Catch Ex As InvalidOperationException
  36.            Email.Dispose()
  37.            Return "Sending Email Failed. Check Port Number."
  38.        End Try
  39.    End Function
  40.  
  41.    Private Function GenerateHash(ByVal SourceText As String) As String
  42.        'Create an encoding object to ensure the encoding standard for the source text
  43.        Dim Ue As New UnicodeEncoding()
  44.        'Retrieve a byte array based on the source text
  45.        Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
  46.        'Instantiate an MD5 Provider object
  47.        Dim Md5 As New MD5CryptoServiceProvider()
  48.        'Compute the hash value from the source
  49.        Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)
  50.        'And convert it to String format for return
  51.        Return Convert.ToBase64String(ByteHash)
  52.    End Function
  53.  
  54.  
  55.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  56.        Dim Recipients As New List(Of String)
  57.        Recipients.Add("Email a enviar, es decir, el mío")
  58.        Dim FromEmailAddress As String = Recipients(0)
  59.        Dim Subject As String = "Test From VB."
  60.        Dim Body As String = "email body text, if you are reading this from your gmail account, the program worked."
  61.        Dim UserName As String = "Email sin el @gmail.com"
  62.        Dim Password As String = GenerateHash("Contraseña que se saque de un TXT cifrada en Base64") 'Aquí debería estar la magia del ChMod... Me gustaría saber como resaltar una línea de code... :-\
  63.        Dim Port As Integer = 587
  64.        Dim Server As String = "smtp.gmail.com"
  65.        Dim Attachments As New List(Of String)
  66.        SendEmail(Recipients, FromEmailAddress, Subject, Body, UserName, Password, Server, Port, Attachments)
  67.    End Sub

Un saludo.
PD: Este es mi mensaje 1000! :)

PDS: Todo esto lo hago porque luego puede venir cualquier gracioso y sacarla con el Net Reflector...



Esto no va con .NET, en parte no:

Tengo una duda, con el chmod:

http://www.onlineconversion.com/html_chmod_calculator.htm

Se necesita ejecutarse para que Form lo pueda leer, o con la propiedad Read ya basta? Mejor dicho, Execute que hará? Voy a buscar... xD

===========

http://es.wikipedia.org/wiki/Chmod

Citar
EjecuciónEjecutar el archivo.Recorrer su árbol para acceder archivos y subdirectorios, pero no ver los archivos dentro del directorio (excepto que se le de el permiso de lectura)

Es decir, que si pongo permisos 111, VB.NET va a poder hacer algo? :huh: Creo que no... :-\

PD: Efectivamente, después de leer 3 veces esa cita, finalmente no va a leer nada.. Pero como le digo a la app que es el Owner (con Chmod a 400) y no cualquier otro grupo  o visitante? :-\


« Última modificación: 26 Julio 2013, 19:22 por Ikillnukes » En línea


Interesados hablad por Discord.
Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #1 en: 26 Julio 2013, 14:55 »

¿Y todo eso que propones lo consideras seguro? :P

Saludos


En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #2 en: 26 Julio 2013, 14:59 »

Hombre no mucho, pero por lo menos a los noobs que estén empezando a crackear no les va a resultar muy fácil, o eso creo... :P

Por lo menos, dime como lo puedo hacer :-\, o si quieres alguna recomendación o algo más seguro que se te ocurra :P

Gracias. ::)
« Última modificación: 26 Julio 2013, 15:02 por Ikillnukes » En línea


Interesados hablad por Discord.
Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #3 en: 26 Julio 2013, 16:52 »

¿Por qué debes de proporcionar tus credenciales? ¿Por qué no pides que lo ingresen los usuarios?

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.351


S3C M4NI4C


Ver Perfil
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #4 en: 26 Julio 2013, 16:54 »

¿Por qué debes de proporcionar tus credenciales? ¿Por qué no pides que lo ingresen los usuarios?
En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #5 en: 26 Julio 2013, 19:01 »

Es para registrar las cosas que hagan los usuarios, y por eso necesitan ser mis credenciales... :-\



No se usar MySQL en VB.NET xD Y ademáas, si me borran el hosting pues por lo menos, tengo el respaldo de los emails.. :)
« Última modificación: 26 Julio 2013, 19:08 por Ikillnukes » En línea


Interesados hablad por Discord.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.714



Ver Perfil
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #6 en: 26 Julio 2013, 19:19 »

De alguna forma todo lo que se compila se debe poder descompilar para ser procesado por el engine del framework, sinó la app no se podría leer/ejecutar.
PD: Iba a pasarte un enlace sobre esto, era muy interesante, pero hace ya tiempo que me documenté y no recuerdo el enlace.

Lo que comentas del .NET Reflector, es inevitable, .NET Reflector no es un super programa que craquea las aplicaciones, no, es solo es una GUI para el reflector, otro ejemplo será el "simple assembly Explorer", deberías leer sobre el término "Reflection" para entenderlo mejor.

Con esto te quiero decir que... como es inevitable yo no perdería mucho el tiempo a la hora de buscar la protección perfecta, porque no existe, el mejor cracker siempre va a poder averiguar tus credenciales si se propone el reto.

No soy un experto en el tema de la ingenieria inversa, pero aquí va mi consejo:

Si estás tán convencido de querer usar tus credenciales pues, lo que te recomiendo es que añadas una protección mínima dentro del proyecto para las credenciales, por ejemplo usar algún tipo de hash como MD5 para tu contraseña, y luego, después de esa protección mínima, usar algún software profesional para proteger tu proyecto como por ejemplo "Crypto Obfuscator" o "Smart Assembly", por más códigos que encuentres con intención de hacer copy&paste para proteger tu app ninguno va a ser tán eficaz como este tipo de aplicaciones profesionales, que además de ofuscar, encriptan y comprimen, todo a niveles extremos ...tanto que si no lo usas bien podrías corromper el executable (pero siempre puedes volver a intentarlo usando niveles más bajos de protección :P).

Saludos...
« Última modificación: 26 Julio 2013, 19:25 por EleKtro H@cker » En línea


~

Desconectado Desconectado

Mensajes: 67



Ver Perfil WWW
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #7 en: 26 Julio 2013, 19:32 »

Resultaría más práctico hacer un hash sobre los valores concatenados de usuario y contraseña y almacenar solamente eso.

Así, cuando se ingrese el usuario y contraseña, se calcularía, por ejemplo, el hash MD5 de esos valores con el hash MD5 almacenado en el código fuente.

Aunque todo esto podría no servir de nada si alguien más tiene acceso a la aplicación y si ese alguien es capaz de eliminar ese paso de seguridad, a menos que todos los datos estén cifrados también usando ese valor MD5 como "semilla" de cifrado, como mínimo por ejemplo, de una combinación alterada del "alfabeto" de Base64.

Así que si los caracteres de Base64 son originalmente:

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

que se determine dinámicamente un orden diferente con algún algoritmo, que resultaría en una cadena como:

"CDEFGHopIJKLMPtuQRST34UVWXABYZabcdefghijklNOmnqrsvwxyz01256789+/="

Aunque esto seguiría sin servir de nada tan pronto alguien más tuviera acceso al programa, y a los valores de nombre de usuario y contraseña.
En línea

Sitio web (si la siguiente imagen no aparece es porque está offline):
El Benjo


Desconectado Desconectado

Mensajes: 390



Ver Perfil WWW
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #8 en: 26 Julio 2013, 20:41 »

Es decir, por ejemplo, en mi hosting meto un htaccess y un txt (el htaccess bloquea el acceso según el user-agent (por si alguien se infiltra) y luego que haya alguna forma de que el WindowsForms si pueda sacar ese TXT)..

Para esto te recomiendo que lo hagas mediante un script en tu servidor que lea el contenido de ese TXT cuando se llame con una contraseña exclusiva para ese propósito como parametro. Después llamas al script desde tu aplicación con un HTTPRequest y pasando la contraseña como parámetro para eso (Contraseña que no escribirías como constante en tu aplicación para evitar que sea vista con ingeniería inversa). El script te devolverá el contenido del TXT cuando le pases la contraseña correcta.
En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Cifrar de forma segura una Pass en el Source
« Respuesta #9 en: 26 Julio 2013, 20:55 »

"Hostearía" código servidor que reciba las información por query string y lo guardaría en una base de datos.
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines