Переписать файл много раз..

Тема в разделе "WASM.WIN32", создана пользователем test555, 24 июн 2008.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Добрый день, прошу помощи.. задача - достаточно простая.

    Нужно на ассемблере написать небольшой файловый шреддер (перезапись случайными байтами файл и его удаление) чтобы невозможно было восстановить содержимое.

    Т.к. с давних времен у меня с этим языком не наладилось, прошу помощи.
    Дело важное и срочное..

    Я написал все функции на Делфе (используя winAPI функции)
    Но мое приложение занимает 15 кило, это много (

    Я прощу помощи:
    Программа по запуску:
    program.exe file [N] [-d]

    Где file - путь к фалу который следует переписать
    N - необязательный параметр, количество циклов перезаписи (по умолчанию 1)
    -d если указан этот ключ, то после перезаписи следует удалить файл..

    Проверок на существование файлов и тд - вводить не требуется.

    Вот привожу свою процедурку на делфе:

    procedure dsfile(feledel:string; rewritecount:integer; del:boolean);
    var f:hfile;i, sz, j:integer;c: char;
    begin
    randomize;
    f:=FileOpen(feledel, $0002);
    sz:= Getfilesize(f,nil);
    if sz=-1 then begin FileClose(f); exit; end;

    for j:=0 to rewritecount-1 do begin
    for i:=0 to (sz-1) do
    begin
    c:=chr(random(200)+20);
    FileWrite(f,c,1);
    end;
    FileSeek(f,0,0); // writeln('Цикл ', j);
    end;

    FileClose(f);
    if del then deletefile(pchar(feledel));
    end;


    Вот...ассемблер я ранее открывал, но не могу сам написать, т.к. и циклов я не знаю, и как параметры коммндной строки брать, и как файлы открывать и писать, и как генерировать случайные числа..

    Благодарю за помощь!!!

    Контакты: асяка 7-8--78---728
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    че-то тут не сходится :) CreateFile, ReadFile/WriteFile, SetFilePosition, CloseHandle - это собсно и есть winAPI, которые используются для работы с файлом. Командная строка - GetCommandLine. Но парсить на асме будет конечно затруднительно.

    rdtsc - инструкция на асме, которая поможет в генерации случайного числа.
     
  3. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    MSoft
    Тем более, что забивать можно не специально-случайными числами, а вообще любыми. Например чилслом 0 или, скажем 10. Тут главная сложность в том чтоб писать именно в те сектора.
    test555
    Пишите на Цэ (без ++) ненамного хуже будет. (если вообще хуже)
     
  4. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    нифига. у делфи есть такие штуки как CmdLine, Paramstr(#) .)
    и кстате есть такие штука как assign(f,FNAME) -> rewrite(f) -> write(f,generated_text) -> close(f).
    чачача.
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    test555
    была такая же утилита в DOS по-моему wipe называлась может быть стоит поискать;)
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Mikl___
    под дос имхо проще, тк можно было легко вычислить и разрушить всю инфу относящуюся к файлу (и кластера и фат). В нтфс - не знаю. Кстати, если нужна простро утиль, а старый кремлин разве не подойдет?
     
  7. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    не думаю, что ТС пытался решить задачу именно с этой сторорны :)
     
  8. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Кстати, простое закрытие файла гарантирует, что винда сбросит данные на диск перед последующим его открытием на перезапись или удалением, или для надеги нужно вызывать FlushFileBuffers перед закрытием файла ? Или юзать FILE_FLAG_NO_BUFFERING или FILE_FLAG_WRITE_THROUGH...
     
  9. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    leo, я проверял winhex-ом, перетирает.

    А каком кампилятор С++ взять чтобы размер приложения был мизерным?
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    winhex это не показатель, поскольку, во-первых, винда может подсовывать ему данные не с диска, а из файлового кэша, во-вторых, если файл сразу не удаляется, то данные разумеется в любом случае записываются на диск, но с некоторой задержкой (особенно для больших файлов рулит "ленивая запись" на диск). Поэтому вопрос в том, форсирует ли закрытие файла сброс данных из памяти на диск (как это делает FlushFileBuffers) или нет. Если нет, то при повторных перезаписях в цикле данные могут просто перетираться в памяти (файловом кэше), а на диск в итоге сбросится только последнее изменение - тогда и смысла нет в многократных проходах. Поэтому для надежности всетаки лучше перед закрытием вызывать FlushFileBuffers
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    test555
    MCVC c -O1 или OW с кучей ключей. Иногда тот иногда тот. ОВ мне нравится больше, тк очень полезные ключи имеет и просто суперский линкер.
     
  12. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    leo, спасибо, учел. Поставил. На данный момент скачал кампилятор паскалевский Inno Pascal 0.1.5

    Есть пример записи в файл, размер приложение - 1500 байт, что мне вполне приемлемо.

    Нужно только все функции описывать..
     
  13. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Inno Pascal увы, не поддерживает if, for....

    Кто-нибудь скажет где скачать MCVC??
    интернет перелазил, только в одном обзоре упоминается и все ((
     
  14. bitgame

    bitgame New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2006
    Сообщения:
    7
    новая версия gpcode? :derisive:
     
  15. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    А на сайте микрософт искали?
     
  16. z_x_spectrum

    z_x_spectrum New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    145
  17. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    На чистом АПИ без РТЛ будет гораздо меньше.
    я те даже точно скажу: 3-4кб.
     
  18. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    f:=FileOpen(feledel, $0002);

    Это не API. Это делфийский RTL.

    Это? я функцию выдрал из Сисутился.

    Даже пустое делфийское приложение 15 кб. ((
    Ладно, пока обойдусь и 20 кб приложением.
     
  19. z_x_spectrum

    z_x_spectrum New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    145