|
|
 |
ESTUDIO COLECTIVO DE DESPROTECCIONES
Última Actualizacion:
25/10/2001
|
 |
|
Programa |
LP
Ripper v3.0.5 |
W95 / W98 / NT |
Descripción |
Programa que permite pasar de
longplays a mp3s y wavs |
Tipo |
Permite guardar solamente los
primeros 30 segundos |
Tipo de Tutorial |
[X]Original, []Adaptación, []Aplicación, []Traducción |
Url |
http://www.cfbsoftware.com.au |
Protección |
Serial |
Dificultad |
1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista |
Herramientas |
MASM 5/6x o TASM 5.0,
UltraEdit, HexWorkshop, Hiew, W32Dasm, Win32 Programmers Guide |
Objetivo |
Simular
estar registrados, Comprender y crear nuestra primera aplicación en
W32asm |
Cracker |
Maniac PC [KuT'2k] |
Grupo |
http://kut.tsx.org |
Fecha |
Enero de 2000 |
INDEX
|
- 0.-Ingeniería
Inversa, Introducción
- 1.-Assembler,
Simple y puro
- 1.2
Estructura de Windows
- 1.3 Mini -
F.a.q
- 1.4
Resumen
- 1.5
Compilación
- 2.-El
código ASCII
- 3.-
Crack, Por fín Práctico
- 3.1 Uso de
los editores hexadecimales
- 3.2 Nuevo
Dilema
- 3.3
Resumen del crack
- 4.-
Mini-diccionario práctico de Cracking y Win32Asm
- 5.-
Recomendaciones
- 6.- Mis
palabras finales.
|
-Ingeniería Inversa, introducción.
|
Después
de estar flojeando un laaargo tiempo vuelvo a la pantalla grande (je je
... 15 plg?), y con ansias de mejorarme ya que este cursillo lo he escrito
enfermo en cama y pensando en Carolina T.(no pienses mal!), y claro... me
gustaría dedicar este tutorial especialmente a doña Inés Q.E.P.D :-(
después de este paréntesis vuelvo a lo
mio, estoy destinado a ser un monigote de profesor estando enfermo. bueno,
en este curso vamos a repasar lo siguiente :
Vamos a lo nuestro... cada día es
mas... y mas lo que se puede aprender del cracking, por eso creo cada día
que estos capítulos se harán interminables.
|
1. - Assembler, Simple y puro
|
Como
siempre... debes recordar que todo esto es solo para fines
educativos, sin prejuicios ni nada. Asi que toda la información y sitios
que te de no tienen la mayor responsabilidad con Maniac ni con Kut
..¿Alguna duda coyote?....
|
1.1 Estructura de Windows ...
|
... una pregunta ..
¿leíste los textos de ensamblador que te mencioné anteriormente? ...
posiblemente no, asi que trataré de hacer las cosas más
fáciles en esto... y si los leíste o sabes algo de ensamblador para
DOS, muy bien :-)
Vamos a iniciarnos por
Windows y sus Dll's ..y a preguntarnos qué es una dll?????????
Como su nombre lo indica..
hablamos de una Dinamic
Link
Library(una
librería dinámica de enlaces), y tienen un trillar de funciones...
vamos a aprender como usar una dll (como programador iniciado), y
cómo atacar a una dll (Como cracker desquiziado)...
Una dll puede ser definida
como una librería de donde se sacan funciones a los programas para ser
ayudados y no ocupar tanto espacio... mmm ... no creo que me esté
explicando bien :
Tenemos un programa por
ejemplo hecho en lenguaje c++, y necesitamos que este programa
abra un pedazo de una cadena dentro de un archivo... imagínate que este
programa debe sacar de alguna sección de por ejemplo un archivo de
configuración INI el nombre de usuario de la persona que está
usando el programa ... y en el INI dice así :
- [USUARIO]
- NOMBRE=FULANITO
Para que el programa tenemos dos
opciones:
a) Crear un código que lea la
función (Muy engorroso y imagínate crear un código para cualquier
función que necesites!)
b) Llamar alguna función de algun
archivo que lo haga (Aquí le damos en el tongo a las Dll's)
Las dll's... son como grandes
bibliotecas que alojan por así decirse libros, y cada libro
tiene su determinada función computacional, por ejemplo un libro
crea un archivo, un libro lee parte de un archivo, otro libro borra
archivo(s), lee fechas, y miles que se irán aprendiendo de a
poco .. estos libros son llamadas FUNCIONES API, claro que no los
aprenderemos todos por que son mas de 2000 en unas cuantas dlls..
sino .. aprenderemos las funciones mas importantes.
Cada función api tiene claramente un
rango especializado, o sea, tiene una función específica. Y si
buscas dlls en tu equipo, encontrarás bastantes... las más importantes
y comunes son :
c:\windows\system\toolhelp.dll
c:\windows\system\shell.dll
c:\windows\system\commdlg.dll
c:\windows\system\olesvr.dll
c:\windows\system\olecli.dll
c:\windows\system\mmsystem.dll
c:\windows\system\kernel32.dll
c:\windows\system\user32.dll < Esta especialmente
c:\windows\system\gdi32.dll
c:\windows\system\comdlg32.dll
c:\windows\system\shell32.dll
c:\windows\system\advapi32.dll
c:\windows\system\shell232.dll
c:\windows\system\comctl32.dll
c:\windows\system\crtdll.dll
c:\windows\system\version.dll
c:\windows\system\netlib32.dll
c:\windows\system\msshrui.dll
c:\windows\system\msnet32.dll
c:\windows\system\mspwl32.dll
c:\windows\system\mpr.dll
Bien, una vez mas hagamos nuestro
trabajo para aprender mas, tomemos la user32.dll y la pasamos al W32Dasm
(te acuerdas de esta joyita?) .. una vez desensamblado veremos en el
botón
(exported functions/funciones exportadas).. este botón se ocupa cuando
el objetivo que desensamblamos tiene funciones que se pueden llamar de
otros programas ... o sea .. funciones API. ahí podremos
observar todos los "libros" que contiene la Dll user32.dll
:
|
1.2 Mini - F.a.q.
|
¿
Que necesitaremos ?
Turbo Assembler 5.0,
MASM 5 o 6(este lo utilizaremos después)y futuramente quizás NASM.
¿
Donde los podemos conseguir ?
Los podemos conseguir en la
página de (Tasm50)Dolphinz(http://personal5.iddeo.es/ret007ow/),
o en (Tasm50)CrackStore(http://www.crackstore.com).
y el Masm lo puedes encontrar en la página de Hutch's(http://www.pbq.com.au/home/hutch/)
¿
Donde podemos conseguir más información ?
En la buenísima página de
nuMIT_or[Kut](http://members.xoom.com/numit_or/asm.html),en
la página del proyecto Visual
Assembler(http://www2.crosswinds.net/~xiphias/files.html), y por
supuesto, en la excelente página de Iczelion(http://win32asm.ownz.com/)
¿
Que son TASM, MASM, y NASM ?
Son Compiladores del
código fuente en hecho en Win32asm, hechos para Windows.. ¡Ojo!..
el Compilador de Tasm (turbo assembler) para windows es el compilador
tasm32.exe de Tasm50, versiones anteriores son de D.O.S.
Recordemos que los
compiladores son los que convierten de código fuente (Ya sea hecho en
C,C++,Pascal u otro cualquier código) a lenguaje de máquina para que
esta lo comprenda (exe's, com).
Ahora ... iremos con la estructura
assembler ...
|
1.3 Principios y estructuras
|
Bueno, después de estos
paréntesis seguiremos con analizar un programa sencillo para Windows :
;-------------------*Empieza
código*-----------------
.386
.MODEL Flat, StdCall
extrn MessageBoxA : Proc
extrn ExitProcess : Proc
.data
titulo_dialogo db "Tutor 1b [Win32Asm]",0h
texto_dialogo db "Prueba de cuadro de diálogo MessageBox",0h
.Code
Main:
-
push 0
-
push offset titulo_dialogo
push offset texto_dialogo
-
push 0
-
call MessageBoxA
call ExitProcess
End
Main
;-------------------*Termina
código*-----------------
Antes de proseguir te digo que el
código fuente de estos ejemplos está en un zip que se puede
obtener aquí(tutor1b.zip),
y también en este zip se incluyen 5 ejecutables de la explicación que
vendrá a continuación sobre el código.
Análisis (Hey!. si no entiendes lo
que sigue no te preocupes, yo se que te costará, por eso lo repasaré
dos veces)
.386
Esto le declara al ensamblador
que vamos a usar los sets de instrucciones del ensamblador 80386,
le podemos poner una 'p' al final (.386p) pero no es conveniente ya que
si le ponemos una p estaríamos hablando de instrucciones reservadas de
la unidad procesadora central. También se pueden usar .486 y .586,
pero lo mas recomendable es .386. Cualquier cosa que empieze por
'.'(Punto) Es una directiva o instrucción personalizada hacia el
ensamblador. Sé que todo esto puede parecer complicado pero tomemoslo
como variables que vamos a dejar fijas siempre =).
.MODEL Flat, StdCall
¿Te acuerdas de las direcciones (por
ejemplo :0040147A)? ... En D.O.S resultase que una vez a alguien se le
ocurrió que con 64kb de memoria en 16 bits nos iba a alcanzar para todo
(64 es un rango ínfimo), pero en Windows no hay que preocuparse por
usar 64kb. Windows es un sistema operativo con un sistema de direcciones
plano, en vez de tener 64kb Windows usa un carril de 4gb. para las
aplicaciones que se ejecuten. Este modelo (Flat = Plano), flat le
indica al ensamblador que usará el carril de 4gb. y StdCall le indica
al carril de 4gb. como será usada la pila del programa, recordemos que
la pila es como el valor tope del momento(la cima de la montaña), y el
StdCall manejará las instrucciones de izquierda a derecha y que uno
como programador debe dejar equivalente la pila después de cada
instrucción que se ejecute.
extrn MessageBoxA :
Proc
extrn ExitProcess : Proc
Aquí viene lo difícil, MessageBoxA es
una función API de la librería User32.dll, y se tiene
que declarar al comienzo que función API deberá ser usada, ExitProcess
también, otra función ... pero ¡Atención!..
esto es importante, cuando queramos usar por
ejemplo una función API en algún programa, debemos distingir de las
mayúsculas y minúsculas, por ejemplo, si queremos usar la función
MessageBoxA en Windows95/98 debemos escribir MessageBoxA y no se puede
escribir messageboxa .
.data
Esta es nuestra locación donde
queremos declarar todo lo que vamos a usar en el programa.
titulo_dialogo db
"Tutor 1b [Win32Asm]",0h
texto_dialogo db "Prueba de cuadro de diálogo MessageBox",0h
Aquí declaramos nuestras etiquetas,
debemos recordar que antes de declarar algo de debe poner db y se
debe poner " texto aquí " y de debe finalizar con un ,0h
.
.Code
Aquí comienza la programación
en sí de Win32Asm, con esto definimos que se empezará a programar
Main:
Cada sección en la cual
queremos que se ejecute alguna función debemos poner una
"etiqueta", en este caso es Main pero eso puede variar
según tu gusto =)
push
0
push
offset titulo_dialogo
push offset texto_dialogo
push
0
call
MessageBoxA
Empezamos con lo difícil... Cada
función de las librerías esta específicamente definida, o sea,
que cada función tiene un fin. Este función MessageBoxA
es proveniente de la librería User32.dll, y sirve para mostrar
un cuadro de diálogo. En el zip mencionado anteriormente se
encuentran los 5 tipos de MessageBoxes, si observas bien, cada MessageBox
tiene diferentes íconos :

También podemos observar
que podemos llamar a una ventana sin íconos :

TSi te diste cuenta .. ¿porqué uso
a veces MessageBox y a veces MessageBoxA?... El MessageBox es
para Windows en 16 bits... Y el MessageBoxA es para
Windows en 32 bits.
Tal como te recomendé antes te dije que
descargaras la Win32 Programmers Guide, si no lo hiciste puedes hacerlo
en CrackStore(http://www.crackstore.com), esta ayuda contiene las
funciones API y cómo utilizarlas.
Según la Win32 Programmers Guide esta
es la definción de MessageBoxA:
La función MessageBox crea, muestra,
y opera un cuadro de mensaje. El cuadro de mensaje contiene un
título y mensaje definido por la aplicación. Mas cualquier
combinación de íconos y botones predefinidos.
int MessageBox(
HWND hWnd, // Manejo de la ventana maestra
LPCTSTR lpText, // dirección del texto en el cuadro de
mensaje
LPCTSTR lpCaption, // dirección del título del cuadro de
mensaje
UINT uType // Estilo del cuadro de diálogo
);
Parámetros
hWnd
Identifica una ventana maestra de el cuadro de diálogo a ser
creado. Si este parámetro es NULO(NULL), el cuadro de
diálogo no tiene una ventana maestra del cual dependa.
lpText
Apunta a la cadena de texto que se mostrará en el cuadro de
diálogo.
lpCaption
Apunta al titulo de el cuadro de diálogo que se mostrará.
uType
Especifíca un seteo de unos bits que determinan los contenidos
del comportamiento del cuadro de diálogo.Este parámetro puede ser
una combinación de los siguientes grupos de flags.
Por si no sabes lo que son los flags
.. son como las configuraciones especifícadas que hay que hacer en
algo. Un Flag, es como un indicador.
hay que especificar uno para usarlo en el Cuadro de Diálogo (MessageBox):
MB_ABORTRETRYIGNORE
El cuadro de diálogo tendrá los
siguientes botones: Abortar, Reintentar, y Ignorar.
MB_OK
El cuadro de diálogo tendrá el
siguiente botón: Aceptar. Que es el predeterminado
- MB_OKCANCEL
- El cuadro de diálogo tendrá los
siguientes botones: Aceptar y Cancelar.
MB_RETRYCANCEL
El cuadro de diálogo tendrá los
siguientes botones: Reintentar y Cancelar.
MB_YESNO
El cuadro de diálogo tendrá los
siguientes botones: si y no.
MB_YESNOCANCEL
El cuadro de diálogo tendrá los
siguientes botones: si,no, y cancelar
Specify one of the following flags to display an icon in the message
box:
Especificar uno de los siguientes indicadores(flags)
para mostrar un ícono en el MessageBox:
Significado de flag
MB_ICONEXCLAMATION,
MB_ICONWARNING
AUn ícono de exclamación aparece en el cuadro de dialogo
MB_ICONINFORMATION, MB_ICONASTERISK
Un ícono consistente en una " i " minúscula de información.
MB_ICONQUESTION un ícono con un signo de interrogación en
el cuádro de diálogo.
MB_ICONSTOP,
MB_ICONERROR,
MB_ICONHAND
Un signo de "PARE" aparece en el cuadro de
diálogo.
Una vez visto lo anterior vamos a
distribuir las siguientes propiedades :
1.- HWND
hWnd, // Manejo de la ventana
maestra
2.- LPCTSTR lpText, //
dirección del texto en el cuadro de mensaje
3.- LPCTSTR
lpCaption, // dirección del título del cuadro de mensaje
4.- UINT
uType // Estilo del cuadro de diálogo
.
1.-
push 0 |
; |
Cero
= MB_OK(El predeterminado). Si queremos usar por ejemplo los
botones "SI
- NO"(MB_YESNO),
deberíamos ponerlo así:
push MB_YESNO
|
2.-
push offset titulo_dialogo |
; |
Empuja el titulo
de la ventana |
3.-
push offset texto_dialogo |
; |
Lo que va dentro
de la ventana, o sea, el texto |
4.-
push 0 |
; |
El Handle, por
ahora lo dejaremos así para no complicarnos la vida, no te
preocupes de esto aún =) |
; |
Llamada
a la función MessageBoxA de User32.dll, recordemos que no puede
ser messagebox ni algo parecido, debe ser exactamente
MessageBoxA |
call MessageBoxA |
Luego tenemos lo siguiente después de MessageBoxA
call
ExitProcess
Esta es una función API que termina
todo un proceso, en este caso el programa y la función MessageBox.
End Main
Termina con la etiqueta con que
empezamos, o sea, Main:, y a la vez, con el programa.
Ojalá que hayas entendido lo máximo
posible.. si es que no. Ahora se viene el resumen.
|
1.4 Resumen.
|
.386 |
; Usamos
el modelo de programación 80386, lo usaremos así siempre |
.MODEL
Flat, StdCall |
; Usamos
el espacio de Windows en memoria (4gb.) |
|
|
extrn
MessageBoxA : Proc
extrn ExitProcess : Proc |
;
Especificamos las funciones API que se utilizarán |
|
|
.data |
; Aqui
comienza el espacio donde declaramos la etiquetas que vamos a
utilizar y otros "detales" que veremos a futuro |
titulo_dialogo
db "Tutor 1b [Win32Asm]",0h |
;
Título del MessageBox |
texto_dialogo
db "Prueba de cuadro de diálogo MessageBox",0h |
; Texto
contenido del MessageBox |
|
|
.Code |
; Aquí
comienza a programarse, aquí comienza el código fuente |
Main: |
;
Etiqueta con la que empezaremos, no olvidemos que es opcional el
nombre |
|
|
push 0
|
; Típo
de botón para el MessageBox, 0 = Predeterminado, o sea, solamente
el botón "Aceptar"("OK") |
push offset titulo_dialogo |
;
Empujamos el Valor del Título de la MessageBox |
push offset texto_dialogo |
;
Empujamos el Valor del Texto de la MessageBox |
push 0 |
; El
Handle, no lo ocuparemos mucho por ahora. |
call MessageBoxA |
;
Llamada a MessageBoxA de User32.dll |
call ExitProcess |
;
Llamada a la función que termina los procesos |
|
|
End
Main |
;
Termina con la etiqueta que comienza el código, o sea,
"Main". |
¿Esta claro?... al final incluiré un diccionario
mini de términos usados en este curso... Cualquier
cosa que no se haya entendido por favor Contáctame(Sigrid_mapc@hotmail.com)o
postea cualquier duda o consulta que tengas en el siguiente foro :
Cracking
para newbies y todos los grados(http://disc.server.com/discussion.cgi?id=64395)
.
|
1.5 Compilación.
|
Para
poder convertir este código en ejecutable, o sea, .exe, debemos
usar lo que se llama un compilador, que convierte el código de
programación que hemos creado en una estructura que entienda la
máquina. En este caso vamos a usar el compilador de Turbo
Assembler 5.0 (TASM32) explicado anteriormente en el Mini.F.A.Q:
Esto debemos hacerlo en DOS, pero en el zip
que incluí lo metí en un .BAT para que se faciliten las cosas,
imaginemos que nuestro archivo se llama así tutor1b.asm, y que
queremos comprimirlo, para esto sería así :
tasm32 /ml
tutor1b
tasm32 es el compilador incluido
en el directorio \bin de el Tasm, la función "/ml"
es para que no pase por el linkeo,no te preocupes por esto del linkeo.
Una vez terminado este comando nos dará un archivo llamado tutor1b.obj,
ahora debemos llamar al linkeador que une todo para compilarlo (no
te amargues la vida con el linkeador).
tlink32 -x /Tpe /c
tutor1b,tutor1b,, import32.lib
Bien, pero necesitamos el archivo import32.lib,
¿Para qué sirve?. ¿Te acuerdas de las siguientes funciones?:
extrn MessageBoxA :
Proc
extrn ExitProcess : Proc
Son las llamadas a las librerías DLL,
y hay que declararlo en alguna parte, import32.lib contiene
las funciones api a ejecutar.:
Del *.Obj
Los archivos *.OBJ no nos servirán en
cuanto se compile el exe, asi que se eliminan. Para mas
información verifica el bat dentro del Zip.
|
2. - El Código ASCII
|
Bien,
como vimos en el curso anterior, sabemos pasar de Hexadecimal a
Decimal, de Binario a decimal, Hexadecimal a Binario,
y ahora aprenderemos usar el código Hexadecimal(El más cómodo
para nuestros propósitos), con el código ascii, ... pero ..
¿Qué es el código ASCII? ...
El código ASCII
significa American
Standard
Code
for Information
Interchange.
Y cada carácter tiene su valor propio en hexadecimal, por
ejemplo la letra M equivale en hexadecimal a 4D, esto es
un byte. Miremos mejor el ejemplo :
Carácter |
M |
A
|
N
|
I
|
A
|
C
|
P
|
C
|
Hexadecimal |
4D |
41 |
4E |
4D |
49 |
4D |
50 |
43 |
¿Cómo saber los valores de cada
letra?
Los valores son diferentes entre
mayúsculas y minúsculas, por eso he incorporado esta tabla que me ha
facilitado Mr.Port(Muchas Gracias Bambino!)
Código
ASCII (0 - 127)

Código ASCII (128 -
255)

Es importante tener esta tabla a mano,
para hacer varias cosas, futuramente nos servirá para hacer Key
Generators.
|
3 -Crack, por fín Práctico
|
Empezamos
una vez mas :-), esta vez elegí este programita por que tiene algo mas
que un "salto a cambiar", veamos sus detalles:
Nombre
: LP
Ripper |
Tamaño
del ejecutable: 650.240
Bytes |
Versión
: 3.0.5 |
Ubicación
: http://reversepower.hypermart.net/tutors/ |
Nombre
del ejecutable : Lpripper.exe |
Tamaño
del zip:448
Kb |
Características
: Programa
que permite copiar los "long plays" a mp3 |
Protección
: Sencilla |
Tiempo
estimado : 20
Minutos (Para ayudar a los principiantes) |
Tipo
de protección : Serial* |
Precio
:
US$20 |
Limitaciones
: 30
Segundos de grabación por pista solamente. |
Herramientas
a utilizar : WDasm,
Editor hexadecimal, Zen Cracking. |
Empezaremos por usar el
programilla, observemos que este programa no tiene ni siquiera un editor
de Wav ni un compressor de Mp3, o sea, estamos obligados a comprar
unos dos programas mas para que funcione bien este... por favor .. que
arrogancia!!!!!.
- Vayamos a los típicos
menús, "Help" ... y tenemos dos submenús que dicen
"About", "Register","Content
& Index".. Vayamos a "Register" ...
nos aparece unos cuadros donde escribir nuestro Nombre, Locación
y Número de registro, escribamos cualquier cosa, por ejemplo :
- Name : Maniac PC
- Location: Kut
- Registration No:
1234567890
Demosle a Ok
y veamos que nos aparece :

Arggg!!, este
programa me es útil, pero es uno de los mas arrogantes que he visto y
que me molesta, otro molesto es el TechFacts,pero vayamos a lo
nuestro... Cada vez nos vamos a ir organizando mas... Ahora, para
organizarnos tomaremos el LpRipper.exe y le haremos una copia que
se llame Cracked.exe, y otra que se llame Lpripper2.exe..
¿Para qué diras tu? .... Una copia (Lpripper2.exe) será para
el W32Dasm, la Cracked.exe será una copia de seguridad
por si pasa algo con el LpRipper.exe... Ahora, tomemos nuestra
herramienta favorita por ahora, W32Dasm, y desensamblemos nuestro
LpRipper2.EXE...
Ahora, vayamos al
botón de Referencias
Y busquemos la cadena que nos interesa, "Invalid
Registration No", y ... Bingo! .. lo encontramos, démosle
doble Click y apareceremos aquí :
*
Possible StringData Ref from Code Obj ->"Invalid
Registration No"
|
:004806F3 B834074800 mov eax,
00480734
:004806F8 E80FDDFCFF call 0044E40C |
Ok, no problema,
ahora miremos un poco mas arriba de esto :
:004806D9
E8BAFEFFFF call 00480598
:004806DE
84C0
test al, al
:004806E0
751B
jne 004806FD
:004806E2 837DFC00 cmp
dword ptr [ebp-04], 00000000
:004806E6
7415
je 004806FD
:004806E8
6A05
push 00000005
:004806EA 668B0D28074800 mov cx, word ptr [00480728]
:004806F1
B201
mov dl, 01
*
Possible StringData Ref from Code Obj ->"Invalid
Registration No"
|
:004806F3 B834074800 mov eax,
00480734
:004806F8 E80FDDFCFF call 0044E40C |
Ok, no problema,
ahora miremos un poco mas arriba de esto, nada, no tenemos ninguna
cadena que nos diga que esto proviene de un salto. Solo tenemos esto :
cmp
dword ptr [ebp-04], 00000000
je 004806FD
push 00000005
mov cx, word ptr [00480728]
mov dl, 01
Aqui viene explicar
los flags de activación, he remarcado esto : cmp
dword ptr [ebp-04], 00000000,en
este caso el flag de activación será cero, los flags de activación
son como un interruptor, por ejemplo, Si es Cero, no esta bien
(0=ERROR), si es uno, esta Bien (1=Prosigue), en la ingeniería
inversa, se pueden usar de esta manera :
- 0= NO REGISTRADO
- 1= REGISTRADO =)
Esto también puede ser al revés, o sea, uno no es registrado,
cero lo es, pero en el caso de este programa es así, y si
explicamos bien, este es un esquema importante en el cracking. Y
tengo que explicar otro:
-
En el curso
anterior expliqué que la mayoría de las veces había que verificar
la siguiente cadena
-
-
* Referenced
by a (U)nconditional or (C)onditional Jump at Address:
<- ¿RECUERDAS?
-
En este
tutorial vamos a hacer algo diferente, vamos a ver si es que existe
algún tipo de salto antes del error
:004806D9
E8BAFEFFFF call 00480598
:004806DE
84C0
test al, al
:004806E0
751B
jne 004806FD
:004806E2 837DFC00
cmp dword ptr [ebp-04], 00000000
:004806E6
7415
je 004806FD <- Observa BIEN!!
:004806E8
6A05
push 00000005
:004806EA 668B0D28074800 mov cx, word ptr [00480728]
:004806F1
B201
mov dl, 01
*
Possible StringData Ref from Code Obj ->"Invalid
Registration No"
|
:004806F3 B834074800 mov eax,
00480734
:004806F8 E80FDDFCFF call
0044E40C |
-
Tenemos lo
siguiente.. Se comprueba si estas registrado(cmp
dword ptr [ebp-04], 00000000)Y
si es igual (Flag a CERO), salta leejos y evita el
error, que tal si hacemos lo siguiente: "Comprueba si esta
correcto (cmp
dword ptr [ebp-04], 00000000)
y salta si no
es igual, vamos a cambiar un byte :
:004806D9
E8BAFEFFFF call 00480598
:004806DE
84C0
test al, al
:004806E0
751B
jne 004806FD
:004806E2
837DFC00 cmp
dword ptr [ebp-04], 00000000
:004806E6 7515
jne
004806FD
:004806E8
6A05
push 00000005
:004806EA 668B0D28074800 mov cx, word ptr [00480728]
:004806F1
B201
mov dl, 01
*
Possible StringData Ref from Code Obj ->"Invalid
Registration No"
|
:004806F3 B834074800 mov
eax, 00480734
:004806F8 E80FDDFCFF call
0044E40C |
-
Ok, para
cambiar los bytes voy a explicar como usar los editores
hexadecimales (lo que tanto han pedido por email), pero
para eso, necesitaremo saber el OFFSET de la instrucción,
y para eso usaremos nuevamente WDASM:
-
- Para saber el OffSet,
necesitamos situar el teclado sobre la instrucción en la cual
queremos saber el OffSet:
-
-
Si eres observado de seguro que
lo habías visto antes, si no, te explico, en la barra inferior
del Wdasm observa lo siguiente :
Aja!, esta es
toda la magia del Offset, si nos ponemos a hablar en términos teóricos
nos complicaremos con matemáticas y eso no queremos.. ¿Cierto?, asi
que dejemoslo así : PREGUNTA, ¿POR QUE OMITÍ LOS "000"
Y LA "H" DEL OFFSET?, solamente hay que
preocuparse del número marcado en rojo(7FAE6)ya
que los ceros son notaciones para que los entienda el desensamblador y
la "h" significa Hexadecimal, o sea, el número
está en Hexadecimal.
Con esta
información un poco mas adelante enseñaré a usar tres editores
hexadecimales: UltraEdit, HexWorkshop,Hacker's View(Hiew).
|
3.1 Uso de los editores Hexadecimales.
|
USO
DE HACKERS VIEW (HIEW)
Corramos
el ejecutable de Hackers View, y tenemos una pantalla donde nos
aparecen una serie de archivos. Vayamos al directorio donde se
encuentra instalado el LpRipper y abramos directamente el
ejecutable(Lpripper.exe),con un enter sobre el EXE, bien,
aparece una información bien poco legible, pero si presionamos F4 nos
da tres tipos de usos,'Text - Hex -Decode', y elijamos Decode,mmmm..
nos aparece algo familiar.. pero nosotros queremos modificar el
byte, y para eso presionaremos F5 que sirve para ir al Offset,
y introduzcamos nuestro lindo offset 7FAE6,
... un enter y que aparece ... MmM... esto se pone bueno =)
.004806E6:
7515 je
.0004806FD -------- (1)
En
este momento presionaremos F3 que sirve para EDITAR una
sección, en este caso la sección que estamos viendo, ESTAMOS
EDITANDO, cambiemos ese feo je por un jne (Cambiando el 75
por un 74), y una vez hecho presionemos F9 para guardar los
cambios hechos, una vez hechos presionemos ESC para salir del
programa
USO
DE Hex WorkShop (cualquier versión)
Corramos
Hex WorkShop,y abramos nuestro lpripper.exe,... vayamos al
menú edit(editar) y a la sección GOTO(Ir a..) y
dejemos las configuraciones así :

Luego
en el Offset pongamos nuestro OffSet 7FAE6,
y caeremos justamente en la línea Hexadecimal que dice 7415,
cambiemos ese 7415
por un 7515
y guardemos el Exe.
USO
DE UltraEdit 6.x o 7.x
Corramos
UltraEdit,y abramos nuestro lpripper.exe,... vayamos al menú Search(buscar)
y a la sección Goto Line/Page(Ir a línea/página..) y le
ponemos así : 0x7FAE6,no
te preocupes por el 0x, ponselo para ir al offset y así
modificar el byte... y guardarlo =) :
|
3.2 El nuevo dilema.
|
Una
vez guardado, ejecutemos el programa y pongamos cualquier serial y
número, demosle "Ok", y bien .. pasó de largo y
aceptó el serial,... vamos ahora a ver como nos quedó nuestro serial.
vamos al menú "Help". y en "About",
de seguro deberíamos ver nuestro nombre diciendo "Licensiado a tal
:", en la mayoría de nuestros casos... pero... pero .. ¿Qué
pasó?

El perro bastardo nos dice
"Trial Version", es como decir "No me puteaste
bien".... no me gusta nada eso.. Vayamos de nuevo al W32Dasm
y veamos si se puede hacer algo al respecto. Veamos las Referencias.. No
aparece nada diciendo Trial Version pero aparece una cadena que
dice Trial, seamos intrusos y veamos que es :
- *
Referenced by a (U)nconditional or (C)onditional Jump at
Address:
|:0045371C(C)
|
- *
Possible StringData Ref from Code Obj ->"Trial"
|
:00453766 BADC374500 mov
edx, 004537DC
:0045376B 8B86DC020000 mov eax, dword
ptr [esi+000002DC]
:00453771 E8B691FDFF call
0042C92C
*
Possible StringData Ref from Code Obj ->"Version"
|
:00453776 BAEC374500 mov edx,
004537EC
:0045377B 8B86E0020000 mov eax, dword ptr
[esi+000002E0]
:00453781 E8A691FDFF call
0042C92C |
-
Es Increíble..
¿Verdad?, como nos dejan a las puertas del cielo como diciendo
'Aquí estoy'... Bueno, vamos al salto de donde proviene y 0045371C
y veamos que
aparece:
-
:0045371A
84DB test bl, bl
:0045371C
7448 je 00453766 <-
"EL" Salto
:0045371E
8D55FC lea edx, dword ptr [ebp-04]
:00453721 A1C8224800 mov eax, dword ptr [004822C8] |
Ok, probemos
cambiando este je por un jne, busquemos el Offset de
esta dirección, resulta que es el 52B1C,
hagamos los cambios correspondientes y veamos que sucede :

Listo, hemos
revertido exitosamente LP Ripper 3.0.5.
|
3.3 Resumen del Crack.
|
cadena
con W32Dasm y encontramos que antes del error había un salto que
evitaba que llegase al error,(je
004806FD proveniente de la dirección 004806E6 en el offset 7FAE6),
invertimos el je por un jne. 2º problema, no nos dice que
estamos registrados, sino que 'estamos en la versión Trial', buscamos
la cadena Trial Version y solo se encontró Trial, pero era la
correspondiente, vimos que provenía de un salto (je
00453766 que provenía de la dirección 0045371C con el Offset 52B1C),
invertimos correspondientemente el salto y probamos el ejecutable, todo
resultó ok. =) =) =) |
4
-Mini-Diccionario Práctico de Cracking y Win32asm
|
- Handle:
Manipulación de un programa en ejecución. (no lo veremos mucho
hasta la próxima).
- Push:
Comando de assembler por el cual se empuja un comando o algun valor,
registro, etc. A la memoria temporal, pero esta memoria temporal
será la primera que se tome hasta que use otro push.
- Call:
"Llamada", a través de este se pueden llamar a funciones
API de Windows(en Win32Asm).
- MessageBoxA:
Función de la librería donde se muestra un cuadro de diálogo con
iconos si se apetece.
- Flag:
Se puede definir como un "indicador", o sea, un flag es
una referencia de algo.
- OffSet:
La dirección REAL de memoria.
- Handle:
Manipulación de un programa en ejecución. (no lo veremos mucho
hasta la próxima).
- .386:
Modelo del ensamblador 80386.
- MODEL
FLAT, stdcall: Carril de 4gb. Planos de memoria.
- .data:
Donde se pone todo el contenido de un código en asm para empezar a
trabajar luego en el code.
- .code:
Donde se empieza a trabajer el código
- ExitProcess:
Función API que sale de el proceso. .
- Compilador:
Programa que convierte del código fuente a lenguaje de máquine.
- API:
Funciones de las librerías dinámicas.
- ASCII:
American Standard Code for Information Interchange.
- DLL:
Dinamic Link Library (Librería dinámica de enlaces), estas
contienen las APIS..
Se me
acabaron las ideas, cualquier otro término que conozcas y que crees que
esta apropiado para este curso y para las definiciones por favor hazmelo
saber (Sigrid_mapc@hotmail.com). |
|
5 -Recomendaciones
|
Una recomendación
importante: Soy humano, cometo errores, hice este manual mientras
estaba enfermo, si crees que falta algo por explicar o me equivoqué
en algo hazmelo saber, si quieres dar las gracias(Lo que
hace que siga haciendo manuales y que esto valga realmente la pena),
recomendaría que buscaras e intentaras aprender Win32Asm, busca
manuales , o puedes postear en el foro cualquier duda de
programación/cracking/win32asm que quieras en este foro de newbies(http://disc.server.com/discussion.cgi?id=64395),o
trata de buscar otros manuales para ver otras cosas, recomiendo los
de karpoff(http://welcome.to/karpoff), en el curso dos
hablaremos sobre el uso y como atacar con SoftICE![Hot!]
:
Donde encontrar herramientas :
- http://reversing.is-here.net
- http://enginetools.tsx.org
- http://w3.to/protools
- http://kut.tsx.org
- http://www.crackstore.com
- http://www.suddendischarge
|
6 -Mis palabras finales =)
|
SE
lo que piensas, así que mueve tu tras-0 y manda un mail con preguntas (solo
para ayudar a la labor, no aceptaré hazme cracks ni tipos así) o
con mis posibles errores, ya que cualquier cosa que no se entienda y me
manden un mail, los ayudaré cambiando este curso y agregando temas,
perdon por esta version errónea, pero todos somos humanos, todos
podemos meter la pata alguna vez ..,
Salu2 a :
nuMIT_or, Henry, Retevision,
a todo el resto que me ha consultado(a todos!), a los que tuvieron
paciencia al esperar mis respuestas, a TNT!, xasx, SkUaTeR(:-), karpoff,
KarlitoxZ(eres grande!), WkT! en general, Mr.Port, Carola
T(especialmente), T.L, y al resto del cual me olvidé! .
¡H A S T A L
A P R O X I M A! :-) :-) :-)
Maniac PC
Sigrid_mapc@Hotmail.com
Krackerz United Team 2000
Kayut99@Hotmail.com
http://kut.tsx.org
- http://kut.da.ru
- http://kut99.cjb.net
|
[ Entrada | Documentos Genéricos | WkT! Web Site ]
|
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
|
|
(c)
Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers.
Si necesitas contactar con
nosotros
, lee
esto
antes e infórmate de cómo puedes
ayudarnos |
|
|
|
|
|