Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Noticias
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Blue Pill / Red Pill

Leo hoy en Kriptopolis:

Cita:
Empezado por Kriptopolis
Fueron por lana y salieron trasquilados. Tal y como estaba previsto, Microsoft habló sobre la seguridad de Windows Vista en Black Hat. Mientras tanto, en una sala contigua, la investigadora polaca Joanna Rutkowska mostraba cómo utilizar su técnica Blue Pill para insertar código malicioso en las mismísimas entrañas de una copia de Windows Vista versión 64-bit.
Dejando a un lado que los Rootkit que crea esta mujer dan miedo, y que podría callar algunas bocas que dicen que las mujeres no saben programar. Vamos a centrarnos en su pildorita. Básicamente su Blue Pill (al mas puro estilo matrix) consigue que nuestro windows se ejecute de manera virtual, al vuelo, sin necesidad de reiniciar la maquina ni hacer cambios en el disco duro. De este modo controla todo lo que "ve y siente" windows de hay la referencia a matrix. No voy a entrar en los detalles técnicos, porque estan muy por encima de mi nivel, y además ya lo hace ella en su blog, pero en su blog también menciona una sencilla función para detectar si windows se esta ejecutando de forma virtual y, como no podía ser de otra manera, la llamo Red Pill. Pues bien, me he tomado la libertad de traducir su función a delphi (espero que nadie se moleste) y aquí os la dejo (código fuente y exe) por si tenéis curiosidad de saber si estáis dentro o fuera de matrix

PD: Como la mayoría no estaréis infectados, podéis probar como funciona ejecutándolo dentro de VirtualPC o vmware.

Última edición por seoane fecha: 28-03-2008 a las 22:08:38.
Responder Con Cita
  #2  
Antiguo 05-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Muchas gracias como siempre Seoane.

Código Delphi [-]

/* Itento de comprensión del código fuente */

program Matrix;

uses Windows;

function SwallowRedpill: Boolean;
var
  RedPill: array[0..7] of byte; // Hum...
  m: array[0..5] of byte;       // + Hum...
  p: procedure; stdcall;        // ++ Hum...
begin
  // Vale, vale, por algún sitio hay que empezar...
  RedPill[0]:= $0f; RedPill[1]:= $01; RedPill[2]:= $0d; RedPill[3]:= $00;
  RedPill[4]:= $00; RedPill[5]:= $00; RedPill[6]:= $00; RedPill[7]:= $c3;

  // ¿Pero esto qué es lo que es? :-)
  PPointer(@RedPill[3])^:= @m;
  
  // ¿Y adónde vamos ahora?
  p:= @RedPill;
  
  // Y ahora ejecutamos... ¿el qué? XD
  p();
  
  // Menos mal... ;´)
  Result:= m[5] > $d0;
end;

begin
  if SwallowRedpill then
    // Para que te enteres macho...
    MessageBox(0,'Estas dentro de Matrix','Matrix',MB_OK)
  else
    // A ver qué va a pasar, ¿eh? 
    MessageBox(0,'Estas fuera de Matrix','Matrix',MB_OK);
end.

/* Fin del intento de comprensión del código fuente */

/* Resultados sobre 10: 2                           */

/* ¡Ouch! ^_* */
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 05-08-2006 a las 15:49:43.
Responder Con Cita
  #3  
Antiguo 05-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Tienes razón dec, la función quedo bastante extraña al intentar hacer una traducción mas o menos literal de la función en C. Pero viéndolo ahora con mas calma, recuerdo que Delphi permite escribir código en ensamblador sin tener que hacer este tipo de malabares.

La cosa ahora quedaría así:
Código Delphi [-]
function SwallowRedpill: Boolean;
var
  m: array[0..5] of byte;
begin
  // La instruccion SIDT nos devuelve el registro IDRT
  asm    
    SIDT m
  end;
  // Este valor toma unos valores caracteristicos si el sistema 
  // se ejecuta de forma virtual, vmware=$FF, VirtualPC=$E8, etc ... 
  Result:= m[5] > $d0;
end;

begin
  if SwallowRedpill then
    MessageBox(0,'Estas dentro de Matrix','Matrix',MB_OK)
  else
    MessageBox(0,'Estas fuera de Matrix','Matrix',MB_OK);
end.
Archivos Adjuntos
Tipo de Archivo: zip Matrix.zip (9,5 KB, 40 visitas)
Responder Con Cita
  #4  
Antiguo 05-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por dec
// ¿Pero esto qué es lo que es? :-)
PPointer(@RedPill[3])^:= @m;
Esto querido dec es la traducción mas o menos literal de esto otro:
Cita:
*((unsigned*)&rpill[3]) = (unsigned)m;
¿Que te parece?
Responder Con Cita
  #5  
Antiguo 05-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno... pues con el ensamblador ya lo has terminado de arreglar...

Pero se agradece el intento. Lo cierto es que no podemos estar en todo, ¿que no?

PD. Al menos hoy prefiero verlo así...
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 05-08-2006 a las 22:08:18.
Responder Con Cita
  #6  
Antiguo 05-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por dec
Hola,

Bueno... pues con el ensamblador ya lo has terminado de arreglar...
Estoy totalmente de acuerdo con dec.

__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 05-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola, yo de esto no entiendo nada. Pero nada de nada. Así que asustado me puse a probar la función y obtuve: "Estas dentro de matrix" Pero luego, me puse a ejecutarla varias veces seguidas y unas veces me dice que estoy dentro y otras que estoy fuera, algo casi aleatorio. ¿Me pueden explicar?

// Saludos
Responder Con Cita
  #8  
Antiguo 05-08-2006
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.107
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por seoane
Esto querido dec es la traducción mas o menos literal de esto otro:

*((unsigned*)&rpill[3]) = (unsigned)m;

¿Que te parece?
aaahhhh!!!, bueno, eso ya es otra cosa... ahora sí que está claro
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:23:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi