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 halla 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 encriptado.
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 encriptado 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
encriptados 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 desencriptado.
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.
35 Tablas de conversión
Up
36 Nota del autor
original:
Up
La ingeniería inversa o cracking, a mi juicio, tiene la finalidad de tener una visión mas amplia acerca del funcionamiento de unas máquinas que, directa o indirectamente, ejercen una gran influencia en tu vida, tus gustos, tus opiniones... Desgraciadamente no siempre tomamos consciencia de ello.
Espero que esto contribuya a a tu conocimiento y crecimiento personal, unas
cualidades que puede manifestarse y brillar en las facetas mas variadas de tu
vida.
Si tienes un nivel
medio-alto
Up
Hasta aquí han sido las dudas de los demás. Estas son las mías:
1- Colgar interrupciones.¿Como se hace y para que sirve?
2- checksum,
algoritmos de compresión y encriptación. Cualquier cosa me sirve
3- Sigo sin
tener claro lo que aparece en la nueva "ventana de pila" en winice 4.0