Ваяем сниффер собственными руками

Xakep, номер #034, стр. 034-075-1

Horrific (smiandr@mail.ru www.x-c-r.com) & Лозовский Александр (klouniz@mail.ru)

Я думаю, ты знаешь, что такое sniffer и для чего он нужен. Скорей всего в твоем арсенале уже существует пара тварей с этим гордым названием. Но настоящий Х-мэн должен сам уметь создать своего боевого друга. Сегодня тебе предстоит познакомиться с основами этого нелегкого труда. Для тех, кто только проснулся, сообщаю: пакетный сниффер - это программа, которая принимает и сохраняет пакеты из сети, причем не всегда адресованные данному интерфейсу. Хорошо звучит? Очень сильно отдает твоими любимыми средствами получения информации - хороший троян, соколиный глаз, большое ухо, горячий утюг :). И вот именно этого монстра нам предстоит сегодня создать собственными руками.

Первый раз в первый класс

Любая работа с сетью - сидение в чате, заливка патчей для M$-WC - есть обмен информацией. Она пакуется в пакеты и если надо, то фрагментируется (bo to frag, хе-хе...). К пакетам цепляется заголовок, содержащий сведения для его доставки, и они отправляются по IP адресу. Нет, конечно, есть еще маска подсети (255.255.255.0), нужная для отделения адреса компа от адреса сети. Но это на сегодня не колышет.

В Win9x отправкой и приемом данных занимается Winsock. В первой версии этой библы вообще не было ничего для прямой работы с пакетами, а про прямой доступ к сетевухе MS вообще забыла. Ну что поделаешь, если у их программеров склероз. Во второй версии уже появились функции для работы с пакетами. Ты мне не поверишь, но они не работают :). Ну нельзя сказать, что совсем, но работают не так, как нам хочется.

На первый взгляд все безнадежно, и написать sniffer без прямого доступа к сетевухе или пакетам мы не сможем. Но это только первый взгляд, потому что мы можем обойти MS и все же получить прямой доступ к сетевухе. Для этого есть уже готовая библиотека packet.dll (ее, кстати, пользует известный "DSniff"). Вот и мы ее сегодня поюзаем. В ней уже есть все необходимые функции для работы с пакетами, самые нужные из которых я сейчас и опишу в качестве курса лекций :).

Назад в школу

function PacketGetAdapteames(

pAdapterDescs: PChar;

nAdapterDescs: USLONG;

pnAdapterDescsMax: PUINT

): BOOL; stdcall;

Эта функция возвращает список доступных сетевых адаптеров. Функция возвращает TRUE, если все путем, FALSE - если произошла ошибка.

PAdapterDescs - после вызова, сюда запишутся имена и адреса доступных адаптеров. Ты должен сюда передать массив из структур типа ADAPTER_DESC. Его длину можешь установить в 4, потому что в среднестатистическом компе не бывает больше 2-3 адаптеров.

NadapterDescs - длина массива.

PnAdapterDescsMax - сюда запишут, сколько адаптеров реально установлено в компе.

function PacketOpenAdapter(

Adapteame: LPSTR

): DWORD; stdcall;

Открываем инсталлированный адаптер. В качестве параметра нужно указать имя, которое ты получил после вызова PacketGetAdapteames. Функция возвращает указатель на адаптер.

function PacketAllocatePacket(

AdapterObject: LPADAPTER

): DWORD; stdcall;

Содержание  Вперед на стр. 034-075-2

Выпуски журнала "Xakep"
Журнал Хакер. Содержание номера #001Журнал Хакер. Содержание номера #002Журнал Хакер. Содержание номера #003Журнал Хакер. Содержание номера #004Журнал Хакер. Содержание номера #005Журнал Хакер. Содержание номера #006Журнал Хакер. Содержание номера #007Журнал Хакер. Содержание номера #008Журнал Хакер. Содержание номера #009Журнал Хакер. Содержание номера #010Журнал Хакер. Содержание номера #011Журнал Хакер. Содержание номера #012Журнал Хакер. Содержание номера #013Журнал Хакер. Содержание номера #014Журнал Хакер. Содержание номера #015Журнал Хакер. Содержание номера #016Журнал Хакер. Содержание номера #017Журнал Хакер. Содержание номера #018Журнал Хакер. Содержание номера #019Журнал Хакер. Содержание номера #020Журнал Хакер. Содержание номера #021Журнал Хакер. Содержание номера #022Журнал Хакер. Содержание номера #023Журнал Хакер. Содержание номера #024Журнал Хакер. Содержание номера #025Журнал Хакер. Содержание номера #026Журнал Хакер. Содержание номера #027Журнал Хакер. Содержание номера #028Журнал Хакер. Содержание номера #029Журнал Хакер. Содержание номера #030Журнал Хакер. Содержание номера #031Журнал Хакер. Содержание номера #032Журнал Хакер. Содержание номера #033Журнал Хакер. Содержание номера #034Журнал Хакер. Содержание номера #035Журнал Хакер. Содержание номера #036Журнал Хакер. Содержание номера #037Журнал Хакер. Содержание номера #038Журнал Хакер. Содержание номера #039Журнал Хакер. Содержание номера #040Журнал Хакер. Содержание номера #041Журнал Хакер. Содержание номера #042Журнал Хакер. Содержание номера #043Журнал Хакер. Содержание номера #044Журнал Хакер. Содержание номера #045Журнал Хакер. Содержание номера #046Журнал Хакер. Содержание номера #047Журнал Хакер. Содержание номера #048Журнал Хакер. Содержание номера #049Журнал Хакер. Содержание номера #050Журнал Хакер. Содержание номера #051Журнал Хакер. Содержание номера #052Журнал Хакер. Содержание номера #053Журнал Хакер. Содержание номера #054Журнал Хакер. Содержание номера #055Журнал Хакер. Содержание номера #056Журнал Хакер. Содержание номера #057Журнал Хакер. Содержание номера #058Журнал Хакер. Содержание номера #059Журнал Хакер. Содержание номера #060Журнал Хакер. Содержание номера #061Журнал Хакер. Содержание номера #062Журнал Хакер. Содержание номера #063Журнал Хакер. Содержание номера #064Журнал Хакер. Содержание номера #065Журнал Хакер. Содержание номера #066Журнал Хакер. Содержание номера #067Журнал Хакер. Содержание номера #068Журнал Хакер. Содержание номера #069Журнал Хакер. Содержание номера #070Журнал Хакер. Содержание номера #071Журнал Хакер. Содержание номера #072Журнал Хакер. Содержание номера #073Журнал Хакер. Содержание номера #074Журнал Хакер. Содержание номера #075Журнал Хакер. Содержание номера #076Журнал Хакер. Содержание номера #077Журнал Хакер. Содержание номера #078Журнал Хакер. Содержание номера #079Журнал Хакер. Содержание номера #080Журнал Хакер. Содержание номера #081Журнал Хакер. Содержание номера #082Журнал Хакер. Содержание номера #083Журнал Хакер. Содержание номера #084Журнал Хакер. Содержание номера #085Журнал Хакер. Содержание номера #086Журнал Хакер. Содержание номера #087Журнал Хакер. Содержание номера #088Журнал Хакер. Содержание номера #089Журнал Хакер. Содержание номера #090Журнал Хакер. Содержание номера #091Журнал Хакер. Содержание номера #092Журнал Хакер. Содержание номера #093Журнал Хакер. Содержание номера #094Журнал Хакер. Содержание номера #095Журнал Хакер. Содержание номера #096Журнал Хакер. Содержание номера #097Журнал Хакер. Содержание номера #098Журнал Хакер. Содержание номера #099Журнал Хакер. Содержание номера #100Журнал Хакер. Содержание номера #101Журнал Хакер. Содержание номера #102Журнал Хакер. Содержание номера #103Журнал Хакер. Содержание номера #104Журнал Хакер. Содержание номера #105Журнал Хакер. Содержание номера #106Журнал Хакер. Содержание номера #107Журнал Хакер. Содержание номера #108Журнал Хакер. Содержание номера #109Журнал Хакер. Содержание номера #110Журнал Хакер. Содержание номера #111Журнал Хакер. Содержание номера #112Журнал Хакер. Содержание номера #113Журнал Хакер. Содержание номера #114