Karpoff Spanish Tutor 1999-2001

Programa:

LockDown 2000 v5.0


 

PROTECCION: Periodo de evaluacion limitado a 10 dias y retardo al inicio
Descripcion: Escudo de proteccion en internet contra intrusos no invitados
Dificultad: Novato.
DOWNLOAD: http://LockDown.com/secure.html
Herramientas: GetTyp v2.60, ProcDump32 v1.6.2, Softice v4.0, W32dasm98, HexPert v3.0.05
CRACKER: Fantomas   FECHA: 05/07/2001

 

 INTRODUCCION


Este analisis esta basado en el tutorial que presento
Gohan para el LockDown v7.0, tal vez no haya mucho que aprender, pero para aquellos como yo, que no tengan la version 7.0 y si a 5.0, y quieran practicar (que es la base del aprendisaje), he aqui otra version, que a pesar de ser ligeramente diferente a la v7.0 el mecanismo utilizado por Gohan es aplicable

Gracias
Gohan.

 

 AL ATAKE


Ante la imposibilidad de cargar la aplicacion con
W32dasm98, supondremos que posiblemente se encuentre empacada y antes de empezar a destripar la aplicacion, vamos a analizarla con el GetTyp 2.60 y obtenemos lo siguiente

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --- # GetTyp 2.60 # ----------------- # Copyright (c) 1997-99 by PHaX # ---
- --- # phax@writeme.com # ---------------------- # http://surf.to/phax # ---
- ------------------------------------------------------ # free edition # ---

- [LockDown2000.exe] -----
DOS executable file - 622592 bytes

Portable executable (starting at 256 for 622336 bytes)
Packer:
PKLite32 1.1
Calculated entrypoint: 80384 / 00013A00h (RVA: 001E4000h)
Required CPU type: 80386
Requires any version of Win32
File is executable
Line numbers stripped from file
Local symbols stripped from file
32 bit word machine
Linker version: 2.25
Objects (object align = 00001000h):

etc, etc, etc.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Ahora utilizaremos ProcDump32 para poder desempacarlo y una vez hecho esto, ahora si vamonos con el W32dasm98

Lo primero que haremos, sera quitar esa rutina de retardo que se aplica al inicio, asi que buscaremos alguna cadena de texto que contenga la palabra
Sleep y encontramos varios e inclusive encontramos un SleepEx, esto va a dificultar un poco la tarea

Vamos entonces con el
Softice y ponemos dos interrupciones bpx Sleep y bpx SleepEx, de esta forma cazaremos la primer rutina de retardo con Sleep, y lo que estabamos esperando aparece en la direccion :004C73F6 veamos

|
:004C73E3 8BF0 mov esi, eax
:004C73E5 EB14 jmp 004C73FB
|
* Referenced by a Conditional Jump at Address :004C7402
|
:004C73E7 6A00 push 00000000
:004C73E9 E826DFFEFF call 004B5314
:004C73EE 8BF0 mov esi, eax
:004C73F0 47 inc edi
:004C73F1 68E8030000 push 000003E8
|
* Reference To: KERNEL32.Sleep, Ord:0000h
|
:
004C73F6 E835FBF3FF Call 00406F30
|
* Referenced by a Unconditional Jump at Address :004C73E5
|
:004C73FB 85F6 test esi, esi
:004C73FD 7D05 jge 004C7404
:004C73FF 83FF0A cmp edi, 0000000A
:004C7402 7CE3 jl 004C73E7
|
* Referenced by a Conditional Jump at Address :004C73FD
|
:004C7404 85F6 test esi, esi
:004C7406 7C36 jl 004C743E
|

y para evitar esta rutina vamos a saltarla desde
:004C73E5 hasta :004C7404 mediante el siguiente cambio:

:004C73E5 JMP 004C73FB cambia a :004C73E5 JMP 004C7404

asi que en el OffSet
000C69E5 pondremos EB 1D

Bueno ahora si podemos correr la aplicacion varias veces mientras hacemos pruebas, sin que nos esten demorando.

Ahora cargamos la aplicacion con el
W32dasm98 nos vamos al menu Refs, y despues al submenu String Data References, buscamos la cadena de texto LD2KReg.ini y le damos dos veces con el mouse, inmediatamente nos manda a la direccion

|
* Possible StringData Ref from Code Obj ->"LD2KReg.ini"
|
:004A45FF B97C464A00 mov ecx, 004A467C
:004A4604 B201 mov dl, 01
:004A4606 A1FC9B4700 mov eax, dword ptr [00479BFC]
:004A460B E89456FDFF call 00479CA4
:004A4610 8BD8 mov ebx, eax
:004A4612 6A00 push 00000000
:004A4614 8D45FC lea eax, dword ptr [ebp-04]
:004A4617 50 push eax
|
* Possible StringData Ref from Code Obj ->"Register"
|
:004A4618 B990464A00 mov ecx, 004A4690
|
* Possible StringData Ref from Code Obj ->"Register"
|
:004A461D BA90464A00 mov edx, 004A4690
:004A4622 8BC3 mov eax, ebx
:004A4624 8B30 mov esi, dword ptr [eax]
:004A4626 FF16 call dword ptr [esi]
:004A4628 8BC3 mov eax, ebx
:004A462A E8EDE9F5FF call 0040301C
:004A462F 8D45F8 lea eax, dword ptr [ebp-08]
:004A4632 E8F9F9FFFF call 004A4030
:004A4637 8B55F8 mov edx, dword ptr [ebp-08]
:004A463A 8B45FC mov eax, dword ptr [ebp-04]
:004A463D E816FAF5FF call 00404058
:
004A4642 7504 jne 004A4648
:004A4644 B301 mov bl, 01
:004A4646 EB02 jmp 004A464A
|
* Referenced by a Conditional Jump at Address :004A4642
|
:004A4648 33DB xor ebx, ebx
|
* Referenced by a Unconditional Jump at Address :004A4646
|
:004A464A 33C0 xor eax, eax
:004A464C 5A pop edx
:004A464D 59 pop ecx
:004A464E 59 pop ecx
:004A464F 648910 mov dword ptr fs:[eax], edx
:004A4652 686C464A00 push 004A466C
|
* Referenced by a Unconditional Jump at Address :004A466A
|
:004A4657 8D45F8 lea eax, dword ptr [ebp-08]
:004A465A BA02000000 mov edx, 00000002
:004A465F E870F6F5FF call 00403CD4
:004A4664 C3 ret
|

observen que antes de salir de esta rutina, existe un salto condicional que modifica algunos parametros, este salto se encuentra en la direccion
:004A4642, la diferencia entre saltar o no saltar es que en el primer caso el registro EBX se iguala a cero en el otro caso se iguala a uno, esta es la bendera que se utiliza para validar el registro de la aplicacion, asi que cambiaremos

:004a4642 75 04 por :004a4642 75 00

y todo arreglado



*La amenaza elegante*

El presente documento, es una tarea cientifica de investigacion, con caracter docente, no pretende violar ninguna ley vigente, el autor no se hace responsable del uso, manejo o practicas inadecuadas del analisis presentado {:o)


Karpoff Spanish Tutor: Pagina dedicada a la divulgacion de informacion en Castellano, sobre Ingenieria Inversa y Programacion. Email "Colabora con tus Proyectos"
www.000webhost.com