Быстрый поиск
Введите фрагмент названия статьи для поиска
Отслеживание загрузки dll в память процесса
13.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ранее я уже рассказывал, как можно легко и просто получить список динамических библиотек, загруженных в ваш процесс. Сегодня расскажу о возможности отслеживания загрузки и выгрузки DLL. Начиная с Windows Vista, появилась функция LdrRegisterDllNotification. С ее помощью в приложении регистрируется callback-функция, которая будет вызываться каждый раз, как только в ваше приложение будет загружена DLL или какая-то DLL будет выгружена из его адресного пространства. Установка обработчика выполняется одной командой:Code (Assembler) : Убрать нумерацию
- ; Зарегистрировать обработчик загрузки и выгрузки DLL
- invoke LdrRegisterDllNotification,0,LdrDllNotification,NULL,Cookie
- or eax,eax
- jnz loc_error
Code (Assembler) : Убрать нумерацию
- LDR_DLL_NOTIFICATION_REASON_LOADED = 1
- LDR_DLL_NOTIFICATION_REASON_UNLOADED = 2
- struct NOTIFICATION_DATA
- Flags dd ?
- FullDllName dd ?
- BaseDllName dd ?
- DllBase dd ?
- SizeOfImage dd ?
- ends
- proc LdrDllNotification NotificationReason:DWORD,\
- NotificationData:DWORD,Context:DWORD
- pusha
- mov eax,[NotificationReason]
- ; EAX -> действие с DLL
- ; LDR_DLL_NOTIFICATION_REASON_LOADED = загружена
- ; LDR_DLL_NOTIFICATION_REASON_UNLOADED = выгружена
- ; Получить полный путь до файла DLL
- mov eax,[NotificationData]
- mov eax,[eax+NOTIFICATION_DATA.FullDllName]
- mov eax,[eax+4]
- ; EAX -> полное имя файла DLL
- ; Получить базовый адрес DLL
- mov eax,[NotificationData]
- mov eax,[eax+NOTIFICATION_DATA.DllBase]
- ; EAX -> DllBase библиотеки
- popa
- ret
- endp
Читать статью целиком »
Просмотров: 1592 | Комментариев: 1
Как узнать состояние и размеры панели задач Windows
05.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для получения рабочей области экрана, доступной вашему приложению, может потребоваться определение положения и размера панели задач. Управлять положением и состоянием панели задач пользователь может через меню свойств или через апплет настроек. А для получения всех необходимых данных надо воспользоваться функцией SHAppBarMessage. Но сперва структура и несколько констант, которые будут нам нужны для работы.Code (Assembler) : Убрать нумерацию
- struct APPBARDATA
- cbSize dd ?
- hwnd dd ?
- uCallbackMessage dd ?
- uEdge dd ?
- rc RECT
- lParam dd ?
- ends
- ABM_GETSTATE = 4
- ABM_GETTASKBARPOS = 5
Code (Assembler) : Убрать нумерацию
- mov [abd.cbSize],sizeof.APPBARDATA
- invoke SHAppBarMessage,ABM_GETTASKBARPOS,abd
- ; [abd.uEdge] -> положение панели задач
- ; 0 = слева
- ; 1 = сверху
- ; 2 = справа
- ; 3 = снизу
- ; [abd.rc] -> координаты Панели задач
Читать статью целиком »
Просмотров: 895 | Комментариев: 0
Проверка подлинности Windows
29.04.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Проверка подлинности Windows
Не только в самой Windows есть средства для проверки собственной активации, у обычных приложений тоже имеется возможность проверять подлинность операционной системы, на которой они запущены. Сегодня познакомимся со способами, которые для этого используются.
Читать статью целиком »
Просмотров: 1648 | Комментариев: 9
Включение регистрозависимых имен файлов на NTFS-дисках
27.04.2021 | Категория: Software | Автор: ManHunter
Включение регистрозависимых имен файлов на NTFS-дисках
Век живи - век учись. Сколько лет работаю с дисками, отформатированными в NTFS, но лишь недавно узнал, что эта файловая система поддерживает регистрозависимые имена файлов, как это "из коробки" работает на *NIX-системах. То есть в Windows можно сделать так, чтобы файлы "FILE.TXT" и "file.txt" считались разными файлами и при этом одновременно существовали в каталоге.
Читать статью целиком »
Просмотров: 2838 | Комментариев: 7
Получение списка программ, закрепленных на панели задач
15.04.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
В одной из старых статей о работе с панелью задач я написал, что узнать список закрепленных программ можно перебором ярлыков в папке %APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar. Действительно, это можно сделать и так, но лучше делать это правильно, с использованием предназначенных для этого COM-интерфейсов системы. Начнем с описания констант, GUID и интерфейсов, которые нам понадобятся для работы.Code (Assembler) : Убрать нумерацию
- CLSCTX_INPROC_SERVER = 1
- S_OK = 0
- ; Windows Vista
- ; GUID {C3C6EB6D-C837-4EAE-B172-5FEC52A2A4FD}
- IID_IPinnedList dd 0C3C6EB6Dh
- dw 0C837h
- dw 04EAEh
- db 0B1h, 072h, 05Fh, 0ECh, 052h, 0A2h, 0A4h, 0FDh
- ; Windows 7, 8, 8.1
- ; GUID {BBD20037-BC0E-42F1-913F-E2936BB0EA0C}
- IID_IPinnedList2 dd 0BBD20037h
- dw 0BC0Eh
- dw 042F1h
- db 091h, 03Fh, 0E2h, 093h, 06Bh, 0B0h, 0EAh, 00Ch
- ; Windows 10 build 1809+
- ; GUID {0DD79AE2-D156-45D4-9EEB-3B549769E940}
- IID_IPinnedList3 dd 00DD79AE2h
- dw 0D156h
- dw 045D4h
- db 09Eh, 0EBh, 03Bh, 054h, 097h, 069h, 0E9h, 040h
- ; IID_IPinnedList Interface
- struct IPinnedList
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IPinnedList
- EnumObjects dd ? ; 00Ch
- Modify dd ? ; 010h
- GetChangeCount dd ? ; 014h
- IsPinnable dd ? ; 018h
- Resolve dd ? ; 01Ch
- IsPinned dd ? ; 020h
- ends
- ; GUID {90AA3A4E-1CBA-4233-B8BB-535773D48449}
- CLSID_TaskbarPin dd 090AA3A4Eh
- dw 01CBAh
- dw 04233h
- db 0B8h, 0BBh, 053h, 057h, 073h, 0D4h, 084h, 049h
- ; IID_IEnumFullIDList Interface
- struct IEnumFullIDList
- ; IUnknown
- QueryInterface dd ?
- AddRef dd ?
- Release dd ?
- ; IEnumFullIDList
- Next dd ?
- Skip dd ?
- Reset dd ?
- Clone dd ?
- ends
Читать статью целиком »
Просмотров: 1097 | Комментариев: 0