Удалить файл

Тема в разделе "WASM.BEGINNERS", создана пользователем Aspire, 15 авг 2007.

  1. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Доброго времени суток!
    Задача следующая: нужно после запуска файла его самоликвидировать. Знаю что это можно сделать черз запуск другого файла, например батника, но данный способ не подходит. Подскажите, плиз, в какую сторону копать?
     
  2. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Aspire
    я знаю 4 способа
    1. Удаленный поток.
    Т.е. создаешь удаленный поток в другом процессе и удаляешь свой файл.
    функции:


    OpenProcess ;открываешь процесс
    VirtualAllocEx ;выделяешь память в контексте открытого процесса
    WriteProcessMemory ;записываешь код, который будет исполняться внутри процесса
    CreateRemoteThread ;запускаешь поток на выполнение


    2. Батник.
    Почему не подходит? все очень даже идеально. Батник удалит твой файл, а потом себя.
    Если не подходит по причине того, что ты бат-файл с асма запустить не можешь - то бат-файлы запускаются так:
    cmd.exe C:\...\some.bat

    3. Пометить файл на удаление.
    После перезагрузки файл удалится.

    4. Из драйвера.
    Открыть физическую память и потереть файл.
     
  3. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Ну да. Тогда, действительно получается, что 2-й способ самый легкий. Файл создает батник, потом его запускает и батник удаляет оба файла...
    А для запуска файлов, обычно использую ShellExecute.
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Aspire
    если цель - скрытность, то фаеры тебя попалят
    имхо, поток в другом процессе рулит!
    ах да, чуть не забыл, можно еще сделать MoveFileEx, правда это скорее просто для скрытия, но тоже чем не вариант?
     
  5. FromNowhere

    FromNowhere New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    23
  6. pris0ner

    pris0ner New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    43
    я реализовал в своей программе способ номер 2.
    До тех пор пока в пути к файлу не встречаются русские буквы, все нормально. Но дело в том, что функции GetHandleName и GetCurrentDirectory возвращают русские буквы в формате win utf8. а вот bat файл работает с DOS кодировкой. поэтому он неможет уничтожить эти файлы. можно конечно перекодировать, но нельзя ли сделать проще и изящнее?
     
  7. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    pris0ner
    при старте cmd отдельным параметром можно задать кодировку.
     
  8. pris0ner

    pris0ner New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    43
    как?
    простите за тупость...
     
  9. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Мне было бы интересно КАКИМ параметром это можно указать?
    ЗЫ. Попробовал, действительно не работает с русским алфавитом..
    pris0ner Да, кстати, если воспользуешься ф-цией ShellExecute при запуске батника, то получать и задавать текущую директорию будет совсем не нужно. В ней же передается указатель на строку с параметрами запуска.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    chcp 1251. Или писать в скрипт уже перекодированный текст (CharToOem).
     
  11. pris0ner

    pris0ner New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    43
    наиболее изящным решением для меня показалось, как посоветовал IceStudent
    использовать первой командой своего батника cpcp 1251. Все заработало.
     
  12. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Господа, про самый изящбный способ забыли - Затолкать в стек код который удалит файл, и адрес возврата из функции чтоб указывал на этот код. затем вызываем ExitProcess джампом. После отработки ExitProcess выполнится ваш код.
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    assorted
    В вин nt/2000 вроде работал трюк с UnmapViewOfFile, в 9x/me - FreeLibrary.

    Насчет ХР и выше хз
     
  14. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
  15. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Great при чем тут UnmapViewOfFile? я предлагал ExitProcess....
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    assorted
    ExitProcess управление не возвращает. Тут надо геморроиться с ZwTerminateProcess в паре с CsrClientCallServer и DeleteFileA. Мб както получиться стереть файл после уведомления csrss
     
  17. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Great Вы мои сообщения внимательно читали? Очень даже возвращает См. выше.
     
  18. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    assorted Если это работает, то это действительно "изящно". Обязательно попробую реализовать.
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Похоже я не понял о чем речь. Можно слегка подробнее?
     
  20. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Great Видимо, вся фишка в этом : "затем вызываем ExitProcess джампом", потому как в ф-ии ExitProcess, как и везде стоят push EBP; mov EBP,ESP...