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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 49
21  Programación / Programación C/C++ / Re: es posible concatenar un array byte? en: 31 Enero 2014, 19:55 pm
ok, ya entendi y logre hacerlo

se que no es necesario la conversion, pero intento hacer lo mismo que la funcion BitConverter para poder continuar, es que intento no hacer un copy - paste de codigos, asi que si quiero aprender bien, no tengo de otra mas que rehacer lo que veo para poder comprender como funcionan las cosas  :-\

gracias  ;D
22  Programación / Programación C/C++ / es posible concatenar un array byte? en: 31 Enero 2014, 06:33 am
hola

alguien sabe como podria o si es posible concatenar bytes de un mismo array, por ejemplo

BYTE *buffer[2] = {0x00, 0x02}

me gustaria poder concatenarla pero al reves para que quede asi... 0x200, porque necesito cambiar ese valor a decimal, que serian 512 y guardarlo en algun integer

lo intente con strcpy, strcat y memcpy pero no me funcionan porque el buffer es BYTE y aun haciendo cast (char) me tira error

alguien sabe alguna forma de lograr juntar los hexadecimales del array?, porque tambien necesito hacerlo con arrays mas grandes por ejemplo

buff = {0x00, 0x00, 0x02, 0x00, 0x00, 0x00}

y necesito que quede asi 0x20000 para poder convertirlo en decimal

aguna idea o ejemplo que me puedan dar porfavor.
23  Programación / Programación C/C++ / Re: como encontrar offsets de MFT para cambiar los bytes en decimales? en: 31 Enero 2014, 06:15 am
ok, aunque creo ya lo solucione, o eso espero
24  Programación / Programación C/C++ / Re: como encontrar offsets de MFT para cambiar los bytes en decimales? 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:
25  Programación / Programación C/C++ / 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. }
26  Programación / Programación C/C++ / como pasar la funcion BitConverter de VB.NEt a C? en: 28 Enero 2014, 20:25 pm
hola

tengo un array byte donde guardo informacion guardada por ReadFile, por ejemplo

BYTE buffer[1024]

ReadFile(HFile, buffer, sizeof(buffer), 0);

en VB.net hay una funcion que te convierte bytes en enteros se llama Bitconverter.ToInt16, lo que supuestamente hace es buscar un offset y lo que haya en ese offset lo convierte en decimal

por ejemplo

offset = &HD

BitConverter.ToInt16(buffer, offset)

alli, hasta donde yo se, es que busca en el array BYTE buffer el offset o hexadecimal que en este caso seria 0x0D, y el contenido alli lo cambia a decimal

por ejemplo

primero busca en el array 0x0D, cuando lo encuentra hay un valor que es 0x08 y lo convierte a decimal que igual seria 8, pero puede cambiar el valor, podria ser 0xAF, 0x13, etc...

Entonces quisiera saber como podria leer el array BYTE para encontrar el offset y hacer la conversion de hexadecimal a decimal de lo que haya en cierto offset pero en codigo C

porque Bitconverter convierte dependiendo la base, por ejemplo Int16 convierte los dos primeros bytes, int32 convierte los 4 primeros bytes y int64 convierte los 8 primeros bytes

entonces si por ejemplo en el offset 0x0B hay un valor 0x0102, como encontraria el offset 0x0B para cambiar el valor 0x0102 de hexadecimal a decimal?

me podrian poner algun ejemplo porfavor
27  Foros Generales / Foro Libre / Re: "Obama será recordado como el presidente que resucitó la Guerra Fría" en: 27 Enero 2014, 20:21 pm
yo estaria feliz de que desaparezca EEUU, pero si la guerra elimina a ese pais, comenzaria otra guerra por el liderazgo mundial y entre ellos esta China y Rusia, algunos otros paises de Europa y de America

Si se acaba China o Rusia, la guerra por apropiarse de una parte de esos paises comenzara, y asi continuamente

la guerra nunca acabara, lo unico que podemos hacer es desear que no nos toque alguna guerra en nuestro pais
28  Programación / Programación C/C++ / necesito ayuda sobre MFT y su analisis en C en: 26 Enero 2014, 06:33 am
hola

Estoy tratando de crear un codigo para recuperar archivos borrados, vengo leyendo varios documentos y viendo varios codigos, poco a poco estoy comprendiendo como funciona, hasta ahora he logrado comprender en donde se encuentra la informacion de los archivos, sobre NTFS, MFT y clusters, y mas o menos como encontrar los archivos borrados, sobre sus atributos y despues de eso me faltaria saber como restaurar los archivos

he practicado y mas abajo pondre un codigo que hice analizando codigos que hay en la red, desafortunadamente para mi, la mayoria en funcionamiento los encuentro para VB, hay otros pero son muy elaborados usando incluso clases, pero a la mayoria he visto lo mismo

Ahora... mi problema es el siguiente, ¿de que forma puedo leer los datos de MFT?, ya tengo una forma de acceso pero no logro entender como hacen ese escaneo por los datos del archivo MFT para analizar los archivos que se encuentran en mi computadora, asi como los borrados

espero alguien me pueda ayudar diciendo que API, estructura o que operacion tendria que usar ahora para empezar el analisis en MFT, porfavor, porque ya no se por donde seguir o que mas se deba hacer

dejo el codigo que mencione, pero despues de aprender esto, que mas sigue?, perdon si estan mal escrito los printf pero los escribi asi de mal porque solo fue para entender de que sirve la estructura

por cierto, he visto que algunos utilizan DISK_GEOMETRY pero yo no lo vi necesario

tambien hay unas API que vi que utilizan por ejemplo FSCTL_ENUM_USN_DATA, FSCTL_QUERY_USN_JOURNAL

Esto es lo que he logrado entender y es parecido a una parte de VB.net

Código
  1. #include <Windows.h>
  2. #include <winioctl.h>
  3. #include <stdio.h>
  4.  
  5. #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
  6. #define zwpath L"\\\\.\\PhysicalDrive0"
  7.  
  8. int main(int argc, char *argv[]){
  9.  
  10.    HANDLE hDevice = INVALID_HANDLE_VALUE;
  11.    BOOL bresul = FALSE;
  12.    DWORD junk = 0;
  13.  
  14.    hDevice = CreateFileW(zwpath, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
  15.  
  16.    if(hDevice == INVALID_HANDLE_VALUE){
  17.  
  18.        printf("error device\n");
  19.    }
  20.  
  21.    NTFS_VOLUME_DATA_BUFFER ntfsData;
  22.  
  23.    bresul = DeviceIoControl(hDevice,FSCTL_GET_NTFS_VOLUME_DATA, NULL, 0, &ntfsData, sizeof(NTFS_VOLUME_DATA_BUFFER), &junk, (LPOVERLAPPED)NULL );
  24.  
  25.    printf("Numero de serie = %ld\n", ntfsData.VolumeSerialNumber);
  26.    printf("Numero de sectores = %ld\n", ntfsData.NumberSectors);
  27.    printf("Total clusters = %ld\n", ntfsData.TotalClusters);
  28.    printf("Clusters libres = %ld\n", ntfsData.FreeClusters);
  29.    printf("Total reservados = %ld\n", ntfsData.TotalReserved);
  30.    printf("Bytes por sector = %ld\n", ntfsData.BytesPerSector);
  31.    printf("Bytes por cluster = %ld\n", ntfsData.BytesPerCluster);
  32.    printf("Bytes por segmeto de archivo = %ld\n", ntfsData.BytesPerFileRecordSegment);
  33.    printf("Cluster por segmento de archivo = %ld\n", ntfsData.ClustersPerFileRecordSegment);
  34.    printf("Longitud de datos validos MFT = %ld\n", ntfsData.MftValidDataLength);
  35.    printf("Inicio de LCN = %ld\n", ntfsData.MftStartLcn);
  36.    printf("Inicio mirror de LCN = %ld\n", ntfsData.Mft2StartLcn);
  37.    printf("Zona de Inicio MFT= %ld\n", ntfsData.MftZoneStart);
  38.    printf("Zona final MFT = %ld\n", ntfsData.MftZoneEnd);
  39.  
  40.    getchar();
  41. }


O si alguien tiene conocimientos en VB.NET que me pueda ayudar a traducir el codigo a C tambien me ayudaria bastante

Código
  1.  Public Sub FindHDFiles(ByVal Drive As String)
  2.        Drive = Drive.TrimEnd("\")
  3.        Try
  4.            Dim dinfo = My.Computer.FileSystem.GetDriveInfo(Drive & "\")
  5.            If Not dinfo.IsReady Then
  6.                MsgBox("Drive not ready.", MsgBoxStyle.Critical, "ERROR")
  7.                Exit Sub
  8.            End If
  9.            If dinfo.DriveFormat <> "NTFS" Then
  10.                MsgBox("This feature only works on NTFS volumes.", MsgBoxStyle.Critical, "ERROR")
  11.                Exit Sub
  12.            End If
  13.            ARKDDA = New DirectDriveIO(Drive & "\")
  14.        Catch
  15.            MsgBox("Could not access drive.", MsgBoxStyle.Critical, "ERROR")
  16.            Exit Sub
  17.        End Try
  18.        Drive = Drive.TrimEnd("\")
  19.        Dim diskhandle = CreateFile("\\?\" & Drive, EFileAccess.GENERIC_READ + EFileAccess.GENERIC_WRITE, EFileShare.FILE_SHARE_READ + EFileShare.FILE_SHARE_WRITE, Nothing, ECreationDisposition.OPEN_EXISTING, 0, Nothing)
  20.        If diskhandle = 0 Then
  21.            diskhandle = CreateFile("\\.\" & Drive, EFileAccess.GENERIC_READ + EFileAccess.GENERIC_WRITE, EFileShare.FILE_SHARE_READ + EFileShare.FILE_SHARE_WRITE, Nothing, ECreationDisposition.OPEN_EXISTING, 0, Nothing)
  22.            If diskhandle = 0 Then
  23.                MsgBox("Could not access drive.", MsgBoxStyle.Critical, "ERROR")
  24.                Exit Sub
  25.            End If
  26.        End If
  27.        Dim FSCTL_GET_NFTS_VOLUME_DATA = CTL_CODE(FILE_DEVICE.FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
  28.        Dim buffer As NTFS_VOLUME_DATA_BUFFER
  29.        DeviceIoControlNTFS(diskhandle, FSCTL_GET_NFTS_VOLUME_DATA, 0, 0, buffer, SizeOf(buffer), 0, 0)
  30.        CloseHandle(diskhandle)
  31.        Dim MFTAddress As Long = buffer.MftStartLcn * CLng(buffer.BytesPerCluster / buffer.BytesPerSector)
  32.        Dim MFTEntrySize As Integer = buffer.BytesPerFileRecordSegment / buffer.BytesPerSector
  33.        Dim NumberOfEntries As Long = buffer.MftValidDataLength / MFTEntrySize
  34.        Dim Bytes(buffer.BytesPerCluster) As Byte
  35.        Dim CurrEntryBytes(MFTEntrySize * buffer.BytesPerSector) As Byte
  36.        Dim CurrEntry As New STANDARD_MFT_ENTRY
  37.        Dim Type As Byte
  38.        Dim Name As String
  39.        Dim BaseAddr As Long
  40.        Dim Parent As Integer
  41.        Dim DoEventsCounter As Integer = 0
  42.        ListView1.Items.Clear()
  43.        ListView2.Items.Clear()
  44.        ProgressBar1.Value = 0
  45.        ProgressBar1.Maximum = buffer.MftValidDataLength / buffer.BytesPerFileRecordSegment
  46.        ToolStripStatusLabel1.Text = "Finding files in " & Drive & "\..."
  47.        Button1.Enabled = False
  48.        Button2.Enabled = False
  49.        ComboBox1.Enabled = False
  50.        Button3.Enabled = False
  51.        CheckBox2.Enabled = False
  52.        LastDrive = Drive
  53.        If CheckBox2.Checked Then Bitmap = ReadBitmap(Drive)
  54.        Dim BitmapBase As Long = MFTAddress + (MFTEntrySize * 0)
  55.        Bytes = ARKDDA.ReadSectors(BitmapBase, MFTEntrySize)
  56.        BaseAddr = MergeToInt(Bytes, &H14, &H15) 'The offset the the first attribute
  57.        While Bytes(baseaddr) <> &H80
  58.            baseaddr = baseaddr + MergeToInt(Bytes, baseaddr + &H4, baseaddr + &H7) 'Add the length of the attribute to the base address to find the next attribute
  59.        End While
  60.        baseaddr = baseaddr + &H40
  61.        Dim Length As ULong = 0
  62.        Dim LenLen As Byte = 0
  63.        Dim Offset As ULong = 0
  64.        Dim OffLen As Byte = 0
  65.        Dim Path As String = ""
  66.        Dim BaseAddr2 As ULong = 0
  67.        Dim FileSize As ULong = 0
  68.        Dim LoopCount As Integer = 0
  69.        Dim PartNum As Integer = 0
  70.        While Bytes(baseaddr) > 0
  71.            LenLen = Bytes(BaseAddr) And &HF
  72.            OffLen = (Bytes(BaseAddr) And &HF0) / &H10
  73.            Length = MergeToInt(Bytes, BaseAddr + 1, BaseAddr + LenLen)
  74.            Offset = Offset + MergeToInt(Bytes, BaseAddr + 1 + LenLen, BaseAddr + LenLen + OffLen)
  75.            For Record = 0 To ((Length * buffer.BytesPerCluster) / buffer.BytesPerFileRecordSegment) - 1
  76.                DoEventsCounter = DoEventsCounter + 1
  77.                If DoEventsCounter >= 100 Then
  78.                    Application.DoEvents()
  79.                    DoEventsCounter = 0
  80.                End If
  81.                Try
  82.                    If (PartNum + 1) >= (CurrEntryBytes.Count / buffer.BytesPerFileRecordSegment) Then
  83.                        CurrEntryBytes = ARKDDA.ReadSectors((Record * MFTEntrySize) + (Offset * (buffer.BytesPerCluster / buffer.BytesPerSector)), MFTEntrySize * 1024)
  84.                        BaseAddr2 = 0
  85.                        PartNum = 0
  86.                    Else
  87.                        'CurrEntryBytes = ByteArrayPart(CurrEntryBytes, buffer.BytesPerFileRecordSegment, UBound(CurrEntryBytes))
  88.                        'BaseAddr2 = (((BaseAddr2 \ buffer.BytesPerFileRecordSegment) + 1) * buffer.BytesPerFileRecordSegment)
  89.                        PartNum = PartNum + 1
  90.                        BaseAddr2 = PartNum * buffer.BytesPerFileRecordSegment
  91.                    End If
  92.                    If CurrEntryBytes(BaseAddr2) <> Asc("F") Then
  93.                        'If CurrEntryBytes(0) <> Asc("F") Then
  94.                        GoTo dn
  95.                    End If
  96.                    Name = ""
  97.                    Parent = 5
  98.                    Path = ""
  99.                    FileSize = 0
  100.                    'Type = CurrEntryBytes(&H16)
  101.                    Type = CurrEntryBytes(&H16 + BaseAddr2)
  102.                    'If Type = MFT_ENTRY_FILE_TYPE_FLAGS.DeletedDirectory Or Type = MFT_ENTRY_FILE_TYPE_FLAGS.DeletedFile Then
  103.                    If Type = MFT_ENTRY_FILE_TYPE_FLAGS.DeletedFile Then
  104.                        'BaseAddr2 = BaseAddr2 + MergeToInt(CurrEntryBytes, &H14, &H15) 'The offset the the first attribute
  105.                        BaseAddr2 = BaseAddr2 + MergeToInt(CurrEntryBytes, BaseAddr2 + &H14, BaseAddr2 + &H15) 'The offset the the first attribute
  106.                        BaseAddr2 = BaseAddr2 + MergeToInt(CurrEntryBytes, BaseAddr2 + &H4, BaseAddr2 + &H7) 'Add the length of the attribute to the base address to find the next attribute
  107.                        Try
  108.                            Parent = MergeToInt(CurrEntryBytes, BaseAddr2 + &H18, BaseAddr2 + &H1D)
  109.                        Catch
  110.                        End Try
  111.                        Try
  112.                            If FileSize = 0 Then FileSize = MergeToInt(CurrEntryBytes, BaseAddr2 + &H48, BaseAddr2 + &H4F)
  113.                            If FileSize > 2 ^ 30 Then FileSize = 0
  114.                            'If FileSize = 0 Then FileSize = MergeToInt(CurrEntryBytes, BaseAddr2 + &H40, BaseAddr2 + &H47)
  115.                        Catch
  116.                        End Try
  117.                        Try
  118.                            Name = System.Text.UnicodeEncoding.Unicode.GetString(ByteArrayPart(CurrEntryBytes, BaseAddr2 + &H5A, (BaseAddr2 + &H5A) + ((2 * CurrEntryBytes(BaseAddr2 + &H58)) - 2)))
  119.                        Catch
  120.                        End Try
  121.                        Try
  122.                            If Name.Contains("~") Then
  123.                                BaseAddr2 = BaseAddr2 + MergeToInt(CurrEntryBytes, BaseAddr2 + &H4, BaseAddr2 + &H7) 'Add the length of the attribute to the base address to find the next attribute
  124.                                If FileSize = 0 Then FileSize = MergeToInt(CurrEntryBytes, BaseAddr2 + &H48, BaseAddr2 + &H4F)
  125.                                If FileSize > 2 ^ 30 Then FileSize = 0
  126.                                'If FileSize = 0 Then FileSize = MergeToInt(CurrEntryBytes, BaseAddr2 + &H40, BaseAddr2 + &H47)
  127.                                Name = System.Text.UnicodeEncoding.Unicode.GetString(ByteArrayPart(CurrEntryBytes, BaseAddr2 + &H5A, (BaseAddr2 + &H5A) + ((2 * CurrEntryBytes(BaseAddr2 + &H58)) - 2)))
  128.                            End If
  129.                        Catch
  130.                        End Try
  131.                        If Name.Length >= 75 Then Name = Mid(Name, 1, 74) & Mid(Name, 76, Name.Length - 75)
  132.                        If CheckBox1.Checked Then
  133.                            Try
  134.                                Path = GetFullPath2(Parent, MFTAddress, MFTEntrySize, buffer.BytesPerCluster) & "\" & Name
  135.                            Catch
  136.                            End Try
  137.                        End If
  138.                        If FileSize = 0 Then
  139.                            Try
  140.                                LoopCount = 0
  141.                                While CurrEntryBytes(BaseAddr2) <> &H80 And LoopCount < 5
  142.                                    LoopCount = LoopCount + 1
  143.                                    BaseAddr2 = BaseAddr2 + MergeToInt(CurrEntryBytes, BaseAddr2 + &H4, BaseAddr2 + &H7) 'Add the length of the attribute to the base address to find the next attribute
  144.                                End While
  145.                                'FileSize = MergeToInt(CurrEntryBytes, BaseAddr2 + &H28, BaseAddr2 + &H2F)
  146.                                'If FileSize > 2 ^ 30 Then FileSize = MergeToInt(CurrEntryBytes, BaseAddr2 + &H38, BaseAddr2 + &H3F)
  147.                                If MergeToInt(CurrEntryBytes, BaseAddr2 + &HE, BaseAddr2 + &HF) = 1 Then
  148.                                    'It is recycled (filename at offset 0x30,file size at offset 0x10)
  149.                                    FileSize = MergeToInt(CurrEntryBytes, BaseAddr2 + &H10, BaseAddr2 + &H13)
  150.                                    'Path = ""
  151.                                    'BaseAddr2 = BaseAddr2 + &H30
  152.                                    'While CurrEntryBytes(BaseAddr2) > 0
  153.                                    'Path = Path + ChrW(MergeToInt(CurrEntryBytes, BaseAddr2, BaseAddr2 + 1))
  154.                                    'Path = Path + ChrW(CurrEntryBytes(BaseAddr2))
  155.                                    'BaseAddr2 = BaseAddr2 + 2
  156.                                    'End While
  157.                                Else
  158.                                    'FileSize = 0
  159.                                    FileSize = MergeToInt(CurrEntryBytes, BaseAddr2 + &H30, BaseAddr2 + &H37)
  160.                                End If
  161.                                If FileSize > 2 ^ 30 Then FileSize = 0
  162.                            Catch
  163.                            End Try
  164.                        End If
  165.                        If FileSize > 0 Then
  166.                            With ListView1.Items.Add(Name)
  167.                                If Not Path.Contains("SKIPTHISFILE") Then
  168.                                    .SubItems.Add(Path)
  169.                                Else
  170.                                    .SubItems.Add("")
  171.                                End If
  172.                                .SubItems.Add(FileSize)
  173.                                .SubItems.Add((Record * MFTEntrySize) + (Offset * (buffer.BytesPerCluster / buffer.BytesPerSector)))
  174.                                If CheckBox2.Checked Then
  175.                                    Try
  176.                                        .SubItems.Add(GetFileIntegrity((Record * MFTEntrySize) + (Offset * (buffer.BytesPerCluster / buffer.BytesPerSector)), buffer.BytesPerSector, buffer.BytesPerFileRecordSegment))
  177.                                    Catch
  178.                                        .SubItems.Add("Unknown")
  179.                                    End Try
  180.                                Else
  181.                                    .SubItems.Add("")
  182.                                End If
  183.                                ListView2.Items.Add(.Clone)
  184.                            End With
  185.                        End If
  186.                        GoTo dn
  187.                    End If
  188.                Catch
  189.                End Try
  190. dn:
  191.                Try
  192.                    ProgressBar1.Value = ProgressBar1.Value + 1
  193.                Catch
  194.                End Try
  195.            Next Record
  196.            BaseAddr = BaseAddr + (1 + LenLen + OffLen)
  197.        End While
  198.        ProgressBar1.Value = 0
  199.        ToolStripStatusLabel1.Text = ""
  200.        Button1.Enabled = True
  201.        Button2.Enabled = True
  202.        ComboBox1.Enabled = True
  203.        Button3.Enabled = True
  204.        CheckBox2.Enabled = True
  205.    End Sub
29  Programación / Programación C/C++ / Re: Que libro de Estructuras de Datos en C++ me recomiendan y sea facil de buscar en: 25 Enero 2014, 08:41 am
de casualidad es este libro?

http://www.4shared.com/zip/MPV0u4m_/fundamentals_of_data_structure.html
30  Foros Generales / Foro Libre / Re: ¿Por qué los informaticos somos considerados como gordos frikis? en: 25 Enero 2014, 08:13 am
jajaja, siempre pasa, soy alguien que me gusta hacer ejercicio y trato de arreglarme, pero siempre me pasa que cuando alguien me conoce, sale la pregunta...¿a que te dedicas? y cuando les digo, soy informatico, jajaja se me quedan viendo bien raro, y cuando les digo.. ¿que?, ¿me imaginabas gordo, friki y con mis playeras de star wars?... y siempre me dicen que si.. algo asi se esperaban...
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 49
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines