Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Как правильно запретить Windows переходить в спящий режим

12.03.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
В одной из предыдущих статей я описывал способ, как можно запретить Windows переходить в спящий режим. Там это было реализовано через имитацию активности пользователя. Способ действительно рабочий, но с точки зрения решения поставленной задачи не совсем корректный. Настало время исправить ситуацию. Итак, наиболее правильный способ запретить Windows переходить в спящий режим - это использование функции SetThreadExecutionState. В качестве параметра она принимает один или комбинацию из нескольких флагов:
  1. ES_CONTINUOUS        = 0x80000000
  2. ES_DISPLAY_REQUIRED  = 0x00000002
  3. ES_SYSTEM_REQUIRED   = 0x00000001
  4. ES_AWAYMODE_REQUIRED = 0x00000040
Значения флагов хорошо расписаны в MSDN. Так, ES_SYSTEM_REQUIRED не дает системе перейти в спящий режим. Флаг ES_DISPLAY_REQUIRED отвечает за активность дисплея. Это касается как блокировки запуска скринсейвера, так и подавления таймера отключения монитора при бездействии, если в нем есть такая функция. Флаг ES_AWAYMODE_REQUIRED в основном используется мультимедийными приложениями для выполнения своих фоновых задач, обычным приложениям он вряд ли потребуется. Флаг ES_CONTINUOUS фиксирует состояние активности системы до следующего вызова функции с этим флагом и комбинацией других флагов.

Для разных задач использование SetThreadExecutionState может отличаться. Например, если ваше приложение должно оставаться активным только на время продолжительного выполнения какого-нибудь критического участка кода, то перед его началом надо зафиксировать состояние запрета перехода системы в спящий режим, а после окончания этот запрет снять.
  1.         ; Установить состояние постоянной активности системы и монитора
  2.         invoke  SetThreadExecutionState,ES_CONTINUOUS+ES_SYSTEM_REQUIRED+\
  3.                 ES_DISPLAY_REQUIRED
  4.  
  5.         ; Тут выполняется какой-то очень важный процесс, который
  6.         ; нельзя прерывать
  7.  
  8.         ; Сбросить состояние постоянной активности
  9.         invoke  SetThreadExecutionState,ES_CONTINUOUS
Для снятия запрета надо вызвать функцию SetThreadExecutionState с единственным флагом ES_CONTINUOUS. Теперь система может спокойно запускать скринсейвер, переходить в спящий режим, понижать частоту процессора при простое и т.п.

Читать статью целиком »
Просмотров: 1331 | Комментариев: 4

Как прочитать файлы, заблокированные операционной системой Windows

21.02.2019 | Категория: Software | Автор: ManHunter

Как прочитать файлы, заблокированные операционной системой Windows

В целях безопасности некоторые файлы и каталоги в системе Windows защищены от несанкционированного доступа. И будь вы хоть трижды администратором на своем компьютере, при работающей системе вы не сможете их открыть даже для просмотра, не говоря уже о внесении каких-либо изменений. К таким файлам относятся файлы подкачки pagefile.sys и hiberfile.sys, файлы реестра, папки с данными точек восстановления. Для чего это нужно? Ну, например, при помощи специальных инструментов из файла подкачки можно попытаться извлечь сохраненные в памяти пароли от криптоконтейнеров (Passware Kit Forensic), а из файлов реестра - логины и пароли учетных записей пользователей (SamInside).

Читать статью целиком »
Просмотров: 1788 | Комментариев: 8

Как получить имя файла, зная его Handle

29.01.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
В одной программе у меня появилась необходимость получить имя открытого файла, когда известен его хэндл. Полазив по этим вашим интернетам, я нашел немало решений этой задачи, в основном бездумно скопированных с одного сайта на другой. Пришлось разбираться и систематизировать все самому. Итак, самый простой и приятный способ, чтобы получить имя файла по его хэндлу - использовать функцию GetFinalPathNameByHandle.
  1.         ; Получить имя файла по его хэндлу
  2.         invoke GetFinalPathNameByHandle,[hFile],lpName,MAX_PATH,0
На вход подаем хэндл открытого файла, на выходе получаем полный путь к нему. Красота! Но, к сожалению, этот способ работает только на Windows Vista и более новых системах. Если вашему приложению требуется поддержка Windows XP, то придется проверять наличие этой функции в экспорте библиотеки kernel32. Для старых систем есть другой способ. Открытый файл проецируется в память с помощью функций CreateFileMapping и MapViewOfFile, затем с помощью функции GetMappedFileName можно узнать полный путь к спроецированному файлу:
  1.         ; Создать проекцию файла
  2.         invoke  CreateFileMapping,[hFile],NULL,PAGE_READONLY,0,1,NULL
  3.         mov     [hFileMap],eax
  4.         invoke  MapViewOfFile,[hFileMap],FILE_MAP_READ,0,0,1
  5.         mov     [pMem],eax
  6.  
  7.         ; Получить имя спроецированного файла
  8.         invoke  GetCurrentProcess
  9.         invoke  GetMappedFileName,eax,[pMem],lpName,MAX_PATH
  10.  
  11.         ; Прибраться за собой
  12.         invoke  UnmapViewOfFile,[pMem]
  13.         invoke  CloseHandle,[hFileMap]
Имя носителя в строке пути записывается в виде "\Device\HarddiskVolume1", для приведения его к более привычному виду надо пройтись по всем доступным буквам дисков, установленных в системе, каждую преобразовать в имя устройства и сравнить с именем устройства в пути к файлу. Для облегчения операции преобразования символических ссылок я нарисовал отдельную функцию. Способ с проецированием файла неплохой, но у него есть один существенный недостаток: проецирование не работает с файлами нулевой длины. Например, вы не сможете получить имя вновь созданного пустого файла, тогда как функция GetFinalPathNameByHandle прекрасно справляется с этой задачей.

Читать статью целиком »
Просмотров: 1335 | Комментариев: 3

Что скрывают ярлыки?

26.01.2019 | Категория: Software | Автор: ManHunter

Что скрывают ярлыки?

Как гласят толковые словари, форенсика - современная наука о раскрытии инцидентов, связанных с компьютерной информацией, исследовании цифровых доказательств, методах поиска, получения и закрепления таких доказательств. И действительно, невероятно сложно удалить все следы работы за компьютером, чтобы профессионал не смог их обнаружить. Сегодня я покажу вам, что скрывают такие, на первый взгляд, безобидные объекты, как ярлыки недавно открытых документов.

Читать статью целиком »
Просмотров: 1775 | Комментариев: 7

Как в .BAT-файле записать текстовую строку в файл без символов переноса строки

05.11.2018 | Категория: Software | Автор: ManHunter
При всей своей кажущейся простоте, пакетные файлы обладают очень мощным функционалом. Вплоть до того, что на .BAT-файлах можно писать полиморфные вирусы. Но, как и в любой околокомпьютерной сфере, тут не обошлось без своих заморочек. Одна из них заключается в том, что при перенаправлении вывода в файл командой echo в созданный файл принудительно добавляется перенос строки. Вроде бы так и надо, но если вам надо сформировать какую-нибудь команду или непрерывную строку для дальнейшего использования, то было бы неплохо сделать так, чтобы символ переноса строки не добавлялся. Сделать это можно, используя другую команду:

<nul set /p tmpstr=текст>file.txt
В такой реализации в перенаправляемый файл будет записана текстовая строка без лишних символов переноса строки. При этом формируемую строку в любой момент можно дополнять командой типа:

<nul set /p tmpstr=другой_текст>>file.txt
В этом случае перенос строки также не добавляется. Когда необходимый паттерн будет сформирован, но при этом надо перейти к новой строчке, вывод текущей строки в файл можно завершить уже известной вам командой echo.

Читать статью целиком »
Просмотров: 1617 | Комментариев: 3

01 ... 05 06 07 08 09 10 11 ... 29
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 3 (0.0432 сек.) / Память: 5 Mb
Наверх