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


 


Tema destacado: Página de elhacker.net en Google+ Google+


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 36
1  Programación / Ingeniería Inversa / Crackeando un programa [Consulta] en: 21 Octubre 2014, 21:10
Buenos días/tardes/noches a todos en el foro :P

Soy algo nuevo en esto de la ingeniería inversa, así que pido disculpas si alguna afirmación no es correcta en lo que leerán a continuación xDDD

He estado leyendo a Ricardo Navaja y bueno me lance a la aventura de intentar crackear un programa que necesito, por la información que he podido recopilar está escrito en Microsoft Visual C++ 2010, usa Qt para la GUI y está protegido con VM Protect v1.60 - v2.05 según ProtectionId, VM Protect 2.x + Simple UPX cryptor según RDG y VM Protect según DIS. Se que esta protección es una de las más fuertes para ejecutables escritos en C++, pero como todo, difícil pero no imposible; por lo que he buscado recomiendan usar OllyDbg junto con los plugins Phat0m y StrongOD para hacer frente a VM Protect, pues los he cargado al OllyDbg y configurado como se debe (o al menos así parece), el programa ya no detecta al OllyDbg explitamente enviandote el clásico MessageBox indicando que ha detectado un depurador pero se queda sin hacer nada y parece no desempaquetar nada porque aún no se pueden ver los strings ni el código del modulo principal en claro.

De tal manera me fui por el Attach, con los plugins todo funciona bien pero colocar un breakpoint e intentar depurar hace que todo explote xD

No me importo al principio, pues solo quería encontrar el salto condicional y parchearlo jajajajaja, analizando un poco más a fondo básicamente el programa genera un HWID, siguiendo las conexiones con Wireshark he visto que envía por POST los datos a un servidor que en pocas palabras contesta HTTP/OK y un número, siguiendo esa respuesta en el OllyDbg el número termina pasando por un switch, tal como este:



Hay un case del switch para cada error posible (falla de conexión, prueba vencida, datos de conexión inválidos, etc), con su respectiva llamada al MessageBox de Qt para dar la información al usuario. Como no existe un case de éxito y está presente el default case he intentado saltar al default case de una vez pero no pasa nada, el programa se queda sin hacer nada, también he intentado saltar fuera del switch antes de entrar (esto hace que explote xD), imagino que por el estado de los registros.

Llevo varios días pegado tratando de averiguar a donde salta o a quien llama cuando todo sale bien, si alguien me pudiese dar una luz, sobre como depurarlo sin que explote (hace falta desempaquetar?) o hacia donde termina yéndose esto, o cualquier otra cosa que ustedes crean que es lo correcto, estaría muy agradecido.

Esta es la aplicación, es un bot de un juego, el enlace lo coloco desde mi Google Drive, para no poner directo el ejecutable desde la página del fabricante:

https://drive.google.com/file/d/0B3_t7GvNr0xvZTNyaFZqeWkzMjQ/view?usp=sharing

Gracias por leer este testamento xD
2  Programación / .NET / Re: Leer variables de un proceso en: 12 Abril 2014, 05:35
Las API de Windows Read/Write ProcessMemory, tomando en cuenta la reubicación de BaseAddress, ya que estas direcciones que tienes pueden variar dependiendo de la BaseAddress del proceso al que pertenecen.
3  Programación / .NET / Re: VS 2012 una dudilla ? en: 16 Noviembre 2013, 02:14
Que mientras compiles en una versión que el sistema destino soporte, entonces funcionara sin importar el compilador ._.
4  Programación / .NET / Re: VS 2012 una dudilla ? en: 16 Noviembre 2013, 01:43
No importa el entorno en el cual trabajes, sino que el sistema al cual quieres dirigir la aplicación soporte la versión del .NET Framework en la que estás compilando.

Es decir, si compilas una aplicación en .NET Framework 3.5, en VS 2013, para Windows XP, sólo funcionará si ese Windows XP tiene instalada la versión 3.5 de .NET Framework. Sin embargo Microsoft se encuentra en la lucha por eliminar del mercado a Windows XP y uno de los pasos que ha dado es remover el soporte de .NET Framework para Windows XP desde la versión 4.5 o superior.
5  Programación / .NET / Re: Duda trabajando con Hexadecimal y Binario ? en: 10 Noviembre 2013, 18:37
Para operaciones extremadamente grandes, tienes el tipo Decimal de 96bits de tamaño, si 96bits, el impresionante limite de 79.228.162.514.264.337.593.543.950.336.

Puedes utilizar un simple modulo, recordando que en el sistema decimal (de base 10), cada espacio vale 10 veces más que el anterior, si necesitas los primeros 8 números de izquierda a derecha, podemos obtener el residuo de la división resultante de dividir por 10 a la 8, es decir:

12345678910 Mod 108

12345678910

Código
  1. Dim x As Long = 12345678910
  2. Dim y As Long = x Mod Math.Pow(10, 8)
  3. Console.WriteLine(y)
  4. Console.Read()
  5.  
6  Programación / .NET / Re: Averiguar contraseña propio bajo C# en: 10 Noviembre 2013, 17:54
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
7  Programación / .NET / Re: [C#] [VB.NET] Enums con valores duplicados en: 9 Noviembre 2013, 18:30
Por estrictas normas de globalización que sigue la plataforma .Net, las comparaciones internas de texto se realizan por comparación ordinal y respetando el uso mayúsculas y minúsculas. En VB.NET no se puedan repetir los nombres sin importar el case, es sólo debido a su sintaxis, y no tiene nada que ver con la plataforma como tal, mientras que en C# es posible nombrar 2 variables de la misma manera, si su case es diferente. Es literalmente imposible, que el parser de .Net obtenga un falso positivo, ya que es ambos casos (tanto en VB.NET como en C#), no puedes invocar 2 variables con el mismo nombre; es totalmente válido este enum por ejemplo:

Código
  1.        public enum ejemplo : int
  2.        {
  3.            azul,
  4.            AZUL,
  5.            AZUl
  6.        }

El único problema que tiene, es que como somos humanos, tenemos la necesidad de que todo se vea simétrico, para para la computadora esos son 3 valores que no tienen absolutamente nada que ver uno con el otro.
8  Programación / .NET / Re: Duda trabajando con Hexadecimal y Binario ? en: 9 Noviembre 2013, 18:16
Si colocaras específicamente, cual es el calculo que no puedes resolver, cuales operadores no te funcionan correctamente, y un ejemplo de el problema resuelto correctamente, te podríamos ayudar mejor ;)
9  Programación / .NET / Re: Averiguar contraseña propio bajo C# en: 9 Noviembre 2013, 18:05
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.
10  Programación / .NET / Re: Quién programa en .NET? en: 27 Octubre 2013, 09:03
Si estas comenzando a programar olvídate de C# y PHP, comienza por C/C++ luego te enamoras de algún lenguaje como Java, PHP o si es de .net que sea C# ya que VB.NET te da muchas mañas extrañas que no se ven en ningún otro lenguaje :xD
11  Programación / .NET / Re: [SOURCE] mrtzcmp3 Downloader en: 27 Octubre 2013, 08:57
System.Web.HttpUtility

Es una clase de .Net, que contiene métodos que pueden "parsear" los caracteres inválidos en hexadecimal y viceversa. Están disponibles los métodos Encode/Decode Url, respectivamente para cada caso.
12  Programación / .NET / Re: Hacer segura una contraseña en: 7 Octubre 2013, 02:50
Es algún tipo de bot o algo por el estilo?, porque debe ir ligada tu contraseña en el ensamblado?
13  Programación / .NET / Re: Sistema de login muy seguro en: 7 Octubre 2013, 01:06
La arquitectura común para un login, es Cliente <-> Servidor/Servicio <-> Base De Datos, de manera que la comprobación de las credenciales no se realice desde el lado del cliente.

Para generar una comunicación segura se debe establecer un canal cifrado, hay mucha documentación, pero es un tema largo.

En el caso de los identificadores, estos deben generarse desde el lado del cliente, así que se puede realizar un parche para modificar al antojo el identificador, lo más sencillo es tener una base de datos de usuarios, para que estos deben autenticarse ante el servicio y así poder tomar decisiones según sea el caso.
14  Programación / .NET / Re: Hacer segura una contraseña en: 7 Octubre 2013, 00:54
Y esa contraseña la utilizas para?
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 36
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines