Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #77, МАЙ 2005 г.

Скрин-сэйвер «Нюхач»

Николай «GorluM» Андреев

Хакер, номер #077, стр. 077-112-4


Помнится, я обещал сделать цветной вывод. Это всего одна строка. Функция SetConsoleTextAttribute установит для консоли, указанной в первом ее параметре, текущий цвет вывода. К примеру, если я хочу, чтобы текст был ярко зеленым я должен написать:

SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN|FOREGROUND_INTENSITY);

Префикс FOREGROUND, означает, что мы меняем цвет текста. Если захотим поменять цвет фона, напишем вместо этого префикса BACKGROUND. Список всех цветов и опций можно взять в файле wincon.h.

Самое наглядное будет – раскрасить пакеты в зависимости от протокола, описанного в заголовке пакета. Для того чтобы его получить, надо сначала сообщить нашему компилятору, что указатель на буфер со ВСЕМ пакетом - это указатель на структуру IPHeader, т.е. заголовок IP-пакета.

IPHeader* hdr = (IPHeader *)Buffer;

В этой структуре член iph_protocol – это как раз то, что мы ищем. В зависимости от того, будет ли он равен IPPROTO_TCP (TCP-протокол), IPPROTO_UDP (UDP-протокол), IPPROTO_ICMP или IPPROTO_IGMP, мы будем выводить заголовки пакетов красным, зеленым, синим или бордовым цветами. После вывода очередного пакета надо делать небольшую паузу функцией Sleep, чтобы при необходимости пакет можно было успеть прочесть.

[движения мышки]

Чуть не забыл о самом главном. Наша программа ведь должна отрубаться, если вдруг мышь двинется, а то иначе какой это скрин-сэйвер? Следить за состоянием мышки, в принципе, можно с помощью глобального хука, который устанавливается с помощью функции SetWindowsHookEx, но как по мне – так это маразм. Лишнюю DLL придется писать, да и вообще геморроя много. Значительно проще при запуске запомнить текущие координаты курсора с помощью GetCursorPos, а потом раз в какое-то время в отдельной нити проверять с помощью этой же функции, не шелохнулась ли мышь.

DWORD WINAPI CheckPOS (LPVOID pParam) {

while (true) {

Sleep(500);

LPPOINT pTest1 = (LPPOINT)pParam;

POINT pTest2;

GetCursorPos(&pTest2);

if (pTest1->x != pTest2.x) {

CloseHandle(hMutex);

ExitProcess(0);

}

}

return 0;

}

Вот эту функцию надо запустить в отдельной нити с помощью CreateThread, передав ей в параметре указатель на структуру с текущими координатами курсора. После этого, любое, даже самое маленькое перемещение мышки отрубит нашу программу.

Конечно, надо было бы и клавиши обрабатывать, мол, нажмет – отрублюсь. Но, лень! Поэтому, если тебе понравилась идея подобного хранителя экрана, и ты разобрался во всех премудростях его разработки, у тебя есть шанс помочь мне и улучшить это создание извращенной программисткой мысли.

[code over]

В общей сложности получится примерно то, что аккуратно лежит на диске вместе с другими исходниками из рубрики Кодинг. Скопируй получившуюся программу в windows\system32 с расширением *.scr, залезь в настройки экрана и укажи там наше детище. Жди несколько минут и можешь любоваться новым хакерским хранителем экрана. На этой радостной ноте я убегаю пить сок. Удачного компилирования, пока.

Назад на стр. 077-112-3  Содержание  Вперед на стр. 077-112-5