TSRh TeaM PROUDLY PRESENTS
U-Wipe 2.5 *Spanish Tutorial Parte I*
=========================================================================================================
[Product ] ................................................................................U-Wipe 2.5
[WebSite ] .....................................................................http://www.u-wipe.com
[Tools ] ..................Olly, PeiD, CryptoCal, Table Recognizer, Kanal 2.2, Damn Hash Calculator
[Protection] .......... ..........................Serial, MD5 (MD5 is a copyright of RSA Data Security)
=========================================================================================================
Desde hace alg·n tiempo he venido viendo que muchos programas estßn migrando a algoritmos de cifrado
esto para hacer uso de estos mismos en sus bloqueos para los sistemas de registros, muchos programas
utilizan actualmente algoritmos como MD5, SHA1, SHA160, RC4, RSA, Blowfish, TEA, Twofish, Rijndael, etc.
La documentaci≤n que existe respecto a estos algoritmos es muy poca he inintelegible para aquellos a
quienes la matemßtica no fuΘ su fuerte en el colegio. Esto mismo ha hecho que muchos crackers tambien
se preocupen por estar actualizados y tratar de entender los mΘtodos de trabajo de los mismos algoritmos
a fin de que los programadores vean que ning·n sistema de seguridad es irrompible a menos que no lo
divulguen y lo usen ·nicamente para sus ojos.
Nota: Esto estß escrito para fines didßcticos ni el Autor ni el Grupo TSRh se hacen responsables por el
mal uso que esta informaci≤n pueda producir. Se solicita al lector que si este programa le es ·til pueda
adquirirlo, al programador indicamos que la publicidad de su sitio y su programa es netamente gratuita.
INICIO:
Haciendo uso de las herramientas nos cercioramos que tipo de protecci≤n tiene este programa, vamos a la
carpeta en que lo tenemos instalado y damos clic derecho en el archivo con nombre uwipe.exe, seleccionamos
la opci≤n que nos aparece en el men· contextual referente a Scan with PEiD, este nos informa lo siguiente
Borland C++ 1999
En otras palabras este programa no ha sido empacado lo cual nos ahorra un gran trabajo y mßs letras.
Sabiendo esto cargamos nuestro debugger, previamente hemos copiado la direcci≤n en que el programa estß
ubicado, esto lo hemos hecho mediante PEiD. Vamos a la opci≤n File->Open de Olly y pegamos la ruta de
nuestro programa, hacemos clic en Abrir y esperamos a que nuestro programa sea cargado y automßticamente
se coloca en el OEP del programa...
00401578 > $ EB 10 JMP SHORT UWIPE.0040158A
Seguidamente vamos a la opci≤n Debug->Run y el programa se ejecuta, mostrßndonos una linda ventanita con
la opci≤n de registro y nos dice que nuestro programa expirarß en 15 dias. Hagamos clic en el bot≤n
Register, nos aparece otra ventana con cuatro TextBox, los cuales tenemos que llenar con la informaci≤n de
registro que nos puede ser enviada si ya hemos comprado el programa, en nuestro caso los valores que
ingresaremos serßn valores falsos, haciendo creer al programa que tenemos un serial bueno el cual el
programa chequearß para compararlo con el verdadero (esto ya lo saben).
Los datos que ingresaremos serßn...
First Name: ByTESCRK
Last Name: TSRh TEAM
ID: 20030808
En el ultimo campo vemos que el programa tiene predefinido el formato para ingreso de informaci≤n:
0000-0000-0000-0000-0000-0000-0000-0000
Lo cual hace que nos de un escalosfrφo en el cuerpo debido al tama±o del serial, asumiendo como en otras
experiencias (me refiero al programa Nero Burning Rom) en donde el programa no necesita los guiones y los
elimina el comparar los seriales los eliminarΘ quedando un valor menor 32 n·meros
S/N: 00A10B20C30D40E50F60H70I80J90K00
El cual se ajusta realmente a lo necesario en el campo S/N.
Hacemos clic en OK y bualß, el programa se cierra al comprobar que el serial es falso. Entonces plan B.
Cargamos el programa repitiendo lo del inicio de este tutorial.
Luego que el programa ha cargado vamos a Olly y en cualquier espacio en la ventana de Traceo hacemos clic
derecho y vamos a la opci≤n del men· Search For->All referenced text strings, el Olly empieza a buscar
todas las referencias de texto, vamos bajando lentamente y prestando atenci≤n a las que se encuentran y
nos da pßnico cuando vemos algunas referencias a algoritmos de inicializaci≤n de algunos mΘtodos
criptogrßficos (RSA, RSAMD2, RSAMD4, RSAMD5, RSAMD2RSA, RSASHA, etc.)
Nos encontramos con la linea
0041A39B MOV EDX,UWIPE.004C79E6 " Your trial version has expired "
La cual nos serφa ·til si nuestro programa ya estuviera expirado. Seguimos bajando y vemos algunas lineas
que nos hacen erizarnos mßs...
Microsoft Base Cryptographic Provider v1.0
Arriba de estas lineas tenemos las referencias al registro en donde quizß se guardan nuestros valores al
ser correctos, en este caso no lo son y por ende es casi cierto que no estßn allφ. Las lineas son las
siguientes...
0041EB3A |. BA F09D4C00 MOV EDX,UWIPE.004C9DF0 ; ASCII "Software\NRLab\U-Wipe\"
0041EBC9 |. BA 0B9E4C00 MOV EDX,UWIPE.004C9E0B ; ASCII "ID"
0041EC24 |. BA 0E9E4C00 MOV EDX,UWIPE.004C9E0E ; ASCII "OwnerName"
0041EC7F |. BA 189E4C00 MOV EDX,UWIPE.004C9E18 ; ASCII "OwnerLastName"
Hacemos doble clic en la primer linea... apaceremos aqui...
0041EB34 |. 66:C743 10 1400 MOV WORD PTR DS:[EBX+10],14
0041EB3A |. BA F09D4C00 MOV EDX,UWIPE.004C9DF0 ; ASCII "Software\NRLab\U-Wipe\"
0041EB3F |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0041EB42 |. E8 DDBF0900 CALL UWIPE.004BAB24
Abajo tenemos otras linea iguales y aparece incluso la notaci≤n PI bajo ellas (3.1415926535), curioso no
Las lineas son...
0041F04D |. BA 809E4C00 MOV EDX,UWIPE.004C9E80 ; ASCII "Software\NRLab\U-Wipe\"
0041F0B0 |. BA 9B9E4C00 MOV EDX,UWIPE.004C9E9B ; ASCII "ID"
0041F0E2 |. BA 9E9E4C00 MOV EDX,UWIPE.004C9E9E ; ASCII "OwnerName"
0041F114 |. BA A89E4C00 MOV EDX,UWIPE.004C9EA8 ; ASCII "OwnerLastName"
...
...
0041F23C |. B8 319F4C00 MOV EAX,UWIPE.004C9F31 ; ASCII "3.1415926535"
Por curiosidad ponemos un BP con F2 en esas direcciones...
Abajo nos aparecen algunos valores con el mismo formato que nuestro serial, serßn valores blacklisted...
con tantos escalofrφos que me he dado no quiero ni comprobarlos.
Ok, vamos a regresar a nuestro programa y hacemos clic en Register he ingresamos los valores nuevamente,
una vez ingresados hacemos clic en Ok y Bravo!!! el programa se para en la direcci≤n de la notaci≤n PI.
0041F236 |. 8D53 04 LEA EDX,DWORD PTR DS:[EBX+4]
0041F239 |. FF46 1C INC DWORD PTR DS:[ESI+1C]
0041F23C |. B8 319F4C00 MOV EAX,UWIPE.004C9F31 ; ASCII "3.1415926535" <--Aqui--
0041F241 |. 66:C746 10 1400 MOV WORD PTR DS:[ESI+10],14
0041F247 |. 66:C746 10 2000 MOV WORD PTR DS:[ESI+10],20
0041F24D |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
Ahora a tracear con F8... al ir traceando vemos que nada estß sucediendo en los registros, pero...
0041F2BD |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
0041F2C0 |. BA 02000000 MOV EDX,2
0041F2C5 |. E8 3EBA0900 CALL UWIPE.004BAD08
0041F2CA |. FF4E 1C DEC DWORD PTR DS:[ESI+1C]
0041F2CD |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
Al pasar el Call que se encuentra en 0041F2C5 nos aparece la siguiente cadena en EDX...
<----PI----><-Name-> <-LastN-><--ID-->
EDX=0149FEB4 3.1415926535ByTESCRK TSRh TEAM20030808
^
Space
Lo que nos indica que este es el string del cual debemos partir para generar un serial vßlido. Seguimos
traceando...
Vemos que el programa hace alguna operaci≤n en...
0041F31D |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0041F320 |. E8 9BFAFFFF CALL UWIPE.0041EDC0 <---En este lugar hace algo---
0041F325 |. 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
0041F328 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0041F32B |. E8 08BA0900 CALL UWIPE.004BAD38
0041F330 |. FF4E 1C DEC DWORD PTR DS:[ESI+1C]
0041F333 |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
0041F336 |. BA 02000000 MOV EDX,2
0041F33B |. E8 C8B90900 CALL UWIPE.004BAD08 <---Aqui nos devuelve un nuevo valor en EDX
0041F340 |. 8D53 10 LEA EDX,DWORD PTR DS:[EBX+10] <---En la pila vemos nuestro valor falso
0041F343 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] <---En la pila vemos el serial verdadero
0041F346 |. E8 A1BA0900 CALL UWIPE.004BADEC <---Hace la comparaci≤n
0041F34B |. 84C0 TEST AL,AL <---Si no son iguales 0 (zero) de lo contrario 1
0041F34D |. 0F85 918A0000 JNZ UWIPE.00427DE4 <---Vamos afuera y todo Ok.
*┐Como ver la pila? Hacer clic derecho en el valor de los registros EAX,ECX,EDX,etc. y hacer clic en la opci≤n del
men· contextual referente a Follow in Stack*
En nuestro caso ha devuelto zero, veamos que sigue haciendo el programa (traceando)... el programa va comparando
todos los seriales y si ya nos dimos cuenta sabremos que estos son seriales vßlidos de tipo HardCoded.... y
llegamos a este lugar...
00427DE2 |. 74 1F JE SHORT UWIPE.00427E03 <---Si ning·n serial es igual vamos a 00427E03
00427DE4 |> B0 01 MOV AL,1 <---De lo contrario AL recibe el valor de 1
00427DE6 |. BA 02000000 MOV EDX,2
00427DEB |. 50 PUSH EAX
00427DEC |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00427DEF |. FF4E 1C DEC DWORD PTR DS:[ESI+1C]
00427DF2 |. E8 112F0900 CALL UWIPE.004BAD08
00427DF7 |. 58 POP EAX
00427DF8 |. 8B16 MOV EDX,DWORD PTR DS:[ESI]
00427DFA |. 64:8915 00000000 MOV DWORD PTR FS:[0],EDX
00427E01 |. EB 1D JMP SHORT UWIPE.00427E20
00427E03 |> 33C0 XOR EAX,EAX <---Venimos aquφ y EAX recibe el valor de 0 (zero)
00427E05 |. BA 02000000 MOV EDX,2
00427E0A |. 50 PUSH EAX
Si quisieramos crackear el programa ese seria el lugar a parchar...
Unicamente cambiariamos los bytes 33C0 a B001 lo cual le indicarφa al programa que el serial es vßlido siempre...
pero nuestro objetivo es otro... y por el momento ni siquiera sabemos como se calcula el serial... y el programa se
ha cerrado nuevamente.
Continuarß....
=========================================================================================================
ByTESCRK ([email protected]) [TSRh TeaM]
08.08.2002, 01:45am