Blog. Just Blog

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

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

Обработка изменения иконок в системном трее

19.06.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
С обновлением иконок в системном трее разобрались, теперь давайте разберем, как можно отслеживать изменения в трее. Причем изменения касаются не только добавления-удаления иконок, но также изменения всплывающих подсказок и изменения иконки с сохранением ее индекса.
  1. CLSCTX_LOCAL_SERVER = 0x04
  2. S_OK = 0
  3.  
  4. struct NOTIFYITEM
  5.     pszExeName   dd ?
  6.     pszTip       dd ?
  7.     hIcon        dd ?
  8.     hWnd         dd ?
  9.     dwPreference dd ?
  10.     uID          dd ?
  11.     guidItem     rd 4
  12. ends
  13.  
  14. ; GUID {D782CCBA-AFB0-43F1-94DB-FDA3779EACCB}
  15. IID_INotificationCB dd 0D782CCBAh
  16.                     dw 0AFB0h
  17.                     dw 043F1h
  18.                     db 094h, 0DBh, 0FDh, 0A3h, 077h, 09Eh, 0ACh, 0CBh
  19.  
  20. ; INotificationCB interface
  21. struct INotificationCB
  22.         QueryInterface dd ?
  23.         AddRef         dd ?
  24.         Release        dd ?
  25.         ; INotificationCB
  26.         Notify         dd ?
  27. ends
  28.  
  29. ; GUID {FB852B2C-6BAD-4605-9551-F15F87830935}
  30. IID_ITrayNotify dd 0FB852B2Ch
  31.                 dw 06BADh
  32.                 dw 04605h
  33.                 db 095h, 051h, 0F1h, 05Fh, 087h, 083h, 009h, 035h
  34.  
  35. ; ITrayNotify interface
  36. struct ITrayNotify
  37.         QueryInterface   dd ?
  38.         AddRef           dd ?
  39.         Release          dd ?
  40.         ; ITrayNotify
  41.         RegisterCallback dd ?
  42.         SetPreference    dd ?
  43.         EnableAutoTray   dd ?
  44. ends
  45.  
  46. ; GUID {25DEAD04-1EAC-4911-9E3A-AD0A4AB560FD}
  47. CLSID_TrayNotify dd 025DEAD04h
  48.                  dw 01EACh
  49.                  dw 04911h
  50.                  db 09Eh, 03Ah, 0ADh, 00Ah, 04Ah, 0B5h, 060h, 0FDh
  51.  
  52. ; GUID {00000000-0000-0000-C000-000000000046}
  53. IID_IUnknown dd 000000000h
  54.              dw 00000h
  55.              dw 00000h
  56.              db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
Практически все, что тут используется, относится к недокументированным функциям Windows, поэтому внимательно смотрите примеры и описания. И да, работает оно только на современных системах, начиная с Windows Vista.

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

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

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

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

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

Читать статью целиком »
Просмотров: 553 | Комментариев: 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 пытаются подгрузить в наш процесс и принять соответствующие меры. Например, при попытке подгрузить в процесс модуль мониторинга, можно отключить некоторые ветки алгоритма или исказить выдаваемые данные, а можно просто завершить работу приложения. Если пойти дальше, то теоретически можно даже модифицировать в памяти загруженную библиотеку, нейтрализовав в ней то, чего она не должна делать с вашим процессом. Просторы для фантазии безграничны.

Читать статью целиком »
Просмотров: 314 | Комментариев: 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.

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

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

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

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

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

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

prev 01 02 03 04 05 06 07 08 09 ... 31
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.13 сек. / MySQL: 3 (0.066 сек.) / Память: 4.75 Mb
Наверх