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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  FAQ de Ingeniería Inversa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: FAQ de Ingeniería Inversa  (Leído 9,397 veces)
::GD::


Desconectado Desconectado

Mensajes: 1.139



Ver Perfil
FAQ de Ingeniería Inversa
« en: 4 Julio 2003, 23:53 pm »

Bueno nabegando por la web punn resulta que me encontre esto y decidi compartirlo en el foro  8)


1  Primeras recomendaciónes:
Up

1- Si deseas obtener respuesta a tus preguntas, haz preguntas que puedan tener respuesta.

2- Ajusta la pregunta a tu interlocutor. Si tienes pequeñas dudas no molestes al maestro. Pregúntalas al aficionado. Si tus dudas tienen cierta entidad no molestes al aficionado. Pregunta al maestro.
...Pero si no sabes nada acerca de la ingeniería inversa, no preguntes y LEE.:-)

3- Las web de crk suelen tener una vida corta y dinámica ( a excepción de fravia). Lo cual quiere decir que los enlaces aparecen y desaparecen, y los contenidos varían con cierta asiduidad. Se paciente y aprende a buscar las cosas por ti mismo. En esta página encontrarás las direcciones alternativas a muchos grupos de crk. Utilízala en caso de tener algún problema. Sus enlaces te llevarán a cientos de sitios.
http://www.angen.net/~nitagoddess/groups.html

4- Igualmente, los programas citados en el presente tutorial corresponden a versiones actualizadas a septiembre del 99. Lógicamente intenta conseguir la última versión disponible.
 

2  ¿En que consiste el cracking ?
Up

Un poco de teoría :-)

Los programas pueden estar escritos en muchos lenguajes de programación (pascal, c, delphi, visual basic...). Cuando los compilamos y los hacemos ejecutables para poder usarlos, el compilador de turno interpreta las instrucciones que hemos escrito y las pasa a un lenguaje mas universal : el lenguaje ensamblador (ASM).

Este lenguaje binario esta compuesto únicamente por unos y ceros, es decir por números, y como tales pueden ser expresados de distintas formas (decimal, hexadecimal, binario octal etc.). Dada la constitución interna de las computadoras, el formato mas cómodo es el hexadecimal (aunque internamente los datos/cálculos los guarda/ejecuta en binario)

Cuando abrimos un ejecutable con un editor de texto solo vemos caracteres extraños, pero si abrimos ese mismo ejecutable con un editor hexadecimal, lo que vemos son números hex. Cada uno de esos números es un byte, por ejemplo la cadena ascii GERZA contiene 5 bytes, que expresados en hexadecimal serían 47 45 52 5A 41 :

Hexadecimal :     47            45             52             5A              41
ascii                   G              E              R               Z               A
Binario :       1000111       1000101   1010010     1011010      1000001

El ASM como cualquier otro lenguaje tiene sus propias instrucciones y estas instrucciones están relacionadas con los bytes que ves en el editor hex. Por ejemplo :

Instrucción ASM            Nº Hexa             Nº Bin                Significado

NOP                     =          90          =      10010000     =     no hace nada
RET                      =         C3          =      11000011     =     retorna de una llamada
PUSH EAX            =          50          =      10100000     =     coloca eax en la pila

Pues bien, el arte de crackear consiste en modificar ciertos bytes (y lógicamente las instrucciones asociadas a ellos) para que el programa haga lo que nosotros queramos, y no aquello para lo que originalmente fue diseñado.

Si por ejemplo nos encontramos un RET  (C3) y cambiamos el byte C3 por 90 (NOP) en nuestro editor hex...¿que pasara ?

Pues sencillamente que no retornará la llamada... y tenemos todos los boletos para que el programa casque :-)

Es importante entender que los ejecutables contienen una parte de código (instrucciones asm) y otra parte de datos (a los cuales accede dicho código) Todos ellos son números pero solo los primeros son ejecutados como instrucciones asm.
Esta información y mucha mas, nos la proporciona la cabecera del programa, una zona que le explica al S.O como debe proceder para que se ejecute correctamente.

Para encontrar la rutina correcta que debes modificar, están los breakpoints de los debugger. Lo que hacen básicamente es romper el programa (pararlo) en el punto que tu le digas. Típicamente en aparición de ventanas, apertura de ficheros, lectura de cajas de dialogo, acceso a puertos, lecturas de cd-rom....Echa un vistazo al apartado 23 y aprende cuales son los mas usuales.

Una vez hecho esto deberás volver al código de tu programa ( con soft-ice pulsa F12 ) y empezar a buscar (F8 y F10). Leete los manuales, las FAQ y las referencias rápidas.

Si quieres examinar tu programa con mas tranquilidad deberás desensamblarlo (por ejemplo con w32dasm).
 
 
3  ¿Cuanto se tarda en crackear ?
Up

Puedes tardar 1 minuto, una hora, un día, un mes.... :-)

Depende de quien lo haga, la habilidad que tenga y por supuesto del tipo de protección. Teóricamente entiendo que todo es crackeable. Básicamente se trata de cambiar unos bytes por otros y eso siempre va a ser posible. El problema consiste en saber...¿ Que bytes ? :-)
 

4  Estoy buscando un crack. ¿Donde lo puedo encontrar ?
Up

Hay cientos de páginas con crk pero lo mejor es ir directamente a buscadores especializados como:

http://astalavista.box.sk/
http://www.multimania.com/keygen/search.html
http://www.salteador.com/buscador.html  (en castellano )
 

Para juegos empieza por :

http://www.megagames.com/gcracks.html

En caso de no dar resultado busca en las news "crack programabuscado". Con un poco de suerte encontrarás algún enlace que te lleve al crk.

Si el programa en cuestión es español conviene que te pases por WKT http://wkt.mypage.org/
La lista empieza a ser respetable.

Pásate por algún metabuscador de la red y haz bien la búsqueda
Si estas convencido que no existe. Puedes intentar poner un post en algún newsgroup de cracking poniendo en el subjet " req : programabuscado"

Según parece en efnet hay gente que acepta solicitudes.

Busca algún foro inglés que permitan solicitudes de este tipo, por ejemplo http://202.96.215.252/core/Request.html

Navega por irc. Tal vez encuentres algún canal adecuado para ello.

Busca en los inmensos servidores como yahoo-geocities, fortunatecity, xoom.... De vez en cuando encuentras lo que buscas.
 

5  ¿Y si no lo encuentro?
Up

Asegúrate de haber buscado bien según el apartado anterior. En  http://www.dupecheck.de/ podrás saber si el crk existe. No te dará ninguna dirección, tan solo en nombre del fichero en caso de que exista. Despues tendrás que buscarlo en algun ftpserch o alguna buena searchengine.

Si se trata de la típica demo de 30 días, no existe crack, no sabes nada de cracking, tampoco quieres aprender y es cuestión de vida o muerte que lo sigas usando...

*A-Existen algunos programas como Date Cracker 1.0 . Esta utilidad lo que hace es crear un ejecutable que se encarga de modificar la fecha de tu ordenador y después cargar tu programa. Es importante que realices la operación antes de que caduque y que a partir de entonces arranques siempre con él.

*B- Utiliza el eru. ( lo encontrarás en tu cd de w95 en el directorio w95/other/misc), antes de instalar tu programa-juego. Lo que hace básicamente es una copia del registro que lo podrás restaurar cuando hallan pasado los típicos 30 días de prueba.
Cuando te deje de funcionar, desistalalo, borra todos los .ini del programa, sus directorios y restaura tu copia de seguridad con eru-erd bajo Dos. Cuando lo hallas hecho, ejecuta una nueva instalación.

*C-Busca algún crk de versiones anteriores y contacta con su autor. Tal vez haya publicado en internet el crk de la versión que necesitas en alguna dirección no indexeada en los máquinas..

Si es lo suficientemente importante para que hayas llegado a este extremo, registra el programa.

En cualquier caso los foros de wkt, NO SON LOS APROPIADOS. Por favor no contribuyas a llenarlos con estas peticiones. Comprenderás que no hay nadie interesado en que estos foros (los únicos en español) se conviertan en una auténtica locura y desaparezcan, ni siquiera tú.
 

6  Quisiera desproteger un programa...
Up

Antes de preguntar asegúrate que tienes unas mínimas nociones de cracking. Si no es así en esta FAQ tienes información y direcciones mas que suficientes para empezar.

Pásate por ECD en http://ecd.tsx.org/ y selecciona el tipo de protección que te interesa. Allí encontrarás ejemplos resueltos a problemas similares al tuyo.
 

7  Quiero empezar. ¿Que es lo que necesito ?
Up

Conocimientos asm :Conviene tener unos conocimientos básicos de asm. Contra mas sepas mas rápido crakearás. Inicialmente con que entiendas los registros, la pila, y las instrucciones básicas (call-ret, saltos, mov, test, cmp, push, pop) es suficiente.

Herramientas : Inicialmente necesitarás un desensamblador (w32dam 8.93) un debuger (soft-ice 4.01) un editor hexadecimal (p.e. hexworkshop 2.54) y si quieres distribuir tus cracks, un parcheador (p.e. Ptasiek's CrackMaker 1.3)

Tutoriales : Tendrás que leer todos los tutoriales que puedas :-). Para niveles bajos ya existe suficiente material en castellano. Si estás algo mas avanzado no te quedará mas remedio que leer en ingles. Caso que tu nivel de inglés sea flojito instala babylon translator en tu ordenador.
 

8  ¿Donde puedo conseguir todo eso que dices ?
Up

Conocimientos asm: Existe varios tutoriales de asm en castellano en la red. Por ejemplo el de Aesoft es bastante completo. También existe otro escrito por Pablo Barron Ballesteros mas resumido. Por último hay otro algo ligerito hecho en la universidad de Guadalajara (Méjico). Tendrás que buscarlos. Empieza con algún ftpsearch como http://ftpsearch.ntnu.no/ftpsearch y busca ficheros como asm.zip, asm2.zip cursoasm.zip, aesoft.zip, ensam.zip...
En http://www.casarramona.com/mt/programador/index.htm  hay algunos, entre ellos el de Aesoft. Si tienes problemas busca en las web de cracking en castellano.

En http://kut.tsx.org/ podrás encontrar todos juntos, incluido una referencia rápida de Antikton bastante interesante.
 
Herramientas : Puedes encontrarlas en cualquier web de tools..

http://protools.cjb.net//        (Imprescindible y actualizado)
http://surf.to/HarvestR
http://hambo.163.net/
http://mercury.spaceports.com/~quel/protools
http://www.idca.com/~thesandman/Toolz.html
http://www.eccentrica.org/Mammon/index.html
http://www.corleone.net/body_t_o_o_l_s.html
http://hackersclub.com/km/files/cfiles/index.html
http://win32asm.ownz.com/
http://www.suddendischarge.com/
http://134.155.63.117/~quantico/tools/

Si no encuentras lo que buscas pásate por la web del desarrollador y luego bájate el crack correspondiente.

Tutoriales y foros: en castellano puedes encontrar material en :

http://wkt.mypage.org/              (LA referencia)
http://kut.tsx.org/
http://ecd.tsx.org/
http://tntcrack.tsx.org/
http://welcome.to/karpoff
http://www.lanzadera.com/proyektonakarko/
http://disc.server.com/Indices/23018.html
http://www.wco.com/~micuan/

En ingles hay un montón. Te doy algunos ejemplos

http://129.105.116.5/fravia/entran.htm              (Imprescindible)
http://www.corleone.net/body_t_u_t_o_r_i_a_l_s.html
http://www.idca.com/~thesandman/Forums.html
http://disc.server.com/Indices/42877.html
http://www.immortaldescendants.com/tornado/tutorials.html
 

9  ¿Que es un debugger?
Up

Es una utilidad que permite ver  paso a paso (instrucción a instrucción)  un programa mientras se está ejecutando en la memoria del ordenador. Las instrucciones se visualizan en ensamblador.

Nos servirá para ver como se comportan las rutinas de protección ya que son parte del programa. Con su ayuda podremos ver lo que van haciendo las instrucciones paso a paso, comprenderlas y eventualmente cambiarlas. Estos cambios no son permanentes, tan solo los realizas en la memoria. Si los deseas hacer permanentes has de modificar el fichero ejecutable con un editor hexadecimal.
Sin duda alguna, el mejor debugger es WinIce (Softice para W95) http://www.numega.com/

Para MSDOS existen varias versiones de Softice y otros programas  poco potentes llamadas DEBUG y SymDebug y Turbo Debug.
 

10  ¿Qué es un desensamblador?
Up

Un desensamblador toma un fichero de bytes en hexa y los transforma a sus correspondientes instrucciones asm. El lenguaje ensamblador, es solo el conjunto de sentencias que entiende el microprocesador

Por ejemplo un 43 en hexa se transforma en inc eax.

W32dasm es un desensamblador completo, facil de utilizar y ademas incorpora un debugger (bastante limitado). Es lo mas indicado para proyectos de poca envergadura.

Ida pro es "EL" desensamblador que funciona bajo ms-dos y a partir de la 4.0 también para w95. Es el mas potente que existe en la actualidad y muy recomendable. Localiza estructuras y cadenas que no son detectadas como tales por W32dasm.
 

11  ¿Qué es un editor hexadecimal?
Up

Un editor hexadecimal, no es más que una utilidad, que permite "editar" los bytes que componen un fichero.

Modificando dichos bytes, tambien modificaremos las instrucciones asociadas a ellos. De esta forma podemos variar el comportamiento de los programas para que se ajusten a nuestras necesidades.
 

12  ¿Todos los programas se desprotegen de la misma forma?
Up

No!...
Un programa aún haciendo lo mismo puede programarse de mil formas, en muchos lenguajes y bajo distintos compiladores...

No obstante es habitual que versiones diferentes del mismo programa utilicen protecciones similares.
 

13  ¿Qué es una DLL?
Up

Es una librería dinámica (Dynamic Link Library). Es un fichero en el que residen funciones(código ejecutable) o recursos (ventanas de un programa, menús, iconos, bitmaps, etc...) y que pueden ser llamadas por cualquier otro programa de Windows. Existen  una gran variedad de  DLL personalizadas y  comerciales que permiten sacar partido a muchos programadores (Jscript.dll =librería de Java Script, Tl32v20.dll =Timelock, rutina de protección de programas en periodo de prueba, etc...).

De hecho Windows 95 usa en su mayoria DLLs... KERNEL32.DLL, USER32.DLL, GDI32.DLL...
Incluso los archivos DRV y FON  (fuentes) son DLL, aunque estos se cargan de forma no automática...
 

14  He hecho algún crack. ¿Que herramientas me podrían ayudar ?
Up

-Frogs-ice 0.31- Elimina algunas detecciones típicas del soft-ice.

-Ida pro 3.85- Desensamblador. Es complicado, Es para ms-dos pero es el mejor.

-Exescope 4.4- Edita recursos, cambiar pantallas, activa botones...

-Procdump 1.5- Excelente descompresor. Soporta muchos formatos.

-hacker view’s(HIEW) 6.16-Excelente editor hex para dos. Es el único que permite cambiar el código asm de forma interactiva. Bueno para todos, imprescindible para quien empieza.

-Spy32 2.7- Identifica handles, tamaños de ventanas, colores, captura pantallas...Muy completo.

-Basecalculator 1.3- Pasar valores  desde/hacia decimal-hexa-octal-binario.

-Customiser 1.5- Entre otras cosas activa botones en tiempo real.

-Filemonitor/regmonitor- Espía los ficheros/registros que esta manipulando el programa.

-Win-eXpose-registry/Win-eXpose-i/o : Para lo mismo que el anterior pero mas completo.

-Ultrazip password cracker 3.6- Para descubrir contraseñas en los .zip. Bastante rápido.

-Techfacts98 2.33- Imprescindible. Examina que ficheros/registros han sido modificados por un programa.

-Sruler : Mide distancias en pantallas expresadas en pixels.

-Smartcheck 6.03 : Permite investigar lo que hace un programa en vb. Por ejemplo descubrir un número de serie valido.

-Gettyp 1.1 : Proporciona información detallada del ejecutable.

-Peek 1.1 : Una pequeña utilidad que extrae las cadenas de texto del ejecutable.
 

15  ¿Como se codifican las instrucciones asm ?
Up

Menuda pregunta :-)

En el manual de aesoft lo explica razonablemente bien.
Hay que tener en cuenta que una misma instrucción asm (p.e.   jz xxxx)puede codificarse de distinta forma (0F84xxxxxxxx ó 74xx), y viceversa una codificación puede tener dos instrucciones equivalentes (74xx pueden ser un je ó un jz)

De igual manera un mismo código puede decodificarse en distintas instrucciones dependiendo si lo hacemos para 16 o 32 bits. Para 16 bits veremos mas cantidad de instrucciones. En este caso no veremos los típicos registros de 32 bits (eax, eax, esi, edi...) sino sus equivalentes en 16 (ax, dx, si, di...).
Si quieres comprenderlo mejor coge el Hacker View y pulsa CTR-F1. Verás el mismo programa descodificado para 16 o 32 bits. También sacarás algunas conclusiones interesantes respecto a la velocidad de ejecución :-)

Aquí van las codificaciones típicas:

90                   nop   no operation
             EB     jmp   jump directly to
             70     jo      jump if overflow
             71     jno     jump if not overflow
0F82 or 72    jnae    jump if not above or equal
0F82 or 72     jb      jump if below
0F83 or 73    jae      jump if above or equal
0F83 or 73     jnb     jump if not below
0F84 or 74    je        jump if equal
0F84 or 74    jz        jump if zero
0F85 or 75    jne      jump if not equal
0F85 or 75    jnz      jump if not zero
0F86 or 76     jna     jump if not above
0F86 or 76    jbe      jump if below or equal
0F87 or 77     ja       jump if above
0F87 or 77    jnbe    jump if not below or equal
              78     js       jump if
              79     jns     jump if not
0F8C or 7C    jnge   jump if not greater or equal
0F8C or 7C     jl       jump if less
0F8D or 7D    jge     jump if greater or equal
0F8D or 7D     jnl     jump if not less
0F8E or 7E     jng     jump if not greater
0F8E or 7E    jle       jump if less or equal
0F8F or 7F     jg       jump if greater
0F8F or 7F    jnle      jump if not less or equal

XOR eax,eax                       33 C0
INC EAX                            66 40
PUSH 00000001                   6A 01
POP EAX                            66 58
RET                                    C3
INT 3                                  CC
PUSH EAX                           50
POP EAX                             58
TEST EAX,EAX                    85 C0
MOV EAX,01CC02BB            B8 BB 02 CC 01
(Como puedes ver los bytes se codifican al revés)
RETF                                    CB
POPF                                    66 9D
 

16  ¿Que me puedes decir del soft-ice ?
Up

Simplemente que es el mejor debuger que existe. Es muy completo pero cuesta entenderlo. Si quieres hacer algo mínimamente serio es imprescindible. Léete un buen manual para configurarlo y usarlo:
http://www.idca.com/~thesandman/SoftPage.html    (ingles)

Antes de nada edita el fichero winice.dat y quita las ";" delante de las librerías. De no hacerlo así, cuando quieras poner el típico bpx recibiras el error de librería no definida. igualmente para programas escritos en visual basic deberás añadir las librerias que use. Típicamente:

EXP=c:\windows\system\msvbvm60.dll
EXP=c:\windows\system\msvbvm50.dll
EXP=c:\windows\system\vb40032.dll
 

17  No quiero leerme todo el tutor del soft-ice. Quiero una referencia rápida para empezar.
Up

Aquí podrás encontrar la intro y una FAQ... además del manual completo :
http://www.idca.com/~thesandman/SoftPage.html
 

18  No puedo encontrar la cadena que he visto en soft-ice con mi hex-editor.
Up

Primero asegúrate que estas buscando en el fichero correcto. (En el soft-ice verás el proceso que se esté ejecutando debajo de la ventana de código)
Si es así, probablemente estés ante un ejecutable comprimido y/o cifrado. Utiliza Gettyp v1.1 para obtener información del mismo y eventualmente procdump 1.5. Si tienes problemas deberás abandonar las cajas negras y aprender a hacer las cosas de forma manual. Para eso están los tutoriales.

Si el tema es complicado deberás realizar el parche no en el fichero sino directamente en memoria. Para ello has de crear un loader (cargador). Existen aplicaciones como Process Patcher 3.1 que te lo crearan automáticamente. Sabiendo los bytes que quieres cambiar y su dirección de memoria, la cosa esta hecha.
 

19  ¿Como encuentro las direcciones que veo en el soft-ice en mi editor hexadecimal ?
Up

Tienes varias maneras de hacerlo. En caso de que no las encuentres leete el apartado anterior.

*** A ***
Desensamblas con w32dasm y buscas la dirección que viste en el s-ice (solo la parte del offside)con "goto code location", señálala con el ratón y fíjate en la barra inferior. Allí verás tanto la direccion que viste en el ice como la direccion dentro de tu ejecutable.
Recuerda que si el fichero está comprimido o cifrado no la encontrarás. Necesitarás descomprimirlo o realizar un parche en memoria.

*** B ***
Si no quieres desensamblarlo, en el soft-ice teclea "code on" para que
puedas ver el código hexa. Después apuntate la cadena
(lo suficientemente larga) a partir de la direccion que desees y búscala directamente en tu editor hex.

*** C ***
Si usas el editor hiew: ( http://sen.kmr.ru/ )
1 - Decodifica el fichero para verlo igual que en el wice (dos veces enter)
2 - Dale a goto (F5) para buscar la direccion que desees
3 - Teclea la direccion que te da el soft-ice pero con el punto delante (.0041192d). Así consigues ir a las direcciones locales (las que ves en ice) en vez de las globales (las que ves en cualquier editor hex).
4 - Cambia los bytes que quieras (F3)
5 - Guarda los cambios (F9)
Para bascular entre las variables globales-locales pulsa alt-F1.
Recuerda que solo debes introducir el offsite (sin el segmento)

*** D ***

También puedes hacerlo con un programa escrito por Mr.Crimsom recientemente. Lo puedes encontrar en su web:
http://www.multimania.com/mrcrimson/offcal.zip
 
El fichero que lo contiene es offcal.zip
 

20  El soft-ice no me deja colocar los típicos bpx.¿Por qué ?
Up

Probablementte no tienes cargadas las librerías a las que pertenecen las apis. Edita el fichero winice.dat y quita todos los ; que verás delante de ellas, por ejemplo:
;LOAD=c:\windows\system\user.exe
;LOAD=c:\windows\system\gdi.exe

Si estas tratando un programa hecho en visual basic tendrás que añadir las librerías correspondientes.

Si utilizas Windows NT recuerda que hay funciones que solo corren en w95/98, en las NT no existen.
 

21  Pongo un break point en Winice y nunca para el programa
Up
Hay muchas  instrucciones de programas que nunca se ejecutan si no se dan las condiciones adecuadas...
Siempre conviene estudiar un poco el ejecutable, o bien con la lista muerta o con el Winice.
Poner en cualquier punto del programa un breakpoint no lleva a nada si no sabemos donde lo ponemos.

22  Cuando detengo un programa con Winice aparezco en una zona llamada KERNEL32
Up

Esto es muy normal, teniendo en cuenta que Windows 95 usa internamente un API
(Interfaz de Programación Avanzada)  núcleo de sistema (Kernel) de 32 bits.

El kernel32 es el mínimo de código que necesita Windows95 para arrancar el sistema.
También la mayoría de los programas suelen usar esta API para realizar operaciones basicas con sus funciones( uso de archivos, tareas, recursos, carga de librerías, uso de la memoria, etc..). Hay unas 780 funciones dentro de esta librería.

Para nosotros el listado interno de estas librerias no interesa. Usaremos estas funciones como cajas negras (solo interesará lo que nos muestre por fuera, no como esté hecha por dentro).

Es decir, si un programa usa la función GetComputerName (obtener el nombre de la computadora), sólo nos interesará el nombre que la computadora, no como lo obtiene internamente.
 

23  ¿Cuales son los breakpoints mas usados en cracking ? :
Up
 

Esto esta bastante extendido en la red.
Recuerda que los bpx pueden tener terminaciones distintas en: A y EXA. Para saberlo, desensambla y mira las funciones importadas, o si lo prefieres utiliza algún programa que te lo diga. Hay muchos, echa un vistazo a los que he puesto en el apartado 14, por ejemplo api spy 32 v2.4.

 Aquí van:

**********************************************************
The Cracker's Guide of Common Win32 API Calls
---------------------------------------------
 
Reading & Writing Files
-----------------------
These are generic calls to read/write to a file, usually binary in nature:

ReadFile
WriteFile

     more on locating file accesses:

SetFilePointer

GetSystemDirectory
GetSystemDirectoryA

These are the most common calls to read/write from/to a *.ini file
or a file of similar format.

 for 16-bit win apps:

GetPrivateProfileString
GetPrivateProfileInt
WritePrivateProfileString
WritePrivateProfileInt

  for 32-bit win apps:

GetPrivateProfileStringA
GetPrivateProfileIntA
WritePrivateProfileStringA
WritePrivateProfileIntA

Interrupt info:
_____________

file accesses (A couple by YOSHi)

   bpint 21 if (ah==3d)
   bpint 2f if (ah==01)

The Registry
------------
Create or delete a new key in the registry:

RegCreateKey
RegDeleteKey

RegCreateKeyA
RegDeleteKeyA

     Read a value from the currently open registry key:

RegQueryValue
RegQueryValueA

     Open or close a registry key:

RegCloseKey
RegOpenKey

RegCloseKeyA
RegOpenKeyA

Dialog Boxes
------------
Get text or integer from a dialog box edit:

GetWindowText
GetDlgItemText

GetWindowTextA
GetDlgItemTextA

GetDlgItemInt

Open a message box, usually one that says "invalid registration":

MessageBox
MessageBoxA
MessageBoxExA
MessageBeep

and other ways to display text...

SENDMESSAGE
WSPRINTF

Time & Date
-----------
These get the time and date

GetSystemTime
GetLocalTime

SystemTimeToFileTime

Generating a Window
---------------------

createwindow
createwindowexa
showwindow

bitblt (a type of memory move, similar to hmemcpy)

CD-ROM Calls (Donated by: +-=Riddler=-+)
----------------

GetDriveType      (if eax=5 then it is a cdrom check)
GetDriveTypeA

     GetDriveType Return Function codes:

     Value               Meaning
     0                 Drive Cannot Be determined
     1                 Root Dir Does not exist
     2                 DriveRemoveable
     3                 A Fixed Disk (HardDrive)
     4                 Remote Drive(Network)
     5                 Cd-Rom Drive
     6                 RamDisk

GetLogicalDrives
GetLogicalDrivesA

GetLogicalDriveStrings
GetLogicalDriveStringsA

OTHER CDROM INFORMATION
-----------------------

interrupt 2f is the mscdex interrupt

     bpint 2f, al=0  ah=15 checks if mscdex installed

     try breaking on file accesses as well

Window Numerical Inputs
----------------------------

GETWINDOWWORD
GETWINDOWLONG

Some other nice breakpoints from the ORC
-----------------------------------------------

BOZOSLIVEHERE
HMEMCPY
GLOBALGETATOMNAME

message breaks, not quite the same but completely useful
-----------------------------------------------------------

BMSG xxxx WM_GETTEXT   (good for passwords)
BMSG xxxx WM_COMMAND   (good fro OK buttons)

the xxxx is of course the hwnd value, but important info:

assuming you are using wm_command to try to locate the button push,
you hwnd the result and see the hwnd of the button is 0324 and the
hwnd of the window is 0129

to find the button, use the window value, not the button value to bmsg on
(the other just won't work)

so for the example here, to find our button push we would

BMSG 0129 WM_COMMAND

Note *from the original author*
------------------------------
These aren't the only win32 api calls you need to know in order to crack windows.There are many many more that programs will use, many are derivatives of these calls.
Try substituting a W for the A at the end of some calls, or placingan Ex right before the A. Also, in SoftIce, typing 'EXP GETPRIVATEPROFILE'will give you a list of all of the procs to read from .ini files, and thereare more than the ones i have listed.

******************************************************************
 

24  ¿Como puedo conocer el lenguaje en que ha sido escrito el programa ?
Up

Busca en las librerías importadas alguna que te pueda orientar, en caso contrario usa programas como gettyp.
 

25  Hay una estructura que se repite hasta la saciedad. ¿Me puedes decir que hace ?
Up

Un ejemplo podría ser :

PUSH XXX         (introduce la dirección del serial correcto)
PUSH XXX         (introduce la dirección de nuestro serial)
CALL XXX         (los compara. Si son iguales pone eax=0 si no, eax=1)
TEST EAX,EAX  (testea si el valor devuelto es 0(activa el flag Z) ó distinto de 0)
JZ XXX                (salta si es correcto, es decir si el flag Z está activado)

Bien.  A menudo los datos necesarios para la ejecución de las llamadas se realizan a través de la pila.  Push suministra dichos datos. Cuando la llamada encuentra un RET vuelve a donde se le llamo, conteniendo :
eax=0 si nuestro serial y el correcto con iguales
eax=1 en caso de que nos hallamos equivocado.

Cuando se vuelve de la llamada se mira si el valor devuelto en eax es 0 (salta a ventana de registrado) o distinto de 0 (salta a ventana error)

Puedes encontrar infinitas variantes pero la filosofía es casi universal.

26  Necesito información de las APIS para cracking.
Up

Una referencia rápida para las apis mas interesantes para crackear están en las cracker notes :

http://www.proweb.co.uk/~greenway/Notes/crknotes.html

Si quieres tener una referencia mas completa la puedes encontrar en :

http://www.corleone.net/r_e_f_e_r_e_n_c_e.html
http://www.idca.com/~thesandman/Toolz.html
http://hackersclub.com/km/files/cfiles/index.html
http://www.crackstore.com/tools.htm
 

27  Tengo problemas para interpretar los códigos hex-ascii.
Up

Bájate el winhex y en Extra-tables puedes encontrar las tablas.
Seleccionas la ventana, la copias con alt-print-screen y la pegas en msword o similar. Luego la imprimes y listo.

Si te quieres ahorrar este trabajo, las he puesto al final de la página.
 

28  ¿Que uso tiene el smartcheck para programas en vb ?
Up

Muchos. Puede ayudar a encontrar el código correcto en aplicaciones hechas en visual basic. Antes de empezar has de configurarlo bien para que genere buenos resultados. En esta FAQ hay páginas con algún tutorial en castellano.
 

29  ¿Como puedo saber si un programa está hecho en vb ?
Up

Simplemente lo desensamblas y buscas las librerías. En caso de que encuentres librerías como:

msvbvm60.dll
msvbvm50.dll
vb40032.dll
vb40016.dll
vbrun300.dll
vbrun200.dll
vbrun100.dll

... sabrás que está hecho en visual basic, en sus diferentes versiones. Si no quieres desensamblarlo utiliza alguna utilidad que te informe de las importaciones, por ejemplo api spy 2.4.
 

30  ¿Existen descompiladores para visual basic ?
Up

Sí, pero a fecha de hoy (septiembre del 99) solo para las versiones 3 y 4. A estas alturas supongo que ya sabrás donde buscar :-)

Para la 5 y la 6 por ahora no hay nada pero es previsible que esto cambie.

31  ¿Donde guardan los programas la fecha de caducidad ?
Up

Habitualmente la fecha de instalación o de caducidad suele ser guardada en alguno de estos sitios :

1.- Registro.
2.- Algún fichero perteneciente al directorio de la aplicación.
3.- Ficheros .ini de la aplicación (en su directorio o en c :\windows).
4 - Alguna combinación de ellos.

Existe una maravilla llamada Techfacts98 v2.33 que permite detectar variaciones tanto de ficheros como del registro.

32  ¿Qué es un loader ?
Up

Como ya he explicado antes, es un parcheador que cambia los bytes directamente en memoria, no en el fichero. Es útil cuando los ejecutables están cifrados o comprimidos.
Básicamente lo que hacen es ejecutar el programa, esperar a que se descomprima o desencripte, y cambiar los bytes que le hemos especificado en las direcciones que le hemos indicado. Suelen ser un poco mas lentos a la hora de cargar pero las diferencias son inapreciables. Existen varios programas que los crean automáticamente:

Process Patcher 3.1
R!SC's Process Patcher v1.2i
Launcher Generator V 1.03...


33  Tengo menús o botones desactivados
Up

Tienes varias soluciones posibles. Puedes coger un programa editor de recursos como exescope 4.40 y localizar ese boton que te trae por la calle de la amargura. Una vez lo hallas localizado lo podrás activar sin dificultad de forma permanente. Ten en cuenta que para que puedas hacer ésto necesitarás que el ejecutable este descomprimido y/o descifrado.

Existen otros programas como customiser 1.5 que te permitirán activarlos "al vuelo" de forma no permanente. En ocasiones no funciona correctamente.

Pero si lo que realmente deseas es conocer su código, lo mas recomendable es coger el soft-ice y poner un breakpoint en la función enablemenuitem y mirar los parámetros previos. Esta función es usada tanto para activar como para desactivar.
 
Todo esto sirve únicamente para activarlos y no garantiza que las funciones asociadas a ellos esten implementadas en el ejecutable. De igual modo, tampoco garantiza que su pulsación derive a la rutina correcta.
 

34  Que me puedes decir acerca de las mochilas
Up

En primer lugar que apenas hay información disponible en castellano. Tan solo un pequeño artículo de +Aitor disponible en la web de WKT. En inglés, en fravia tienes un monton. Buscalo en
http://129.105.116.5/fravia/entran.htm en "+HCU Database Navigation" en el proyecto nº 3 (Dongles cracking). Si quieres ir directamante: project3

Si quieres tratar este tipo de protecciones prueba con ésto en el soft-ice :
Bpio -h 378 r
Bpio -h 278 r
En general, aunque lo código pueda ser enrevesado, tal vez encuentres un flag que permita saltar toda la proteccion de golpe. Obviamente, de esto no hay ninguna garantía.
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.536



Ver Perfil WWW
Re:FAQ de Ingeniería Inversa
« Respuesta #1 en: 9 Julio 2003, 15:05 pm »

Bueno, solo decir que aunq esta muy bien, es la tipica FAQ del crackeo, como la tipica FAQ de "hackeo todo loque puedo.."

Hay muchos docs como este circulando por la red, los importanes son los que no abarcan tantos campos y profundizan mas en temas concretos...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña introducción a la ingeniería inversa en linux
Ingeniería Inversa
braulio-- 6 5,791 Último mensaje 6 Enero 2011, 03:20 am
por jackgris
Revelado el Protocolo de Skype mediante ingeniería inversa
Noticias
dantemc 7 4,415 Último mensaje 6 Junio 2011, 12:54 pm
por ZeroxPrototype
Ayuda con ingeniería inversa
Ingeniería Inversa
Teknofer 5 5,356 Último mensaje 19 Septiembre 2011, 03:41 am
por apuromafo CLS
Sugerencia con el foro de ingeniería inversa. « 1 2 ... 5 6 »
Sugerencias y dudas sobre el Foro
.:UND3R:. 53 20,549 Último mensaje 2 Diciembre 2011, 15:29 pm
por .:UND3R:.
Dissy ( Herramienta Para la Ingenieria Inversa )
Hacking
Stuxnet 0 2,287 Último mensaje 7 Noviembre 2012, 15:44 pm
por Stuxnet
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines