Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Noticias (https://www.clubdelphi.com/foros/forumdisplay.php?f=34)
-   -   Blue Pill / Red Pill (https://www.clubdelphi.com/foros/showthread.php?t=34331)

seoane 05-08-2006 15:31:23

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 :D

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

dec 05-08-2006 15:43:42

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! ^_* */

seoane 05-08-2006 18:05:41

1 Archivos Adjunto(s)
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.

seoane 05-08-2006 18:09:29

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;
:D ¿Que te parece?

dec 05-08-2006 22:02:13

Hola,

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

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

PD. Al menos hoy prefiero verlo así... ;)

Casimiro Notevi 05-08-2006 22:15:06

Cita:

Empezado por seoane
Esto querido dec es la traducción mas o menos literal de esto otro:

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

:D ¿Que te parece?

aaahhhh!!!, bueno, eso ya es otra cosa... ahora sí que está claro :D:D:D

Lepe 05-08-2006 22:24:34

Cita:

Empezado por dec
Hola,

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

Estoy totalmente de acuerdo con dec.

:D :D :D

roman 05-08-2006 23:53:16

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

mamcx 06-08-2006 00:54:43

Eso es porque estas corriendo sicodelicamente intentando alcanzar la meta y recibes espamos de realidad.

Ten cuidado, al llegar, te desplomas.

;)

mamcx 06-08-2006 00:55:32

De todas maneras aunque tampoco me va muy bien con algo tan de bajo nivel conceptualmente es un hack, que viendolo bien, es obvio. Eso es lo mas preocupante.

seoane 06-08-2006 01:00:45

Yo no entiendo mas que tu, me limite a copiar lo que decía ella. Solo puedo decir que a mi me funciona, si lo ejecuto en un windows real (Windows XP SP2) siempre me da que no es virtualizado. Sin embargo si lo ejecuto en un XP SP2 sobre vmware lo detecta, y si lo hago en un w98 o w2000 sobre VirtualPC también lo detecta.

El método no es infalible, ya que se basa en la suposición de que en un sistema real el contenido del registro IDRT es diferente que en un sistema virtual. De hecho deja entrever que se puede usar el contenido de este registro para identificar el software que se utiliza para la virtualización, y anima a la gente a que mande los diferentes valores que toma, para así hacer una tabla que relacione cada sistema con un valor.

Lo que me asombra es que el contenido del registro, en tu caso Roman, se modifique todo el tiempo. No creo que ese sea un comportamiento normal, pero ¿quien soy yo para decir lo que es normal? :D . De todas formas yo pasaría un detector de rootkits, no esta de mas asegurarse.

http://www.sysinternals.com/SecurityUtilities.html

Y si alguno se anima a probar el programa en su equipo o en alguna maquina virtual, estaría bien que pusiera si funciona bien. Por cierto, el problema ¿te lo da con las 2 versiones o solo con una de ellas?

vtdeleon 06-08-2006 02:10:31

Me dice que estoy fuera. No importa las veces que lo ejecute.

Win'Xp SP2

Saludos

dec 06-08-2006 06:25:27

Hola,

Cita:

Empezado por Troi
Me dice que estoy fuera. No importa las veces que lo ejecute.

Win'Xp SP2

Saludos

Lo mismo puedo decir yo. Además añadiré que probé también el programa original (escrito en C) obteniendo el mismo resultado. ;)

roman 06-08-2006 06:44:43

Pues parece entonces que estoy dentro o por lo menos algo tiene raro mi pc. Nada más por no dejar dudas les pregunto: ¿han ejecutado varias veces una tras otra en una rápida sucesión? Es que es así cuando me empiezan a aparecer distintos resultados.

// Saludos

dec 06-08-2006 07:08:46

Hola,

Cita:

Empezado por Román
(...) ¿han ejecutado varias veces una tras otra en una rápida sucesión?

Sí; acabo de hacerlo tal como dices y "estoy fuera de Matrix"...

Neftali [Germán.Estévez] 07-08-2006 09:53:31

Yo he hecho algunas pruebas, y todas me han funcionado perfectamente:

* Windows 2000 ==> OK
* W98 (SE) + VirtualPC ==> OK
* WXP SP2 + VirutalPC ==> OK
* W98 + VMWare ==> OK
* WXP SP2 + VMWare ==> OK

Un saludo.

vtdeleon 07-08-2006 15:34:53

Cita:

Empezado por roman
¿han ejecutado varias veces una tras otra en una rápida sucesión?

Como Speedy Gonzalez y todo está correcto.

marceloalegre 07-08-2006 16:30:48

Anda muy bien
 
Muy lindo todo , en un vmware me dice que estoy dentro, sino me dice que estoy fuera...

Pero la funcion SwallowRedpill esta en un idioma que excede totalmente mis conocimientos :confused:

roman 13-01-2007 01:12:54

Vaya! Ha pasado tiempo desde esto. Finalmente he reinstalado mi pc. O, mejor dicho, estoy con una nueva aquí en el trabajo.

Según esto estoy dentro de Matrix (a veces dentro, a veces fuera) y hasta el momento sólo he instalado cosas como Firefox, Thunderbird, Avast.

:confused:

seoane 13-01-2007 01:42:52

Cita:

Empezado por roman
Vaya! Ha pasado tiempo desde esto. Finalmente he reinstalado mi pc. O, mejor dicho, estoy con una nueva aquí en el trabajo.

Según esto estoy dentro de Matrix (a veces dentro, a veces fuera) y hasta el momento sólo he instalado cosas como Firefox, Thunderbird, Avast.

:confused:

Si que paso tiempo. Aunque el otro día vi este hilo por casualidad, y me pregunte si al final averiguaste porque se comportaba así el programa en tu PC. Aunque veo que el problema continua.

¿Utilizas la segunda versión? la de ensamblador, porque siendo así no se que puede fallar, es una simple instrucción, no puede haber fallo posible. Puede que algún programa de los que instalas, programas legítimos, este jugando con tu equipo. Pero vete a saber, este tema me sobrepasa :p


La franja horaria es GMT +2. Ahora son las 02:07: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