Home > Crypto, Uncategorized > Introduccion a RSA – parte I

Introduccion a RSA – parte I

Hoy traigo un ejemplo practico para comenzar a meternos en los crypto challenges de RSA, documentacion sobra por todos lados pero esta media pobre. Con pobre me refiero a que son medios para gente muy avanzada que ya esta en el tema hace rato y no dan muchas pistas de como resolvieron tal o cual problema

Por cuestiones de espacio el tute fue dividido en dos partes, en esta trataremos el reverseo del programa, y en la segunda vamos a darle un poco a las matematicas con python para tratar de resolverlo

nuestro objetivo sera un crackme inocente que encontre en crackmes.de bajo el nombre de Ninja Crackme by Bart

esto no va a ser un tute sobre como resolverlo, sino que voy a dar algunos pantallazos para que me puedan seguir (no esperen que explique como poner un bp)

carita del crackme

miracl_II-1

para no dar muchas vueltas arranco el analisis desde la zona caliente (igual para caer ahi solo hace falta un bp en GetDlgItemTextA) y entrar en la siguiente funcion. Podemos ver que se le pasan como argumentos el nombre, serial y dos numeros hexadecimales en string

analicemoslo

miracl_II-2

el codigo no es nada dificil de seguir, en comentarios deje una interpretacion en pseudo-codigo para el que se pierde 🙂

miracl_II-3

esta parte es un poquito mas importante, ya esta poniendo filtros a nuestras entradas y nos esta diciendo como tienen que ser. En el caso del nombre son solo letras o espacios y el programa se encarga de hacerle un upper(), para el serial solo se admiten numeros del 0 al 9 y letras de la A a la F (un numero hexadecimal)

miracl_II-4

para reconocer las funciones MD5 hay varias formas, una es usar algun analizador criptografico como el que trae el RDG packer detector, o sino a mano traceando y viendo las changing variables (constantes usadas por MD5)

la funcion mr_compare tampoco aparecio a la primera con el pycommand que cree la vez pasada, esto se debe a que no tiene un numero magico asignado (no se porque), pero analizando las instrucciones y viendo despues el codigo fuente de miracl, salta facil de que funcion se trata. Pego aqui la funcion

PUSH R32
MOV R32,DWORD PTR SS:[ESP+C]
PUSH R32
MOV EBP,DWORD PTR SS:[ESP+C]
PUSH R32
CMP EBP,R32
PUSH R32
JCC
MOV R32,DWORD PTR SS:[EBP]
MOV R32,DWORD PTR DS:[R32]
MOV R32,R32
MOV R32,R32
AND R32,80000000
AND R32,80000000
MOV R32,R32
NEG R32
SBB R32,R32
AND R8,0FE
INC R32
CMP R32,R32
JCC
AND R32,7FFFFFFF
AND R32,7FFFFFFF
CMP R32,R32
JCC
JCC
POP R32
POP R32
POP R32
POP R32
NEG R32
RETN
TEST R32,R32
JCC
LEA R32,DWORD PTR DS:[R32+R32*4]
SUB EBP,R32
MOV R32,DWORD PTR DS:[R32+EBP]
MOV R32,DWORD PTR DS:[R32]
CMP R32,R32
JCC
JCC
DEC R32
SUB R32,4
TEST R32,R32
JCC
XOR R32,R32
POP R32
POP R32
POP R32
POP R32
RETN

las lineas que le marque son las que yo usaria para buscarla, (Search For–>Sequence of commands). Si aparece y ven que solo usa 3 argumentos, entonces estamos casi en condiciones de afirmar que se trata de mr_compare

veamos todo juntito para ver como queda el cuento

miracl_II-6

ahi lo vemos tranquilos, compara el md5 del nombre con el serial encriptado con RSA

Hasta aqui llego mi amor el dia de hoy, en la proxima entrega vamos a tener un par de formulitas dando vueltas para obtener nuestro serial y poder keygenerarlo

  1. NCR
    March 29, 2011 at 1:43 pm

    Hey! seguis con la onda! muy divertido el crackme! 🙂

  2. March 29, 2011 at 4:17 pm

    con poco tiempo y varios bardos, pero siempre haciendome un tiempito para jugar 😉

  1. No trackbacks yet.

Leave a reply to PASTAFR0LA [RCE] Cancel reply