BMSG <winhndl> WM_COMMAND
BPX EndDialog
BPX MakeProcIstance
BPX DialogBox
BPX DialogBoxParam
BPX DialogBoxIndirectParam
BPX CreateDialog
BPX CreateDialogParam
BPX CreateDialogIndirectParam
BPX MessageBox (G 9c15)
Как
логировать вызовов int и обращения к портамDLDR.EXE <filename.ext> (ну или LOADER32.EXE <filename.ext>)
BPINT 21 DO "? AX;? BX;? CX;? DX;G;"
G
Когда программа отработает, то WLOG <filename.ext> или DLOG <filename.ext>
Можно и прямо из LOADER32 лог скинуть
Когда лог скинул, обрабатываешь его как твоей душе угодно. В логе есть все содержимое регистров на момент вызова int 21h.
Как перехватить вызовы программы к функциям Windows API
bpmb <library name>!<function name> x
Параметры | Описание |
nFilterType |
Определяет тип
хука, он может принимать следующие значения: |
lpFilterFunc |
Указатель на хук-функцию |
Все хуки, кроме WH_MSGFILTER, влияют на работу всей системы. Хук типа WH_MSGFILTER влияет только на работу установившей его программы. Для установки хука SetWindowsHook должна получить адрес точки вызова функции. Сама функция экспортируется программой или библиотекой. Для получения точки вызова процедуры программы необходимо использовать функцию MakeProcInstance, а DLL - функцию GetProcAddress.
Типы хуков:
WH_CALLWNDPROC
Windows вызывает этот хук при любом обращении к функции SendMessage. При обращении к функции PostMessage этого не происходит. Хук должен иметь следующий прототип:
void FAR PASCAL HookFunc(int nCode, WORD wParam, DWORD lParam)
Параметры | Описание |
nCode |
Определяет должен ли хук обрабатывать сообщение или передавать управление на DefHookProc. Если параметр nCode меньше нуля, то хук должен передавать сообщение DefHookProc без дальнейшей обработки. |
wParam |
Определяет, послано ли сообщение текущей задачей. Если да, то wParam отличен от нуля, в противном случае он равен 0. |
lParam |
Указатель на структуру данных, содержащую подробную информацию, которая обрабатывается данной функцией. Поля структуры: hlParam WORD, содержит старшее значение слова
параметра llParam WORD, содержит младшее значение слова
параметра wParam WORD, содержит параметр полученного сообщения wMsg WORD, содержит тип сообщения hWnd WORD, содержит дескриптор окна, которое
должно |
WH_GETMESSAGE
Windows вызывает хук WH_GETMESSAGE при любом вызове функции GetMessage. Windows вызывает хук сразу же, как функция GetMessage получает сообщение из очереди. Хук на WH_GETMESSAGE может как угодно изменять сообщения. Как только она возвращает управление Windows, функция GetMessage передает сообщение вызвавшей ее программе.
WH_JOURNALPLAYBACK
Windows вызывает хук WH_JOURNALPLAYBACK при любом запросе на сообщение о событии, т.е. о вводе от внешних устройств или от таймера. Хук WH_JOURNALPLAYBACK должен копировать сообщение о событии по адресу lParam. Это сообщение предварительно записано хуком WH_JOURNALRECORD. Хук не должен изменять сообщение. Возвращаемое значение равно времени (в отсчетах таймера), которое Windows должна подождать, прежде чем приступить к обработке этого сообщения. Это время может быть посчитано как разность между временами прихода текущего и предыдущего сообщений. Если функция возвращает нуль, сообщение обрабатываться не будет. При передаче управления Windows продолжается обработка сообщения. Если значение nCode равно HC_SKIP, хук должен подготовиться для того, чтобы при следующем вызове вернуть следующее сообщение. При работе хука WH_JOURNALPLAYBACK Windows игнорирует любой ввод с клавиатуры или от "мыши"
WH_JOURNALRECORD
Windows вызывает хук WH_JOURNALRECORD при любой обработке сообщения из очереди событий. Хук может быть использован для записи сообщения о событии для дальнейшей обработки. Хук WH_JOURNALRECORD должен сохранять сообщение о событии для дальнейшей обработки. При возвращении управления Windows продолжается обработка сообщения.
WH_KEYBOARD
Windows вызывает хук WH_KEYBOARD при каждом вызове функции GetMessgae или PeekMessage в случае, если получено сообщение с клавиатуры (WM_KEYUP или WM_KEYDOWN). Возвращаемое значение равно нулю, если сообщение должно обрабатываться Windows, и равно 1, если сообщение должно быть отложено.
WH_MSGFILTER
Windows вызывает хук WH_MSGFILTER, как только диалог, окно сообщения или меню получают сообщение из очереди, но до того, как они начнут их обрабатывать. Возвращаемое значение отлично от нуля, если функция
обработала сообщение, в противном случае - 0.
WH_SYSMSGFILTER
Windows вызывает хук WH_SYSMSGFILTER как только диалог, окно сообщения или меню получают сообщение. Возвращаемое значение отлично от нуля, если функция обработала сообщение, в противном случае - 0.
Хуки могут быть использованы к примеру в программах, осущетствляющих on the fly шифрование данных. В таком случае необходимо выставлять хук на функцию LOPEN.
ReadFile
WriteFile
SetFilePointer
GetSystemDirectory
GetSystemDirectoryA
GetPrivateProfileStringA
GetPrivateProfileIntA
WritePrivateProfileStringA
WritePrivateProfileIntA
Bpint 21 if (ah==3d)
Bpint 2f if (ah==01)
Функции возвращают следующие коды:
0 Диск не м.б. определен
1 Корневой каталог не найден
2 Перемещаемый диск
3 HDD
4 Network
5 CD-Rom
6 RamDisk
GetLogicalDrives
GetLogicalDrivesA
GetLogicalDriveStrings
GetLogicalDriveStringsA