elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Píldoras formativas en seguridad de la información


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Escribir en MBR
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Escribir en MBR  (Leído 7,003 veces)
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.512


La mano invisible del mercado me robo la billetera


Ver Perfil WWW
Re: Escribir en MBR
« Respuesta #10 en: 22 Octubre 2013, 21:23 »

No tiene ninguna similitud en realidad, es simplemente un enfoque errado al asunto. Si, obviamente que el driver del disco sera llamado para tus IRPs (lee sobre esto, es algo basico en WDM y te va a servir para entender un poco mas el asunto). Un modulo de modo Kernel trabaja al mismo nivel de privilegios que el S.O. y puede ejecutar rutinas no relacionadas con un dispositivo.

Despues de CreateFile podes usar WriteFile para escribir, aca lo que tenes que aprender primero es la API de Windows ...

¿Queres ver una MBR? Hace un programa con CreateFile y ReadFile  :silbar:


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Escribir en MBR
« Respuesta #11 en: 22 Octubre 2013, 21:48 »

Genial! Capto.. voy a probar leer el mbr entonces, seria un buen comienzo para después escribirle.. (igual me queda la duda en que dirección, pero supongo me falta entender como funciona para eso..)
El IRP según leí, es una estructura que encapsula un "I/O request packet",, necesario para la comunicación de drivers (entre drivers solamente??)
Bueno, voy a poner manos a la obra! Tnks!


En línea

cpu2


Desconectado Desconectado

Mensajes: 925


Ver Perfil
Re: Escribir en MBR
« Respuesta #12 en: 22 Octubre 2013, 22:03 »

¿Vos probaste esto? No te olvides que toda la memoria que manejas directamente es virtual (esa que mencionas es una direccion fisica) y no estas trabajando en modo Real sino en modo protegido o largo. Mas alla de esto que es elemental la BIOS lee de un disco la MBR poniendola en MEMORIA RAM, modificar esa memoria no afecta a los datos del disco ...

Me explique fatal, no escribi nunca tampoco tengo la necesidad de hacer algo asi, pero si la e leido en ring0 sin ningun tipo de funcion. Supongo que tambien se podra escribir en esas direcciones, pero lo que tu me dices es que luego se perderan los datos ya que es una direccion virtual.

Por lo que vengo entendiendo, para comunicarse con el disco, lo hace de igual manera que se comunica una aplicación con un driver, no? O es que en realidad estoy llamando a algún driver?
Una duda que tengo con los drivers es si siempre es necesario "hablar" de un dispositivo,, o sea,, los drivers solo sirven para la comunicación con hardware, o puedo ejecutar en un driver una rutina cualquiera? (Hacer alguna cuenta, inyectar algo, etc..)

Creo que si, porque no podrias escribir una rutina strlen o lo que sea, en un controlador. Algunos codigos que e leido son funciones que luego se comunican con los puertos I/O.

Un saludo.
« Última modificación: 22 Octubre 2013, 22:06 por cpu2 » En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.512


La mano invisible del mercado me robo la billetera


Ver Perfil WWW
Re: Escribir en MBR
« Respuesta #13 en: 22 Octubre 2013, 22:10 »

Genial! Capto.. voy a probar leer el mbr entonces, seria un buen comienzo para después escribirle.. (igual me queda la duda en que dirección, pero supongo me falta entender como funciona para eso..)
El IRP según leí, es una estructura que encapsula un "I/O request packet",, necesario para la comunicación de drivers (entre drivers solamente??)
Bueno, voy a poner manos a la obra! Tnks!

Mas que una direccion es un offset donde queres leer y escribir, pensalo como un disco o archivo, no como memoria RAM. Por cierto, tenes que trabajar por sectores a ese nivel.

Me explique fatal, no escribi nunca tampoco tengo la necesidad de hacer algo asi, pero si la e leido en ring0 sin ningun tipo de funcion. Supongo que tambien se podra escribir en esas direcciones, pero lo que tu me dices es que luego se perderan los datos ya que es una direccion virtual.

No, no se pierden por ser una direccion virtual, en este caso la que vos mencionas es una direccion fisica. El punto es que no esta mappeado a RAM el disco sino que la BIOS accedio a el en durante el boot, leyo ese sector y lo escribio en memoria. ¿Podes escribir en esa memoria? Si. ¿Tendra algun efecto en el disco? No, en lo absoulto. Si podes escribir en el disco como lo hace la BIOS (con ins y outs) pero no tiene sentido, para eso esta el S.O. y los drivers, para abstraer el hardware.

Creo que si, porque no podrias escribir una rutina strlen o lo que sea, en un controlador. . Algunos codigos que e leido son funciones que luego se comunican con los puertos I/O.

Si podes perfectamente, hasta el Kernel exporta strlen, aunque normalmente se trabaja en Unicode. No todos los modulos de modo Kernel son drivers (controladores de hardware), el ejemplo clasico es un filtro o un sistema de archivos (el NTFS no trabaja a nivel de sectores, para eso estara por debajo el driver de disco).
« Última modificación: 22 Octubre 2013, 22:13 por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Escribir en MBR
« Respuesta #14 en: 22 Octubre 2013, 22:11 »

@cpu2: He vistov varios post tuyos refiendote a ASM como el unico capaz de hacerlo,  C/C++ se puede hacer el 95-98% de todo
lo que ASM puede hacer en cuanto a escribir codigo. Cuando se habla de este tipo de asuntos, no importa el lenguaje en el se haga,
este tema puede estar en la sección C/C++, Delphi, etc.
aunque generalmente se pone cuando se supone que el lenguaje que se esta usando es ASM como en este caso o a menos que te estes
refiriendo a modo real, aunque a pesar de eso, se podria tener un tema en la sección C/C++ acerca de modo real si tu compilador es capaz
de generar codigo para modo real. Simplemente estoy aclarando.
Además, Para escribir desde modo kernel se mapea la direccion fisica y se escribe.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Escribir en MBR
« Respuesta #15 en: 22 Octubre 2013, 22:57 »

Código
  1. #include <windows.h>
  2. #include <winioctl.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. #define wszDrive L"\\\\.\\PhysicalDrive0"
  8. #define BUFFERSIZE 8192
  9.  
  10. int wmain(int argc, wchar_t *argv[]){
  11.  
  12. HANDLE hDevice = INVALID_HANDLE_VALUE;
  13. DWORD  dwBytesRead = 0;
  14.    char   ReadBuffer[BUFFERSIZE] = {0};
  15. FILE *File;
  16.  
  17. hDevice = CreateFileW(wszDrive, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
  18.  
  19. if (hDevice == INVALID_HANDLE_VALUE){
  20. return (FALSE);
  21. }
  22.  
  23. ReadFile(hDevice, ReadBuffer, BUFFERSIZE-1, &dwBytesRead, NULL);
  24.  
  25. File = fopen("c://MBR.txt","w");
  26. for(int i=0; i<=BUFFERSIZE-1; i++){
  27. fprintf(File, "%c", ReadBuffer[i]);
  28. }
  29.  
  30. fclose(File);
  31. return 0;
  32. }
  33.  

MBR.txt
Citar
3ÀŽÐ¼ |ûPPü¾|¿PW¹åó¤Ë½¾±8n |   uƒÅâôÍ‹õƒÆIt8,tö µ´‹ð¬< tü» ´ÍëòˆNèF s*þF€~ t €~ t ¶uҀFƒFƒV
 è! s ¶뼁>þ}Uªt €~ tÈ ·멋üW‹õË¿ ŠV ´Ír#ŠÁ$?˜ŠÞŠüC÷ã‹Ñ†Ö±ÒîB÷â9V
w#r9Fs¸» |‹N‹V ÍsQOtN2äŠV ÍëäŠV `»ªU´AÍr6ûUªu0öÁt+a`j j ÿv
ÿvj h |jj´B‹ôÍaasOt 2äŠV ÍëÖaùÃTabla de partici¢n no v lida Error al cargar el sistema operativo Falta el sistema operativo

Bueno, algo estoy leyendo.. podria representarlo de una forma mas clara esto ?
« Última modificación: 22 Octubre 2013, 23:32 por Vaagish » En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.512


La mano invisible del mercado me robo la billetera


Ver Perfil WWW
Re: Escribir en MBR
« Respuesta #16 en: 22 Octubre 2013, 23:47 »

Igual que un editor hex primero (0x%.2X) pero deberia tener codigo de 16 bits directamente igual asi que buscate un desensamblador para continuar.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Escribir en MBR
« Respuesta #17 en: 23 Octubre 2013, 00:06 »

El Ida sirve? Le puedo mandar "reensamblar" este txt?
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.512


La mano invisible del mercado me robo la billetera


Ver Perfil WWW
Re: Escribir en MBR
« Respuesta #18 en: 23 Octubre 2013, 00:34 »

¿No es mas rapido probar uno mismo? Como .com parece ir bien.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Escribir en MBR
« Respuesta #19 en: 23 Octubre 2013, 00:40 »

Si, pero hay algo que no estoy entendiendo, al fprintf le pongo este formato: "0x%.2X", eso me da un montón de hexadecimales,, y eso lo paso por el IDA (por ejemplo), para reensamblar el código, y así ver que hace el MBR en ensamblador, pero todo esto, es en 16 bits?

Y otra cosa,, si pongo el buffer de lectura como tamaño máximo 512 bytes, no lee nada.. no se supone estoy en el offset 0 del disco, donde hay código maquina? y son unos 446 bytes? :/
« Última modificación: 23 Octubre 2013, 00:47 por Vaagish » En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Escribir un .txt con vb
Programación Visual Basic
Xrage 7 5,635 Último mensaje 11 Junio 2005, 13:24
por p0w3r f1y
al escribir en mi msn :S
Chats; IRC y Messengers
bels_mike 5 2,232 Último mensaje 28 Agosto 2007, 21:58
por ^Winder^
Escribir .ini
Programación Visual Basic
& eDu & 6 1,359 Último mensaje 25 Mayo 2008, 01:29
por naderST
Escribir en /dev/mem
Programación C/C++
>FedeX< 6 1,712 Último mensaje 10 Febrero 2011, 20:43
por >FedeX<
Escribir CSS en PDF ? (resuelto)
PHP
Diabliyo 5 1,411 Último mensaje 12 Abril 2014, 18:19
por Diabliyo
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines