EnyeLKM 1.1.3

Language / Lenguaje:

http://www.fr33project.org/projects/enyelkm-1.1.3.rar

EnyeLKM 1.1.2 obtiene el SYSENTER en tiempo de ejecución con la instrucción: rdmsr( MSR_IA32_SYSENTER_EIP, psysenter_entry, v2 );

Ya no da un solo warning al hacer el make!!!

Además se ha reprogramado todo el base.c y se han creados dos módulos nuevos:

extern_symbols: donde existen funciones para obtener símbolos externo al LKM, por ejemplo:
/* thx to Int27h :-). */
void * get_sysenter_entry( void )
{
void * psysenter_entry = NULL ;
unsigned long v2 ;

if ( boot_cpu_has( X86_FEATURE_SEP ) )
rdmsr( MSR_IA32_SYSENTER_EIP, psysenter_entry, v2 );
else
return NULL;

return psysenter_entry;
}

También se ha creado el módulo lowlevel_layer: gracias a él podemos abstraernos muchísmo
en los módulos que hagan rastreo en memoria de opcodes y demás funciones, por ejemplo:

void set_idt_handler( void * system_call )
{
unsigned char * p;
push_ret_t push_ret;

p = (unsigned char *) system_call;

/* primer salto */
while ( !is_jnb_opcode( (unsigned char *) p ) )
p ++;

p -= DISTANCE_FROM_CMP_NR_SYSCALL_TO_JNB;

create_push_ret( & push_ret, (unsigned long) new_idt );
write_push_ret( ( void *) p, & push_ret )

Y antes esto era algo así:

void set_idt_handler(void *system_call)
{
unsigned char *p;
unsigned long *p2;

p = (unsigned char *) system_call;

/* primer salto */
while (!((*p == 0×0f) && (*(p+1) == 0×83)))
p++;

p -= 5;

*p++ = 0×68;
p2 = (unsigned long *) p;
*p2++ = (unsigned long) new_idt;

p = (unsigned char *) p2;
*p = 0xc3;

Como se puede apreciar ahora es mucho más fácil abstraerse del problema gracias a la capa “lowlevel”.
La siguiente cosa que desarrollare es la posible descarga del módulo, habrá que crear mínimo
otro módulo para la gestion de memoria con ESCRITURA-Y-RESTAURACIÓN para su descarga.

¿Qué te parece RaiSe? ¿Te mola?


Posted by David Reguera Garcia

2 Responses to “EnyeLKM 1.1.3”

  1. RaiSe Says:

    Me mola, me mola :). Quizas un poco excesivo tanto formalismo, pero bueno asi mucho mejor jeje. Lo del sysenter esta mucho mejor asi, aun no he podido probarlo, mañana lo pruebo en el vmware a ver q tal :). Lo de carga/descarga eso si es importante, porque a la hora de desarrollar menudo coñazo andar reseteando jeje. Lo de crear otro ‘modulo’ me habia confundido 1 poco, no es otro modulo, es otro fichero, no?, es que segun lo lei pense que cargabas otro lkm. Un saludo.

  2. David Reguera Garcia Says:

    Si es otro fichero, vamos módulo del proyecto, no del nucleo :-).

Leave a Reply

You must be logged in to post a comment.