Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - karmany

#941
Los programas desensambladores lo que hacen es a partir del código máquina (secuencias de 0 y 1 que el microprocesador entiende directamente) lo "transforman" en lenguaje ensamblador del inglés assembly.

Estos programas (desensambladores), te muestran todo el código del programa en lenguaje ensamblador y según con qué lenguaje de programación hayan sido compilados pues tienes unas características u otras.

Si tú quieres modificar un programa ya compilado, deberías visitar el foro Ingeniería Inversa, en el que se tratan éste y otros temas variados.

Para que te hagas una idea sencilla, visita este enlace(tutorial a nivel básico de cómo modificar programas ya compilados):
http://foro.elhacker.net/ingenieria_inversa/tutorial_para_modificar_programas_ej_8_visual_basic_iii_06julio2008-t134513.0.html

Un saludo
#942
28 de julio de 2008 - Última novedades en nuestro foro

Como podéis observar, estamos actualizando todo y agregando nuevos temas interesantes, todo lo nuevo de este último mes:

-Resuelto un crackme pendiente con dos tutoriales:
http://foro.elhacker.net/ingenieria_inversa/crackme_by_desnight-t213855.0.html

-Actualización de nuestro taller de cracking desde cero:
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_27julio2008_ultima_actualizacion-t180886.0.html

-Nuevos ejemplos en el tutorial "Cómo modificar programas":
http://foro.elhacker.net/ingenieria_inversa/tutorial_para_modificar_programas_ej_8_visual_basic_iii_06julio2008-t134513.0.html

-Iniciado nuevo interesante tema en el que explicaremos formas para proteger vuestras aplicaciones:
http://foro.elhacker.net/ingenieria_inversa/como_proteger_tu_programa-t222129.0.html

-Sabemos y estamos en ello también, que en el post "Links Interesantes" hay ya unos cuantos enlaces que no funcionan. Sin embargo, no van a ser de momento eliminados, porque es posible que en breve vuelvan a estar disponibles. Si en un tiempo no responden, serán automáticamente eliminados.

Un saludo y gracias por vuestra colaboración
karmany
28 de julio de 2008
#943
PRÓLOGO

Después de recibir varias consultas sobre este tema, hemos decicido abrir este nuevo post, dando a conocer principalmente a los programadores los distintos sistemas para proteger sus aplicaciones:

-Protecciones que pueden implementar ellos mismos en sus programas...
-Programas gratuitos que pueden utilizar para empaquetar sus aplicaciones
-Programas de pago..
-Consejos...

Nosotros sabemos que a una persona con buenos conocimientos, cualquier protección le es indiferente, porque no hay nada infalible, pero vamos a mostrar las distintas formas que conocemos.

¿Por qué abrimos este post? Pues porque la gente que diariamente trabaja con Ingeniería Inversa es la gente que se enfrenta con las protecciones actuales y sabe cuáles son las más difíciles (que no imposibles) y cuáles puede aconsejar...

Un saludo y esperamos que os pueda servir de guía antes de decidiros por una u otra opción...





INTRODUCCIÓN

Varias de las preocupaciones de un programador a la hora de distribuir su aplicación pueden ser:

-Disminuir el tamaño de la misma todo lo posible
-Crear licencias para usuarios registrados
-Crear versión DEMO
-Proteger la aplicación para que no sean usadas licencias ilícitas

         

Primeramente, y antes de todo, hay que comentar unos detalles que todo programador debe saber:
-Ningún programa es incrackeable.
-Hay protecciones fáciles,...., difíciles, ...., muy difíciles y muy muy difíciles, pero no imposibles.
-Muchos programadores piensan que por no tener el código fuente, al cracker le va a resultar más complicado estudiar la aplicación. Ya les puedo asegurar a todos los que piensen así: que se equivocan al 100%. Si analizaramos cualquier programa compilado con cualquier lenguaje de programación, llegaríamos a ver secuencias de 0 y 1 que el procesador entiende directamente. Pero existen muchos programas denominados desensambladores que lo que hacen es convertir esa secuencia de 0 y 1 en código ensamblador. El cracker domina este lenguaje.
-A parte de la ayuda que es un desensamblador, se unen los debugger que son herramientas para la depuración del código. Estos debuggers a día de hoy, están muy desarrollados y les puedo asegurar que su aplicación será incapaz de detectarlos.
-Las personas que comienzan su andadura por el mundo de la Ingeniería Inversa son denominadas Newbies. Y no hay que subestimar a nadie.
-Existen en la actualidad muchísimos programas para proteger y/o reducir tu aplicacion, estos programas se denominan empacadores, empaquetadores o en inglés packers.
-En este tutorial vamos a hablar principalmente de aplicaciones a 32 bits en ejecutadas en Microsoft Windows.

Después de todo esto seguro que ya sabrás que tienes dos opciones:
    -Implementar tú mismo la protección en tu aplicación
    -Utilizar uno de los muchos empacadores que existen


Implementar uno mismo la protección:
Como ya se puede uno imaginar, hay que crear licencias y una versión demo. Es realmente una labor un tanto costosa, pero con toda la información que hay en Internet seguro que puedes conseguir una base para comenzar. Hay muchas personas que ya tienen el código fuente preparado para distintos software y lo que hacen es modificar ciertos parámetros y así los nombre-contraseña también son diferentes.

Utilizar un packer:
La utilización de estos programas tiene una gran ventaja: que en la mayoría de ellos se pueden ya crear licencias, versiones demo, protecciones contra desensamblados/debuggers, e incluso la disminución del tamaño de la aplicación consideramente.
Por contra, si quieres crear una aplicación comercial, en la mayoría de ellos deberás comprar el producto, lo que requiere que tu aplicación aumente también de precio.
También se debe tener en cuenta que los packers que hace unos años eran muy complicados, actualmente han sido analizados hasta su último bit y gente Newbie es capaz incluso de enfrentarse a este tipo de protecciones. Pero todo esto lo veremos con más detenimiento después.

Hablaremos un poco de los métodos anti debugger/desensambladores
#944
vixstor, echa un vistazo a tus mp.
#945
Primeramente hola y bienvenido.

También tienes que tener presente una cosa: que al igual que lo proteges con Refox también se puede desproteger con elmismo programa.
Hay varios tutes de cómo desproteger vf, igual te pueden ayudar:
Tute

Nunca he protegido ningún programa en VF, pero pienso que puedes protegerlo con cualquier programa conocido.
Estos son bastante interesantes, creo que incluso tienes alguna version gratuita:
http://www.aspack.com/

Este igual te puede funcionar:
http://es.wordpress.com/tag/armadillo-6-packer/

Aquí tienes otro protector muy interesante:
http://www.un4seen.com/petite/

Hay muchísimos packers:
http://www.woodmann.com/crackz/Packers.htm

Aunque  ya te digo que para que pueda funcionar tienes que probarlos tú.

Es un tema muy interesante lo de proteger nuestros propios programas, y todavía no tenemos un apartado específico. Habrá que estudiarlo...
#946
3.1 Ejemplos en Ventana de Registros - OllyDBG:

1.- Incrementar o disminuir en una unidad un registro cualquiera:
Vamos a incrementar en uno el registro eax:
Seleccionamos el registro, pulsamos botón derecho del ratón --> increment. Simplemente podemos hacerlo pulsando la tecla +.

Vamos a disminuir en uno el registro ebx:
Seleccionamos el registro, pulsamos botón derecho del ratón --> decrement.
Simplemente podemos hacerlo pulsando la tecla -.


2.- Poner un registro cualquiera a 0 o 1:
Imaginemos que eax vale FFFFFFF2. Si seleccionamos el registro y pulsamos botón derecho del ratón veremos la opción:
-Zero       ;para poner el registro a cero
-Set to 1  ;para poner el registro a uno



3.- El registro ebx tiene una dirección. Quiero ir a esa dirección en el dump rápidamente:
Imaginemos que ebx (o cualquier otro registro) vale 402000. Queremos ir a esa dirección en la Ventana del Dump. Simplemente seleccionamos el registro ebx y pulsamos botón derecho del ratón --> Follow in dump



4.- El registro ebx tiene una dirección. Quiero ir a esa dirección en la ventana de desensamblado:
Imaginemos igual que antes que ebx (o cualquier registro) vale 402001. Queremos ir a esa dirección en la ventana de desensamblado. Simplemente seleccionamos dicho registro ebx, y pulsamos botón derecho del ratón --> Follow in disassembler



5.- Quiero modificar el registro EIP:
Debes saber que si modificas dicho registro, modificas la posición en la que se encuentra parado el debugger. Hay que tener cuidado y saber lo que se hace.



6.- Se ha realizado una operación y el resultado es cero. Ahora estoy en un JNZ, y no salta. No quiero modificar el JNZ a JE. ¿Qué puedo hacer?
Este es el flag Z explicado antes, así que si una operación ha dado cero, pues el flag Z se habrá puesto a 1 y por lo tanto una instrucción JNZ no saltará.
Podemos seleccionar el flag Z y pulsamos botón derecho --> Reset y veremos cómo al cambiar el flag Z ya JNZ salta.










En contrucción
Perdonar las molestias
#947
Ingeniería Inversa / 3.0 Ventana de Registros
27 Julio 2008, 12:50 PM
3.0 Ventana de Registros - OllyDBG:


Los registros son utilizados para guardar o acceder rápidamente a distintos valores. Este tema de los registros ya fue explicado muy bien por Shaddy.

La Ventana de Registros nos da información acerca de los mismos. Podemos observar qué es lo que contiene cada registro, modificar su contenido, incrementar o disminuirlo en una unidad rápidamente y un largo etc...

El registro EIP es la dirección en la que nos encontramos y muchas veces en esta ventana de registros si esa dirección coincide con una función, o con cualquier dato relevante, nos puede mostrar dónde se encuentra. En este caso vemos que se encuentra en el Entry Point.

Tiene en su parte superior una barra que nos permite visualizar 3 vistas diferentes simplemente pulsando en la misma.
-Registers (FPU)
-Registers (MMX)
-Registers (3DNow!)

Para lo que estamos aprendiendo yo recomiendo que lo dejéis en Registers (FPU), tal como se ve en la imagen. La diferencia con las otras dos vistas es que en esta (FPU) se muestran los registros ST(0)....ST(7) que son utilizados para realizar operaciones de punto flotante. Sólo quedaros con eso no entraremos en más detalles.


Registers (FPU):
Vamos a explicar todo lo que hay en esta ventana. Para ello echaremos un vistazo a la imagen que he puesto.

Lo primero que aparece son los registros que ya conocemos y sus respectivos valores que almacenan:

EAX 00000000
ECX 0013FFB0
EDX 7C91EB94 ntdll.KiFastSystemCallRet
EBX 7FFDF000
ESP 0013FFC4
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C920738 ntdll.7C920738
EIP 004011C0 Crackme_.<ModuleEntryPoint>


Podemos observar como dije antes que estamos detenidos en el EntryPoint.(EP)

Después nos encontramos con:
C 1 
P 0 
A 0
Z 0 
S 1 
T 0 
D 0
O 0


Son lo denominado Flags o Banderas. Se ponen unicamente a 0 o 1 y se modifican cuando ha ocurrido una determina instrucción(operación).

Por ejemplo, el Flag Z o Flag Cero (vemos Z 0) se pone a cero cuando se ejecuta una operación y el resultado ha sido cero. Veamos:
Imaginemos que EAX vale 00000001; eax = 1
El flag Z está de momento a cero.
Y tenemos lo siguiente:
DEC eax ;con lo que eax valdrá 0.
Tras esta instrucción el Flag Z se pone a 1...

Para este tutorial no entraré a explicar todos los Flags.

Seguimos. A la derecha de estos Flags vemos lo siguiente:

ES 0023 32bit 0(FFFFFFFF) -> general o de string
CS 001B 32bit 0(FFFFFFFF) -> de código
SS 0023 32bit 0(FFFFFFFF) -> de stack
DS 0023 32bit 0(FFFFFFFF) -> de datos
FS 003B 32bit 7FFDE000(FFF) ->segmentos def. por el usuario
GS 0000 NULL -> segmentos def. por el usuario


Son los denominados Registros de Segmento utilizados para direcciones de memoria. No los utilizaremos.

Y finalmente:
ST0 empty -UNORM BCE0 01050104 006C006F
ST1 empty 0.0000016439076200470e-4933
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 0.0
ST7 empty 0.0


Que son utilizados como ya comenté para realizar operaciones de punto flotante. Este tema es muy interesante y la representación de estos números aún más. Sobre todo en los de precisión doble. No entraré en más detalles, aunque he mostrado para qué valen.

#948
Ingeniería Inversa / Re: Crackme by desnight
26 Julio 2008, 22:43 PM
Gracias apuromafo y Gevaudan por la colaboración y resolución del crackme.
Correctamente crackeado.

PD. Yo le daba vueltas al hecho de si es posible que exista realmente una contraseña válida.. pero yo también me he cansado de buscar soluciones.
Me explico para los que no lo entienden:
Aparte del serial que está claramente, el nombre que nosotros insertamos lo pone en mayúsculas(karmany --> KARMANY) y posteriormente lo compara exactamente con desnight (KARMANY != desnight). Por este hecho parece ilógico que haya un nombre-serial correcto..

Si alguien encuentra nombre-serial para registrarlo será bienvenido. ;D
#949
Como te comenta apuromafo WinLicense y Themida son muy complicados de destripar ya que utilizan técnicas avanzadas que no todos conocemos perfectamente.

Por si te puede servir de ayuda, te comento que yo reparé un programa mío protegido con Themida que estaba compilado con Visual Basic 6. Verás que no indago en las entrañas de Themida porque es muy difícil, así que dejo que Themida haga su trabajo y le voy poniendo trampas. A ver si te vale:
TUTE Themida por karmany
#950
Es raro, voy a comentarlo a ver...

PD. ya lo he comentado. Cuando puedas acceder ya verás mi pregunta y he puesto el link de tu tute.
A ver si te contestan pronto.
Un saludo