слежение за копированием файлов...

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by VintProg, 16 Jan 2012.

  1. VintProg

    VintProg New Member

    Joined:
    29 Oct 2011
    Messages:
    38
    Likes Received:
    0
    Reputations:
    0
    Как реализовать, программно слежение за копированием файлов:
    допустим получить лог:
    файл A был скопирован на диск D:\

    ну и так далее, срочно нужно проверку в компе сделать...

    Или может кто подскажет исходники, хороших шпионов? Вся надежда на вас ребята, на вашу помошь...
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Пишешь драйвер, перехватываешь функции типа CreateFile, MoveFile...
    Если не хочется драйвер, то можешь сделать дллку в которой тоже реализовать перехват функций и прописать её в AppInit_DLL

    Примеры всего этого есть в гугле и легко ищутся.
     
    _________________________
  3. VintProg

    VintProg New Member

    Joined:
    29 Oct 2011
    Messages:
    38
    Likes Received:
    0
    Reputations:
    0
    да что-то не могу найти...
     
  4. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    В драйвере достаточно перехватить NtCreateFile, так как любые операции с файлами (и даже драйверами и сервисами) в итоге сводятся туда, насколько помню.
     
  5. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Еще понадобится распознать, создали ли новый файл для того, чтобы скопировать в него другой файл (слежение за копированием файлов).

    2 варианта приходит в голову:
    - сохранять адресы буфферов и их размеры, которые используются в функции NtReadFile и проверять их с теми, что используются в функции NtWriteFile. В большинстве случаев, если адрес и размер совпал, значит происходит копирование, но не всегда;
    - сохранять список последних закрытых файлов. В момент, когда происходит закрытие еще какого то файла, нужно обратится к этому списку и найти файл, размер которого равняется закрываемому. Если нашли такой файл, то может быть мы нашли 2 одинаковых файла, один из которых недавно скопировали в другой. Нужно сделать дополнительные действия, чтобы убедится в этом (сравнить md5-хеши этих файлов или просто сравнить эти файлы побайтово).