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.  | 
             
         
         
         
         
         
         
         |