TORN@DO presents: cRACKER's n0TES

Sistemas de Protecci�n Comerciales: SalesAgent



Crackeando SalesAgent 3.0 BUY NOW (Goth)
Bien, asumo que has tomado todas las precauciones obligatorias (backup del registro y tal...) , instalado nuestro objetivo y reiniciado Win95.

PARTE I - Mira lo que el gato arrastr�
Primero mira c�mo se comporta nuestro objetivo. Empieza tu programa. Conseguir�s la ventana del usual ' Time Trial'. No nos molestaremos con ' Try first', derecho de cabeza a ' Buy now'. Rellena algunas casillas y aprieta ' Next' hasta que alcances la ventana de ' Select Payment Method'. Ahora, �tienes la informaci�n de tu tarjeta de cr�dito a mano? Si no, debes invertir nuestro objetivo para ver qu� n�meros son v�lidos o visitar alg�n sitio selecto de hackers y conseguir un generador de tarjetas de cr�dito (ej. CreditMaster) o simplemente introduce:


    Card:    American Express
    No.:     00000000
    Exp.:    01/05
    Name:    Goth
    

Y presiona ' Next' hasta que consigas la ventana ' Select Communication Methods". Por varias razones es necesario asegurarse de que no puedes conectar a nada, apaga tu m�dem, corta tu cable o cualquier otra cosa y presiona ' Next'. Oops, incapaz conectar, y as� sucesivamente. Cancela todo el ' Buy now'.

Ahora, podr�as observar nuestro objetivo con el periodo de prueba caducado. �Pero todos saben lo que pasar�, no lo hagas? S�, el bot�n de' Try first' desaparecer� y no regresar� si pusiste tu RTC (n.del t. Real Time Clock: reloj de tiempo real) atr�s. Bien, es una prueba de tiempo. As� a estas alturas podr�as tener la brillante idea de lanzar a SoftICE, bpx GetSystemTime, rastrear abajo los bytes para parchear en el EXE/DLL y listo.

�- NO, no lo hagas!

Lo que har�s a estas alturas es presionar ' Buy now' de nuevo. (A veces cuando tengo estos extra�os ataques de estupidez, no puedo creer que haya un bot�n de ' Buy now' pero ninguna manera de introducir cualquier c�digo de registro o alguna cosa as� y lo intento de nuevo... ;-)


Ves todos los campos de tu ventana de ' User Registration' llen� de la informaci�n que has introducido antes . Cierra el programa y empieza de nuevo. La informaci�n todav�a est� all�. �SalesAgent guarda informaci�n del usuario en alguna parte!



PARTE II - La Anatom�a de SalesAgent 3.0
Debes examinar los archivos de nuestro objetivo ahora para conseguir una tosca apreciaci�n global de qu� est� pasando. Bien, cinco veces deben ser m�s que bastantes para que yo ech� una mirada profunda a las RSAGNT32.DLL. Usa BRW y/o W32dasm. Mira las tablas de importaci�n y exportaci�n, recursos, los encabezamientos y as� sucesivamente... Chequea si ellos est�n encriptados/comprimidos. Usa tu imaginaci�n. �Qu� archivo puede realizar qu� tarea? �C�mo trabaja el esquema? SI�NTELO...

Habi�ndolo sentido bastante, debes llegar por lo menos a estos resultados:


- Si tu programa tiene m�s de un EXE, todos ellos tienen el mismo tama�o
=> no pueden ser los EXEs reales => alg�n tipo de cargador

- ********.DL_s est�n encriptadas => el EXE real ser� cargado, descifrado, cualquier cosa... RSAGNT32.DLL conecta al servidor de Internet, contiene recursos para ENTERING REGISTRATION CODE (n.del t.: introduciendo c�digo de registro)


�Ahora, c�mo parece que hace nuestro proceso de arranque ?
Cuando empiezas el programa que usa RSAGNT32.DLL verifica si est�s en tu periodo de prueba y entonces presenta ' la ventana de Trial'. Si presionas ' Try first' el DL_ encriptado est� siendo temporalmente descifrado y comenzado. Si presionas ' Buy now' RSAGNT32.DLL es usado para conseguir informaci�n del usuario, conexi�n de Internet y REGISTRO. Despu�s del registro los archivos * .DL_ deben descifrarse permanentemente.

�As� c�mo conseguimos que RSAGNT32.DLL nos permita registrarnos?



PARTE III - Falsificando una orden de mail/fax yo he utilizado W32Dasm para desensamblar RSAGNT32.DLL . Primero yo examin� la tabla de importaci�n para ver de lo que es capaz y buscar importaciones sospechosas. Huh, encontrar�s mucho. Lo que debe hacer sonar tus campanillas es que es capaz de modificar entradas del registro pero tambi�n usa el material obsoleto PrivateProfileString (* .INI). Esto necesita una investigaci�n extensa.

W32dasm encuentra la primera aparici�n de GetPrivateProfileStringA aqu�:


    ...
    * Reference To: KERNEL32.GetPrivateProfileStringA, Ord:0112h
      
                                       |

    :100015EE   8B35A8010210 mov esi, dword ptr [100201A8]
      
    * Possible StringData Ref from Data Obj ->"rsagent.ini"
      

                                       |
    ...
    

Oops, intenta leer de un archivo llamado RSAGENT.INI Y�d�nde est�n normalmente guardadas �stas cosas * .INI? Correcto, nosotros lo encontraremos en nuestro directorio 'Windows':

[ReleaseSoft]
firstName=Goth
lastName=Nosferatu
company=!
street1=!
street2=!
city=!
state=
zip=12345
country=United States
geoType=110
phoneNum=!
faxNum=!
email=!
personalCode=
toneDial=1
callWait=0
needAccess=0
accessCode=9
intlPrefix=
callWaitStr=
mailStat-975135=0
ATTN=AT
MTONEDIAL=T
PULSEDIAL=P
DIALTHIS=D
WORDRESULT=V1
HANGUP=H0
ADDINIT=E0
ESCAPE=+++
OKAY=OK
NOCARRIER=NO CARRIER
CONNECTED=CONNECT
NODIALTONE=NO DIALTONE
BUSY=BUSY


No estaba all� justo despu�s de la instalaci�n. As� que se debe de haber sido creado mientras nosotros intent�bamos registrar el objetivo en la parte I. Examin�moslo. Busca algo que podr�a ayudarnos a registrarnos. Bien, hasta ' el email =! ' (S�, soy un perezoso bastardo. Yo introduc� todos �stos '! ') nada de importancia. �Pero espera, ' personalCode = '!

�D�nde hemos visto nosotros esto antes? Si hiciste lo que yo te dije en la parte II sabr�s donde. Usa BRW. �Mira en dialog 2011! �Cu�l es el t�tulo de este di�logo? 'Complete Mail / Fax Payment'! Hm, Mail?, Fax? no puedo recordar ninguna posibilidad de orden por Mail / Fax durante el procedimiento ' Buy now'. Echa una mirada a dialog 2001. Nuestro viejo amigo de la PARTE I 'Select Communication Method' pero este di�logo permite pedir por tel�fono y mail/fax. �As� que debe ser posible conseguir dialogar 2011 sin completar la conexi�n del Internet/m�dem!

Todas las entradas son bastante explicativas por si mismas pero �qu� es lo que est� sobre esta entrada ' mailStat-975135=0 '? Cambi�moslo a 1, reinicia NU (n. del t.:expresi�n para apremiar, apurar) y prueba el procedimiento de 'Buy now' de nuevo. �Cambi� algo? �Por supuesto! Nosotros estamos finalmente en di�logo 2011. All� nosotros tenemos un ' Personal Code' y lo que no tenemos es un ' Unlocking Code'. Pero no por mucho tiempo...



PARTE IV - RSAGNT32.DLL's construyendo un KeyGenerator
Nosotros sabemos que nuestro ' Unlock Code' ser� recibido a trav�s de dialog 2011. As� que debes poner un bpx GetDlgItemTextA en SoftICE. Entra un unlock code ficticio (ej. gothtog ) y despu�s de apretar F12 SoftICE aparecer� aqu�:



    :10005612    mov edi, 10032E20              <= nuestro unlock code 
    :10005617    or ecx, FFFFFFFF 
    :1000561A    xor eax, eax 
    :1000561C    repnz 
    :1000561D    scasb 
    :1000561E    not ecx 
    :10005620    dec ecx 
    :10005621    cmp ecx, 0000000A 	          <="�Tiene" 10 cars de largo? 
    :10005624    je 10005665 	          <="�Si!" => Ir a control de validaci�n!
    :10005626    lea edx, dword ptr [esp+10]    !No! => ...

      
    * Possible StringData Ref from Data Obj ->"Sorry, that unlocking code is not valid for
    this program."
                   

                                                         |
    :1000562A    push 10023890
    :1000562F    push edx
    :10005630    call 10014590

    

Camina encima de las instrucciones pr�ximas, cambia a cero flag a 10005624 y camina hasta que alcanzas:


    :100056A8    push ecx
    :100056A9    push edx
    :100056AA    push eax
    :100056AB    call 1000B980                  	    <= calcula el c�digo real 
    :100056B0    add esp, 0000000C 
    :100056B3    lea ecx, dword ptr [esp+000000D8] 
    :100056BA    push 10032E20     		     <="nuestro" c�digo 
    :100056BF    push ecx 		  	     <="c�digo" real 
    :100056C0   call 1001F5C0   	    	     <="comparaci�n" 
    :100056C5   add esp, 00000008 
    :100056C8   test eax, eax 	       	     <="si comparaci�n falla (eax!= 0)" 
    :100056CA   jne 1000597C 	      	     <= Conseguimos 'Sorry, that...' 
 
 

En 100056BA descargamos ecx y conseguimos un perfecto c�digo unlock de 10 cars de largo como: �' RQXKNKQJPP'
(Este c�digo es s�lo v�lido si tu personal code era ' 1234567890 ' y el programa era Dreamweaver!

A prop�sito, t� unlock codes cambia si modificas tu entrada ' personalCode' y tu ' mailStat-975135 ' en RSAGENT.INI!)

Deja SoftICE (F5). Introduce el unlock code y conseguimos una ventana de ' Enter your serial'.
(Raro!) �Aqu� introducimos nuestro unlock code de nuevo y est� hecho!




PARTE V - Resumen y Suplemento


Nosotros no tendremos que tratar con ninguna rutina de encriptaci�n ya que SalesAgent 3.0 puede derrotarse en menos de 2 min.:





- cambia ' personalCode = ' a ' personalCode=1234567890 ' y ' mailStat-975135=0 ' a ' mailStat-975135=1 ' en RSAGENT.INI
(si no hay ning�n RSAGENT.INI crea uno!)


- arrancas el procedimiento de ' Buy now' y


- entra ' RQXKNKQJPP' como unlock code
(s�lo si est�s crackeando Dreamweaver)






Crackeando SalesAgent 3.0 TRY FIRST (V�ctor Porguen)


Atr�s en los 'viejos tiempos' nosotros cre�bamos virus bastante enga�osos que usaban ' las t�cnicas del sigilo' para esconder cambios del c�digo de CRC y checksum. Simplemente poniendo, cuando la rutina que comprueba la integridad abr�a el archivo, o hacia un archivo de lectura, el c�digo viral sustitu�a el c�digo correcto en lugar del c�digo modificado previendo descubrimiento sin tener en cuenta la complejidad del algoritmo de CRC. Este mismo concepto puede aplicarse para crackear programas de tiempo limitado que van al problema de controlar la integridad el ejecutable del archivo del disco (como opuesto a verificar el c�digo mientras est� en memoria).

Programas protegidos por SalesAgent puede tener el interface com�n de Try-Buy x-d�as que todos nosotros hemos aprendido a amar. Un ejemplo de esto podr�a ser WinFAX En pro de 9.0 de Symantec que es el programa de ejemplo para este ensayo. crackear la limitaci�n de fecha mientras SoftICE est� cargado en memoria es un ejercicio bastante trivial. No obstante nosotros debemos dirigir primero el actual ' crack' antes de que podamos examinar el aspecto m�s interesante de derrotar el control de integridad de archivo. Los m�todos usuales de trazado a trav�s del c�digo, son poniendo breakpoints apropiados, y as� adelante te llevar� a la rutina que espera el ' click' en 'Buy Now', 'Try First' o en la opci�n ' Cancel' - por supuesto, que la opci�n de 'Try First' estar� desactivado despu�s de 30 d�as. Uno de los m�todos m�s simples para localizar este �rea de c�digo es poner un breakpoint en DialogBoxParamA. Cuando SoftICE salta, F11 ejecutar� la LLAMADA, pulsa en el bot�n 'Try First' y SoftICE saltar� una vez m�s, y entonces F12 romper� en el Retorno del subprograma que ser� OFFSET 00408BA7. Estar�s sent�ndote ahora justo de golpe en el medio de la rutina que comprueba la fecha y el crack necesario deben estar f�cilmente claro. Aqu� est� el desensamblado:


      :00408B75 A3E8864300               MOV      [004386E8],EAX 
      :00408B7A 892D14864300            MOV      [00438614],EBP 
      :00408B80 E84B960100               CALL      004221DO 
      :00408B85 83C408                     ADD       ESP,08 
      :00408B88 85CO                        TEST     EAX,EAX 
      :00408B8A 751D                        JNZ        00408BA9 
      :00408B8C 6868044300               PUSH     00430468 
      :00408B91 68A0834300               PUSH     004383AO 
      :00408B96 E835960100               CALL      004221DO 
      :00408B9B 83C408                     ADD        ESP,08 
      :00408B9E 85CO                        TEST      EAX,EAX 
      :00408BAO 7507                        JNZ        00408BA9 
      :00408BA2 E809D5FFFF               CALL      004060BO 
      :00408BA7 EB05  		 JMP        00408BAE 
      :00408BA9 B801000000 		 MOV       EAX,00000001 
      :00408BAE 83F8FF 	  	 CMP        EAX,-01 
      :00408BBI 55 		   	 PUSH      EBP 
      :00408BB2 7514 		 JNZ        00408BC8 
      :00408BB4 FF1540D24200            CALL      [USER32!PostQuitMessage] 
 
 

Una segunda revisi�n de este desensamblado revela el hecho que si el programa ejecuta la instrucci�n en 00408BA9 no habr� ninguna expiraci�n del programa.

Adem�s, si el programa no ejecuta la LLAMADA en 00408BA2 el "nag screen" nunca se visualizar�.


De estos dos hechos fluye la conclusi�n obvia que si la LLAMADA en 00408B80 devuelve EAX como nada excepto cero, entonces el programa estar� crackeado.

Poniendo la fecha del sistema adelante para caducar el programa y poniendo un breakpoint en 00408B8A y 'forzando el jump' a trav�s de la limpieza manual del flag de cero, mientras est�s bajo SoftIce confirma que esto es el crack verdaderamente.



Cuando ataqu� este programa por primera vez, pens� para m� que estaba bastante decepcionando...
' Hmm, s�lo cinco minutos para crackear el programa. '


Sin embargo, cuando yo hice el cambio del byte actual en el en el archivo de disco FAXMNG32.EXE, produjo fallo de p�gina.

Asum� inmediatamente que ten�a el parche "empa�ado" (qu� no era nada m�s que hacer el salto condicional incondicional)
.
Sin embargo, bajo SoftICE, el parche estaba exactamente como debe ser - y no hab�a ninguna raz�n te�rica para que este parche debiera crear fallos de p�gina involuntariamente, por consiguiente los fallos de p�gina deb�an de ser a prop�sito
(y yo no podr�a estar m�s contento).


El primer paso, por supuesto, era poner un breakpoint a un registro del debug para las lecturas de memoria en el primer byte del parche para ver si la rutina de integridad estuviera verificando la memoria.


No era, as� que, la �nica otra posibilidad era que estaba verificando el archivo del disco.
Poniendo un punto de ruptura en CreateFileA y repasando los nombres de los archivos que eran abiertos confirmamos que el programa estaba inspeccion�ndose en disco verdaderamente - y no s�lo una vez, estaba ejecutando un hilo en segundo plano eso constantemente estaba verificando la integridad del archivo.



Qu� bonito. Simplemente renombrar el archivo y guardar una copia del archivo original intacto no era la soluci�n ya que el programa era bastante brillante para realmente abrir y verificar el archivo bajo el nombre que estaba ejecutando as� como tambi�n el nombre correcto de FAXMNG32.EXE.


Es a estas alturas nos dirigimos al problema para el que este ensayo realmente est� designado:
derrotando Controles de Integridad de Archivo A trav�s del Redireccionamiento. El primer paso en el proceso es determinar la direcci�n de la LLAMADA que est� abriendo FAXMNG32.EXE para comprobar.


Poniendo un breakpoint en CreateFileA como detallamos anteriormente encuentra la llamada en un momentito.
Aqu� debajo est� el desensamblado de la llamada que repetidamente abre FAXMNG32.EXE y qu� nosotros queremos ' interrumpir ':


      :00421B72 55                    	PUSH     EBP 
      :00421B73 51                    	PUSH     ECX 
      :00421B74 53                    	PUSH     EBX 
      :00421B75 52                    	PUSH     EDX 
      :00421B76 50                    	PUSH     EAX 
      :00421B77 FF1568D04200           CALL      [KERNEL32!CreateFileA] 
      :00421B7D 8BF8                        MOV      EDI,EAX 
    

El paso pr�ximo es encontrar una �rea de c�digo que sea conveniente para contener nuestra ' cautelosa ' rutina que sustituir� una copia '�ntegra' del archivo por la copia crackeada. Si miramos atr�s a que donde nosotros sabemos que debemos insertar el crack vemos la LLAMADA 004221D0 a offset 00408B80, qu� sabemos que es la clave para derrotar el control de la fecha. Si el c�digo de esta rutina no es llamado en otra parte del programa, podemos utilizar ese �rea del c�digo para alojar nuestra rutina y que esa LLAMADA devuelva EAX como no cero (qu� es el CRACK!) . Poniendo un breakpoint en 004221D0 confirma que la rutina s�lo es usada para verificar la fecha, as� que nosotros tenemos espacio ahora para trabajar. Primero, aplicamos el crack para que la LLAMADA a offset 00408B80 siempre devuelva EAX como no cero. Poniendo el valor de uno en AL y RETornando lo har� muy bien. As� ahora tenemos el siguiente c�digo para un peque�o crack a offset 004221D0:


      :004221DO BOO1                  MOV      AL,01 
      :004221D2 C3                       RET 
    

Ahora debemos crear la rutina, justo despu�s del c�digo del peque�o crack, que verificar� el nombre del archivo que ser� abierto y, si es el archivo FAXMNG32.EXE designado, cambia el nombre del que ser� abierto a un archivo que sea id�ntico pero �ntegro ("virgen"). Si no es el archivo designado, simplemente abre cualquier archivo nombrado y lo enlaza atr�s al c�digo correcto. Si es el archivo designado, abre el archivo 'virgen' que es id�ntico al FAXMNG32.EXE original �ntegro, y entonces enlaza atr�s al c�digo correcto. Para el archivo "virgen" yo escog� nombrarlo !AXMNG32.EXE debido a la simplicidad de cambiar una letra en el nombre. Aqu� est� un desensamblado de �se c�digo


1) examina la direcci�n en la pila para cero, indicando el extremo del path del nombre del archivo,

2) comprueba el nombre del archivo, y si es el archivo designado, reemplaza la primera letra del nombre con un "!" que es el nombre del archivo virgen

3) abre el archivo (tanto si el nombre fue cambiado o no) y JMP atr�s al c�digo correcto.


      :004221D3 5B POP EBX 
      :004221D4 53                            PUSH     EBX 
      :004221D5 8A03                         MOV     AL,[EBX] 
      :004221D7 43                             INC      EBX 
      :004221D8 OACO                        OR       AL,AL 
      :004221DA 75F9                         JNZ      004221D5 
      :004221DC 83EBOD                     SUB      EBX,OD 
      :004221DF 813B4641584D            CMP      DWORD PTR [EBX],4D584146 
      :004221E5 7515                          JNZ      004221FC 
      :004221E7 817B044E473332         CMP      DWORD PTR [EBX+04],3233474E 
      :004221EE 750C                          JNZ      004221FC 
      :004221FO 817B082E455845         CMP      DWORD PTR [EBX+08],4558452E 
      :004221F7 7503                          JNZ      004221FC 
      :004221F9 C60321                      MOV      BYTE PTR [EBX],21 
      :004221FC FF1568D04200            CALL     [KERNEL32!CreateFileA] 
      :00422202 E976F9FFFF                 JMP      00421B7D 
    


El paso final simplemente es escribir el c�digo ' interruptor ' que no es nada m�s que reemplazar la LLAMADA a CREATEFILEA con un jmp a nuestra cautelosa rutina. Aqu� est� el desensamblado del c�digo que est� anteriormente listado despu�s del parche ' interruptor ' de seis bytes :


      :00421B72 55                    PUSH      EBP 
      :00421B73 51                    PUSH      ECX 
      :00421B74 53                    PUSH      EBX 
      :00421B75 52                    PUSH      EDX 
      :00421B76 50                    PUSH      EAX 
      :00421B77 E957060000       JMP         004221D3 
      :00421B7C 90  	      NOP 
      :00421B7D 8BF8 	      MOV EDI,EAX  

 


Eso lo es. El programa est� completamente crackeado ahora. El hilo en segundo plano que continuamente verifica la integridad del archivo es remitido a una copia virgen del ejecutable cada vez que es llamado - qu� por supuesto le permite pasar cualquier CRC, checksum, o algoritmo similar.


Como nota final, apuntar� al lector a
http://www.releasesoft.com que al parecer fue el autor del ' sistema de comprobaci�n de integridad' que Symantec us� en WinFax.


Al parecer, el sistema de protecci�n est� bastante extendido. Lastimoso, realmente.




 
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.