Karpoff Spanish Tutor

Programa: DllShow v4.3


 

PROTECCION: Name / Serial
Descripcion: Programa para ver los proceos activos en nuestro windows
Dificultad: Facilon
DOWNLOAD: http://tucows.teleweb.pt/files4/dllshow.ZIP
Herramientas: SoftIce v3x +
CRACKER: karpoff   FECHA: 15/08/99

 

 INTRODUCCION

## Tutoríal de Crackeo Para Newbies desde Cero 15/08/99

Por Karpoff, PROYECTO 5

- Utilización Básica del Soft-Ice.

- DllShow V4.3

Hola nuevamente !! Un saludo para todos los que seguís esta serie de Manuales Para Newbies desde Cero.

Con este manual el Nº5 Empezamos una nueva fase, Aprenderemos a utilizar el SoftIce e intentaremos capturar un numero de registro valido para nuestro programa.

Empezare explicando las funciones del Soft-Ice mas utilizadas y las que utilizaremos en este caso.

 

 AL ATAKE

 

Primero iniciamos el ordenata y cargamos el Soft-ice (en la Web hay unos tutoriales sobre instalación y configuración del Soft.) si todo ha ido bien estamos en Windows y aparentemente todo esta igual que siempre pero...... la realidad es otra, hay algo controlando los procesos del sistema, es un Debug el mejor y si no probar a pulsar las teclas [Ctrl + D] madre mía!!! pero que demonios es esto tan oscuro y con tantos números????, Bueno esto nos va ha mostrar todo lo que queramos sobre un programa, un proceso de un dll, ocx Etc. Paso a paso las teclas mas utilizadas

Teclas de Funcion del Soft-Ice

F1 ---- Help

F2 ---- ventana en la parte superior de la pantalla que nos muestra los valores que van llevando EBX, EAX, ECX, EDX, EDI, ESI ETC.

F4 ---- Nos muestra como esta todo fuera del soft en ese preciso instante, ósea que si tenemos un editor HEX abierto en Windows, veremos una imagen capturada del editor , esto es muy útil ejemplo: estamos intentado petar un programa y queremos saber en que preciso instante nos va ha salir la pantalla que nos avisa, de que el programa esta en evaluación para poder saber en que parte del código se ejecuta la orden, pues mientras seguimos paso a paso los procesos pulsamos F3 y nos muestra lo que se cuece en ese momento fuera del Soft, ya os digo es una imagen capturada como una foto, para volver pulsamos otra vez F3.

F5 ---- Hace que el programa que estamos Traceando se ejecute normalmente, hasta que se encuentre con algún BreakPoint que hallamos puesto lo mismo hace si pulsamos [Ctrl + D] desde dentro del Soft, las dos teclas nos sirven para sacarnos del Soft a Windows.

F8 ---- Con esta tecla vamos ejecutando el programa paso a paso, entrando en todo tipo de procesos , Osea que ejecuta la instrucción actual y se pararía en la siguiente asta que pulsemos nuevamente F8.

F10 ---- Lo mismo que F8 pero sin entrar en llamadas ( Call ) se las salta continuando con la ejecución en el Retorno ( Ret ) de dicha llamada,

F11 ---- La definición para esta tecla es, ejecuta hasta una dirección de memoria. (¿?? no lo entiendo @@??") yo la utilizo igual que F12 y los resultados son los mismos.

F12 ---- Nos Retorna al punto donde ha terminado una llamada ejemplo: Imaginamos que estamos petando un programa y hemos puesto unos BreakPoints ( Puntos de Ruptura ) para capturar un proceso determinado, estamos ejecutando el programa y derrepente hay una llamada al BreakPoint que pusimos, lo normal que veríamos en pantalla seria algo así

          Dentro del SoftIce

------------User32!Setwindowtexta+0023-----------------------------------------

015F:BFF57740 C20C00 RET 000C

USER32!GETWINDOWTEXTA -- momento en que el breakPoint para el programa

015F:BFF51743 B1A1 MOV CL,A1

.......

---------------------------------------User32!.Text+0740-----------------------

aquí ha habido una llamada externa típica a la librería de Windows User32.dll concretamente a Getwindowtexta, y si os fijáis lo resaltado en rojo nos dice que estamos dentro de User32.dll pero a nosotros no nos interesa para nada esta dll, entonces para saber quien hizo la llamada a user32.dll pulsamos F12 y nos mostraría .

          Dentro del SoftIce

--------------------------------------------------------------------------------

015F:0041552B FF15B04700 CALL [User32!GetWindowTexta] ----- La llamada

015F:00415531 5F POP EDI ---- Retornaríamos Aquí

.......

-------------------------------------DllShow!. Text+0001452B---------------------

Pues aquí vemos que la llamada la hizo 0041552B que es una llamada Externa a User32.dll concretamente GetWindowTexta , y nosotros hemos utilizado esa llamada para poner un BreakPoint (punto de Ruptura ) A un proceso de la librería user32.dll, El BreakPoint seria BPX GetWindowTexta que lo escribiríamos tal y como esta, en la línea de comandos de Soft-Ice. cualquier llamada que hubiese a la Función GetWindowTexta nos pararía el programa de isofacto para saber de donde se hizo esa llamada pulsaríamos F12. ( Espero que lo estéis entendiendo tan bien como yo intento explicarlo J ) Para saber las llamadas externas que contienen las Dll solo tenéis que editar la dll que queráis con el Vista Rápida de Windows,  si lo tenéis instalado sale cuando pincháis con el botón derecho del ratón, sobre un archivo, y seleccionáis vista rápida o Quick View o si tenéis instalado el Quick View Plus pues mejor, luego todas las llamadas pueden ser utilizadas como BreakPoints dependiendo del proceso que queramos seguir.

BreakPoints o puntos de ruptura

Los Breakpoinst son la madre del cordero, Se trata de que el programa pare en el momento en que hay una llamada a una función de una librería (dll) que usa el programa. Existen en Windows unas librerías ( user32.dll Kernel32.dll, advapi32.dll, shell32.dll, gdi32.dll Etc.) Que son necesarias para la ejecución de un programa en entorno Windows, El ejcutable del programa hace uso de estas librerías mediante llamadas a las distintas funciones de cada librería, sabiendo que función utiliza para ejecutar un determinado proceso, podremos capturarlo en el preciso instante en que comienza la ejecución de dicho proceso, como???? Poniendo un breakPoint, como se pone un BreakPoint??? Desde la línea de comandos del Soft-Ice con el comando BPX

BPX getdlgitemtexta --- BreakPoint a una Función de la librería User32.dll

BPX getdlgitemtext --- BreakPoint a una Función   de la librería User.dll o User32.dll

Observáis que uno termina en [a] y el otro no. Esta [a] sirve para indicar que estamos ejecutando un programa de 32 Bytes , a los programas de 16Bytes no debemos de poner la [a], ya que no  haría efecto el BreakPoint

Como puedo saber que BreakPoin tengo que poner??? Como he comentado cada librería tiene su propia lista de funciones que las podemos utilizan como puntos de ruptura o BreakPoints, si editáis el ejecutable del programa a crackear con el Quick View o Quick View plus, se os mostrara las librerías que utiliza y las funciones de cada librería que utilizara, Tenéis que guiaros un poco por instinto, estas funciones tiene nombres que nos pueden sugerir ideas interesantes veamos algunos ejemplos.

Estos son breakPoints muy frecuentes, utilizados para seguir procesos de ventanas de Aviso, textos que aparecen cuando intentamos registrar un programa y fallamos etc.

BPX messagebox 
BPX getdlgitemtexta
BPX getwindowtexta

Fijaros en sus nombres Messagebox, WindowTexta J etc. ( vais pillando???)

También tenemos los que hacen referencia a la fecha, tiempo de caducidad etc.

BPX getlocaltime 
BPX getfiletime 
BPX getsystemtime

Creo que con un poco de intuición podemos acertar. Voy a Escribir los mas frecuentes extraídos de un texto que saque de la pagina de W.K.T.

1)General Purposes
------------------

BPX hmemcpy 
BPX showwindow 
BPX updatewindow 
BMSG xxxx wm_gettext / a
BMSG xxxx wm_command 
BMSG xxxx wm_move 

2)Time Related
--------------
BPINT 21 if ah==2A (DOS) 
BPX getlocaltime 
BPX getfiletime 
BPX getsystemtime 

3)Register Flag Related (e.g. Flag on EAX)
-----------------------
BPX cs:eip if EAX==0 (SICE 3.x) 

4)Memory Flag Related (e.g. Flag on 0030:000045AA)
---------------------
BPMB cs:eip rw if 0x30:0x45AA==0 (SICE 3.x) 

5)"Hear The Echo" Technique Related
-----------------------------------
BPX 0x30:0x45AA do "d 0x30:0x44BB" (SICE 3.x) 
BPX CS:0x66CC do "? EAX" (SICE 3.x) 

6)CD-ROM and Disk Based Schemes 
-------------------------------
BPINT 13 if ah==2 (DOS) 
BPINT 13 if ah==3 (DOS) 
BPINT 13 if ah==4 (DOS) 
BPX GetFileAttributesA 
BPX GetFileSize 
BPX GetDriveType 
BPX GetLastError 
BPX ReadFile 
BPIO -h (Your CD-ROM Port Address) R 

7)Dongle Cracking
-----------------
BPIO -h 278 R 
BPIO -h 378 R 

8)Key File Related
------------------
BPINT 21 if ah==3dh (DOS) 
BPINT 31 if ah==3fh (DOS) 
BPINT 21 if ah==3dh (DOS) 
BPX ReadFileA 
BPX CreateFileA 

9)Keyboard Input Related
------------------------
BPINT 16 if ah==0 (DOS) 
BPINT 21 if ah==0xA (DOS) 

Nota: Texto original en inglés de Aesculapius

Pero de todos estos los que mas utilizaremos son.

BPX Messageboxa

BPX Messagebox

BPX Messageboxexa

BPX GetWindowTexta

BPX GetDlgitemTexta

BPX GetWindowText

BPX GetDlgitemText

BPX GetMessagea

Imaginaros que que queremos conseguir el numero de serie valido para un programa, Que BreakPoint pondremos??? Supongo que los grandes CRACKER sabrán cual es el correcto yo no, lo único que os puedo aconsejar es que pongáis 2 o 3 y ver cual salta que podrían ser.

BPX Messageboxa

BPX GetWindowTexta

BPX GetDlgitemTexta

Y con el que salte continuamos y borramos los demas. los comandos para manipular los BreakPoints son.

Bpx Breakpoint ----- Poner

BC Breakpoint ----- Borrar ,         BC * ----- Borrar todos

BD Breakpoint ----- Desactivar       BD * ----- Desactivar Todos

BE Breakpoint ----- Activar          BE * ----- Activar Todos

BL ----- Listar todos

Comandos para ver los procesos que se están ejecutando. utilizaremos.

D EX ------ nos muestra el contenido de EBX en la ventana de datos

D EBP-12 --- nos muestra el contenido de EBP-12 en la ventana de datos

Yo llamo la ventana de datos, a la ventana que muestra los valores en caracteres, junto a los valores en hexadecimal, y es que algunas veces tendremos que buscar el nº que buscamos en esa ventana o con una [?] en la línea de comandos.

? EBX ---- nos muestra el valor de EBX en la línea de comandos

? EBP-12 – nos muestra el valor de EBP-12 en la línea de comandos

Para manipular una determinada parte del código. utilizaremos el comando

A ----- ensamblar

En los manuales anteriores hemos manipulado los datos para petar el programa con un editor HEX, en el Soft podemos manipular pero los cambios solo quedan manipulados en memeoria, ósea Temporalmente hasta que ejecutemos nuevamente el programa. Esto es muy útil para probar si hemos acertado con el proceso que queremos cambiar. Por ejemplo

Localizamos un salto

00425012 74A1 je 00425012 para cambiarlo a un jmp haremos lo siguiente

A 00425012 [Intro]—pulsar

0105:00425012 ----------- El soft nos mostrara solo la dirección de memoria para que la rellenemos con los datos que tengamos pensado aplicar.

0105:00425012 jmp 00425012 [Intro] ----- En rojo los datos que hemos metido

0105:00425014 ------ ----- El soft nos da la siguiente dirección de memoria por si queremos seguir cambiando cosas, si no vamos a cambiar nada mas pulsamos Intro y hemos cambiado un salto ( Pero solo en memoria. )

Bueno Creo que he explicado lo suficiente del Soft como para empezar con nuestro programa. Recomiendo a la Peña que nunca ha utilizado el Soft, que antes de continuar con el Tutoríal, practiquéis con el soft lo que he explicado, probar con una copia de cualquier programa a pulsar F8, F10 , F11, Poner BP Etc. hasta que lo conozcáis un poco


Parte II

Buscando un Numero de Registro valido para.

DllShow V4.3 Que lo tenéis en:

http://tucows.teleweb.pt/files4/dllshow.ZIP

 

Cuento con que ya habéis salseado con el Soft, esta configurado ( en la Web tenéis un manual sobre configuración e Instalación.) y lo tenéis cargado.

Empezamos: Hoy registraremos nuestro programa con un n/s valido, este numero variara según el nombre de usuario que pongamos, ósea que cada cual puede poner el suyo.

Ataque Capturar la rutina que se encarga de verificar el n/s que hemos metido, y seguir su ejecución hasta el momento en que compare nuestro n/s con uno valido.

Abrimos el Soft y cargamos el ejecutable Dllshow.exe. Pulsamos el boton de los engranajes ( load para los amigos ) y nos sale una ventanita con un aviso,[Symbol Translations /Load Error] Pulsamos [Si] y entramos directamente al Soft, pulsamos F5 o [Ctrl + D] para que se ejecute el programa que tenemos cargado, y salimos nuevamente a Windows, pero esta vez se esta iniciando DllShow. Ahora hay que poner los datos del registro, pulsamos Help y Register... y nos sale una ventana que nos pide tres datos, rellenamos como queramos.

User Name:OWL(buho)

Organization:OWL

Registrations :123456789

Y ahora tenemos que poner un BreakPoint para poder seguir paso a paso todo el proceso de crear y comparar el n/s. probamos con Getwindowtexta, Pulsamos [Ctrl+D] y entramos en el Soft, Venga a poner el BP (como se ponía sabéis no?)

BPX getwindowtexta una vez puesto pulsamos F5 o [Ctrl+D] Para Salir a Windows ahora pulsamos aceptar en la ventana de registro y L Cascaras!!! No ha pasado nada nos ha salido la ventana de que el n/s no es correcto. Probaremos con otro BP pulsamos nuevamente [Ctrl+D] y borramos el BP que habíamos puesto

BC * [Intro] ----- Borrar BP

Ahora probamos con otro

BPX getdlgitemtexta y pulsamos nuevamente F5 o [Ctrl+D] Para Salir a Windows ahora pulsamos aceptar en la ventana de registro y J esta vez si saltamos al soft concretamente en.

User32! Getdlgitemtexta

015F:BFF51743 B1A1 MOV CL,A1

Que es esto? La primera llamada que hace el programa, desde que pusimos el BP a la función Getdlgitemtexta. En este momento nos encontramos dentro de User32.dll

Recordar para saber quien ha hecho la llamada que tecla teníamos que pulsar... Bien F12 y nos lleva a.

015F:0041552B FF15B0F24100 CALL [USER32! Getdlgitemtexta-]

015f:00415531 5F POP EDI

015D:00415532 5E POP ESI ---- Captura User Name

...

...

AQUÍ vemos que ESI NOS HA CAPTURADO el primer campo del formulario, comprobarlo poniendo en la línea de comandos del Soft

D esi ---- veremos en la ventana de caracteres OWL(buho)

Podríamos ir ejecutando el programa paso a paso , pero se haría eterno ya que si solo a capturado el primer campo, supongo que utilizara el mismo sistema para capturar los otros dos, ósea que pulsamos nuevamente F5 y aparecemos otra vez en.

User32! Getdlgitemtexta

015F:BFF51743 B1A1 MOV CL,A1

La segunda llamada que hace el programa, desde que pusimos el BP a la función Getdlgitemtexta. En este momento nos encontramos dentro de User32.dll

Pulsamos F12 para terminar esta llamada y nos lleva a.

015F:0041552B FF15B0F24100 CALL [USER32! Getdlgitemtexta-]

015f:00415531 5F POP EDI

015D:00415532 5E POP ESI ----- Captura Organization

...

si antes Capturo el User Name y el valor lo llevaba ESI miremos otra vez que hay en ESI

D ESI --- OWL ahora ha capturado el segundo campo vamos a por el ultimo que es el que nos interesa, a partir de los datos que a recogido generara un n/s y lo comparara con el que hemos puesto, tenemos que encontrar el punto donde lo compara, pulsamos F5 y

User32! Getdlgitemtexta

015F:BFF51743 B1A1 MOV CL,A1

La tecera llamada que hace el programa, desde que pusimos el BP a la función Getdlgitemtexta. En este momento nos encontramos dentro de User32.dll

Pulsamos F12 para terminar esta llamada y nos lleva a.

015F:0041552B FF15B0F24100 CALL [USER32! Getdlgitemtexta-]

015f:00415531 5F POP EDI

015D:00415532 5E POP ESI ----- Captura el numero que pusimos

si repetimos el paso anterior y miramos que hay en ESI, vemos  el n/s que hemos metido

D ESI ----- 123456789

Ahora que ya tiene el n/s solo tenemos que seguir ejecutando el programa y ver que hace con el n/s, vamos pulsando F10 ( Tambien podriamos ir traceando con F8, Pero nos volveriamos un poco locos, ya que entrariamos en todas la llamadas (call) paso a paso. Pero si quereis probar..)

 

0041552B FF15B0F24100 CALL [USER32! Getdlgitemtexta-]

00415531 5F POP EDI

00415532 5E POP ESI ----- Captura el numero que pusimos

00415533 B801000000 MOV EAX,00000001

00415538 5B POP EBX

00415539 C3 RET ------ Retorno de una llamada esto nos va ha trasladar al final de una llamada que estaba ejecutándose, seguro que nos lleva a la parte donde se genera y compara el n/s. Para los que no tengáis experiencia en crackeo os doy un consejo, desensamblar el programa este con el W32dasm y analizar esta parte del código, todo el proceso que estamos siguiendo, lo Vais a ver mucho mas claro con un listado muerto. ( pero claro primero terminemos esto )

A lo que estabamos el Ret nos lleva a:

0040D342 E8B9810000 CALL 00415500 --- VEIS EL RET ERA EL FINAL DE ESTA LLAMADA

0040D347 8D4C2440 LEA ECX,[ESP+40]

0040D34B 51 PUSH ECX

...

...

...

SEGUIMOS CON F10

...

0040D351 56 PUSH ESI

0040D352 8BD8 MOV EBX,EAX ----- EAX LLEVA NUESTRO N/S MIRARLO

0040D361 7518 JNZ 0040D37B ----- SALTA A

? EAX 123456789

CONTINUAMOS CON F10

0040D37B 3B3CCE5OD CMP EAX,005FCE3C compara

0040D380 750CC JNZ 0040D38E ------- SALTA A si no es 0 (osea si)

......

0040D38E 57 PUSH EDI ----- GUARDA NUESTRA ORGANITATION

0040D38F 56 PUSH ESI ----- GUARDA NUESTRO USER NAME

0040D390 E89BB7B0000 CALL 00414F30 – LLAMA A LA RUTINA QUE GENERA EL N/S

0040D395 83C408 ADD,08

0040D398 3BD8 CMP EBX,EAX ----- COMPARA LOS N/S EL NUESTRO CON EL VALIDO

SOLO NOS QUEDA SABER CUAL ES EL QUE SE CORRESPONDE CON LOS DATOS QUE HEMOS PUESTO.

? EBX = 123456789 el nuestro

? EAX = 3703297526 el que vale

 

Acordaros de que si pusisteis el user name con mayusculas a la ora de meter el n/s , a de estar exactamente igual.

Como siempre espero que lo ayais cojido, yo intento explicar lo mejor que puedo, pero no soy ningun experto por lo tanto hay algunas comprovaciones que realiza el codigo que no puedo explicarlas por que no las se, supongo que conprobara que el n/s tenga un minimo y un maximo de longitud, que esten todos los campos completos, que sean numeros y no letras etc.

Cualquier Duda, Sugerencia, Critica etc. A

 

Email Kf_karpoff@hotmail.com     URL: http://welcome.to/karpoff

Un Saludo a TODOS/AS. (Karpoff)

Este material es solo para uso educativo, por ahora los cracks son ilegales.

 

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