PDA

Ver la versión completa : Conocer una protección Sentinel Superpro



alana
26-08-2009, 17:17
Saludos a todos.

Hace bastante tiempo que intento conocer cómo funciona la protección de programas que utilizan el sistema de protección tipo Sentinel Superpro.

Lo cierto es que he buscado en casi todos los rincones de la red, hasta donde he sido capaz de buscar, y no he hallado nada.

Lo que pretendo es conseguir identificar las APIs que utiliza el Sentinel.

Muchas gracias a quien pueda ofrecerme algún tipo de consejo.

alana
16-09-2009, 00:37
Hola a todos de nuevo. Acabo de conseguir lo que quería. Sólo me hacía falta la signature adecuada. Ya tengo pilladas todas las APIs.
Gracias.

distropia
19-09-2009, 22:58
Buenas! He leido tu pregunta y autorespuesta :)
Me encuentro en una situacion parecida, pero con el Autokitchen Pro 7.
En este caso, no dispongo de la llave para poder hacer el dump y he leido decenas de paginas en las que no se da ninguna solucion si no tienes la llave original (en mi caso, cerro la empresa y vendieron el ordenador con la llave insertada!!!!).
El caso es que recurro a ti, a ver si en algun sitio has leido alguna solucion donde no haga falta la mochila/llave original, o si se pueden compartir "dumps" de una llave a otra o son especificos para cada una...
Mil gracias y siento no haberte podido ayudar yo a ti.

alana
21-09-2009, 18:35
Hola, distropia.

Creo que no existe ninguna llave o mochila sentinel igual a otra, a menos, claro está, que la clones, para cuyo caso te hace falta la original. Tampoco creo que te sirva el dumpeado de una mochila para otra, ni siquiera para el mismo programa. Cada mochila está personalizada para un programa con su licencia en concreto, que contiene los datos de la versión, cliente, etc...

Desde mi experiencia, puedo decirte que sin tener la mochila original, lo único que puedes hacer es utilizar un desensamblador para el programa que quieres utilizar. Una vez desensamblado, deberás identificar todas y cada una de las funciones que el programa utiliza para comunicarse con la mochila Sentinel. Es decir, deberás tracear una a una, desde su llamada (CALL) hasta su salida, y conseguir que la respuesta final de cada función sea la que daría la mochila si estuviese colocada en el ordenador.

Las "signatures" de IDA de las que yo hablo en este tema, consiguen identificar esas APIs. Después de haberlas identificado, y conociendo la teoría del funcionamiento de dichas APIs se puede limpiar cada una de estas, y conseguir un ejecutable que emule todas las funciones. (En el caso de Sentinel Superpro existe una guia de los desarrolladores de este tipo de protección, que se puede descargar por la red)

Bueno, esto es todo lo que yo soy capaz de decirte, y no quiere decir que esté bién dicho. Por eso, dejo en manos de algún experto, colaborador o moderador o administrador, una mejor opinión que, por mi parte será bién acogida, y agradecida.

Espero que esto te sirva de ayuda, y también me gustaría saber si has conseguido algo.

Hala, mucha suerte y un saludo.

Alana.

elios48
22-09-2009, 09:18
Me alegra saber que lo has conseguido, yo pude con el Curvado y el Toolcad pero a lo bestia pero nunca he podido con el clip este si daba errores y se colgaba. Tambien he probado con todas las signatures(ida) que he encontrado por la red al menos eso creia yo
y el olly nunca ha encontrado ninguna api incluso probando en clip mas antiguos por lo de la version del sentinel, nunca he conseguido nada por ello me gustaria que explicaras un poco el procedimiento que has seguido para llegar a buen puerto
Con las strings referencias he encontrado lo que parece api pero sin el prefijo rnbospro a pesar de poner bpx en todas me sale el error antes de parar, algo paso por alto pero no se que es.Si estas son las apis no haria falta las signatures del ida pero el caso es que no para y por tanto esa es la duda.
...gracias
Me alegra saber que lo has conseguido, yo pude con el Curvado y el Toolcad pero a lo bestia pero nunca he podido con el clip este si daba errores y se colgaba. Tambien he probado con todas las signatures(ida) que he encontrado por la red al menos eso creia yo
y el olly nunca ha encontrado ninguna api incluso probando en clip mas antiguos por lo de la version del sentinel, nunca he conseguido nada por ello me gustaria que explicaras un poco el procedimiento que has seguido para llegar a buen puerto.
Con las strings referencias he encontrado lo que parece api pero sin el prefijo rnbospro a pesar de poner bpx en todas me sale el error antes de parar, algo paso por alto pero no se que es.Si estas son las apis no haria falta las signatures del ida pero el caso es que no para y el por que aun no lo se. A ver si nos puedes explicar algo mas conciso...gracias

alana
22-09-2009, 10:41
Buenas, elios48.

Si no has reconocido ninguna función del Sentinel en OllyDbg, talvez te ocurra lo que me pasaba a mí: no tenía la signatura adecuada. Prueba con esta que, creo yo, es la más reciente que hay por ahí, y te la puedes descargar aquí:

http://ricardonarvaja.info/WEB/OTROS/HERRAMIENTAS/Q-R-S-T-U/sentinel%20new/

El archivo se llama "sspro6x-sig-r9.zip"

(Respecto a la versión del driver de sentinel, no creo que tengas problemas, por que yo lo he probado con la versión 7.4 y ha funcionado.)

Cuando lo tengas, mételo en la carpeta sig de IDA. Carga el programa, clip o el que sea, en IDA. Selecciona esta signatura que te has descargado. Ahora, tendrás que ser paciente y esperar unos minutos para que se indentifiquen todas las funciones (en mi ordenador tardó de 10 a 15 min.). Ya verás cómo te identifica unas 300 funciones o más. A continuación deberás crear un fichero con extensión .map. Luego, en Olly, abres el programa, cargas el fichero .map con el plugin MapConv sustituyendo las Labels y esperas otro rato (menos que en IDA). Ahora te vas a ver las funciones (Control+N) y muy despacito, para no pasarte de largo, buscas las del sentinel que estarán todas juntas con sus nombres y apellidos, y encabezadas por el prefijo “RNBOspro”. Aquí les puedes poner el BP a todas ellas y empezar.

Bueno, espero que esto te sirva de algo. Mucha suerte y un saludo.

Alana.

elios48
23-09-2009, 09:40
gracias alana, ya me he descargado la signature la probaré el fin de semana y ya comentaré los resultados ya que tengo poco tiempo.. un saludo

elios48
29-09-2009, 11:35
Efectivamente, ahí están todas las apis de sentinel, ahora puedo empezar de hecho ya he empezado y la cosa parece que va bien. Me he quedado en la útima que es sproQuery y la repite varias veces y con ello el programa ya arranca. Continuaré el próximo fin de semana... un saludo y gracias de nuevo

yeyo2006
13-10-2009, 22:32
Quisiera hacerte unas consultas respecto de la llave para el Clip, he tratado enviarte un mensaje privado pero creo que no te ha llegado;
Gracias.

:):):):):)

clarinetista
14-10-2009, 11:07
yeyo2006, lee las normas

elios48
19-10-2009, 12:56
Estoy atrancado con sproQuery, no se la respuesta adecuada y el programa se cuelga.
Alguna sugerencia..? gracias y un saludo

alana
19-10-2009, 18:16
Hola, elios48.

Quizás esto te pueda servir:

RNBOsproQuery

Esta función se utiliza para invocar un algoritmo activo en la dirección especificada. Esta dirección debe ser el primer word de un algoritmo activo. El puntero a los datos a encriptar apuntará al primer byte de los datos que se pasan al algoritmo activo. La longitud de esos datos se especifica en la variable length.

Si la función tiene éxito la respuesta, que tendrá la misma longitud que los datos iniciales, será colocada en la dirección apuntada por el puntero response. Los últimos 4 bytes de response serán colocados en la variable response32.

Cada byte que se quiere encriptar puede contener valores de 0 a 255. Cada byte de respuesta también puede contener bytes con valores entre 0 y 255. La longitud de la respuesta siempre va a ser la misma que la de los datos iniciales.

Si la dirección no es el primer Word del algoritmo activo, devolverá un status code correcto y la respuesta será la misma que los datos iniciales

Formato

unsigned short int RNBOsproQuery(

RB_SPRO_APIPACKET packet,
Unsigned short int address,
VOID *queryData,
VOID *response
Unsigned long *response32
Unsigned lshort int length
);

Parámetros

packet ............................Puntero a RB_SPRO_APIPACKET record.
address ............................Dirección del Word del algoritmo
queryData ............................Puntero al primer byte de los datos a encriptar
response ............................Puntero al primer byte de la respuesta
response32 ............................Puntero al lugar que contendrá una copia de los últimos 4 bytes de la respuestaDirección del Word del algoritmo
length ...........................Número de bytes que se envían al algoritmo activo para encriptar y que es también la longitud de la respuesta.

Retorno

Si es correcto devuelve SP_SUCCESS(0). Si ocurre un error, la función devuelve un código de error.

Las variables del APIPACKET varían como sigue:

INPUT: functioncode = API_QUERY
: memoryaddress = Dirección de la celda
: QueryIn = Puntero de 32 bits a la cadena que se encriptará
: QueryOut = Puntero de 32 bits a la cadena de respuesta
: datalength = longitud de la cadena a encriptar

OUTPUT: Status = 0 if successful
: QueryOut = Puntero de 32 bits a la cadena de respuesta
: longResult = últimos 4 bytes de la respuesta

Por cierto, ¿ya has resuelto RNBOsproRead...? Ya me contarás.
Un saludo.

Alana

elios48
27-10-2009, 12:03
Espero que me disculpes por mi tardanza pero es que de tiempo estoy fatal.Ya habia leido "Emulando una mochila Sentinel SuperPro por Lionel" pero gracias de todas formas, si te dire que el proceso a seguir es FormatPacket luego Initialize, SetContactServer, FindFirstUnit y dentro de esta está GetContactServer, luego termina FindFirstUnit y continua con HardLimit, GetSubLicense, Read y por ultimo Query y el programa aunque fallando arrancará.Todo ello se consigue simplemente poniendo eax=0 a la salida de la api en cuestion. En el caso de sproRead viene perfectamente explicado en el tuto anterior, mira en el stack la direccion de escritura, le pones un breakpoint on access, recureda que eax=0 al salir de la api y caerás en una comparacion del tipo CMP ECX,EDX que deberán
ser iguales. Si lo son llegarás a sproQuery que lo repetirá ocho veces antes de que funcione y en esta sigo aun sin poder resolver, estoy atrancado en
FSTP QWORD PTR DS:[ESI+9] convierte el valor de esi+9 en un numero decimal largisimo y luego le pierdo la pista al numerito, seguiremos estudiando...

alana
27-10-2009, 18:30
Hola, elios48.
Lo que yo no entiendo es por qué hay que poner siempre EAX = 0… es decir, en mi caso, tengo el programa y tengo también la mochila. Cuando hago correr el programa en Olly, y tengo puesta la mochila, pongo los BPX en todas las APIS del Sentinel, y cuando salgo de ellas, EAX nunca vale cero. En el tutorial del Lionel sí tiene sentido, pero al desensamblar otro programa con otro código, ¿no debería ser diferente la respuesta de la mochila, en función del código?.

harrypits
30-10-2009, 08:30
Hello Friends ....

Why it so much important !!!!!
And How could I ?????