Программа-шпион
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Проф. Преображенский
- Графоман
- Сообщения: 20276
- Зарегистрирован: 08 ноя 2006, 11:10
Программа-шпион
Клиенту надо проинсталлировать такую приблуду, чтобы она прозрачно сообщала на некий сервер, куда клиент ходит в интернете. Типа шпиона, только инсталлируется приблуда с согласия клиента и работает в его интересах. Желательно, чтобы была броузер-независима.
Может у кого есть опыт?
Может у кого есть опыт?
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
САМОЕ ПРОСТОЕ, что можно сделать, на мой взгляд, это поместить за клиентом "прозрачный прокси" 127.0.0.1:xxxxx, который и будет писать лог-файл.
Такой прокси может быть легко встроен "в цепочку" прокси в существующей инфраструктуре организации клиента, или будет "от имени браузера клиента" форвардить пакеты на маршрутизатор с NAT, или без него, в зависимости от того, какова эта инфраструктура.
1) Например, пусть в организации клиента используется прокси 192.168.1.254:8080, так что схема обработки хттп такова:
Клиент-> Прокси 192.168.1.254:8080 -> Инет
Тогда прои наличии "прокси-логера" 127.0.0.1:xxxxx схема будет такова:
Клиент-> "прокси-логер" 127.0.0.1:xxxxx -> Прокси 192.168.1.254:8080 -> Инет
2) Пусть в организации схема такова :
Клиент-> NAT (or "direct" routing, что бывает крайне редко) -> Инет
Тогда прои наличии "прокси-логера" 127.0.0.1:xxxxx схема будет такова:
Клиент-> "прокси-логер" 127.0.0.1:xxxxx -> NAT (or "direct" routing, что бывает крайне редко) -> Инет
Достоинство в том, что это не требует, сколь-нибудь серьёзных знаний ни в программировании, ни в сетевых технологиях. Примеров написания простейших прокси достаточно много. Кстати в данном случае ещё проще случай, т.к. число сессий будет невелико, так что можно ограничится написанием "чисто" multi-thread сервера.
Недостаток в том, что это может быть многодельно и может потребовать неоднократного тестирования на разных платформах предполагаемых клиентов. Это так, поскольку в промышленной версии Вам бы пришлось учесть все способы "раздачи" интернет, которые могут встретиться у потенциальных клиентов.
НЕМНОГО СЛОЖНЕЕ, но на круг может быть и знааааааачительно проще - программирование RAW-сокетов.
Единственное осложнение, которое здесь появится - необходимо умение это делать. Так работают сетевые мониторы и сканеры.
В принципе таких спецов достаточно много. То, что я видел в инете - действительно не особо сложно.
КОРОЧЕ - выберите для себя что-то.
Тогда я смогу порыться в ссылках.
Отредактировано: с горяча там про сокс пропостил. это не недо для хттп-прокси
(голова другим сейчас занята. сорри)
Такой прокси может быть легко встроен "в цепочку" прокси в существующей инфраструктуре организации клиента, или будет "от имени браузера клиента" форвардить пакеты на маршрутизатор с NAT, или без него, в зависимости от того, какова эта инфраструктура.
1) Например, пусть в организации клиента используется прокси 192.168.1.254:8080, так что схема обработки хттп такова:
Клиент-> Прокси 192.168.1.254:8080 -> Инет
Тогда прои наличии "прокси-логера" 127.0.0.1:xxxxx схема будет такова:
Клиент-> "прокси-логер" 127.0.0.1:xxxxx -> Прокси 192.168.1.254:8080 -> Инет
2) Пусть в организации схема такова :
Клиент-> NAT (or "direct" routing, что бывает крайне редко) -> Инет
Тогда прои наличии "прокси-логера" 127.0.0.1:xxxxx схема будет такова:
Клиент-> "прокси-логер" 127.0.0.1:xxxxx -> NAT (or "direct" routing, что бывает крайне редко) -> Инет
Достоинство в том, что это не требует, сколь-нибудь серьёзных знаний ни в программировании, ни в сетевых технологиях. Примеров написания простейших прокси достаточно много. Кстати в данном случае ещё проще случай, т.к. число сессий будет невелико, так что можно ограничится написанием "чисто" multi-thread сервера.
Недостаток в том, что это может быть многодельно и может потребовать неоднократного тестирования на разных платформах предполагаемых клиентов. Это так, поскольку в промышленной версии Вам бы пришлось учесть все способы "раздачи" интернет, которые могут встретиться у потенциальных клиентов.
НЕМНОГО СЛОЖНЕЕ, но на круг может быть и знааааааачительно проще - программирование RAW-сокетов.
Единственное осложнение, которое здесь появится - необходимо умение это делать. Так работают сетевые мониторы и сканеры.
В принципе таких спецов достаточно много. То, что я видел в инете - действительно не особо сложно.
КОРОЧЕ - выберите для себя что-то.
Тогда я смогу порыться в ссылках.
Отредактировано: с горяча там про сокс пропостил. это не недо для хттп-прокси

- Vims
- Northern Yeti
- Сообщения: 21455
- Зарегистрирован: 17 фев 2003, 15:53
- Откуда: Magadan - Vancouver
- Контактная информация:
Re: Программа-шпион
этого добра валом и фри и частично фри и с краком и без ...runner писал(а): Может у кого есть опыт?

вам сюда http://www.keyloggers.com/index.html ну а далее по образу и подобию у меня есть самая простая я как то игрался с этим с года два назад где то лежит если надо поищу....
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Логер нажатия клавиш и того, что юзер смотрит в браузере (URL) - это разное.вам сюда http://www.keyloggers.com/index.html
Что-то с твоём постинге имеет место быть. Конечно, надо начинать с поиска готового софта (может и за деньги), а не с программирования. Кстати, может и промышленный перонал-фаервол, которых в последнее время, как собак, подойдёт. Если ты постил об этом, а не о перехвате клавиатурных нажатий, то я с тобой согласен.
ПС. Если ты не об этом, то всё равно возражать не стану

- Vims
- Northern Yeti
- Сообщения: 21455
- Зарегистрирован: 17 фев 2003, 15:53
- Откуда: Magadan - Vancouver
- Контактная информация:
они как правило или почти как правило комбинированы,vg писал(а):Логер нажатия клавиш и того, что юзер смотрит в браузере (URL) - это разное.вам сюда http://www.keyloggers.com/index.html
те есть делают все, моя делала все

-
- Пользователь
- Сообщения: 81
- Зарегистрирован: 06 июл 2003, 19:35
- Контактная информация:
Re: Программа-шпион
Какая ОС? Если unix, то нетфильтр Вам поможетrunner писал(а):Клиенту надо проинсталлировать такую приблуду, чтобы она прозрачно сообщала на некий сервер, куда клиент ходит в интернете. Типа шпиона, только инсталлируется приблуда с согласия клиента и работает в его интересах. Желательно, чтобы была броузер-независима.
Может у кого есть опыт?

Hacking the Linux Kernel Network Stack
Там есть kernel based FTP password sniffer, наверно его несложно в HTTP traffic sniffer переделать

Конкретную же софтину можно искать здесь (packet sniffer)
http://www.rootkit.com
http://www.insecure.org/tools.html
Но ИМХО человек, который себе хочет добровольно руткит поставить -- это извращенец-садо-мазохист

-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Да, не густо.
Про RAW-сокеты, ещё…
В принципе, основная сложность при построении логгера на RAW-сокетах – необходимость знания RFC 791 (IP), 768, 793 ( UDP, TCP), может ещё и RFC 792, если Вы вдобавок хотите анализировать и ICMP.
Ниже простой код (для W2k и выше), который Вы можете развивать дальше в своих нуждах. Это работающая демонстрация. Не забудьте указать линкеру необходимость использовать ws2_32.lib для сборки. Отлаживать код Вы можете и без доступа к СЕТИ. Например, выполнение на вашем компьютере:
C:\>ping localhost -t -l 100
Pinging XXX [127.0.0.1] with 100 bytes of data:
Reply from 127.0.0.1: bytes=100 time<1ms TTL=128
….
программа выведет на монитор:
From 127.0.0.1 To 127.0.0.1 Protocol: ICMP Len: 128
….
Тестируя программу, не забудьте, что персональный firewall может быть установлен на вашем компьютере. Если это так, то, возможно, что Вы увидите только пакеты, разрешённые Вашим firewall. Если фильтрация отсутствует, то Вы увидите все пакеты, достигающие Вашего интерфейса (в том числе и пакеты, предназначенные другим хостам). Впрочем, это зависит не только от того, имеется в настоящий момент фильтрация, или нет, но и от того, по какой технологии сделан Ваш firewall (на каком уровне OSI он работает). Код ниже переводит сокет в состояние «promiscuous». Вовсе не обязательно слушать чужие пакеты – отфильтруйте их.
Вот, что программа выдаёт, если персональный firewall задействован (в данном случае только пакеты установленных соединений):
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 727
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 332
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 729
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 333
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 724
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 333
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 730
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 332
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 740
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 333
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 714
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 332
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 715
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 333
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 332
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 40
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 40
From 67.15.36.12 To 192.168.1.161 Protocol: TCP Len: 40
From 192.168.1.161 To 67.15.36.12 Protocol: TCP Len: 40
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 40
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 40
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 40
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 40
From 192.168.1.161 To 67.15.36.12 Protocol: TCP Len: 40
forum.algorithmicus.com (66.51.105.119)
Вот, что программа выдаёт, если персональный firewall отключён:
From 192.168.1.4 To 194.67.45.100 Protocol: TCP Len: 48
From 192.168.1.4 To 194.67.45.100 Protocol: TCP Len: 48
From 192.168.1.4 To 213.59.0.100 Protocol: TCP Len: 48
From 192.168.1.161 To 24.153.22.67 Protocol: UDP Len: 57
From 24.153.22.67 To 192.168.1.161 Protocol: UDP Len: 180
…
From 194.67.23.150 To 192.168.1.161 Protocol: UDP Len: 40
From 192.168.1.161 To 194.67.23.150 Protocol: UDP Len: 40
…
ПС. Данный пример совсем простой. Поэтому в нём не использованы структуры заголовков протоколов TCP/IP. Конечно, лучше их использовать вместо доступа по индексу в немного более сложных случаях, например, когда в коде Вам необходимо анализировать более 2-3 полей протоколов.

Про RAW-сокеты, ещё…
В принципе, основная сложность при построении логгера на RAW-сокетах – необходимость знания RFC 791 (IP), 768, 793 ( UDP, TCP), может ещё и RFC 792, если Вы вдобавок хотите анализировать и ICMP.
Ниже простой код (для W2k и выше), который Вы можете развивать дальше в своих нуждах. Это работающая демонстрация. Не забудьте указать линкеру необходимость использовать ws2_32.lib для сборки. Отлаживать код Вы можете и без доступа к СЕТИ. Например, выполнение на вашем компьютере:
C:\>ping localhost -t -l 100
Pinging XXX [127.0.0.1] with 100 bytes of data:
Reply from 127.0.0.1: bytes=100 time<1ms TTL=128
….
программа выведет на монитор:
From 127.0.0.1 To 127.0.0.1 Protocol: ICMP Len: 128
….
Тестируя программу, не забудьте, что персональный firewall может быть установлен на вашем компьютере. Если это так, то, возможно, что Вы увидите только пакеты, разрешённые Вашим firewall. Если фильтрация отсутствует, то Вы увидите все пакеты, достигающие Вашего интерфейса (в том числе и пакеты, предназначенные другим хостам). Впрочем, это зависит не только от того, имеется в настоящий момент фильтрация, или нет, но и от того, по какой технологии сделан Ваш firewall (на каком уровне OSI он работает). Код ниже переводит сокет в состояние «promiscuous». Вовсе не обязательно слушать чужие пакеты – отфильтруйте их.
Вот, что программа выдаёт, если персональный firewall задействован (в данном случае только пакеты установленных соединений):
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 727
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 332
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 729
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 333
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 724
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 333
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 730
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 332
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 740
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 333
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 714
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 332
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 715
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 333
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 332
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 40
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 40
From 67.15.36.12 To 192.168.1.161 Protocol: TCP Len: 40
From 192.168.1.161 To 67.15.36.12 Protocol: TCP Len: 40
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 40
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 40
From 66.51.105.119 To 192.168.1.161 Protocol: TCP Len: 40
From 192.168.1.161 To 66.51.105.119 Protocol: TCP Len: 40
From 192.168.1.161 To 67.15.36.12 Protocol: TCP Len: 40
forum.algorithmicus.com (66.51.105.119)
Вот, что программа выдаёт, если персональный firewall отключён:
From 192.168.1.4 To 194.67.45.100 Protocol: TCP Len: 48
From 192.168.1.4 To 194.67.45.100 Protocol: TCP Len: 48
From 192.168.1.4 To 213.59.0.100 Protocol: TCP Len: 48
From 192.168.1.161 To 24.153.22.67 Protocol: UDP Len: 57
From 24.153.22.67 To 192.168.1.161 Protocol: UDP Len: 180
…
From 194.67.23.150 To 192.168.1.161 Protocol: UDP Len: 40
From 192.168.1.161 To 194.67.23.150 Protocol: UDP Len: 40
…
Код: Выделить всё
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
typedef unsigned char _BYTE;
typedef unsigned int _WORD;
#define MAKEINT(low, high) ((_WORD)(((_BYTE)(low)) | (((_WORD)((_WORD)(high))) << 8)))
#define MIN_IP_HDRSIZE 0x14 // минимальная длина заголовка IP ( без опций - 20 байт )
#define MAX_PACKET_SIZE 0x10000 // максимальная длина IP-пакета (64 Kb)
#define SIO_RCVALL 0x98000001
#define MAX_LOGSTR_SIZE 0x100 // длина строки лога
_BYTE buf [MAX_PACKET_SIZE]; // буфер для приёма заголовков IP пакетов
char logsimple [MAX_LOGSTR_SIZE]; // строка лога
char proto [] = "TCP ";
int _tmain( void )
{
WSAData wsaData;
if (WSAStartup(0x0202,(WSADATA *) &wsaData ))
{
printf("Error WSAStartup %d\n",WSAGetLastError());
return -1;
}
char chName[128];
SOCKADDR_IN sa;
hostent* psh;
ZeroMemory( &sa, sizeof(sa) );
if (!gethostname(chName,sizeof(chName)))
{
psh=gethostbyname((char*)&chName);
if (!psh || !psh->h_addr_list[0])
{
printf("Error gethostbyname %d\n",WSAGetLastError());
return -1;
}
}
else
{
printf("Error gethostname %d\n",WSAGetLastError());
return -1;
}
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = ((struct in_addr *)psh->h_addr_list[0])->s_addr;
// Создаём RAW-сокет и переводим его в режим прослушивания (promiscuous mode)
SOCKET snfSock = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
if( bind(snfSock, (SOCKADDR *)&sa, sizeof(SOCKADDR)) )
{
printf("Error bind %d\n",WSAGetLastError());
return -1;
}
unsigned long mode = 1; // promiscuous mode.
ioctlsocket(snfSock, SIO_RCVALL, &mode);
// принимаем и анализируем данные
while( !_kbhit() )
{
int cnt = recv( snfSock, (char*) buf, MAX_PACKET_SIZE, 0 );
if ( cnt < MIN_IP_HDRSIZE ) continue;
// здесь заголовок в твоих руках, анализируй, например,
if ( buf[9] == IPPROTO_UDP)
strcpy(proto, "UDP");
else if ( buf[9] == IPPROTO_ICMP)
strcpy(proto, "ICMP");
// в буфере весь пакет
// здесь же можешь анализировать TCP,UDP и прикладные протоколы
sprintf( logsimple, "From %d.%d.%d.%d To %d.%d.%d.%d Protocol: %s Len: %d",
buf[12],buf[13],buf[14],buf[15],
buf[16],buf[17],buf[18],buf[19],
proto,
MAKEINT( buf[3], buf[2] ));
// например, эту строку logsimple можешь писать в лог-файл
printf("%s\n", logsimple);
}
closesocket( snfSock );
WSACleanup();
return 0;
}
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
Re: Программа-шпион
при всем моем глубоком уважении к фраку, эта статейка по качеству явно не дотягивает до их типичного уровня, поскольку написана человеком, не имеющим серьезного опыта kernel development'a. check_tcp_packet() alone содержит 3 серьезных бага, oops'нуть стек в check_ftp() - только выбирай варианты и т.д. и т.п.Xa-xa писал(а): Какая ОС? Если unix, то нетфильтр Вам поможетВот хорошая статья из последнего фрака:
Hacking the Linux Kernel Network Stack
-
- Пользователь
- Сообщения: 81
- Зарегистрирован: 06 июл 2003, 19:35
- Контактная информация:
Re: Программа-шпион
Согласен, фрак, как и другие "хакерские" издания в последенее время сильно обмельчали. Взять тот же DDJ -- я зачитывался номерами, выпушенными в конце 90х, а то что выходит сейчас -- полный отстой.drain bamage писал(а):при всем моем глубоком уважении к фраку, эта статейка по качеству явно не дотягивает до их типичного уровня, поскольку написана человеком, не имеющим серьезного опыта kernel development'a. check_tcp_packet() alone содержит 3 серьезных бага, oops'нуть стек в check_ftp() - только выбирай варианты и т.д. и т.п.Xa-xa писал(а): Какая ОС? Если unix, то нетфильтр Вам поможетВот хорошая статья из последнего фрака:
Hacking the Linux Kernel Network Stack
- Проф. Преображенский
- Графоман
- Сообщения: 20276
- Зарегистрирован: 08 ноя 2006, 11:10
Вот это, похоже, в нужном направлении. Можно источник, плиз?vg писал(а):ПС. Данный пример совсем простой. Поэтому в нём не использованы структуры заголовков протоколов TCP/IP. Конечно, лучше их использовать вместо доступа по индексу в немного более сложных случаях, например, когда в коде Вам необходимо анализировать более 2-3 полей протоколов.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Вопрос обсуждался на RSDN.RU. Поищите там. Я тоже поищу.
Тем более, что есть вопрос, на который раньше было наплевать,
поскольку это делалось с правами админа. Я спрошу парней ещё на другом форуме, кроме RSDN.RU.
Думаю, надо к этому вернуться (мне просто стало интересно).
Одна из проблем в том, что Вы получите код ошибки winsock 10013 (WSAEACCES (10013) Permission denied), если попробуете запустить программу с правами пользователя, а не правами администратора компьютера. Это ограничение можно было обойти на NT 4.0 (при помощи соответственной рихтовки регистри), но я не знаю, как это сделать для W2k и выше.
То код, что я пропостил - я писал сам, для Вас.
Убирая всё лишнее из старых проектов и недопроектов 
Тем более, что есть вопрос, на который раньше было наплевать,
поскольку это делалось с правами админа. Я спрошу парней ещё на другом форуме, кроме RSDN.RU.
Думаю, надо к этому вернуться (мне просто стало интересно).
Одна из проблем в том, что Вы получите код ошибки winsock 10013 (WSAEACCES (10013) Permission denied), если попробуете запустить программу с правами пользователя, а не правами администратора компьютера. Это ограничение можно было обойти на NT 4.0 (при помощи соответственной рихтовки регистри), но я не знаю, как это сделать для W2k и выше.
То код, что я пропостил - я писал сам, для Вас.


-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Вот, на rsdn.ru и статья и пргограмма, которая делает то же самое (только гораздо более в лаконичной форме
)
http://www.rsdn.ru/article/net/sniffer.xml?print
Найду чего-нить ещё (как обойти ограничение касательно админовских прав) - писну

http://www.rsdn.ru/article/net/sniffer.xml?print
Найду чего-нить ещё (как обойти ограничение касательно админовских прав) - писну

-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
- Проф. Преображенский
- Графоман
- Сообщения: 20276
- Зарегистрирован: 08 ноя 2006, 11:10
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага