TORN@DO presents: cRACKER's n0TES
Sistemas de Protección Comerciales : softSENTRY



Crackeando softSENTRY 2.007 (LSD)
Ok, carga tu objetivo protegido con el propósito de desensamblar el proceso y mirar cómo trabaja softSENTRY. Para desensamblar usaremos SoftICE, porque Wdasm89 parecen caerse cuando intentamos cargar este objetivo. El archivo Protegido, y el archivo original tiene un tamaño diferente. Bueno, probablemente te esperarás, como hice yo, algún encriptado y algunas variable aleatorias en el esquema de protección dentro del objetivo. Te vas a llevar una sorpresa.

Ahora mantén la respiración: éste es el punto de la entrada para TODOS los ARCHIVOS PROTEGIDO:

    :004B066F  CC            	           int 3  
    :004B0670  55                          push ebp                 ; <----- Comenzamos aquí  
    :004B0671  8BEC          	          mov ebp,esp  
    :004B0673  83EC48                  sub esp,00000048  
    :004B0676  53                         push ebx  
    :004B0677  56                         push esi  
    :004B0678  57                         push edi  
    :004B0679  E950000000           jmp 004B06CE  
    :004B067E  0000                     add [eax],al  
    :004B0680  7006                     jo 004B0688  
      
     


¡Mira! Todos los archivos protegidos, tienen el mismo modelo, con el mismo SALTO (codificado como E950000000)!


Esto es muy útil, para nosotros; esto significa que buscando cualquier archivo 'protegido' por este modelo:


55 8B EC 83 EC 48 53 56 57 E9 50 00 00 00



¡Nos dará, el punto entrada del programa, y nos dice si el programa ha sido ' protegido' con el Esquema SoftSentry2!
Te dije que te quedarías con la boca abierta de sorpresa.

Increíble, y muy muy tonto. El estúpido SALTO 4b6ce (muy insólito), apunta EIP a la rutina de protección real (puedes compréndelo fácilmente trazando por encima del código)
.







Esta rutina salta diferente para cada tipo de ' esquema de protección' que el programador haya seleccionado para usar:

Límite de Tiempo, salpicadura ...etc. Si la Protección falla, aterrizarás EN 00093C9B:


    00093C82:  8B4508              mov eax,[ebp][00008]  ; Carga el valor correcto para pasarlo a la llamada..
    00093C85:  50                     push eax                  ; ..¡Lo empuja!..
    00093C86:  68A0324B00      push 004B32A0          ; idem
    00093C8B:  FF156C744B00  call [0004B746C]        ; Esta es la llamada[User32!UnregisterClass]
    00093C91:  E88A000000      call 001279B1            ; *** ¡CARGA LA FUENTE DE EL
                                                        PROGRAMA PRINCIPAL	!
    00093C96:  E825000000      call 00127956            ; *** Esta LLAMADA, Activa EL PROGRAMA
                                                      PRINCIPAL!
    00093C9B:  8B45B8            mov eax,[ebp][0FFB8]; *** ¡ATERRIZAS AQUI! Si falla
                                                       la rutina de comprobación! 
                                                                	  ; ¿Cargar el manipulador del principal?
    00093C9E:  50                   push eax                    ; preparar para la llamada
    00093C9F:  FF15E4734B00  call [0004B73E4]         ; Esta es la LLAMADA [Kernel32!ExitProcess] 
                                                      		 ; y termina el programa
    

Estas 2 Llamadas en 93C91, 93C96 mantienen a los programas COMPLETOS completamente libres de cualquier NAG, Splash, limite de tiempo, cualquier ' protección' que haya sido escogido (yo lo sé, porque lo tengo ejecutado!); y si comparas esta fuente con cualquier otro programa protegido, verás que ambas llamadas SIEMPRE son codificadas como:


    E8 8A 00 00 00 E8 25 00 00 00 
    ^^^^^          ^^^^^ 
    1ª Llamada    2ª llamada 
    (usa un editor hex topara buscarlo)

    

¡Muy bonito!.. así que el esquema de protección trabaja como:


    :MAINPROGRAM-PROTECTED
      
                         Jmp SoftSentriProtection (Siempre E950000000)
    :End MAINPROGRAM-PROTECTED
      
    :SoftSentriProtection
      
                         // Pon aquí código nag-splash-limite de tiempo //
                         // Hecho con SoftSentr2.007            //

                         IF (TrialPeriod==OK) Then
                                   CALL LoadResouce_FullProgram (Siempre E88A000000)
                                   CALL Run_Fullprogram (Siempre E825000000)
                         Else
                                   Kernel21!CallExitprocess

    :End SoftSentriProtection
    

¿OK? Ahora podemos escribir un Crack General para este increíblemente tonto Esquema de Protección Comercial, simplemente cambiando el primer salto (codificado como E950000000) con el código correcto de las 2 LLAMADAS (qué, como recuerdas, siempre era E88A000000 E825000000). ¿OK?


    1) Busca por 55 8B EC 83 EC 48 53 56 57 E9 50 00 00 00 

                                             ^^^^^^^^^^^^^^ ¡EL SALTO! 
   
    2) Reemplaza con E8A2040000 E83D040000 (*) 
                    1ª llamada   2ª llamada 

   
    (*) Nota que el código de las 2 llamadas han sido recalculadas para la nueva posición
        (¡Siempre lo mismo! Simplemente rastréalo una pizca en tu debugger!) 

    

Ok, nosotros hemos eliminado otro Esquema de' Protección' Comercial.

Espero que entiendas el punto entero: ¡Nunca nunca nunca uses protecciones comerciales 'usar y listo'! Los programadores orientados comercialmente son la casta de programadores más inútil y tonta, ellos NUNCA podrán ofrecerte ninguna protección real en absoluto... por el bien de godzilla crea tus propias protecciones, no es tan difícil después de todo, y conocerás hasta el menor detalle de lo que estás haciendo.






 
 
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.