Здравствуйте, Аноним, Вы писали:
А>В общем, эту вашу фразу я совсем не понял.
Ну, ты просишь, готовый исходник, или четкие, подробные инструкции "как это сделать". Почему ты не задумываешься о том, что люди по крупицам, многие годы собирали в своей голове знания и опыт... Скажем так "по сетевой тематике виндов вообще и ядра в частности"... Почему многие годы и по крупицам? Да ведь книг-то с подробными инструкциями никто пока не написал... И опять же заметь — почему — потому, что "те кто писатели еще не успели выспросить у тех, кто копатели, что да как". А ведь, время деньги, и ты предполагаешь получить за свою работу, на которую ты потратишь свой личное время, некоторою сумму денюх, что на самом просто отлично!, и никто даже и не собирается быть против — все будут только рады... Но для того что бы тебе их получить, тебе придется работу то сделать, а для этого пару-тройку лет поучится, посамообразовываться да и помучится, что греха таить ... Как там у врачей — ординатура (ХЗ)... А в процессе этого ты должен — что-то кушать, где-то спать (жить), твои дети и жена заметь тоже... И если приблизительно прикинуть, то на мой взгляд в наше время человеку, в нашей стране и крупном городе надо не менее $20000 в год на руки... умножаем это на три и делим на десять (так для круглого счёта) и того — цена твоего вопроса $6000... Вот и всё, "хочу! здесь и сейчас!", это стоит КАК МИНИМУМ! Тех денег , что я указал... А так, на мой взгляд — $3500 * 12*3 = $126000, чтобы знать как написать + $3500*12, чтобы написать = $168000... Вот цена кода которого ты просишь...
Не принимай все мои слова прямо на себя, я просто немного на твоём примере рассказал, господам "требующим", что на самом деле они просят... В наше ведь области, тут такая штука, это же не подсказать, как правильно класс в MFC объявить — динамически или статически, это же не просто ссылку дать на доку... Эти же знания иногда после долгих-долгих поисков и многократных попыток приобретаются... И цена им очень высока.
Это с одной стороны, а с другой... Если, например тебе просто так "дать и всё", то кто-то из таких же, профиков как мы, останется без работы... А это согласись не справедливо!
А>Давайте не будем о ламерах =) Это их проблемы
их проблемы потом становятся нашими. разгребать дампы от заказчиков с целью доказать что это не наш продукт порушил им систему приходится время от времени. или еще хуже делать фикс позволяющий работу с такими вот продуктами, потому что желание заказчика — закон и никого не парит кто там виноват в падениях и почему они вообще происходят. удовольствие ниже среднего, как правило.
VAB>>Запустите image какой под VMWare с 64-96 Mb RAM и поищите там свои 120 метров?
А>Для этого есть System Requirements (Memory: ...) в readme.txt, чтобы указать явно сколько минимум нужно софтине (драйверу) памяти.
мне даже не хочется обсуждать полезную составляющую вышепостроенной конструкции. Она бы, возможно, появилась, если б максимум хотя бы указывался Хотите сказать вся НТ ОС работает, пусть не быстро, на 64М, а вот Ваш драйвер такой особенный что для него требования ОС не указ? Замечу что драйвер, пусть и неродной, по определению становится TCB частью ОС и не должен соотв. кардинально требования завышать, без серьезной причины. В случае выше точно такой причины нет, более того сетевой компонент равно как и фильтр в файловом или storage стеке, как правило, очень интенсивно используются и малейшая утечка памяти запросто завалит всю ОС — вопрос времени. Да и любая другая проблема как правило всплывает быстро, если программа крутится не на 2х компах у разработчика (да и тех виртуальных).
Даже не касаясь проблемы конкретного кода на которую ссылаются в ветке (хотя при нехватке памяти просто имидж не будет загружен загрузчиком из-за невозможности выделить память под статические многокилобайтные буфера и соотв. драйвер не будет запущен — к чему это приведет уже зависит от того что за драйвер и куда его хотели пристроить) — я тут говорю о принципиальном подходе к управлению ресурсами т.к. категорически не согласен с подходом который проповедует Аноним.
Суть же не в конкретной трате non-paged pool, которая если говорить по чести может быть зачастую и пройдет незамеченной, а в отношении к ресурсам. Мне кажется очевидным что бессмыссленная трата ресурсов есть зло везде и всегда. Более того вместо того чтобы бороться с нехваткой ресурсов
, фактически идет призыв создавать эту нехватку при любом удобном случае — просто потому что скорее всего лениво что-то было сделать правильно, делали себе на коленке, заработало — на радостях забыли до ума довести — да так в коде и осталось. Потому и важно чтобы сразу делалось нормально — потом на забывчивость не будут дампы указывать.
Но вернемся к волшебному readme.txt который решает все проблемы. давайте просто позагибаем пальцы:
софтина-драйвер запросто может не знать сколько ей нужно. но работать и не кашлять как правило обязана, это раз.
от ламеров как изволили выразиться, скушавшими весь стек и почти всю память заодно, это также не спасет. с таким подходом мол "чего non-paged pool жалеть у нас дядя на nonpagedpool фабрике работает!" — заберем последние, сколько там осталось К ценного ресурса абсолютно без нужды, да расшибемся лишний раз на ровном месте носом оземь. Ну и посмотрим как на нас будут показывать пальцем. Ибо без нас вроде работало. И правильно сделают. это два.
и как часто Вы читаете readme и проверяете что все что там написано соблюдается до запуска своей любимой программулины? это три.
ну и так далее.
так что не спасет никоим образом никакой readme.txt от кривого кода. Разве что от исков к производителю. Но не от репутации и не от недовольных пользователей, которые унесут фактически ваши денежки кому-то другому.
А>В общем-то, согласен. Но... всё же от этого уже нужно уходить.
так не в эту же сторону, е-мое, Сусанин!!
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Denwer, Вы писали:
D>Здравствуйте, IID, Вы писали:
CO>>>Может быть, вызвать NdisRegisterProtocol каким-либо другим образом (например, загрузив в память еще одну копию ndis.sys, благо релоки там есть) ?
IID>>Наш соотечественник предлагал такой способ
D>Проблема то в следующем(кстати восстановление хуков на таблице экспорта я сделал давно уже), что при регистрации протокола, туда передается структура с заполнеными указателями функций обработчиков, которые не являются функциями ЭКСПОРТА, поэтому если кто то получит список всех зареганных NDIS протоколов (а это делается как уже правильно подмечено с помощью регистрации своего, и он будет первым в списке, потом можно пробежать по всех и поставить НОВЫЕ хуки) и потом заменит на свои, то вот восстановить эти установленные хуки уже проблематично. Нужно будет искать кто их поставил и в каждом КОНКРЕТНОМ случае искать место хранения оригиналов.
От себя лишь напишу что любое закрытое общество — загнивает из нутри.
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Хорошие новости — NDIS 6.0 имеет дырок для установки руткитов не менее предшествующей 5.0. Я потратил фактически 1 час на легкий реверс, чтобы из одного NDIS компонента получить доступ к другому, в том числе точкам передачи данных. Связанные списки похоже форева. Кстати, любителям реверса — NDIS 6.0 просто создана для Вас — каждая структура имеет в начале неповторимую сигнатуру, чтоб не дай Боже не спутать ).
GN>>Думаю, crash override имел ввиду размер PE Image в памяти, а не размер файла на диске.
А>Так это не страшно, подумаешь полметра non-paged pool. А>Всего размер non-paged pool если не ошибаюсь равен 120 метрам.
конечно не страшно когда под нагрузкой у Вас останется всего несколько страниц доступных.
Каждый умник потому что откусит по метру-другому "для удобства" — да еще и не по разу бывает. А потом еще на стеке начнет по 2К выделять буфера под строчки... Запустите image какой под VMWare с 64-96 Mb RAM и поищите там свои 120 метров?
и зависит от кучи параметров, вычисляется в runtime довольно муторно.
оффтоп: программисты старой закалки в таких случаях (вполне обоснованно кстати) брюзжат: "Разбаловался народ совсем, вот бы на перфокарты пересадить обратно — сразу бы ловкость рук
появилась и бережливость в плане ресурсов выработалась на раз!" Вынужден согласиться — культуру работы с ресурсами (в ядре особенно) надо прививать смолоду, а то будут нестрашные советы от Анонима (с) с панталыку сбивать неопытных читателей.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
VAB>>Замечу что драйвер, пусть и неродной, по определению становится TCB частью ОС и не должен соотв. кардинально требования завышать, без серьезной причины.
А>Вот с этим не согласен. Совсем не обязательно, да вы и сами сделали оговорку.
я ее сделал по причине что какому-то mirror драйверу к примеру в явном виде может быть нужно никак не меньше чем занимает экранная поверхность — неск Мб сразу вынь да положь. И это можно учесть легко.
Когда же идет фильтрация сетевого траффика или файлового\дискового ввода-вывода — тут как Вы понимаете зависит от числа коннектов, открытых файлов и интенсивности самого ввода-вывода. А кол-во сие в свою очередь как правило уже упирается в наличие памяти разных типов причем, можно и pagedpool вперед истощить легко. Соотв. учету поддается с трудом в таком фильтре расход — от 0 до всей свободной, и разбрасываться ресурсами в ситуации когда каждый след. коннект\открытый файл\IRP летящий по стеку может стать последним не стоит конечно.
Ведь кто знает, может быть эти неск Кб, которые в Вилларибо предусмотрительно съэкономили, как раз и позволили пройти критическую точку и не уронить систему в условиях временно истощенных ресурсов. Дальше файлы позакрывались, коннекты отвалились и ситуация с ресурсами выровнялась. А в Виллабаджо все упало и там до сих пор греют дебаггеры, вспоминая чью-то мать
это написал уже не Вам, а так сказать наглядный пример "подрастающему поколению", чтобы было ясно почему надо бережно относиться к вещам "которые ж всегда и так работают" — у нас-то, как водится, всегда и все работает, но работать-то должно еще и у заказчика и лучше готовиться к худшему, вроде 10 чужих фильтров в стеке, заранее.
А>Должна знать предел! Иначе — 99% кривая архетиктура, ошибки при пректировании или ещё что там...
выше написал про случай без предела — фильтр чего-либо. Ошибок может и не быть никаких.
ну ладно, откровенно говоря, мы у себя пишем в design documents на каждую фичу и т.п. в разделе Resource Usage что-то вроде:
Memory usage is just few kilobytes of non-paged memory to store:
• the list of IDs for known files on permanent basis
• the names of protected files
• the pointers to referenced file objects
One additional worker thread is required for the internal file open operations.
но это же не совсем то, что имеет смысл помещать в readme.txt
Если заняться математикой, то да — пределы можно вычислить по вот таким Resourse Usage заметкам — но все равно формула будет включать в себя много параметров вроде кол-ва одновременно открытых файлов и т.п.
В принципе можно вычислить, сколько памяти нужно на сколько коннектов и записать уже в таком виде в readme.txt — это имеет практический смысл, пожалуй.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Denwer, Вы писали:
D>Гы, ну тогда вопросик сразу, а если в системе стоит NDIS hook, который перхватывает NdisRegisterProtocol, и исправляет все нужные обработчики, это как обойти нормально(ну без таких извращений как не дать загрузиться такому драйверу), ну т.е. что бы передача ланных сработала без перезагрузки компа.
Не использовать обработчики, зарегистрированные при вызове NdisRegisterProtocol. В NDIS < 6.0 столько дырок, куда можно приткнуться, что грех такие вопросы задавать . Вообще, чего-нибудь регистрировать надо — но только как средство получения путь внутрь NDIS а. MS то очень боится, что кто то начнет перехватывать экспорты ndis.sys. На хрен они сдались? В версиях < 6.0 все внутренние структуры повязаны между собой многочисленными указателями. Причем, это отчасти документировано — в старых DDK эти внутренние структуры есть в ndis.h ( NDIS_PROTOCOL_BLOCK и.т.д ). Стоит чего-нить зарегистрировать — и можно получить доступ к любой структуре по цепочке, а потом и обработчики поменять в каком-нибудь укромном месте. Я к примеру, не знаю фаервола ( outpost, zonealarm, norton те что тыкал грязным пальцем в начале 2006 г), который бы полностью защищал машину от подобных штук, даже если он работает в наилучших условиях — типа раньше всех загрузился, все прохучил, все равно, дырок слишком много. Про висту могу сказать одно — дырки по крайней мере не совпадают с XP, а дальше я не копал. Но то, что я мельком видел опять заставляет думать, что дырки есть. По крайней мере опять под видом дескрипторов передаются внутренние структуры, опять в них есть точки, где можно установить перехватчики. Т.е кардинально система не вышла на новый уровень в плане безопасности ( IMHO ), но дырки подлатали и пуговицы новые и б/п блестящие.
15 строчек того, что люди уже читали, а я писал, это просто оскорбление для участников этого форума... Следите за объемом цитирования.
А>Open Sources'щики немного другого мнения, хотя я сам и не согласен с ними. Это раз.
У них другие цели и задачи... И я с ними совершенно согласен. Ибо прогресс важен, но заметь они не призывают всех открыть код, чтобы другие, ты например через кут-пасте денег с лёгкостью зарабатывал... А совсем-совем для другого.
А>А во-вторых, всё это туфта на самом деле. Истинная причина, по которой такие как ты, не дают ответов на серьёзные вопросы, одна: да просто жаба душит. Ну и лень.
Да жаба, душит, потому как если у меня будет меньше конкурентов, то цена моей рабочей силы вырастет, и я буду больше получать денег... Нормальное здоровое желание. А вот, что лень, это ты не прав.
А>И ещё. Задумайтесь, а нахрена нужен форум, где отвечают только на вопросы типа "как мне привести переменную к типу производного класса?".
Ну почему же, он очень помогает людям одного уровня опыта и знания эффективно обмениваться ими, но не для того, чтобы заниматься бесплатным консалтингом... Мне, во первых, совершенно не интересно отвечать на простые вопросы, а во вторых я не вижу зачем мне это надо, чем мне от этого будет лучше? Одно дело пообсуждать вопросы с коллегами о том, о чем сам ещё толком не знаешь — и им помочь за одно и самому уму-разуму поднабраться... Да и вообще есть шанс, что новые знания будут тобой обретены. А кой простите меня, прок делиться "тем", что делает мой продукт конкурентоспособным, "тем" за счет чего он лучше конкурента... Или, как я уже писал, просто просвещать требующих анонимов.
А>Да где ты останешься без работы?! Кто у тебя отбирает?! Специалисты нужны всегда и везде. Загнул ты слишком.
Полная фигня, узких спецов нужно очень не много, и обычно их ровно столько сколько смогла породить мать природа и столько сколько нужно рынку, а если я, например, начну рОстить лишних — это приведёт к превышению предложения над спросом и естественно цена моей рабочей силы снизится... Так, что учись сам... Меня вот никто не учил, просто некому было ещё... И я считаю, что это вообще некий "ценз" и "кастовость" нашей профессии, как у моряков например... И это хорошо!
А>Время у тебя есть, чтобы вот эти все выкладки писать
Время есть всегда, и у всех... Мы лишь только расставляем приоритеты, а они в свою очередь зависят от целей, которые определяются мотивацией.
Здравствуйте, crash override, Вы писали:
CO>Сдается мне, что в конечном итоге кто нибудь, да выложит решение этой задачи в открытый доступ. Просто от нефиг делать CO>И тогда куча народу останется без работы
Да я прямо сейчас могу расказать — что внутри практически всех эзернетовких сетевых карт (у тех, что имею ром удалённой загрузки, а у онборот ников он есть) есть реализация и IP и UDP и даже DHCP и TFTP... И вообще, для хакеров, а не обезьян с гранатой это давно уже не проблема...
Тут кстати, народ поверил в какую-то особую безопасность висты — Дарю идею —
1. Записался в бутром любого адаптера.
2. После перезагрузки получил управление до висты.
3. Отимел её как надо и на диске и в памяти — если очень хочется особого извращённого секса.
4. Продолжил загрузку.
5. В любой момент отключил запрет на правку кода и пр. сделал своё черное дело, востановил всё обратно ... Класс сам твори, что хочешь да ещё и другим (безопасникам всяким) с помощью той-же висты рученки поотбивал.
Здравствуйте, TarasCo, Вы писали:
TC>Я был не вежлив? Не могли бы Вы указать, где я нарушил этикет конференции???
Вы же видите, что человек несколько неадекватен, зачем его трогать ?
Сейчас он на вас ведро помоев выльет, как это уже было неоднократно с другими участниками форума.
Пускай стоит хук на функцию регистрации протокола — NdisRegsiterProtocol. Тут может быть два варианта — либо фаервол в своих целях подменяет ф. протокола ( для фильтрации обычно ), либо просто не дает регистрироваться вообще. Если подменяются функции в PROTOCOL_CHARACTERISTICS при регистрации, а мы по каким то причинам этого не хотим — можно попробывать это поправить полазив по струткурам уже после регистрации. Например найти все структуры NDIS_OPEN_BLOCK, относящиеся к нашему протоколу — там есть интересующие нас функции и они будут вероятно заменены на колбеки фаервола — их можно восстановить. Если же нам не дают зарегистрировать протокол ( это скорее поведение, похожее на антируткит, чем на фаервол ), то нужно сначала снять этот хук.
Здравствуйте, Аноним, Вы писали:
А>Спасибо ещё раз за инфу. Одно уточнение только: мне не нужно ничего отлавливать на NDIS уровне. Мне нужно именно слать.
Интересное замечание...
Оно сразу показывает, что даже "общей информации по NDIS" вы не владеете... Не удержусь и сделаю врезку из MSDN
[msdn]
The Network Driver Interface Specification (NDIS) is an application programming interface (API) for network interface cards (NICs). It was jointly developed by Microsoft and 3Com Corporation, and is nowadays mostly used in Microsoft Windows, but the open-source ndiswrapper and Project Evil driver wrapper projects allow many NDIS-compliant NICs to be used with Linux and FreeBSD, respectively. magnussoft ZETA, a derivative of BeOS, supports a number of NDIS drivers.
[/msdn]
А как указывал выше TarasCo, для TCP надо много всего сделать, handshake хотя бы, а как это сделать без приёма ответов на "свои" пакеты... я не знаю. как узнаешь — напиши тут, я тебе баллов наставлю
В общем, не инженерное это решение, особенно в свете того, что нижний уровень может быть не Ethernet...
И догонку хочу посоветовать прочитать статью "Как правильно задавать вопросы"
Она сразу снимает вопросы о том, кто кому что должен(сюда же можно отнести и фразу о загнивающем обществе),
когда и как надо задавать вопросы(а именно ПОСЛЕ изучения проблемы, а не до её начала) и тд и тп
Сюда же можно приписать и этический момент: ЗАЧЕМ проффесионалу раскрывать секреты очередному горе-вирусописателю...
Желаю удачи в написании столь "нужного" NDIS клиента...
Адью!
Здравствуйте, Аноним, Вы писали:
А>P.S. Спасибо за ответ. Я понимаю, готовый исходник тут вряд ли кто выложит, но накидайте хотя бы ссылок на доки, сырцы и т.п.
Ты спрашивал по срокам — могу ответеить довольно точно — более года, от начала твоего изучения до выхода более-менее первой безглючной бетты ... Вообще сетевая подсистема в операционной системе это примерно 50% ей.... Ты говоришь, я заметил умные слова — типа сокеты в ядре. Ну вот представь, что тебе придётся написать несколько сот-тысяч строчек кода. А главное, ты лучше скажи сколько тебе за это предложили, и на сколько ты уже согласился...
Я думаю, если ты назвал правильную цифру, то "тут" никто особо отказываться не будет... сырцы и доки посыпятся как из рога изобилия... Ты главное скажи скоко платишь?
Не все кто уехал, предал Россию.
Re[2]: Написание NDIS-клиента
От:
Аноним
Дата:
06.02.07 11:19
Оценка:
Здравствуйте, Denwer, Вы писали:
D>Случаем не спам бота пишешь? Или еще какую зловредную прогу? Я вот не могу придумать РЕАЛЬНОГО применения данной реализации.
Насчёт применения: например, самообновление того же антивируса. Некоторые трояны мешают корректному обновлению AV, последний же должен выжить любым способом.
D>Ну а так как многие брандмауэры сейчас ставят фильтр на уровне NDIS то вот наверное и захотелось спуститься ниже них.
Здравствуйте, <Аноним>, Вы писали:
А>Насчёт применения: например, самообновление того же антивируса.
Ааааа... самоходный антивирус обходящий файрволлы
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Здравствуйте, Аноним, Вы писали:
А>>В общем, эту вашу фразу я совсем не понял.
AWW>Ну, ты просишь, готовый исходник, или четкие ...
За что оценки ставите?! Чувак вообще ни слова по теме не сказал
Здравствуйте, Аноним, Вы писали:
А>P.S. А нет какого-нибудь Network-провайдера в Windows на том же уровне что и NDIS, но предоставляющий такой же простой интерфейс что и TDI ?
В том то и дело, что есть — это tcpip.sys. Он является NDIS протоколом и реализует tcp/ip стек в том страшном объеме, которым Вас пугают. А для всех клиентов он предоставляет TDI интерфейс, чтобы им (клиентам ) было удобно пользоваться tcpip сетями. Но вся проблема в том, что этот tcpip.sys с одной стороны защищается всяким фаерволами, с другой строны пытается эксплуатироваться всякой заразой. Если Вы не хотите попасться ни первым, ни вторым, Вам придется изобрести какой то отличный путь — вот тут и начинаются траблы, о которых тут ведется речь.
Здравствуйте, TarasCo, Вы писали:
TC>Я был не вежлив? Не могли бы Вы указать, где я нарушил этикет конференции???
Очень жаль, что Вы опять не поняли — видимо я не смогу Вам обьяснить, что является "не вежливым", "не уместным", "не корректным" при общении с коллегами... Хотя мне кажется, что я достаточно ясно "это" указал в первом своём сообщении. И я почти на 100% уверен, что Вы всё прекрасно поняли...
[skip]
А>Опять начинаются разборки! Да прекратите вы! Вы должны объединяться, а не наоборот. Вы же профессионалы, уж вам-то как раз ссориться вообще противозаконно А>Как топикстартер, могу лишь сказать, что от ваших разборок в моей голове знаний не прибавляется.
Зато дух закаляется
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
TC>Зачем? Сама по себе эта структура не нужна. Обработчики, находящиеся в ней начинают "расползаться" по всяким структурам NDIS, и, также поползав по этим структурам, Вы сможете их восстановить обратно. А заодно можно и чужих протоколов обработчики подменить. Кроме того, не ясно — зачем протоколу такая забота о собственных точках — ну перехватит их кто-нибудь? Если нам нужна работа в обход фаерволов — тут одним протоколом все равно не обойдешься, он элементарно не сможет работать "мимо" NDIS IM драйвера, причем никто его и хукать не будет. Чтобы скрыть траффик от фаерволов нужно лезть ниже — в минипорты.
Они не расползутся, потому как они не попадут даже в NDIS, после первого рестарта фаервол ставит хук на функцию ргисрацию,и подменяет до регистрации протокола. И кстати на память я не помню не одного фаервола который ставит NDIS IM, единственное сомнение с ZoneAlarm, но это как дополнительная фича у него(если есть конечно), потому как он подменяет именно коллбеки в характеристике протокола при регистрации его.
Написание NDIS-клиента
От:
Аноним
Дата:
06.02.07 07:14
Оценка:
Здравствуйте!
Очень нужна инфа по реализации NDIS-клиента в драйвере. Общая инфа по NDIS у меня есть, интересуют конкретные моменты — как создавать коннект, как слать пакеты. Данные будут передаваться на HTTP-сервер, т.о. нужна инфа по реализации TCP-клиента, т.е. нужны сокеты в ядре, но именно через NDIS.
Желательно пример на C. Или хотя б ссылки, книги может какие порекомендуете по этому делу?
Здравствуйте, Аноним, Вы писали:
А>Данные будут передаваться на HTTP-сервер, т.о. нужна инфа по реализации TCP-клиента, т.е. нужны сокеты в ядре, но именно через NDIS.
Здравствуйте, onyx2, Вы писали:
O>Здравствуйте, Аноним, Вы писали:
А>>Данные будут передаваться на HTTP-сервер, т.о. нужна инфа по реализации TCP-клиента, т.е. нужны сокеты в ядре, но именно через NDIS.
O>Unreal %)
Да ну? )) Не знаете как — не пишите.
Знающим людям — я понимаю, что это сложно, сложнее чем через TDI, но мне нужен именно NDIS.
А>Очень нужна инфа по реализации NDIS-клиента в драйвере. Общая инфа по NDIS у меня есть, интересуют конкретные моменты — как создавать коннект, как слать пакеты.
Никаких коннектов на уровне NDIS быть не может. Вам придется делать все вручную — от ARP протокола, до собственной реализации TCP стека. Я сначала хотел порекомендовать NDIS протокол, но поразмыслив, решил, что Вам подойдет NDIS IM. Дело в том, что если Вы будете сами реализовывать весь tcpip стек, его жизнедеятельность может "мешать" стандартному стеку. Поэтому, лучше сделать такой драйвер фильтром -он не будут пропускать Ваши пакеты выше.
A>Данные будут передаваться на HTTP-сервер, т.о. нужна инфа по реализации TCP-клиента, т.е. нужны сокеты в ядре, но именно через NDIS.
Никаких сокетов быть не может. Чтобы установить соединение Вам придется сделать следующее.
1. Выполнить всю работу, которую делает маршрутизатор — определить, удаленный хост находиться в прямосоединенной сети или за шлюзом, если хост находиться за шлюзом — определить адрес шлюза. Без запросов к tcpip.sys это довольно сложно, я лично не знаю 100% рецептов.
2. Определить МАС адрес удаленного хоста или шлюза — для этого нужно реализовать ARP протокол
3. Далее послать TCP SYN пакет и далее полностью реализовать весь ТСР протокол.
4. Реализация HTTP после всего этого — просто деццкая прогулка
А>Желательно пример на C. Или хотя б ссылки, книги может какие порекомендуете по этому делу?
Смотрите исходники открытых систем ( Linux, FreeBSD ).
PS: и вообще, беретесь писать спайваре — пользуйтесь головой. А то дайте мне пример, порекомендуйте книгу, может еще потом самим себе установить это?
Да пребудет с тобою сила
Re[2]: Написание NDIS-клиента
От:
Аноним
Дата:
06.02.07 08:45
Оценка:
Здравствуйте, TarasCo, Вы писали:
TC>Никаких коннектов на уровне NDIS быть не может. Вам придется делать все вручную — от ARP протокола, до собственной реализации TCP стека. Я сначала хотел порекомендовать NDIS протокол, но поразмыслив, решил, что Вам подойдет NDIS IM.
NDIS IM — что сие есть такое?
TC>Дело в том, что если Вы будете сами реализовывать весь tcpip стек, его жизнедеятельность может "мешать" стандартному стеку. Поэтому, лучше сделать такой драйвер фильтром -он не будут пропускать Ваши пакеты выше.
Чем мешать? Как это проявляется? Можно поподробнее? plz
TC>Никаких сокетов быть не может. Чтобы установить соединение Вам придется сделать следующее.
Да это понятно, это я чисто условно.
TC>1. Выполнить всю работу, которую делает маршрутизатор — определить, удаленный хост находиться в прямосоединенной сети или за шлюзом, если хост находиться за шлюзом — определить адрес шлюза. Без запросов к tcpip.sys это довольно сложно, я лично не знаю 100% рецептов.
А почему надо без запросов к tcpip.sys делать? Зачем такие извращения? ))
А>>Желательно пример на C. Или хотя б ссылки, книги может какие порекомендуете по этому делу?
TC>Смотрите исходники открытых систем ( Linux, FreeBSD ).
Это понятно. Мне бы под Windows.
А книги какие по NDIS лучше почитать на ваш взгляд?
P.S. Спасибо за ответ. Я понимаю, готовый исходник тут вряд ли кто выложит, но накидайте хотя бы ссылок на доки, сырцы и т.п.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, onyx2, Вы писали:
O>>Здравствуйте, Аноним, Вы писали:
А>>>Данные будут передаваться на HTTP-сервер, т.о. нужна инфа по реализации TCP-клиента, т.е. нужны сокеты в ядре, но именно через NDIS.
O>>Unreal %)
А>Да ну? )) Не знаете как — не пишите. А>Знающим людям — я понимаю, что это сложно, сложнее чем через TDI, но мне нужен именно NDIS.
Используйте поиск, здесь подобное обсуждалось.
Начните отсюда
Unreal — имелось в виду для надежного продукта. А так побыстрому можно что-нибудь налобать. Даже по быстрому это займет не один месяц.
Вы для начала скажите поддержка каких ОС требуется? Какие-нибудь особенности разрабатываемого ПО?
TC>Никаких сокетов быть не может. Чтобы установить соединение Вам придется сделать следующее. TC>1. Выполнить всю работу, которую делает маршрутизатор — определить, удаленный хост находиться в прямосоединенной сети или за шлюзом, если хост находиться за шлюзом — определить адрес шлюза. Без запросов к tcpip.sys это довольно сложно, я лично не знаю 100% рецептов. TC>2. Определить МАС адрес удаленного хоста или шлюза — для этого нужно реализовать ARP протокол TC>3. Далее послать TCP SYN пакет и далее полностью реализовать весь ТСР протокол. TC>4. Реализация HTTP после всего этого — просто деццкая прогулка
За ссылку — thx.
O>Unreal — имелось в виду для надежного продукта. А так побыстрому можно что-нибудь налобать. Даже по быстрому это займет не один месяц.
Вы уверены в этих сроках? Это действительно так долго?
Вы уже реализовывали подобное?
Мне ведь всего лишь надо отправлять HTTP-запрос и получать ответ.
O>Вы для начала скажите поддержка каких ОС требуется? Какие-нибудь особенности разрабатываемого ПО?
Необходима поддержка хотя бы Windows XP. Особенность одна — это драйвер, в который я добавляю поддержку сети, вот и всё.
Re[4]: Написание NDIS-клиента
От:
Аноним
Дата:
06.02.07 10:47
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:
А>>P.S. Спасибо за ответ. Я понимаю, готовый исходник тут вряд ли кто выложит, но накидайте хотя бы ссылок на доки, сырцы и т.п.
AWW>Ты спрашивал по срокам — могу ответеить довольно точно — более года, от начала твоего изучения до выхода более-менее первой безглючной бетты ...
За эту информацию — thx.
AWW>Ты говоришь, я заметил умные слова — типа сокеты в ядре.
У меня есть обёртка ring0 над TDI в виде send, recv, connect и т.п. Я думал, над NDIS можно сделать нечто похожее.
AWW>А главное, ты лучше скажи сколько тебе за это предложили, и на сколько ты уже согласился...
Никто ничего не предлагал. И никто соответственно ни на что не соглашался. Я ведь не просто так спрашиваю про сроки и т.п.
AWW>Я думаю, если ты назвал правильную цифру, то "тут" никто особо отказываться не будет... сырцы и доки посыпятся как из рога изобилия... Ты главное скажи скоко платишь?
Я никаких цифр не называл. Насчёт "отказываться" тоже непонятно — я ведь ничего не предлагаю никому. И разве я должен на этом форуме кому-то платить? Я ведь не работодатель.
В общем, эту вашу фразу я совсем не понял.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте!
А>Очень нужна инфа по реализации NDIS-клиента в драйвере. Общая инфа по NDIS у меня есть, интересуют конкретные моменты — как создавать коннект, как слать пакеты. Данные будут передаваться на HTTP-сервер, т.о. нужна инфа по реализации TCP-клиента, т.е. нужны сокеты в ядре, но именно через NDIS.
А>Желательно пример на C. Или хотя б ссылки, книги может какие порекомендуете по этому делу?
А>TDI не предлагать.
Случаем не спам бота пишешь? Или еще какую зловредную прогу? Я вот не могу придумать РЕАЛЬНОГО применения данной реализации. Ну а так как многие брандмауэры сейчас ставят фильтр на уровне NDIS то вот наверное и захотелось спуститься ниже них.
убедительная просьба следить за объемом цитирования — модератор
AWW>Не принимай все мои слова прямо на себя, я просто немного на твоём примере рассказал, господам "требующим", что на самом деле они просят... В наше ведь области, тут такая штука, это же не подсказать, как правильно класс в MFC объявить — динамически или статически, это же не просто ссылку дать на доку... Эти же знания иногда после долгих-долгих поисков и многократных попыток приобретаются... И цена им очень высока.
Open Sources'щики немного другого мнения, хотя я сам и не согласен с ними. Это раз.
А во-вторых, всё это туфта на самом деле. Истинная причина, по которой такие как ты, не дают ответов на серьёзные вопросы, одна: да просто жаба душит. Ну и лень.
И ещё. Задумайтесь, а нахрена нужен форум, где отвечают только на вопросы типа "как мне привести переменную к типу производного класса?".
AWW>Это с одной стороны, а с другой... Если, например тебе просто так "дать и всё", то кто-то из таких же, профиков как мы, останется без работы... А это согласись не справедливо!
Да где ты останешься без работы?! Кто у тебя отбирает?! Специалисты нужны всегда и везде. Загнул ты слишком.
Я жуть как с тобой не согласен. Время у тебя есть, чтобы вот эти все выкладки писать, если бы ты столько же времени потратил на выкладывание здесь кусочка кода, пусть небольшого, всем было бы хорошо.
Здравствуйте, Аноним, Вы писали:
А>Open Sources'щики немного другого мнения, хотя я сам и не согласен с ними. Это раз. А>А во-вторых, всё это туфта на самом деле. Истинная причина, по которой такие как ты, не дают ответов на серьёзные вопросы, одна: да просто жаба душит. Ну и лень. А>И ещё. Задумайтесь, а нахрена нужен форум, где отвечают только на вопросы типа "как мне привести переменную к типу производного класса?".
Для того чтобы указать направление в котором двигаться, что собственно тебе и сказали несколько постами выше!!!
Здравствуйте, onyx2, Вы писали:
TC>>Никаких сокетов быть не может. Чтобы установить соединение Вам придется сделать следующее. TC>>1. Выполнить всю работу, которую делает маршрутизатор — определить, удаленный хост находиться в прямосоединенной сети или за шлюзом, если хост находиться за шлюзом — определить адрес шлюза. Без запросов к tcpip.sys это довольно сложно, я лично не знаю 100% рецептов. TC>>2. Определить МАС адрес удаленного хоста или шлюза — для этого нужно реализовать ARP протокол TC>>3. Далее послать TCP SYN пакет и далее полностью реализовать весь ТСР протокол. TC>>4. Реализация HTTP после всего этого — просто деццкая прогулка
O>Но если NDIS IM, то зачем пункты 1 и 2?
Sorry, запарился
Да, действительно все что было сказано — истинная правда и подлежит реализации.
Необходимо учесть также фрагментацию IP, IpSec и прочие плохие вещи.
Ну вот, например, вам нужно послать пакет в сеть (в общих чертах):
1. выполнить пункты 1 и 2
2. сформировать Ethernet пакет,
3. сформировать IP пакет
4. сформировать TCP пакет
5. сформировать HTTP запрос
6. собрать все пакеты (буфера) в один и let's go!
А теперь задумайтесь над тем, что сеть может быть не только Ethernet — и все! Тапки! И это только посылка одного маленького ничтожного http запросика!
Это очень сложно. Выразите свою конкретную цель. Чего нужно достичь? Может мы найдем более легкое решение а плане реализации.
Здравствуйте, onyx2, Вы писали:
O>Это очень сложно. Выразите свою конкретную цель. Чего нужно достичь? Может мы найдем более легкое решение а плане реализации.
Цель, как я уже говорил, — послать HTTP-запрос. Из драйвера. Система Windows XP. Небольшая оговорка: чем ниже уровень, тем лучше. Вот и всё, что могу сказать.
Я слышал что можно через TDI или через NDIS. Также в DDK Documentation читал про Windows Sockets SPI, но это слишком высокий уровень. На низком уровне, я уже понял, будет очень сложно реализовывать всё это.
Что-то ещё есть?
P.S. А нет какого-нибудь Network-провайдера в Windows на том же уровне что и NDIS, но предоставляющий такой же простой интерфейс что и TDI ?
[moderator]убедительная просьба следить за ..., Denwer!
убедительная просьба следить за объемом цитирования — модератор
Выложите пожалуйста исходники вашего проекта на форуме, мы постараемся добавить данный функционал туда, и сообщать вам о результатах.
Единственная просьба, напишите точно ТЗ. Разумеется все сделаем за спасибо.
Начет Опен сорца, я думаю что такое GPL лицензия рассказывать не нужно. Если я например дал бы вам исходники того что вы ищите, вы сделаете доступным исходники ВСЕГО вашего проекта. Я думаю нет. Вы же просто хотите украсть чужие труды.
Re[8]: Написание NDIS-клиента
От:
Аноним
Дата:
06.02.07 15:43
Оценка:
Здравствуйте, Denwer, Вы писали:
D>Выложите пожалуйста исходники вашего проекта на форуме, мы постараемся добавить данный функционал туда, и сообщать вам о результатах. D>Единственная просьба, напишите точно ТЗ. Разумеется все сделаем за спасибо.
Я же немного попросил. А вы теперь издеваться начали. Нехорошо.
D>Начет Опен сорца, я думаю что такое GPL лицензия рассказывать не нужно. Если я например дал бы вам исходники того что вы ищите, вы сделаете доступным исходники ВСЕГО вашего проекта. Я думаю нет. Вы же просто хотите украсть чужие труды.
Хм... А вы считаете что все открытые исходники в мире находяться под GPL ?
Здравствуйте, Аноним, Вы писали:
А>Хм... А вы считаете что все открытые исходники в мире находяться под GPL ?
Кстати а какие есть ещё другие лицензии на открытый код "OpenSource", котрые ты знаешь, чтобы они позволяли брать от из "того" кода куски, пользовать их в своих проектах, и потом свой код не публиковать ни под какой либо из фри лиценцзий.
Не все кто уехал, предал Россию.
Re[10]: Написание NDIS-клиента
От:
Аноним
Дата:
06.02.07 16:18
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Здравствуйте, Аноним, Вы писали:
А>>Хм... А вы считаете что все открытые исходники в мире находяться под GPL ?
AWW>Кстати а какие есть ещё другие лицензии на открытый код "OpenSource", котрые ты знаешь, чтобы они позволяли брать от из "того" кода куски, пользовать их в своих проектах, и потом свой код не публиковать ни под какой либо из фри лиценцзий.
При чём тут какая-то лицензия????
Вот написал кто-то код, например. Просто написал. Сидя дома. На компьютере. В Visual C++. Я попросил его прислать его мне. Он прислал. Всё. Что после этого я кому-то должен открывать?
Здравствуйте, Аноним, Вы писали:
А>Ещё раз спрашиваю, лицензия здесь при чём?
А причем тут OpenSource? который ты приплел вначале.
Не все кто уехал, предал Россию.
Re[11]: Написание NDIS-клиента
От:
Аноним
Дата:
06.02.07 16:34
Оценка:
****А>Здравствуйте, Andrew.W Worobow, Вы писали:
****AWW>>Здравствуйте, Аноним, Вы писали:
****А>>>Хм... А вы считаете что все открытые исходники в мире находяться под GPL ?
++++AWW>>Кстати а какие есть ещё другие лицензии на открытый код "OpenSource", котрые ты знаешь, чтобы они позволяли брать от из "того" кода куски, пользовать их в своих проектах, и потом свой код не публиковать ни под какой либо из фри лиценцзий.
Можно вопрос, а зачем ты столько лишнего на цитировал в своем ответе? Хвалило и бы только помеченного "+", а всё со "*", это просто мусор. Зачем мусор постишь?
Re[12]: Написание NDIS-клиента
От:
Аноним
Дата:
06.02.07 16:42
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Можно вопрос, а зачем ты столько лишнего на цитировал в своем ответе? Хвалило и бы только помеченного "+", а всё со "*", это просто мусор. Зачем мусор постишь?
Видишь ли, у меня правило: сохранять в цитировании столько предыдущего текста, сколько минимально необходимо для понимания ответа. Некоторые (и я в том числе) читают только последние непрочитанные ими посты. Соответственно там должна быть минимальная история сообщений. Вот только не надо сейчас передёргивать! Я слежу за свои цитированием, и удаляю действительно лишнее.
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Ты спрашивал по срокам — могу ответеить довольно точно — более года,
Это в случае изготовления коммерческого ПО. Для шпионского сроки и стандарты другие. У меня ушло три недели на осуществление данной задачи ( правда, без HTTP, остановился на реализации сокетов ). Но у меня было один большой плюс — я точно знал что и как делать и не гнался за качеством и стабильностью работы.
Да пребудет с тобою сила
Re[5]: Написание NDIS-клиента
От:
Аноним
Дата:
07.02.07 07:10
Оценка:
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>>Ты спрашивал по срокам — могу ответеить довольно точно — более года,
TC>Это в случае изготовления коммерческого ПО. Для шпионского сроки и стандарты другие. У меня ушло три недели на осуществление данной задачи ( правда, без HTTP, остановился на реализации сокетов ). Но у меня было один большой плюс — я точно знал что и как делать и не гнался за качеством и стабильностью работы.
Сдаётся мне, после реализации сокетов над NDIS реализация HTTP-запросов — детская забава.
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>>Ты спрашивал по срокам — могу ответеить довольно точно — более года,
TC>Это в случае изготовления коммерческого ПО. Для шпионского сроки и стандарты другие. У меня ушло три недели на осуществление данной задачи ( правда, без HTTP, остановился на реализации сокетов ). Но у меня было один большой плюс — я точно знал что и как делать и не гнался за качеством и стабильностью работы.
Гы, ну тогда вопросик сразу, а если в системе стоит NDIS hook, который перхватывает NdisRegisterProtocol, и исправляет все нужные обработчики, это как обойти нормально(ну без таких извращений как не дать загрузиться такому драйверу), ну т.е. что бы передача ланных сработала без перезагрузки компа.
Здравствуйте, Denwer, Вы писали:
D>Гы, ну тогда вопросик сразу, а если в системе стоит NDIS hook, который перхватывает NdisRegisterProtocol, и исправляет все нужные обработчики, это как обойти нормально(ну без таких извращений как не дать загрузиться такому драйверу), ну т.е. что бы передача ланных сработала без перезагрузки компа.
Сразу в догонку: или снимал этот хук на NdisRegisterProtocol и регал свой протокол?
А>Желательно пример на C. Или хотя б ссылки, книги может какие порекомендуете по этому делу?
В общем так, если зарегестрируешься на rsdn, я тебе вышлю по почте кое-какие исходники. Это будет свободно распространяемый файер tdi_fw (если поискать то и сам найдешь), а также кое-что по NDIS. Да вот еще вспомнил, можешь также скачать с winpcap.org исходники winpcap — очень полезная штука, там есть исходники драйвера, который отлавливает пакеты на NDIS уровне.
А>TDI не предлагать.
Это ты зря TDI самое оно для твоей задачи.
Для vista — Winsock Kernel (WSK) наверное.
Здравствуйте, onyx2, Вы писали:
O>В общем так, если зарегестрируешься на rsdn, я тебе вышлю по почте кое-какие исходники. Это будет свободно распространяемый файер tdi_fw (если поискать то и сам найдешь), а также кое-что по NDIS. Да вот еще вспомнил, можешь также скачать с winpcap.org исходники winpcap — очень полезная штука, там есть исходники драйвера, который отлавливает пакеты на NDIS уровне.
Спасибо ещё раз за инфу. Одно уточнение только: мне не нужно ничего отлавливать на NDIS уровне. Мне нужно именно слать.
O>Для vista — Winsock Kernel (WSK) наверное.
Поддержка Vist'ы пока не выходит в мои планы.
Скинь сюда: . Спасибо большое.
Re[2]: Написание NDIS-клиента
От:
Аноним
Дата:
07.02.07 10:13
Оценка:
Здравствуйте, onyx2, Вы писали:
А>>TDI не предлагать.
O>Это ты зря TDI самое оно для твоей задачи. O>Для vista — Winsock Kernel (WSK) наверное.
Лол — он же пишет, чтоб ни кто не мог отфильтровать. Ему нужен эндис. Если нечего сказать — то луше просто молчи — чем людей пускать по ложному следу... Да, и ещё великому сусанину было бы не плохо знать, что tdi_fw, это проект на соурсфорге... tdifw. И лицензия у него не фри а BSD.
Вопрос к модератору:
"А зачем вообще дана возможность задавать вопросы анонимам?"
В большинстве известных мне форумов никаких анонимов, только зарегестрировавшиеся пользователи.
Здравствуйте, onyx2, Вы писали:
O>Давай регистрируйся. Анонимам ничего не высылаю.
А смысл?
O>Вопрос к модератору: O>"А зачем вообще дана возможность задавать вопросы анонимам?" O>В большинстве известных мне форумов никаких анонимов, только зарегестрировавшиеся пользователи.
Ну смотри. Например, я зарегаюсь и буду под этим ником отвечать только в этой ветке. И что?
Не устраивай детский сад. Никто ничего не выиграет от того, что я зарегаюсь. А не хочешь высылать — не надо.
В данном случае согласен с анонимом. Нельзя просто взять и не пущать. Не хочет человек регистрироваться — не надо. Естественно, посты человека с известным ником привлекают больше внимания, да и желания ответить у других участников может быть поболее. Но регистрация — добровольная, и это гуд. IMHO.
Здравствуйте, Аноним, Вы писали:
А>Очень нужна инфа по реализации NDIS-клиента в драйвере. А> ... А>Или хотя б ссылки, книги может какие порекомендуете по этому делу?
Информации в сети по данной теме не так уж и много. В своё время я её тоже искал, когда хотел написать своего ndis-клиента, но понял что разбираться нужно очень долго, и поэтому я пока отказался, взяв для решения текущих потребностей Windows Packet Filter Kit.
Так же тебе возможно поможет вот эта ссылка: здесь люди обсуждают схожие вопросы, тем более, что сегодня обсуждение там "ожило".
А>Мне ведь всего лишь надо отправлять HTTP-запрос и получать ответ.
По-любому придется реализовать почти целиком TCP/IP стек. Иначе продукт не будет работать на чуть более сложных конфигурациях.
А>Необходима поддержка хотя бы Windows XP. Особенность одна — это драйвер, в >который я добавляю поддержку сети, вот и всё.
С TDI получится. С NDIS нет.
Дело в том, что NDIS протокол нужно _инсталлировать средствами INetCfg_, чтобы он правильно вписался в реестр. Для этого у него нужен быть "протокольный" INF файл, в котором, например, будет указано его имя, и это же самое имя надо будет потом указать в коде в NdisRegisterProtocol (поле структуры). Иначе он просто не привяжется к адаптерам.
С TDI этой проблемы нет. CreateFile на \Device\Tcp может звать кто угодно, специальная инсталляция не требуется.
А>Насчёт применения: например, самообновление того же антивируса. Некоторые трояны мешают >корректному обновлению AV, последний же должен выжить любым способом.
Нет, не любым. Если его "выживание" поставит ОС под риск краха — то лучше бы он не выживал. Я серьезно.
"Через NDIS" — означает, что IP стек остается в стороне, и его придется писать самому. Не черезчур ли?
>Также в DDK Documentation читал про Windows Sockets SPI, но это слишком >высокий уровень.
Это юзер мода.
А>P.S. А нет какого-нибудь Network-провайдера в Windows на том же уровне >что и NDIS, но предоставляющий такой же простой интерфейс что и TDI ?
Есть. Он называется tcpip.sys, и из него сверху торчит TDI (если мы не о Висте говорим).
Здравствуйте, Maxim S. Shatskih, Вы писали:
MSS>С TDI получится. С NDIS нет.
MSS>Дело в том, что NDIS протокол нужно _инсталлировать средствами INetCfg_, чтобы он правильно вписался в реестр. Для этого у него нужен быть "протокольный" INF файл, в котором, например, будет указано его имя, и это же самое имя надо будет потом указать в коде в NdisRegisterProtocol (поле структуры). Иначе он просто не привяжется к адаптерам.
А для того, чтобы лучше понять о привязках (биндированиях) и вообще то о чем говорит Максим, посмотрите утилиту BINDVIEW, которая входит в состав любого ддк(вдк). Она лежит в примерах исходных текстов — в частности в "<ddk_root>\src\network\config\bindview"... Только осторожно с ней, удалив некоторые назначенные привязки вы сможете их восстановить только переинсталлировав сетевую подсистему целиком. Ну или опять же с помощью BINDVIEW, конечно если все их запомните... Одним словом поосторожней с ней.
Здравствуйте, TarasCo, Вы писали:
TC>В данном случае согласен с анонимом. Нельзя просто взять и не пущать. Не хочет человек регистрироваться — не надо. Естественно, посты человека с известным ником привлекают больше внимания, да и желания ответить у других участников может быть поболее. Но регистрация — добровольная, и это гуд. IMHO.
Демократия до добра не доведет
А если Аноним не хочет регистрироваться, ну что ж не судьба. А я реально хотел помочь человеку.
Здравствуйте, Maxim S. Shatskih, Вы писали:
MSS>Дело в том, что NDIS протокол нужно _инсталлировать средствами INetCfg_, чтобы он правильно вписался в реестр. Для этого у него нужен быть "протокольный" INF файл, в котором, например, будет указано его имя, и это же самое имя надо будет потом указать в коде в NdisRegisterProtocol (поле структуры). Иначе он просто не привяжется к адаптерам.
Если идти на принцип — это не обязательно. Достаточно, что протокол зарегистрируется — для этого не нужна корректная установка драйвера. После регистрации протокола можно всякими хакерскими методами получить доступ к точкам приема/передачи.
Здравствуйте, Denwer, Вы писали:
D>Гы, ну тогда вопросик сразу, а если в системе стоит NDIS hook, который перхватывает NdisRegisterProtocol, и исправляет все нужные обработчики, это как обойти нормально(ну без таких извращений как не дать загрузиться такому драйверу), ну т.е. что бы передача ланных сработала без перезагрузки компа.
Может быть, вызвать NdisRegisterProtocol каким-либо другим образом (например, загрузив в память еще одну копию ndis.sys, благо релоки там есть) ?
Здравствуйте, TarasCo, Вы писали:
TC>Если идти на принцип — это не обязательно. Достаточно, что протокол зарегистрируется — для этого не нужна корректная установка драйвера. После регистрации протокола можно всякими хакерскими методами получить доступ к точкам приема/передачи.
Мы о чем вообще? Об некой сущности в поле идеологии NDIS (Network Driver Interface Specification) — NDIS'овском-протоколе, или об неком модуле ядра который использует вызов функции NdisRegisterProtocol врапера для той или иной своей функциональности? Если о первом то получение биндинг-контекста возможно только посредством ProtocolBindAdapterХХХ. Если о втором то к NDIS он имеет только опосредованное отношение и говорить о нем как об "NDIS протоколе" это не понимать, что NDIS это некая спецификаия и набор правил, а не "проблема" на пути отправки и приёма пакетов...
Здравствуйте, 8001, Вы писали:
AWW>>Да жаба, душит, потому как если у меня будет меньше конкурентов, то цена моей рабочей силы вырастет, и я буду больше получать денег...
8>Цинично замечу, что в данном конкретном случае поделиться информацией == поднять спрос на специалистов-"ядерщиков"
Я смотрю господин IID, старательно ставит мне минусы, он наверное хочет, чтобы я с ним информацией поделился...
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Не принимай все мои слова прямо на себя, я просто немного на твоём примере рассказал, господам "требующим", что на самом деле они просят... В наше ведь области, тут такая штука, это же не подсказать, как правильно класс в MFC объявить — динамически или статически, это же не просто ссылку дать на доку... Эти же знания иногда после долгих-долгих поисков и многократных попыток приобретаются... И цена им очень высока.
AWW>Это с одной стороны, а с другой... Если, например тебе просто так "дать и всё", то кто-то из таких же, профиков как мы, останется без работы... А это согласись не справедливо!
Сдается мне, что в конечном итоге кто нибудь, да выложит решение этой задачи в открытый доступ. Просто от нефиг делать
И тогда куча народу останется без работы
Re[7]: Написание NDIS-клиента
От:
Аноним
Дата:
08.02.07 11:21
Оценка:
Здравствуйте, crash override, Вы писали:
CO>Сдается мне, что в конечном итоге кто нибудь, да выложит решение этой задачи в открытый доступ. Просто от нефиг делать
Я жду этого момента с нетерпением.
CO>И тогда куча народу останется без работы
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Здравствуйте, 8001, Вы писали:
AWW>>>Да жаба, душит, потому как если у меня будет меньше конкурентов, то цена моей рабочей силы вырастет, и я буду больше получать денег...
8>>Цинично замечу, что в данном конкретном случае поделиться информацией == поднять спрос на специалистов-"ядерщиков"
AWW> Я смотрю господин IID, старательно ставит мне минусы, он наверное хочет, чтобы я с ним информацией поделился...
Здравствуйте, crash override, Вы писали:
CO>Здравствуйте, Denwer, Вы писали:
D>>Гы, ну тогда вопросик сразу, а если в системе стоит NDIS hook, который перхватывает NdisRegisterProtocol, и исправляет все нужные обработчики, это как обойти нормально(ну без таких извращений как не дать загрузиться такому драйверу), ну т.е. что бы передача ланных сработала без перезагрузки компа.
CO>Может быть, вызвать NdisRegisterProtocol каким-либо другим образом (например, загрузив в память еще одну копию ndis.sys, благо релоки там есть) ?
Здравствуйте, Maxim S. Shatskih, Вы писали:
А>>Я слышал что можно через TDI или через NDIS.
MSS>"Через NDIS" — означает, что IP стек остается в стороне, и его придется писать самому. Не черезчур ли?
Я правильно понял Вашу мысль — "не всякий драйвер, вызвавший функцию NdisRegisterProtocol является NDIS protocol драйвером"? Я с этим утверждением абсолютно согласен, очень любезно что Вы нашли время донести это до остальных участников.
CO>>Может быть, вызвать NdisRegisterProtocol каким-либо другим образом (например, загрузив в память еще одну копию ndis.sys, благо релоки там есть) ?
IID>Наш соотечественник предлагал такой способ
Проблема то в следующем(кстати восстановление хуков на таблице экспорта я сделал давно уже), что при регистрации протокола, туда передается структура с заполнеными указателями функций обработчиков, которые не являются функциями ЭКСПОРТА, поэтому если кто то получит список всех зареганных NDIS протоколов (а это делается как уже правильно подмечено с помощью регистрации своего, и он будет первым в списке, потом можно пробежать по всех и поставить НОВЫЕ хуки) и потом заменит на свои, то вот восстановить эти установленные хуки уже проблематично. Нужно будет искать кто их поставил и в каждом КОНКРЕТНОМ случае искать место хранения оригиналов.
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Ну если кратко, то вопрос в вежливости.
Я был не вежлив? Не могли бы Вы указать, где я нарушил этикет конференции???
Да пребудет с тобою сила
Re[11]: Написание NDIS-клиента
От:
Аноним
Дата:
14.02.07 12:14
Оценка:
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, Andrew.W Worobow, Вы писали: TC>Я был не вежлив? Не могли бы Вы указать, где я нарушил этикет конференции???
Опять начинаются разборки! Да прекратите вы! Вы должны объединяться, а не наоборот. Вы же профессионалы, уж вам-то как раз ссориться вообще противозаконно
Как топикстартер, могу лишь сказать, что от ваших разборок в моей голове знаний не прибавляется.
Re[11]: Написание NDIS-клиента
От:
Аноним
Дата:
14.02.07 12:34
Оценка:
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>>Ну если кратко, то вопрос в вежливости.
TC>Я был не вежлив? Не могли бы Вы указать, где я нарушил этикет конференции???
Да все в порядке, не переживай — тыже поправил человека с мвр, ты теперь великий учитель. Вот только мвп говорил про другое — или ты думаешь он этого не знал, а ты его посвятил тёмного сакральными знаниями.
Что-то я в этой ветке совсем потерялся — каждый обсуждает что-то свое. Получился эдакий небольшой форум :)
А вывод, господа, какой вывод? Что посоветуем человеку для разрешения его проблемы?
А>Очень нужна инфа по реализации NDIS-клиента в драйвере. Общая инфа по NDIS у меня есть, интересуют конкретные моменты — как создавать коннект, как слать пакеты. Данные будут передаваться на HTTP-сервер, т.о. нужна инфа по реализации TCP-клиента, т.е. нужны сокеты в ядре, но именно через NDIS.
Вроде как мы его убедили, не соваться в NDIS, потому как реализация TCP/IP стека уж очень нелегкое это дело. А в этом конкретном случае так и просто — unreal.
А>TDI не предлагать.
Странно, зачем отказываться от того, что для тебя уже сделала операционная система?
Интересно мнение самого анонима, что он решил для себя из обсуждения данного вопроса.
Здравствуйте, IID, Вы писали:
IID>Посмотрите эту презентацию
Читал эту доку не один раз, может я что то не допонимаю, ну не увидел я там методы как восстановить ОРИГИНАЛЬНЫЕ коллбек функции у структуры NDIS_PROTOCOL_CHARACTERISTICS, после того как их изменит фаервол.
Здравствуйте, Denwer, Вы писали:
D>Здравствуйте, IID, Вы писали:
IID>>Посмотрите эту презентацию
D>Читал эту доку не один раз, может я что то не допонимаю, ну не увидел я там методы как восстановить ОРИГИНАЛЬНЫЕ коллбек функции у структуры NDIS_PROTOCOL_CHARACTERISTICS, после того как их изменит фаервол.
Зачем? Сама по себе эта структура не нужна. Обработчики, находящиеся в ней начинают "расползаться" по всяким структурам NDIS, и, также поползав по этим структурам, Вы сможете их восстановить обратно. А заодно можно и чужих протоколов обработчики подменить. Кроме того, не ясно — зачем протоколу такая забота о собственных точках — ну перехватит их кто-нибудь? Если нам нужна работа в обход фаерволов — тут одним протоколом все равно не обойдешься, он элементарно не сможет работать "мимо" NDIS IM драйвера, причем никто его и хукать не будет. Чтобы скрыть траффик от фаерволов нужно лезть ниже — в минипорты.
Да пребудет с тобою сила
Re[2]: Написание NDIS-клиента (вывод?)
От:
Аноним
Дата:
14.02.07 14:35
Оценка:
Здравствуйте, onyx2, Вы писали:
O>Что-то я в этой ветке совсем потерялся — каждый обсуждает что-то свое. Получился эдакий небольшой форум
Я тоже уже потерялся. Кто-то начал отношения выяснять, кто-то какие-то технические моменты. Кто-то правда всё равно говорил по делу. За это им спасибо.
O>А вывод, господа, какой вывод? Что посоветуем человеку для разрешения его проблемы?
Я тоже хотел бы это узнать. Хотя видимо ничего никто не посоветует. Ибо тут все "опупенные" программисты, тресущиеся над своей з/п. Бедненькие, как бы их кусочка хлеба не лишили... блин, аж противно...
O>Вроде как мы его убедили, не соваться в NDIS, потому как реализация TCP/IP стека уж очень нелегкое это дело. А в этом конкретном случае так и просто — unreal.
Не соваться в NDIS вы меня убедили. Однако я только что чуть пад стол не упал — когда прочитал этот
TC>Пускай стоит хук на функцию регистрации протокола — NdisRegsiterProtocol. Тут может быть два варианта — либо фаервол в своих целях подменяет ф. протокола ( для фильтрации обычно ), либо просто не дает регистрироваться вообще. Если подменяются функции в PROTOCOL_CHARACTERISTICS при регистрации, а мы по каким то причинам этого не хотим — можно попробывать это поправить полазив по струткурам уже после регистрации. Например найти все структуры NDIS_OPEN_BLOCK, относящиеся к нашему протоколу — там есть интересующие нас функции и они будут вероятно заменены на колбеки фаервола — их можно восстановить. Если же нам не дают зарегистрировать протокол ( это скорее поведение, похожее на антируткит, чем на фаервол ), то нужно сначала снять этот хук.
Выделил самое интересное . Жаль я не волшебник.
Фаерволы ставят хуки для того что бы все время не бегать постоянно по всему списку, а заменять колбеки при регистрации. Они все дают регать без проблем.
По поводу реальности затеи, щас я тоже покапался в этом деле, все же пульнуть UDP пакет используя только NDIS минипорт драйвер сетевухи реально, но вот реализовать TCP соединение, даже с минимум функционалом ооочень трудоемко.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Респект. Это и есть TCP-клиент, который я искал. Только там трабла небольшая в том, что не весь сырец выложен "для просмотра". А вот ссылка на полный исходник.
P.S. По поводу обхода фаеров: я думаю вряд ли какой-либо фаер станет препятствовать процессу ядра слать пакеты, как считаете?
А>P.S. По поводу обхода фаеров: я думаю вряд ли какой-либо фаер станет препятствовать процессу ядра слать пакеты, как считаете?
Если обнаружат — то будут. Например, работа с сетевыми файлами ведется от имени ядра — что ж теперь это все позволять ? Вообще, на уровне пакетного фильтра до фени кто там породил пакет, фаервол руководствуется жесткими правилами: разрешены порты/адреса/прочие параметры — пропустит, не разрешены — зарежет.
У этого чувака явно неисправна клавиатура, не работает малая 'a' =)
К тому же много багов, например спинлоки разлочиваются по условию, чего категорически делать нельзя.
Да и не обходит аутпост эта штука.
Здравствуйте, Аноним, Вы писали:
GN>>>Китайский подарок http://www.rootkit.com/newsread.php?newsid=591 + комментарии CO>>У этого чувака явно неисправна клавиатура, не работает малая 'a' =) А>Это он для прикола, шобы выпендриццо. CO>>К тому же много багов, например спинлоки разлочиваются по условию, чего категорически делать нельзя. А>Там он написал почему он так сделал. CO>>Да и не обходит аутпост эта штука. А>Хм...
При работе без аутпоста — да, входящие соединения принимаются. А если с ним — он видит входящие соединения на порт для которого не было вызова listen() и молча их скипает.
Там вообще баг на баге, один статический буфер из-за которого драйвер занимает полметра чего стоит.
Re[5]: Написание NDIS-клиента
От:
Аноним
Дата:
27.02.07 10:39
Оценка:
CO>Там вообще баг на баге, один статический буфер из-за которого драйвер занимает полметра чего стоит.
.sys — 24,064 байта.
Re[6]: Написание NDIS-клиента
От:
Аноним
Дата:
27.02.07 12:09
Оценка:
Здравствуйте, Аноним, Вы писали:
CO>>Там вообще баг на баге, один статический буфер из-за которого драйвер занимает полметра чего стоит.
А>.sys — 24,064 байта.
Здравствуйте, <Аноним>, Вы писали:
А>.sys — 24,064 байта. Ничего не правил
Думаю, crash override имел ввиду размер PE Image в памяти, а не размер файла на диске.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[9]: Написание NDIS-клиента
От:
Аноним
Дата:
28.02.07 06:54
Оценка:
GN>Думаю, crash override имел ввиду размер PE Image в памяти, а не размер файла на диске.
Так это не страшно, подумаешь полметра non-paged pool.
Всего размер non-paged pool если не ошибаюсь равен 120 метрам.
Re[11]: Написание NDIS-клиента
От:
Аноним
Дата:
28.02.07 13:08
Оценка:
VAB>Каждый умник потому что откусит по метру-другому "для удобства" — да еще и не по разу бывает. А потом еще на стеке начнет по 2К выделять буфера под строчки...
Давайте не будем о ламерах =) Это их проблемы
VAB>Запустите image какой под VMWare с 64-96 Mb RAM и поищите там свои 120 метров?
Для этого есть System Requirements (Memory: ...) в readme.txt, чтобы указать явно сколько минимум нужно софтине (драйверу) памяти.
VAB>оффтоп: программисты старой закалки в таких случаях (вполне обоснованно кстати) брюзжат: "Разбаловался народ совсем, вот бы на перфокарты пересадить обратно — сразу бы ловкость рук
появилась и бережливость в плане ресурсов выработалась на раз!" Вынужден согласиться — культуру работы с ресурсами (в ядре особенно) надо прививать смолоду, а то будут нестрашные советы от Анонима (с) с панталыку сбивать неопытных читателей.
В общем-то, согласен. Но... всё же от этого уже нужно уходить.
Re: оффтоп про отношение к ресурсам
От:
Аноним
Дата:
28.02.07 16:41
Оценка:
VAB>>>Запустите image какой под VMWare с 64-96 Mb RAM и поищите там свои 120 метров?
А>>Для этого есть System Requirements (Memory: ...) в readme.txt, чтобы указать явно сколько минимум нужно софтине (драйверу) памяти. VAB>Замечу что драйвер, пусть и неродной, по определению становится TCB частью ОС и не должен соотв. кардинально требования завышать, без серьезной причины.
Вот с этим не согласен. Совсем не обязательно, да вы и сами сделали оговорку.
VAB>софтина-драйвер запросто может не знать сколько ей нужно. но работать и не кашлять как правило обязана, это раз.
Должна знать предел! Иначе — 99% кривая архетиктура, ошибки при пректировании или ещё что там...
VAB>от ламеров как изволили выразиться, скушавшими весь стек и почти всю память заодно, это также не спасет. с таким подходом мол "чего non-paged pool жалеть у нас дядя на nonpagedpool фабрике работает!" — заберем последние, сколько там осталось К ценного ресурса абсолютно без нужды, да расшибемся лишний раз на ровном месте носом оземь. Ну и посмотрим как на нас будут показывать пальцем. Ибо без нас вроде работало. И правильно сделают. это два.
Да никто не говорит, что её, память, нужно забирать всю! Я сам, например, периодически занимаюсь оптимизацией расхода.
VAB>и как часто Вы читаете readme и проверяете что все что там написано соблюдается до запуска своей любимой программулины? это три.
Если я знаю, что софтина более-менее серьёзные действия производит, для которых нужно (на вскидку) большое кол-во памяти, то — читаю, и читаю внимательно.
VAB>так что не спасет никоим образом никакой readme.txt от кривого кода. Разве что от исков к производителю. Но не от репутации и не от недовольных пользователей, которые унесут фактически ваши денежки кому-то другому.
Ну а ламеры... всегда остануться нашей проблемой...
Здравствуйте, crash override, Вы писали:
CO>К тому же много багов
Это же школьник и руткит, о каких багах может идти речь?
Что бы не разводить беспочвенный флейм на тему "наколенная разработка vs работа 24*7" приведу фрагмент коммерческого Rustock rootkit. Из аналога ndis.sys!ndisReferenceMiniportByName:
) поиск неэкспортируемых ndis.sys!ndisMiniDriverList и ndis.sys!ndisMiniDriverListLock. Кто-нибудь может дать рациональное объяснение, почему используется захардкоженная NDIS50_MINIPORT_CHARACTERISTICS ? У меня варианта 2:
— ватермарк (но лок на другом поле — в любом случае баг )
— автор не знал что делает этот чужой код
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
А старый добрый метод — pdbdump — в висте не работает уже ?
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[8]: Rootkit для NDIS 6.0
От:
Аноним
Дата:
02.03.07 08:03
Оценка:
Здравствуйте, TarasCo, Вы писали:
TC>Хорошие новости — NDIS 6.0 имеет дырок для установки руткитов не менее предшествующей 5.0. Я потратил фактически 1 час на легкий реверс, чтобы из одного NDIS компонента получить доступ к другому, в том числе точкам передачи данных. Связанные списки похоже форева. Кстати, любителям реверса — NDIS 6.0 просто создана для Вас — каждая структура имеет в начале неповторимую сигнатуру, чтоб не дай Боже не спутать ).
Может пора уже открывать форум по написанию руткитов? =)