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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como encontrar offsets de MFT para cambiar los bytes en decimales?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como encontrar offsets de MFT para cambiar los bytes en decimales?  (Leído 2,846 veces)
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
como encontrar offsets de MFT para cambiar los bytes en decimales?
« en: 30 Enero 2014, 09:12 am »

hola

pues ya logre avanzar con un programa que estoy intentando hacer, despues de re-leer, hice un pequeño avance, pero tengo un problema a ver que opinan

segun MSDN hay dos maneras de analizar la unidad C, ya sea

"\\.\C:", "\\.\C:\" o "\\\\.\\PhysicalDrive0"

En visual basic algunos programadores hacen esto

"\\.\" & Mid(Drive, 1, 2)

donde Drive es "C:\"

supuestamente deberia quedar asi... "\\.\C:"... pero al colocarlo de esa forma en el programa ya no funciona, de igual forma en C tampoco funciona

en C la unica forma que me funciona es usando "\\\\.\\PhysicalDrive0", pero tengo la duda de si funcionara o no, supuestamente si me esta funcionando, porque recibo datos, pero no se si haya alguna diferencia o porque razon en VB solo funcione si utilizan Mid, por que si hay alguna, entonces el programa falla desde el principio pero no me he dado cuenta, y me gustaria saber que opinan o si podrian compilar mi codigo y decirme si a ustedes le funciona "\\.\C:" o si es normal y solo les funciono PhysicalDrive0, mas abajo colocare mi codigo

ahora tengo otro problema, necesito la informacion de los clusters, hay estructuras que puedo usar para saber esto pero no hay para algunas cosas que necesito, pero segun un codigo de VB que analice, se pueden conseguir 3 datos que necesito analizando los datos recibidos con ReadFile

Aqui dejo una tabla de los datos que mencionare


Offset    Size    Description
0x0000    3    Jump to the boot loader routine
0x0003    8    System Id: "NTFS    "
0x000B    2    Bytes per sector
0x000D    1    Sectors per cluster
0x000E    7    Unused
0x0015    1    Media descriptor (a)
0x0016    2    Unused
0x0018    2    Sectors per track
0x001A    2    Number of heads
0x001C    8    Unused
0x0024    4    Usually 80 00 80 00 (b)
0x0028    8    Number of sectors in the volume
0x0030    8    LCN of VCN 0 of the $MFT
0x0038    8    LCN of VCN 0 of the $MFTMirr
0x0040    4    Clusters per MFT Record (c)
0x0044    4    Clusters per Index Record (c)
0x0048    8    Volume serial number


los valores que necesito son el offset 0x0B 0x0D y 0x30

el codigo de VB usa una funcion llamaba bitconverter, que busca un offset y los valores los cambia a decimal

el offset Bytepersector lo puedo sacar con una estructura, tambien tengo entendido que en NTFS un cluster tiene 512 bytes, y eso son 8 sectores, y me faltaria encontrar LCN of VCN 0 of the $MFT

Supuestamente al leer los datos de la unidad, se puede saber eso unicamente llendo al offset y tomando los valores dependiendo del tamaño, y en la tabla esta el tamaño de cada offset

Pero mi problema es que no logro encontrar el offset para tomar el valor hexadecimal y convertirlo en decimal, aqui es donde tambien incluyo el problema anterior, no se si no los encuentro porque CreateFile no abre la unidad C: o es porque no estoy interpretando bien los datos

El resultado los compare con un codigo fuente de https://code.google.com/p/datarecover/ y obtengo el mismo resultado al ejecutar el programa, los dos me dan los mismo hexadecimales, aunque yo lo programe diferente

En VB me arroja este resultado Bitconverter donde busca los offset y convierte en decimal los bytes

512
8
786432

Pero leyendo los datos que me arroja buffer, no logro encontrar esa informacion

Me gustaria saber si alguien aqui podria ayudarme a encontrar la manera de saber donde se encuentran esos offset y como debo buscarlos para despues cambiar de hexadecimal a decimal

espero me puedan ayudar

salu2

Código
  1.  
  2. #include <Windows.h>
  3. #include <winioctl.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. #define zwpath L"\\\\.\\PhysicalDrive0"
  8.  
  9. int main(int argc, char *argv[]){
  10.  
  11. HANDLE hDevice;
  12. OVERLAPPED overlapped;
  13. BYTE buff[1024] = {0};
  14. DWORD numerobyte = 0;
  15. UINT32 ret;
  16. ZeroMemory(&overlapped, sizeof(OVERLAPPED));
  17.  
  18. hDevice = CreateFileW(zwpath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
  19.  
  20. if(hDevice != INVALID_HANDLE_VALUE){
  21.  
  22. ret = ReadFile(hDevice, buff, 1024, &numerobyte, &overlapped);
  23.  
  24.  
  25. }else
  26. {
  27. return NULL;
  28. }
  29.  
  30. if(ret == 0){
  31.  
  32.  
  33. ret = WaitForSingleObject(hDevice,INFINITE );
  34.  
  35. switch (ret)
  36. {
  37. case WAIT_OBJECT_0:break;
  38. case WAIT_TIMEOUT:break;
  39. default:
  40. break;
  41. }
  42. }
  43. else
  44. {
  45. return NULL;
  46. }
  47.  
  48. CloseHandle(hDevice);
  49.  
  50.  
  51. for (int n=0; n<sizeof(buff); ++n)  
  52.    {  
  53.        printf("0x%02X ", buff[n]);  
  54.    }
  55.  
  56. }


« Última modificación: 30 Enero 2014, 09:37 am por Belial & Grimoire » En línea

.                                 
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: como encontrar offsets de MFT para cambiar los bytes en decimales?
« Respuesta #1 en: 30 Enero 2014, 19:52 pm »

bueno ya resolvi el primer problema y parte del segundo, ya solo me queda saber como conseguir LCN of VCN 0 of the $MFT

segun una tabla algo asi debia salirme

0x30 LONGLONG 0x0400000000000000
   

sin embargo, en 0x30 me sale

0x00000C0000000000   :huh:


En línea

.                                 
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: como encontrar offsets de MFT para cambiar los bytes en decimales?
« Respuesta #2 en: 31 Enero 2014, 05:14 am »

Primero que nada hay que aclarar que es lo que quieres leer, la información de la estructura es del NTFS y lo que estas haciendo es leyendo solo el Master Boot Record.
En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: como encontrar offsets de MFT para cambiar los bytes en decimales?
« Respuesta #3 en: 31 Enero 2014, 06:15 am »

ok, aunque creo ya lo solucione, o eso espero
En línea

.                                 
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como cambiar el registro de w98se para cambiar el lugar de un archivo de sistema
Windows
carlosega 5 4,887 Último mensaje 19 Enero 2011, 15:56 pm
por Randomize
Como limitar los decimales en un textbox.
Programación Visual Basic
oJosLoCos 3 13,978 Último mensaje 15 Diciembre 2009, 16:09 pm
por oJosLoCos
Cambiar bytes con hex workshop
Ingeniería Inversa
x64core 0 2,548 Último mensaje 5 Marzo 2012, 23:51 pm
por x64core
Como quitar decimales en java?
Java
Angel wing 1 4,349 Último mensaje 21 Octubre 2017, 00:16 am
por Orubatosu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines