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