Blog. Just Blog

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

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

Работа с сервисами Windows на Ассемблере

27.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Работа с сервисами Windows на Ассемблере

Давно хотел поэкспериментировать с сервисами Windows, наконец дошли руки. Еще со времен Windows XP я пользуюсь программой Service Tree от А.Н.Гусарова, но в ней имеются досадные косяки, поэтому есть большое желание написать что-нибудь подобное. А в этой статье будут складироваться все наработки по теме сервисов.

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

Отслеживание загрузки dll в память процесса

13.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ранее я уже рассказывал, как можно легко и просто получить список динамических библиотек, загруженных в ваш процесс. Сегодня расскажу о возможности отслеживания загрузки и выгрузки DLL. Начиная с Windows Vista, появилась функция LdrRegisterDllNotification. С ее помощью в приложении регистрируется callback-функция, которая будет вызываться каждый раз, как только в ваше приложение будет загружена DLL или какая-то DLL будет выгружена из его адресного пространства. Установка обработчика выполняется одной командой:
  1.         ; Зарегистрировать обработчик загрузки и выгрузки DLL
  2.         invoke  LdrRegisterDllNotification,0,LdrDllNotification,NULL,Cookie
  3.         or      eax,eax
  4.         jnz     loc_error
Важное замечание. Как показала практика, в callback-функции не должно быть никаких открытий окон, вывода сообщений и прочих взаимодействий с интерфейсом. Это может привести к зацикливанию и падению приложения во время загрузки UI-библиотек.
  1. LDR_DLL_NOTIFICATION_REASON_LOADED   = 1
  2. LDR_DLL_NOTIFICATION_REASON_UNLOADED = 2
  3.  
  4. struct NOTIFICATION_DATA
  5.     Flags       dd ?
  6.     FullDllName dd ?
  7.     BaseDllName dd ?
  8.     DllBase     dd ?
  9.     SizeOfImage dd ?
  10. ends
  11.  
  12. proc LdrDllNotification NotificationReason:DWORD,\
  13.         NotificationData:DWORD,Context:DWORD
  14.  
  15.         pusha
  16.         mov     eax,[NotificationReason]
  17.         ; EAX -> действие с DLL
  18.         ; LDR_DLL_NOTIFICATION_REASON_LOADED = загружена
  19.         ; LDR_DLL_NOTIFICATION_REASON_UNLOADED = выгружена
  20.  
  21.         ; Получить полный путь до файла DLL
  22.         mov     eax,[NotificationData]
  23.         mov     eax,[eax+NOTIFICATION_DATA.FullDllName]
  24.         mov     eax,[eax+4]
  25.         ; EAX -> полное имя файла DLL
  26.  
  27.         ; Получить базовый адрес DLL
  28.         mov     eax,[NotificationData]
  29.         mov     eax,[eax+NOTIFICATION_DATA.DllBase]
  30.         ; EAX -> DllBase библиотеки
  31.  
  32.         popa
  33.         ret
  34. endp
При каждом вызове в callback-функцию передается причина вызова - загрузка или выгрузка DLL, а также заполненная структура NOTIFICATION_DATA, в которой содержится полный путь и имя файла библиотеки, базовый адрес загрузки и размер загружаемого образа. Зная эти данные, можно проверить, что за DLL пытаются подгрузить в наш процесс и принять соответствующие меры. Например, при попытке подгрузить в процесс модуль мониторинга, можно отключить некоторые ветки алгоритма или исказить выдаваемые данные, а можно просто завершить работу приложения. Если пойти дальше, то теоретически можно даже модифицировать в памяти загруженную библиотеку, нейтрализовав в ней то, чего она не должна делать с вашим процессом. Просторы для фантазии безграничны.

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

Как узнать состояние и размеры панели задач Windows

05.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для получения рабочей области экрана, доступной вашему приложению, может потребоваться определение положения и размера панели задач. Управлять положением и состоянием панели задач пользователь может через меню свойств или через апплет настроек. А для получения всех необходимых данных надо воспользоваться функцией SHAppBarMessage. Но сперва структура и несколько констант, которые будут нам нужны для работы.
  1. struct APPBARDATA
  2.     cbSize           dd ?
  3.     hwnd             dd ?
  4.     uCallbackMessage dd ?
  5.     uEdge            dd ?
  6.     rc               RECT
  7.     lParam           dd ?
  8. ends
  9.  
  10. ABM_GETSTATE = 4
  11. ABM_GETTASKBARPOS = 5
С помощью сообщения ABM_GETTASKBARPOS получаем положение и размеры панели задач:
  1.         mov     [abd.cbSize],sizeof.APPBARDATA
  2.         invoke  SHAppBarMessage,ABM_GETTASKBARPOS,abd
  3.         ; [abd.uEdge] -> положение панели задач
  4.         ; 0 = слева
  5.         ; 1 = сверху
  6.         ; 2 = справа
  7.         ; 3 = снизу
  8.         ; [abd.rc] -> координаты Панели задач
Но тут надо понимать, что на экране могут присутствовать другие панели, которые также отнимают полезную площадь экрана. Для точного определения доступной области пользуйтесь функцией GetMonitorInfo.

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

Проверка подлинности Windows

29.04.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Проверка подлинности Windows

Не только в самой Windows есть средства для проверки собственной активации, у обычных приложений тоже имеется возможность проверять подлинность операционной системы, на которой они запущены. Сегодня познакомимся со способами, которые для этого используются.

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

Включение регистрозависимых имен файлов на NTFS-дисках

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

Включение регистрозависимых имен файлов на NTFS-дисках

Век живи - век учись. Сколько лет работаю с дисками, отформатированными в NTFS, но лишь недавно узнал, что эта файловая система поддерживает регистрозависимые имена файлов, как это "из коробки" работает на *NIX-системах. То есть в Windows можно сделать так, чтобы файлы "FILE.TXT" и "file.txt" считались разными файлами и при этом одновременно существовали в каталоге.

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

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