Информация для системного программиста

Как взламывать HASP

Чаще всего делается так: BPIO 378, пеpехватывается пpотокол обpащений к ключy чеpез поpт пpинтеpного адаптеpа.

Как поставить контрольную точку на нажатие кнопки под Windows

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 и обращения к портам

Например, нужен лог вызова int 21h:

Как перехватить вызовы программы к функциям Windows API

bpmb <library name>!<function name> x

Hook's

Вешание Hook на некоторые функции Windows - в модуле user.exe определена функция: SetWindowsHook (int nFilterType, FARPROC lpFilterFunc), которая устанавливает хук-функцию и помещает указатель на нее в список хук-процедур.

Параметры

Описание

nFilterType

Определяет тип хука, он может принимать следующие значения:
WH_CALLWNDPROC,
WH_GETMESSAGE,
WH_JOURNALPLAYBACK,
WH_JOURNALRECORD,
WH_KEYBOARD,
WH_MSGFILTER,
WH_SYSMSGFILTER

lpFilterFunc

Указатель на хук-функцию

Возвращаемое этой функцией значение есть указатель на предыдущую функцию списка. Он равен NULL, если список был пуст.

Все хуки, кроме 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, содержит старшее значение слова параметра
lParam полученного сообщения

llParam WORD, содержит младшее значение слова параметра
lParam полученного сообщения

wParam WORD, содержит параметр полученного сообщения

wMsg WORD, содержит тип сообщения

hWnd WORD, содержит дескриптор окна, которое должно
получить сообщение.

Таким образом, функция WH_CALLWNDPROC может как угодно изменять собщения. Как только она возвращает управление Windows, сообщение передается функции окна.

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.

Вызовы Win32, используемые при взломах

Вызовы WIN32, которые наиболее часто используются программами (поможет при взломах - библиотеки gdi32.dll, kernel32.dll, user32.dll):

ReadFile
WriteFile
SetFilePointer
GetSystemDirectory
GetSystemDirectoryA
GetPrivateProfileStringA
GetPrivateProfileIntA
WritePrivateProfileStringA
WritePrivateProfileIntA
Bpint 21 if (ah==3d)
Bpint 2f if (ah==01)

Создание или удаление ключей реестра:

RegCreateKey
RegDeleteKey
RegCreateKeyA
RegDeleteKeyA

Чтение ключей реестра:

RegQueryValue
RegQueryValueA

Открытие и закрытие ключей реестра:

RegCloseKey
RegOpenKey
RegCloseKeyA
RegOpenKeyA

Получение строки или int из диалогового бокса:

GetWindowText
GetDlgItemText
GetWindowTextA
GetDlgItemTextA
GetDlgItemInt

Вывод бокса сообщений:

MessageBox
MessageBoxA
MessageBoxExA
MessageBeep

И другие пути отображения текста:

SENDMESSAGE
WSPRINTF

Время и дата:

GetSystemTime
GetLocalTime
SystemTimeToFileTime

Создание окон:

CreateWindow
CreateWindowExA
ShowWindow
BitBlt

CD-ROM Calls:

GetDriveType (если Ax=5, тогда это CD-ROM)
GetDriveTypeA

Функции возвращают следующие коды:

0 Диск не м.б. определен

1 Корневой каталог не найден

2 Перемещаемый диск

3 HDD

4 Network

5 CD-Rom

6 RamDisk

GetLogicalDrives
GetLogicalDrivesA
GetLogicalDriveStrings
GetLogicalDriveStringsA

Другие сообщения:

BMSG hWnd WM_GETTEXT (хорошо для пароля)
BMSG hWnd WM_COMMAND (хорошо для Ok-кнопки)

 

На главную страницу...