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

Обработка колесика мыши над иконкой в трее
12.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
"По следам наших публикаций", как любили писать в советской прессе. В предыдущей статье я обещал рассказать, каким образом можно реализовать обработку вращения колесика мыши над иконкой в системном трее. Поскольку система не отправляет иконкам в трее сообщение WM_MOUSEWHEEL, обрабатывать его мы будем при помощи хуков и описанных в предыдущей статье методов определения, что курсор находится над нужной иконкой. Начнем с локального хука. Установка и снятие хука выполняется самым обычным способом, например:Code (Assembler) : Убрать нумерацию
- proc DialogProc hwnddlg,msg,wparam,lparam
- push ebx esi edi
- cmp [msg],WM_INITDIALOG
- je .wminitdialog
- cmp [msg],WM_CLOSE
- je .wmclose
- ...
- ...
- xor eax,eax
- jmp .finish
- .wminitdialog:
- ...
- ...
- ; Показать иконку в трее
- invoke Shell_NotifyIcon, NIM_ADD,node
- ; Установить обработчик мыши
- invoke GetCurrentThreadId
- invoke SetWindowsHookEx,WH_MOUSE,MousewheelProc,NULL,eax
- mov [hhkm],eax
- mov eax,[hwnddlg]
- mov [hwmain],eax
- jmp .processed
- ...
- ...
- .wmclose:
- ; Снять обработчик мыши
- invoke UnhookWindowsHookEx,[hhkm]
- ; Удалить иконку из трея
- invoke Shell_NotifyIcon,NIM_DELETE,node
- ; Закрыть окно
- invoke EndDialog,[hwnddlg],0
- .processed:
- mov eax,1
- .finish:
- pop edi esi ebx
- ret
- endp
Code (Assembler) : Убрать нумерацию
- ; Структура для обработчика хука
- struct MOUSEHOOKSTRUCTEX
- pt POINT
- hwnd dd ?
- wHitTestCode dd ?
- dwExtraInfo dd ?
- mouseData dd ?
- ends
- ;-------------------------------------------------------------
- ; Обработка mousewheel
- ;-------------------------------------------------------------
- proc MousewheelProc nCode:dword,wParam:dword,lParam:dword
- pusha
- cmp [nCode],0
- jl .loc_ret
- ; Это сообщение от колеса мыши?
- cmp [wParam],WM_MOUSEWHEEL
- jne .loc_ret
- ; Заполнить структуру для идентификации иконки
- mov [notify.cbSize],sizeof.NOTIFYICONIDENTIFIER
- mov eax,[hwmain]
- mov [notify.hWnd],eax
- mov [notify.uID],ICON_ID
- ; Получить координаты иконки в трее
- invoke Shell_NotifyIconGetRect,notify,rc
- ; Указатель на MOUSEHOOKSTRUCT
- mov ebx,[lParam]
- ; Курсор находится внутри прямоугольника иконки?
- invoke PtInRect,rc,[ebx+MOUSEHOOKSTRUCTEX.pt.x],\
- [ebx+MOUSEHOOKSTRUCTEX.pt.y]
- or eax,eax
- ; Нет, ничего не делать
- jz .loc_ret
- ; Проверить направление поворота колесика
- mov eax,[ebx+MOUSEHOOKSTRUCTEX.mouseData]
- or eax,eax
- js .loc_down
- .loc_up:
- ; Вращение вверх
- ...
- ...
- jmp .loc_ret
- .loc_down:
- ; Вращение вниз
- ...
- ...
- .loc_ret:
- popa
- invoke CallNextHookEx,[hhkm],[nCode],[wParam],[lParam]
- ret
- endp
Читать статью целиком »
Просмотров: 628 | Комментариев: 8

Получение координат иконки в трее
06.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодняшний пример - получение координат иконки в трее. Для чего это надо, я поясню чуть ниже. Сам код основан на уже знакомом вам переборе иконок в трее, поэтому практически все структуры будут такими же. Теоретическая часть работы с треем расписана там же, дублировать ее не буду. Начнем с описания всех необходимых структур и данных:Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ; Структура пользовательских данных иконки
- struct EXTRADATA
- Wnd dd ?
- uID dd ?
- ends
- class1 db 'Shell_TrayWnd',0 ; Название класса окна трея
- class2 db 'TrayNotifyWnd',0 ; Название класса панели уведомлений
- class3 db 'SysPager',0 ; Трей
- class4 db 'ToolbarWindow32',0 ; Панель с иконками
- ; Структура для кнопки
- button TBBUTTON
- ; Структура для пользовательских данных иконки
- extra EXTRADATA
- ; Иконка в трее
- node NOTIFYICONDATA
- ; Координаты иконки в трее
- rc RECT
- ICON_ID = 777
- hInstance dd ? ; Хэндл приложения
- hToolbar dd ? ; Хэндл окна с иконками
- IconsCount dd ? ; Количество иконок в трее
- ProcId dd ? ; Id процесса
- hProcess dd ? ; Хэндл процесса
- lpData dd ? ; Указатель на блок памяти
- BytesRead dd ? ; Количество прочитанных символов
Читать статью целиком »
Просмотров: 556 | Комментариев: 3

Использование TLS для антиотладки
26.10.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Использование TLS для антиотладки
TLS (Thread Local Storage) - локальная память потока, предназначенная для связки данных с потоком. Эта структура изначально была создана для решения проблемы совместного доступа к данным в многопоточных приложениях. TLS бывают статичными и динамическими. Углубляться в эти дебри сейчас не будем, для этого есть Джеффри Рихтер с его книгой "Windows для профессионалов". Нас интересует только тот факт, что при использовании статичной TLS появляется возможность выполнять произвольный код до передачи управления на EP. Это можно использовать для обнаружения отладчика еще до того, как он получит управление над программой.
Читать статью целиком »
Просмотров: 1253 | Комментариев: 1

Использование SEH для антиотладки
18.10.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Использование SEH для антиотладки
В сегодняшней статье разберем использование SEH в качестве антиотладочного приема. Трюк старый, как бивень мамонта, опытным реверсерам обнаружить и обойти его не составит абсолютно никакого труда, а новичкам может быть интересно. Например, в исполняемых файлах, упакованных PECompact, управление с точки входа на процедуру распаковки передается именно таким способом.
Читать статью целиком »
Просмотров: 1101 | Комментариев: 0

Получение списка установленных программ
15.10.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Как получить перечень установленных в системе программ? Наиболее правильный способ - это обработка списка зарегистрированных инсталляций в реестре. Список инсталляций представляет собой пачку ключей в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, в каждом из которых содержится набор параметров с описанием установленной программы. Тут есть имя программы и название ее разработчика, ссылки на деинсталлятор, на папку, куда она была установлена, на ее иконку, дата установки и т.п. Каких-то второстепенных параметров может и не быть, но основные всегда присутствуют.
Список установленных программ
Надо понимать, что список включает в себя не все программы, имеющиеся в системе, а только те, которые были нормально установлены и зарегистрированы. Всякие портативные программы и программы с нестандартной установкой, естественно, в этот список не попадут.
Читать статью целиком »
Просмотров: 1008 | Комментариев: 1
