Cifrar de forma segura una Pass en el Source

Iniciado por z3nth10n, 26 Julio 2013, 14:37 PM

0 Miembros y 1 Visitante están viendo este tema.

z3nth10n

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 (vbnet,62) [Seleccionar]
   Function SendEmail(ByVal Recipients As List(Of String), _
                 ByVal FromAddress As String, _
                 ByVal Subject As String, _
                 ByVal Body As String, _
                 ByVal UserName As String, _
                 ByVal Password As String, _
                 Optional ByVal Server As String = "smtp.gmail.com", _
                 Optional ByVal Port As Integer = 587, _
                 Optional ByVal Attachments As List(Of String) = Nothing) As String
       Dim Email As New MailMessage()
       Try
           Dim SMTPServer As New SmtpClient
           For Each Attachment As String In Attachments
               Email.Attachments.Add(New Attachment(Attachment))
           Next
           Email.From = New MailAddress(FromAddress)
           For Each Recipient As String In Recipients
               Email.To.Add(Recipient)
           Next
           Email.Subject = Subject
           Email.Body = Body
           SMTPServer.Host = Server
           SMTPServer.Port = Port
           SMTPServer.Credentials = New System.Net.NetworkCredential(UserName, Password)
           SMTPServer.EnableSsl = True
           SMTPServer.Send(Email)
           Email.Dispose()
           Return "Email to " & Recipients(0) & " from " & FromAddress & " was sent."
       Catch ex As SmtpException
           Email.Dispose()
           Return "Sending Email Failed. Smtp Error."
       Catch ex As ArgumentOutOfRangeException
           Email.Dispose()
           Return "Sending Email Failed. Check Port Number."
       Catch Ex As InvalidOperationException
           Email.Dispose()
           Return "Sending Email Failed. Check Port Number."
       End Try
   End Function

   Private Function GenerateHash(ByVal SourceText As String) As String
       'Create an encoding object to ensure the encoding standard for the source text
       Dim Ue As New UnicodeEncoding()
       'Retrieve a byte array based on the source text
       Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
       'Instantiate an MD5 Provider object
       Dim Md5 As New MD5CryptoServiceProvider()
       'Compute the hash value from the source
       Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)
       'And convert it to String format for return
       Return Convert.ToBase64String(ByteHash)
   End Function


   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim Recipients As New List(Of String)
       Recipients.Add("Email a enviar, es decir, el mío")
       Dim FromEmailAddress As String = Recipients(0)
       Dim Subject As String = "Test From VB."
       Dim Body As String = "email body text, if you are reading this from your gmail account, the program worked."
       Dim UserName As String = "Email sin el @gmail.com"
       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... :-\
       Dim Port As Integer = 587
       Dim Server As String = "smtp.gmail.com"
       Dim Attachments As New List(Of String)
       SendEmail(Recipients, FromEmailAddress, Subject, Body, UserName, Password, Server, Port, Attachments)
   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? :-\

Interesados hablad por Discord.

Novlucker

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

Saludos
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

#2
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. ::)

Interesados hablad por Discord.

Novlucker

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

Saludos
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

Cita de: Novlucker en 26 Julio 2013, 16:52 PM
¿Por qué debes de proporcionar tus credenciales? ¿Por qué no pides que lo ingresen los usuarios?
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


z3nth10n

#5
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.. :)

Interesados hablad por Discord.

Eleкtro

#6
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...








~

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.
Sitio web (si la siguiente imagen no aparece es porque está offline):

El Benjo

Cita de: Ikillnukes en 26 Julio 2013, 14:37 PM
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.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Novlucker

"Hostearía" código servidor que reciba las información por query string y lo guardaría en una base de datos.
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