TORN@DO presents: cRACKER's n0TES

Tips & Trucos para cracking general



Escogiendo N�meros de serie ficticios (MisterE) con ap�ndice de Suby
Cuando crackeas programas que necesitan un Numero de serie #, yo recomiendo siempre usar el mismo, para que sepas, que aspecto tiene en hexadecimal.


Suby:
Yo sugiero usar un numero de serie con caracteres diferentes como "1234567890" (uno que yo uso) porque si el programa no verifica los caracteres del primero al �ltimo pero verifica el tercero y el segundo despu�s el �ltimo etc. puedes saber f�cilmente cu�l se verifica.

Si usas "1122334455" y tomara el "1" no sabes si toma el primero o el segundo en cambio si usas "1234567890" y toma "2" est�s seguro que verificar� el segundo car�cter del numero de serie.




Llamadas (CrackZ)


Siempre que elijas caminar sobre una LLAMADA en una protecci�n, verifica los contenidos de cualquier registro que haya cambiado, puedes encontrar el numero de serie # all�, alternativamente cuando has agotado todas las posibilidades, has re-rastreado tus pasos y has examinado las funciones.




C�mo piensa un Cracker/Programador (rudeboy)


Se ense�a a los programadores que siempre que tengas una tarea que va a ser hecha m�s de una vez, debes crear una funci�n para hacer esa tarea, y simplemente llamar a la funci�n cuando necesitas realizar la tarea. Ahora, la mayor�a de programas que usan una combinaci�n de nombre/serial # verifican por lo menos dos veces el c�digo, una vez cuando entras en el c�digo, y otra vez cuando el programa se pone en marcha. Debido a esto el programador llamar� normalmente una funci�n para probar tu c�digo de reg. Y normalmente, esta funci�n se llamar� cada vez que el c�digo se verifica. A estas alturas probablemente debes ver a donde voy con esto. Si remiendas la funci�n que se llama para probar el c�digo de reg, lo mostrar� como v�lido siempre que el programa haga que se verifique.

Las t�cnicas empleadas aqu� no s�lo se aplican para crackear los programas con rutinas de c�digo de nombre/reg. No te limites pensando "Dentro de la Caja", estas t�cnicas tambi�n pueden usarse con muchos otros tipos de protecciones (por ejemplo, muchas veces una comprobaci�n de fecha y una nag screen est�n hechas a trav�s de una funci�n) .




Usando INT 3 (josephCo)


En caso de que no lo hayas o�do ya, INT 3 se puso para los prop�sitos de "debugging". As� si quieres romper una rutina especificada, puedes usar esta instrucci�n. Puedes simplemente "parchear" (el c�digo op para INT 3 es simplemente CC) una COPIA del archivo. Intenta reemplazar un solo byte del c�digo op con CC. Si no puedes encontrar uno, tienes que ponerlo dentro de una instrucci�n completa: no te olvides de "NOPear" (el c�digo op para NOP es simplemente 90) los bytes restantes. Entonces puedes utilizar SoftICE para romper en INT 3. No te olvides de anotar los datos originales, porque los necesitar�s cuando SoftICE rompa en esta direcci�n. Cuando est�s all� (antes de que INT 3 sea ejecutado), teclea A y entonces introduce los comandos anotados - si no haces esto, causar�s un Error de Protecci�n General. Simplemente contin�a como quieras para...




Valores de retorno


Cuando una funci�n devuelve un valor para ver si un control ha tenido �xito principalmente 1 (o a veces 0) indicar� �xito. -1 normalmente es usado para indicar �NO �XITO!




SoftICE breakpoints condicionales (Rhayader)


En mi temprana experiencia en cracking, yo pon�a normalmente un BPX para GetDlgItemTextA y GetWindowTextA dentro de SoftICE, siempre que encontrara un programa que pidiese un numero de serie. Introduciendo un c�digo ficticio, y ' esperando' a que SoftICE rompiese. La mayor�a de las veces funcionaba. El problema es que, despu�s de apretar F12 (P RET), normalmente me pierdo dentro del c�digo. Pregunt�ndome en que lugar del sangriento texto del buffer puedo poner un BPR.

Despu�s de excavar en los docs de SoftICE, finalmente encontr� una manera mejor de hacerlo (est� en el Cap�tulo 7 de la Gu�a del Usuario). En mi opini�n, debes leerlo tambi�n. Algunos de los t�rminos podr�a ser dif�ciles de entender si simplemente estas empezado. Pero, eh, para eso est� El Foro , �no?
:)

Mi objetivo aqu� es conseguir que SoftICE nos muestre el texto del buffer para los dos APIs Win32 arriba indicados. Usar� breakpoint "acci�n" para hacer eso.

Echemos una mirada primero a GetWindowTextA. Es declarado como:

int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount);

GetWindowText usa un convenio de llamada stdcall. Eso significa que ese argumento se empujar� de derecha a izquierda. Puesto que SoftIce rompe antes de que el c�digo pr�logo sea ejecutado, el marco de pila EBP todav�a no est� preparado. As� que nosotros tendremos que utilizar ESP para el direccionar el argumento. Aqu� es c�mo la pila parecer� cuando SoftIce rompa:

...
[ESP+0Ch] - nMaxCount
[ESP+08h] - lpString
[ESP+04h] - hwnd
[ESP+00h] - return EIP

Cuando el retorno de la funci�n, GetWindowTextA ponga el texto recuperado para la situaci�n apuntada por lpString (LPTSTR es un puntero largo para un string terminado nulo). As�, tendremos que usar el operador indirecto de SoftICE (es el car�cter * , igual que en el lenguaje C, ve Cap�tulo 8;). Por ejemplo, el comando:

D *(esp+8)

significa, "muestra en la ventana de datos, la situaci�n apuntada por el contenido de esp+8." Ya que, esto es un funcionamiento muy com�n, SoftICE ten�a un comando para �l: esp->8. Bien entonces, ahora podemos poner el breakpoint como esto:

BPX GetWindowTextA DO "D esp->8;"

Y cuando apretemos F12, volvemos al llamador y el texto en el que nosotros entramos se sentar� muy bien en la parte superior de la ventana de datos, esperando a que preparemos un BPR con �l:) �Por qu� no hacemos autom�ticamente un retorno al llamador? Bien, en mi caso, la pantalla parpadea, y yo lo odio.
Pero, si quieres intentar, puedes poner el breakpoint como:

BPX GetWindowTextA DO "D esp->8;P RET;"

Ahora, echemos una mirada a GetDlgItemTextA. Es declarado como:

UINT GetDlgItemText(HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount);

La �nica diferencia es nIDDlgItem que es el ID del control para conseguir el texto. La pila se parecer� a:

...
[ESP+10h] - nMaxCount
[ESP+0Ch] - lpString < Aqu� est�
[ESP+08h] - nIDDlgItem
[ESP+04h] - hwnd
[ESP+00h] - return EIP

Y el breakpoint para poner (realmente siento que ya lo descubres;)

BPX GetDlgItemTextA DO "D esp->C;"

Bien, eso es todos amigos. Si no quieres teclearlo todas las veces que quieras usarlo, entonces tendr�s que preparar un macro para �l. Lee el cap�tulo 11 :D Me gustar�a dec�rtelo, pero esto ya se volvi� un correo muy laaargo. Mira ya...





Tip para NUEVOS Ingenieros Inversos (CrackZ)


Cuando estas empezando a invertir el c�digo de un blanco puede ser muy tentador usar una variedad de t�cnicas intrusivas inmediatamente, yo por mi estoy ansioso de disparar SoftICE y comenzar el trazado. En la mayor�a casos este acercamiento funcionar�, pero para invertir a un nivel superior quiz�s debas emprender un an�lisis del c�digo previamente a usar SoftICE - har�as bien para sentir el c�digo antes de entrar en SoftICE e intentar estudiar la protecci�n en detalle. Usando WDasm32 f�cilmente localizar�n algunas Referencias de String interesantes. Por un simple trazado atr�s podr�as f�cilmente localizar un chequeo decisivo.




Unregistred? (CbD)


Si crackeas un programa y dice unregistred, cambiaste un jmp aqu� y all� e hiciste que el programa tomase un c�digo inv�lido como uno real pero el programa escribi� tu c�digo al registro o a un archivo ini cuando lo reiniciaste, �l ley� el n�mero o clave y era uno inv�lido, as� que debes encontrar donde el programa busca una entrada de registro (RegQueryValueEx[A] o un GetPrivateProfile[A]) y obliga al programa validar cualquier clave que vea. Esto puede ser un proceso muy dif�cil as� que estate preparado para un infierno. Pero la mejor idea es usar W32DASM para desmontar el blanco entonces mira en las funciones importadas para encontrar las funciones anteriores, entonces rastrea cada una de ellas (ser� muchas) entonces despu�s de que rastreas el c�digo y encuentras la correcta probablemente ser� una cuesti�n de cambiar un jnz a jz o algo as� de simple. Si todav�a no puedes hacerlo busca la ayuda de un cracker sabio.




Relojes (Mammon)


Los relojes permiten rastrear una variable mientras est�s "debuggeando" un programa; es innecesario decir, que esto es una funci�n muy importante para el cracking y la ingenier�a inversa. Para abrir la ventana de reloj, teclea ww en la l�nea de comandos de Soft-Ice; tecleando watch seguido por un nombre de variable (ej. watch user_id) agrega esa variable (y su valor) a la ventana de reloj. Registros y offsets de pila (para no mencionar valores de memoria) pueden ser mirados us�ndolos en lugar del nombre de la variable, como watch es:di y watch [ebp 18]. Adem�s, puesto que muchos registros y offsets de pila son meramente el punto para dirigirse donde las variables reales se guardan, puedes mirar el valor de referencia por el registro u offset de pila tecleando un * antes del nombre del registro/offset (eg, watch *es:di). Buenas variables para watch son es:di, *es:di, eax, y cualquier [esp?] o [ebp?] aquellas referencias introducidas por un usuario.




 

The cRACKER's n0tES esta dividido dentro de 12 partes principales:
 TX. Notas del Traductor
 00. INDICE
 01. Ensamblador para Cracker (CoRN2)
 02. SoftICE (Men� de arranque , Configuraci�n, Comandos)
       
 1 Men� de arranque
       
 2 Configuraci�n
       
 3 Comandos
 03. Breakpoints & Detalles de API de Windows
       
 1 Programas restringidos
       
 2 Cajas de di�logo
       
 3 Verificando el Tipo de unidad
       
 4 Acceso a archivos
       
 5 Acceso al Registro
       
 6 Cogiendo n�meros de serie
       
 7 Accediendo a Tiempo & Fecha
       
 8 Generando ventanas
 04. Instrucciones de salto
 05. Instrucciones SET
 06. Tips & Trucos para Crackear
       
 1 Programas restringidos
       
 2 Dongles
       
 3 General
       
 4 Configuraci�n de InstallSHIELD
       
 5 Protecciones con Archivo llave
       
 6 Pantallas molestas
       
 7 L�mites de Runtime
       
 8 Serials
       
 9 Limites de Tiempo
       
10 Programas Visual BASIC
 07. Ventanas de Mensajes Para los Cracker
 08. Identificando funciones, Argumentos, y Variables (Rhayader)
 09. Los Sistemas de Protecciones de comerciales
       
 1 Armadillo
       
 2 C-Dilla SafeDISC
       
 3 SalesAgent
       
 4 SecuROM
       
 5 softSENTRY
       
 6 TimeLOCK
       
 7 VBox
 10. Bitmanipulation (Cruehead)
 11. Teor�a general de Cracking
 12. FAQ

 +A. C�mo contactar conmigo
 +B. �Que es lo Nuevo?


 



The cRACKER's n0TES are Copyright 1998-2000 by TORN@DO of ID.
Todo los Derechos Reservados.
Traducido por
Revisado por X-Grimator.