Averiguar contraseña propio bajo C#

Iniciado por Meta, 7 Noviembre 2013, 18:52 PM

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

Meta

Hola:

Como curiosidad hice un programa de consola bajo C# Express 2013. Consiste en introducir '1234' para acceder.

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Password
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Contraseña"; // Título de la ventana.
            int password_fijo = 1234; // Contrasela preficaja.
           
            Console.WriteLine("Introduce contraseña o password: "); //Mostrar texto.
            int contraseña = Convert.ToInt32(Console.ReadLine()); // Leer contraseña que pulsas en el teclado y lo almacena en una variable 'contraseña'.

                    // Si 'contraseña' introducida en el teclado es igual a 'password_fijo' o '1234' se cumple la condición.
                    if (contraseña == password_fijo)
                    {
                        Console.WriteLine("La contraseña es correcta.");
                    }
                    else
                    {
                        Console.WriteLine("INCORRECTO. Vuelva a intentarlo.");
                    }
               
                Console.ReadKey(); // Pulse una tecla cualquiera para salir.
        }
    }
}


El programa es muy sencillo. Supuestamente este código fuente no lo tienes. Pero si su ejecutable que lo habrí con H&D, un editor hexadecimal y lo pasé a un txt. Este txt indicado abajo no es fiable porque es en binario, y leerlo en txt no sirve, pero si con el H&D, es para coger un ejemplo.

Código (ada) [Seleccionar]
MZ       ÿÿ  ¸       @                                   €   º ´ Í!¸LÍ!This program cannot be run in DOS mode.

$       PE  L ½È{R        à    
         ~)       @    @                       €          `...                           0)  K    @  @                   `     ø'                                                               H           .text   ,,        
                    `.rsrc   @   @                     @  @.reloc      `                    @  B                `)      H     ¼   <                                                      0 V      r  p( 
  Ò 
r  p( 
( 
( 
þþ - r[  p( 
  +
r'  p( 
  ( 
&*( 
*  BSJB          v4.0.30319     l      #~  x  À  #Strings    8  Ô   #US      #GUID        #Blob         G     ú%3                                   
      8 1  i O  " ,  « ,  È ,  ç ,   ,  ,  4,  O,  ‡h ›h ©,  ,  òß?    5 U s1  ˜1  ¨1                    P     ' ?
 ²     †D      J  D   D  ! D  ) D  1 D  9 D  A D  I D  Q D  Y D  a D  i D  q D  y D  ‰ D $ ' D  ™ {) ™ ...) ™ . ¡  2 ™ ·7 D  . B .  Œ .  š . # š . + š . 3 Œ . ;   . C š . S š . [ ¸ . k  . s ï . { ø . ƒ < €                              (        <Module> Password.exe Program Password mscorlib System Object Main .ctor args System.Runtime.Versioning TargetFrameworkAttribute System.Reflection AssemblyTitleAttribute AssemblyDescriptionAttribute AssemblyConfigurationAttribute AssemblyCompanyAttribute AssemblyProductAttribute AssemblyCopyrightAttribute AssemblyTrademarkAttribute AssemblyCultureAttribute System.Runtime.InteropServices ComVisibleAttribute GuidAttribute AssemblyVersionAttribute AssemblyFileVersionAttribute System.Diagnostics DebuggableAttribute DebuggingModes System.Runtime.CompilerServices CompilationRelaxationsAttribute RuntimeCompatibilityAttribute Console set_Title WriteLine ReadLine Convert ToInt32 ConsoleKeyInfo ReadKey   C o n t r a s e ñ a CI n t r o d u c e   c o n t r a s e ñ a   o   p a s s w o r d :   5L a   c o n t r a s e ñ a   e s   c o r r e c t a . AI N C O R R E C T O .   V u e l v a   a   i n t e n t a r l o .   eþSi¶ýJ½ðçi´N/# ·z\V4à‰      A       UI .NETFramework,Version=v4.5 TFrameworkDisplayName.NET Framework 4.5
 Password       Copyright ©  2013  ) $981582b7-8f6b-4a6d-94bc-9c2811816606   1.0.0.0               TWrapNonExceptionThrows    ½È{R         (  
  RSDS{='@®Ý@¤Ã^3$ºÔ=   c:\Users\Meta\Documents\Visual Studio 2013\Projects\Password\Password\obj\Debug\Password.pdb                                                                                                                                                                        X)          n)                          `)        _CorExeMain mscoree.dll     ÿ%  @                                                                                                                                                  €   8  €                  P  €                  h  €                   €                          @  °          PC  ê          °4   V S _ V E R S I O N _ I N F O     ½ïþ                 ?                         D    V a r F i l e I n f o     $    T r a n s l a t i o n       °   S t r i n g F i l e I n f o   ì   0 0 0 0 0 4 b 0   <  F i l e D e s c r i p t i o n     P a s s w o r d     0   F i l e V e r s i o n     1 . 0 . 0 . 0   <
 I n t e r n a l N a m e   P a s s w o r d . e x e     H   L e g a l C o p y r i g h t   C o p y r i g h t   ©     2 0 1 3   D
 O r i g i n a l F i l e n a m e   P a s s w o r d . e x e     4  P r o d u c t N a m e     P a s s w o r d     4   P r o d u c t V e r s i o n   1 . 0 . 0 . 0   8   A s s e m b l y   V e r s i o n   1 . 0 . 0 . 0   ï»¿<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
                                                                                                                                                                                                             €9                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     


La pregunta definitiva es:

¿Hay posibilidad de averiguar la contraseña que está dentro del ejecutable aunque sea con un editor hexadecimal?

En este caso es 1234, supuestamente no lo sabes. Ese es el lema.

Un saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

El Benjo

De hecho es más sencillo de lo que piensas. Busca ofuscación de código .NET

Te dejo además este enlace para que veas lo fácil que es mirar el código de un ejecutable .NET  :rolleyes:

http://msdn.microsoft.com/es-es/library/aa309387(v=vs.71).aspx
www.es.neftis-ai.com

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

.:Weeds:.

Las contraseñas en .net se sacan con una facilidad pasmosa, lo que no sabia yo es que dentro del ejecutable se guardaban datos como este:
c:\Users\Meta\Documents\Visual Studio 2013\Projects\Password\Password\obj\Debug\Password.pdb

Me da que pensar cuando haga un virus, si en vez de Users pusiera .:Weeds:. mal asunto jaja.

Saludos.


Meta

#3
Cita de: El Benjo en  8 Noviembre 2013, 02:15 AM
De hecho es más sencillo de lo que piensas. Busca ofuscación de código .NET

Te dejo además este enlace para que veas lo fácil que es mirar el código de un ejecutable .NET  :rolleyes:

http://msdn.microsoft.com/es-es/library/aa309387(v=vs.71).aspx

Le he hechado un ojo por el aire. No me parece muy fácil, ejejejeje. Hay que probarlo como encontrarlo.

Lo encontré buscando 1234, luego compilé 1235 pero no es fácil. Lo encontré porque estaba buscando 1234, es decir, se la contraseña, la idea es buscarla sin tener idea de saber que contraseña es.



Comprobé que 1234 es D2 04.

Si lo cambio a 1235 su valor en hex es D3 04.

Por eso se el valor, si cambio directamente en el hexadecimal, no se que contraseña es.

Cita de: .:Weeds:. en  9 Noviembre 2013, 00:02 AM
Las contraseñas en .net se sacan con una facilidad pasmosa, lo que no sabia yo es que dentro del ejecutable se guardaban datos como este:
c:\Users\Meta\Documents\Visual Studio 2013\Projects\Password\Password\obj\Debug\Password.pdb

Me da que pensar cuando haga un virus, si en vez de Users pusiera .:Weeds:. mal asunto jaja.

Saludos.



Haz aprendido algo nuevo. Hay más información dentro de las palicaciones, sobre todo de Microsoft. Se llama metadatos y e que has podido leer es legible, en cuanto a otros datos, a simplevista parecen NADA y obtienen información más de lo que imaginas.

Con un editor hexadecimal se puede cambiar todo eso por un largo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, asunto resuelto, en vez de c:\Users\.:Weeds:.\Documents\Visual Studio 2013\Projects\Password\Password\obj\Debug\Password.pdb

Por curiosidad miré Password.pdb y contiene esta información.
Código (apache) [Seleccionar]
Microsoft C/C++ MSF 7.00
DS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (0þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Ê18            
ÿÿ   €                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  øbQ?ÆӐS ÀO£¡ÄEK™éæҐ? ÀO£¡ †ZfÓ½*  øI½`¦n@Ïd,L¶ðBԁr§™       íW
,,Û³,Œa{ÞæÃ8(                  
              
                                                                                                                                                                                                                                                                                                                                                                                          Ê18              ÿÿ   €                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ê18             ÿÿÿÿ   €      ÿÿÿÿ    ÿÿÿÿ    ÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ê18             ÿÿÿÿ   €      ÿÿÿÿ    ÿÿÿÿ    ÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                V       V                       X  ,  @  L   ÿÿÿÿ(                  
              
                                                                                                                                                                                                                                                                                                                                                                                                                     â0€   Hè,÷ÛÎ
                                                               S   (   â0[JüX      R   S   e                                                                                                                                                                                                                                                                                                                                                                                                           þïþï   ¤    c:\Users\Meta\Documents\Visual Studio 2013\Projects\Password\Password\Program.cs  c:\users\meta\documents\visual studio 2013\projects\password\password\program.cs       R   S                                                                                                                                                                                                                                                                                                                                  â0€   ñ÷ë3öÛÎ                                                                S   (   â0¦...Š_X      R   S   e                                                                                                                                                                                                                                                                                                                                                                                                              . *    X      V                     Main          V          
$USystem  $USystem.Collections.Generic  $USystem.Linq     $USystem.Text     $USystem.Threading.Tasks               CS$4$0000   "                password_fijo                  contraseña   2 É?êƳYÖI¼% »«´`    M D 2                   ò   Ø         V          Ì         €     €      €     €     €(     €0   îïþ€3     €4     €?     €@   îïþ€B     €C     €N     €O   !  €U   "  €

*
&  H  F  1        E          K    #
ô                    4    E          K  

     ô                    4                                                                                                                                                                                                                                                                                                                                                                           ÿÿÿÿ /ñ      !      5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              COM+_Entry_Point   %        Main   )        06000001                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ÿÿÿÿ /ñ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ÿÿÿÿw 1
   
  ‹ úÆ èG\       ,   `                   îÀ        ÿÿ      ÿÿÿÿ    ÿÿ            \      ð       V         Password.Program 2A75BA17   -º.ñ       V                    
     ÿÿÿÿ    V         ÿÿÿÿ    ÿÿÿÿ         c:\Users\Meta\Documents\Visual Studio 2013\Projects\Password\Password\Program.cs    þïþï                  ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ                                                                                                                                             œ   Ú   8   ÿÿÿÿ8       È   €   X               
          rc/files/c:\users\meta\documents\visual studio 2013\projects\password\password\program.cs                 "            
                 A'2                                                                                                                                                                                                                                                                                                             Ú   8   w  8       È   €   X   (   X  ,  @  L                  
                  
                                                                                                                                                                                                                                                                                                                                                                                                                      ".1½È{R
   {='@®Ý@¤Ã^3$ºÔ=~   /LinkInfo /names /src/headerblock /src/files/c:\users\meta\documents\visual studio 2013\projects\password\password\program.cs                 "            
                 A'2                                                                                                                                                                                                                                                                                                         D   Ú   8   w  8       È   €   X   X  ,  @  L   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(                  
              
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    


Un saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Keyen Night

No hace falta la magia negra de usar un editor hexadecimal para abrir el ensamblado, buscas un decompiler y abres el ensamblado y ya tienes no sólo la contraseña sino también el código fuente completo. También puedes obtener el MSIL por reflexión y reconstruir el código (que es lo que realmente hace el decompiler), y si te conoces la estructura de los ensamblados de .Net sabrás donde buscar este tipo de información. No es algo para sorprenderse, evidentemente todo la información que compone el código estará en el ensamblado final, ya que se requiere para su uso en tiempo de ejecución, para el caso especial de la plataforma de lenguajes .Net como lo es C# y el muy conocido Java, son lenguajes intermedios o interpretados, que requieren de una maquina virtual que ayude como intermediario entre el código intermedio y la máquina, a diferencia de C/C++ donde el código es de ejecución directa, donde la única traducción que se hace es al lenguaje de la máquina; debido a esto, el código compilado en .Net o en Java, es fácilmente decompilable usando la misma máquina que lo tradujo, es decir si sabes traducir de Ingles a Español también debes saber de Español a Ingles, lo que no sucede en C/C++ por ejemplo, ya que obtenemos código ASM, que hay que analizar con un debugger, y en fin terminas necesitando a gente de la NASA, de la NSA o gente de elhacker.net :xD para devolver eso a lo que podría ser una medio interpretación de como era el código antes de ser compilado.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Meta

Hola:

Voy hacer pruebas de descompilarlo y encontrar la contraseña "1234" a ver si es tan fácil como parece. Vaya seguridad tiene el .NET. El de pago que me dieron en clase legalmente, tiene una función que se llama obfuscar. Se usa, pero he leído por Internet que aún con ello, la diferencia es que tarda más tiempo en hackearlo por decirlo de alguna manera.

http://msdn.microsoft.com/es-es/library/a3cwf295%28v=vs.120%29.aspx

[youtube=640,360]http://www.youtube.com/watch?v=9SVjO5rMieM[/youtube]

Salu2.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

El Benjo

Eso es debido a que la ofuscación sólo cambia los nombres de las variables, propiedades y métodos que creas dentro del tu aplicación. Si lo que quieres es mantener segura una contraseña no la incluyas dentro de tu código, además las contraseñas no se usan así como así, se hacen mediante técnicas de cifrado y hash.

Otra cosa, no es sólo cosa del .NET Framework, cualquier aplicación puede ser decompilada y se le puede aplicar ingeniería inversa, esté escrita en el lenguaje en el que esté escrita.
www.es.neftis-ai.com

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

Meta

Hola:

Por lo que he estado leyendo, las contraseñas no se guardan en un .exe, puede ser en un archivo a parte e incluso en el editor de registros de Windows por poner un ejemplo, eso si, muy bien cifrado.

Seguiré haciendo pruebas. Otra cosa, es cambiar un if else desde un ejecutable, eso parece algo más fácil.

Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Keyen Night

#8
Imagina que en el sistema de administración de un banco, dicha aplicación administrativa, guarde internamente un usuario/contraseña, no importa donde, si en el código, en una base de datos local, en un archivo, en el registro, donde sea. En no más que unos pocos minutos, ya puedes hackear el sistema. La estructura general correcta para este tipo de cosas, es tener un servicio aislado en un servidor, donde se requiere que el usuario se autentique mediante certificados, o usuario/contraseña, de manera que el cliente sólo hace las solicitudes y el servidor las procesa dependiendo de la autenticidad y autorización del cliente. Es como cuando vas al cajero automático, el software, sólo tiene el código para realizar las solicitudes, pero no tiene la contraseña e información de la tarjeta de todos los clientes del banco, el cajero automático, envía la información a un servidor que procesa la información y toma decisiones por él, el software del cajero automático no tiene en ninguna parte, comprobaciones, ni operaciones de ningún tipo, sólo envía, recibe y muestra la información.

La seguridad de ensamblados en .Net no tiene nada que ver, es como bien dice El Benjo, todo lo que se compila se puede decompilar.

Ofuscar es una opción, hay diferentes niveles de ofuscación, los más básicos renombran toda la estructura por caracteres UNICODE, otros más avanzados, pueden transformarse en verdaderos dolores de cabeza para la ingeniería inversa, aplicando la reestructuración del código por medio de proxies, generando un código extremadamente desordenado (el código está, pero no se puede recuperar el orden), alterando la estructura de .Net para dejarle irreconocible pero funcional, empaquetando y cifrando el código en un ejecutable compilado en otro lenguaje que no sea de .Net. En fin hay mucha tela que cortar de ahí, y es un mundo muy grande del que no vale hablar mucho sino investigar, porque cada quien puede conseguir su forma de ofuscar, que por razones obvias no puede contar del todo :xD
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...