Рекурсивный морфер datetime файлов и директорий

Дата публикации 4 авг 2018 | Редактировалось 4 авг 2018
© хабр, «Небольшой обзор исходного кода трояна zeus»​

Утечка исходных текстов в сеть может сулить вот таким логическим разбором и составлением портрета разработчика, поэтому пришла мысль написать «морфер» который рекурсивно применяет SetFileTime() к файлам и директориям.

python3 + модуль pywin32 (pip install pywin32)

Код (Python):
  1. # https://github.com/mhammond/pywin32
  2.  
  3. import sys, os
  4. from datetime import datetime
  5. from random import randint
  6.  
  7. from win32file import CreateFile, SetFileTime
  8. from win32con import GENERIC_WRITE, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, FILE_FLAG_BACKUP_SEMANTICS
  9. from pywintypes import Time
  10.  
  11.  
  12. def set_file_rnd_time(s, isdir=False):
  13.     print(s)
  14.  
  15.     try:
  16.         f = CreateFile(s, GENERIC_WRITE, 0, None, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS if isdir else FILE_ATTRIBUTE_NORMAL, None)
  17.     except:
  18.         print("CreateFile() error!")
  19.         exit(0)
  20.     else:
  21.         rnd_dt = (lambda: datetime(
  22.             randint(1980, 2100),    # year
  23.             randint(1, 12),         # month
  24.             randint(1, 28),         # day
  25.             randint(0, 23),         # hour
  26.             randint(0, 59),         # minute
  27.             randint(0, 59),         # second
  28.             randint(0, 999999)      # microsecond
  29.         ))
  30.  
  31.         SetFileTime(f, Time(rnd_dt()), Time(rnd_dt()), Time(rnd_dt()))
  32.  
  33.         f.close()
  34.  
  35.  
  36. if __name__ == "__main__":
  37.     argv = sys.argv
  38.  
  39.     if len(argv) < 3:
  40.         print("argv error!\npy -3 <script>.py %~nx0 <folder>")
  41.         exit(0)
  42.  
  43.     ap = (lambda s: os.path.join(os.path.dirname(os.path.abspath(__file__)), s))
  44.  
  45.     for dirpath, _, filenames in os.walk(ap(argv[2])):
  46.         set_file_rnd_time(ap(dirpath), True)
  47.  
  48.         for name in filenames:
  49.             set_file_rnd_time(ap(dirpath + os.sep + name))
  50.  
  51.     set_file_rnd_time(ap(argv[0]))
  52.     set_file_rnd_time(ap(argv[1]))

0 2.140
python4

python4
New Member

Регистрация:
25 май 2018
Публикаций:
1