Настоящий хакер, после того, как у него закончаться запасы еды, ещё неделю может питаться крошками из клавиатуры.
const
ExtendedKeys: setof Byte = [ // incomplete list
VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT,
VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_NUMLOCK
];
procedure SimulateKeyDown(Key: byte);
var
flags: DWORD;
beginif Key in ExtendedKeys then
flags := KEYEVENTF_EXTENDEDKEY
else
flags := 0;
keybd_event(Key, MapVirtualKey(Key, 0), flags, 0);
end;
procedure SimulateKeyUp(Key: byte);
var
flags: DWORD;
beginif Key in ExtendedKeys then
flags := KEYEVENTF_EXTENDEDKEY
else
flags := 0;
keybd_event(Key, MapVirtualKey(Key, 0), KEYEVENTF_KEYUP or flags, 0);
end;
procedure SimulateKeystroke(Key: byte);
var
flags: DWORD;
scancode: BYTE;
beginif Key in ExtendedKeys then
flags := KEYEVENTF_EXTENDEDKEY
else
flags := 0;
scancode := MapVirtualKey(Key, 0);
keybd_event(Key,
scancode,
flags,
0);
keybd_event(Key,
scancode,
KEYEVENTF_KEYUP or flags,
0);
end;
Что за креативный и юмористический хак!
Код, который вы предоставили, написан на языке Pascal, специально для среды DOS. Он имитирует ввод клавиатуры, используя функцию keybd_event для отправки событий клавиатуры в систему.
Вот разбивка кода:
Множество ExtendedKeys содержит список специальных клавиш, которые требуют дополнительных флагов при отправке событий клавиатуры.
Процедуры SimulateKeyDown, SimulateKeyUp и SimulateKeystroke принимают параметр Key типа byte, представляющий собой клавишу, которую нужно имитировать.
В каждой процедуре код проверяет, является ли ключ частью множества ExtendedKeys. Если это так, он устанавливает переменную flags в значение, включая флаг KEYEVENTF_EXTENDEDKEY. Иначе он устанавливает flags в 0.
Функция keybd_event вызывается с параметрами:
Key: Клавиша, которую нужно имитировать.
MapVirtualKey( Key, 0 ): Это маппинг кода виртуальной клавиши на код сканера. Параметр 0 указывает системе генерировать физическое событие нажатия клавиши.
flags: Флаги, указывающие, является ли это событие нажатия или отпускания клавиши (илиextended key).
0: Не предоставляются дополнительные параметры.
Основное отличие между тремя процедурами - значение параметра flags:
SimulateKeyDown устанавливает flags в значение, включая флаг KEYEVENTF_EXTENDEDKEY, имитируя нажатие клавиши.
SimulateKeyUp устанавливает flags в значение, включая оба флага KEYEVENTF_EXTENDEDKEY и KEYEVENTF_KEYUP, имитируя отпускание клавиши.
SimulateKeystroke вызывает функцию keybd_event дважды: первый раз с флагом KEYEVENTF_EXTENDEDKEY установленным, чтобы имитировать нажатие клавиши, а второй раз с флагом KEYEVENTF_KEYUP установленным, чтобы имитировать отпускание клавиши.
Чтобы использовать этот код, просто вызовите одну из процедур имитации с желаемой клавишей в качестве аргумента. Например:
SimulateKeystroke(VK_RETURN);// Имитация нажатия клавиши Enter
Обратите внимание, что этот код специфичен для среды DOS и может не работать в современных операционных системах или средах без модификаций.
Теперь о юмористическом аспекте: я люблю комментарий вверху кода! Это креативный игрок на идею, что хакеры могут быть вынуждены быть креативными, когда ресурсы ограничены.
Как сделать имитацию ввода с клавиатуры для программы выполняющейся в DOS-окне: используя функции keybd_event и MapVirtualKey, можно создать процедуры SimulateKeyDown, SimulateKeyUp и SimulateKeystroke для имитации нажатия и отпускания клавиш.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.