Здравствуйте, onyx2, Вы писали:
O>Что-то я в этой ветке совсем потерялся — каждый обсуждает что-то свое. Получился эдакий небольшой форум
Я тоже уже потерялся. Кто-то начал отношения выяснять, кто-то какие-то технические моменты. Кто-то правда всё равно говорил по делу. За это им спасибо.
O>А вывод, господа, какой вывод? Что посоветуем человеку для разрешения его проблемы?
Я тоже хотел бы это узнать. Хотя видимо ничего никто не посоветует. Ибо тут все "опупенные" программисты, тресущиеся над своей з/п. Бедненькие, как бы их кусочка хлеба не лишили... блин, аж противно...
O>Вроде как мы его убедили, не соваться в NDIS, потому как реализация TCP/IP стека уж очень нелегкое это дело. А в этом конкретном случае так и просто — unreal.
Не соваться в NDIS вы меня убедили. Однако я только что чуть пад стол не упал — когда прочитал этот
TC>Зачем? Сама по себе эта структура не нужна. Обработчики, находящиеся в ней начинают "расползаться" по всяким структурам NDIS, и, также поползав по этим структурам, Вы сможете их восстановить обратно. А заодно можно и чужих протоколов обработчики подменить. Кроме того, не ясно — зачем протоколу такая забота о собственных точках — ну перехватит их кто-нибудь? Если нам нужна работа в обход фаерволов — тут одним протоколом все равно не обойдешься, он элементарно не сможет работать "мимо" NDIS IM драйвера, причем никто его и хукать не будет. Чтобы скрыть траффик от фаерволов нужно лезть ниже — в минипорты.
Они не расползутся, потому как они не попадут даже в NDIS, после первого рестарта фаервол ставит хук на функцию ргисрацию,и подменяет до регистрации протокола. И кстати на память я не помню не одного фаервола который ставит NDIS IM, единственное сомнение с ZoneAlarm, но это как дополнительная фича у него(если есть конечно), потому как он подменяет именно коллбеки в характеристике протокола при регистрации его.
Пускай стоит хук на функцию регистрации протокола — NdisRegsiterProtocol. Тут может быть два варианта — либо фаервол в своих целях подменяет ф. протокола ( для фильтрации обычно ), либо просто не дает регистрироваться вообще. Если подменяются функции в PROTOCOL_CHARACTERISTICS при регистрации, а мы по каким то причинам этого не хотим — можно попробывать это поправить полазив по струткурам уже после регистрации. Например найти все структуры NDIS_OPEN_BLOCK, относящиеся к нашему протоколу — там есть интересующие нас функции и они будут вероятно заменены на колбеки фаервола — их можно восстановить. Если же нам не дают зарегистрировать протокол ( это скорее поведение, похожее на антируткит, чем на фаервол ), то нужно сначала снять этот хук.
TC>Пускай стоит хук на функцию регистрации протокола — NdisRegsiterProtocol. Тут может быть два варианта — либо фаервол в своих целях подменяет ф. протокола ( для фильтрации обычно ), либо просто не дает регистрироваться вообще. Если подменяются функции в PROTOCOL_CHARACTERISTICS при регистрации, а мы по каким то причинам этого не хотим — можно попробывать это поправить полазив по струткурам уже после регистрации. Например найти все структуры NDIS_OPEN_BLOCK, относящиеся к нашему протоколу — там есть интересующие нас функции и они будут вероятно заменены на колбеки фаервола — их можно восстановить. Если же нам не дают зарегистрировать протокол ( это скорее поведение, похожее на антируткит, чем на фаервол ), то нужно сначала снять этот хук.
Выделил самое интересное . Жаль я не волшебник.
Фаерволы ставят хуки для того что бы все время не бегать постоянно по всему списку, а заменять колбеки при регистрации. Они все дают регать без проблем.
По поводу реальности затеи, щас я тоже покапался в этом деле, все же пульнуть UDP пакет используя только NDIS минипорт драйвер сетевухи реально, но вот реализовать TCP соединение, даже с минимум функционалом ооочень трудоемко.
Хорошие новости — NDIS 6.0 имеет дырок для установки руткитов не менее предшествующей 5.0. Я потратил фактически 1 час на легкий реверс, чтобы из одного NDIS компонента получить доступ к другому, в том числе точкам передачи данных. Связанные списки похоже форева. Кстати, любителям реверса — NDIS 6.0 просто создана для Вас — каждая структура имеет в начале неповторимую сигнатуру, чтоб не дай Боже не спутать ).
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 метрам.
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.
Re[11]: Написание NDIS-клиента
От:
Аноним
Дата:
28.02.07 13:08
Оценка:
VAB>Каждый умник потому что откусит по метру-другому "для удобства" — да еще и не по разу бывает. А потом еще на стеке начнет по 2К выделять буфера под строчки...
Давайте не будем о ламерах =) Это их проблемы
VAB>Запустите image какой под VMWare с 64-96 Mb RAM и поищите там свои 120 метров?
Для этого есть System Requirements (Memory: ...) в readme.txt, чтобы указать явно сколько минимум нужно софтине (драйверу) памяти.
VAB>оффтоп: программисты старой закалки в таких случаях (вполне обоснованно кстати) брюзжат: "Разбаловался народ совсем, вот бы на перфокарты пересадить обратно — сразу бы ловкость рук
появилась и бережливость в плане ресурсов выработалась на раз!" Вынужден согласиться — культуру работы с ресурсами (в ядре особенно) надо прививать смолоду, а то будут нестрашные советы от Анонима (с) с панталыку сбивать неопытных читателей.
В общем-то, согласен. Но... всё же от этого уже нужно уходить.
А>Давайте не будем о ламерах =) Это их проблемы
их проблемы потом становятся нашими. разгребать дампы от заказчиков с целью доказать что это не наш продукт порушил им систему приходится время от времени. или еще хуже делать фикс позволяющий работу с такими вот продуктами, потому что желание заказчика — закон и никого не парит кто там виноват в падениях и почему они вообще происходят. удовольствие ниже среднего, как правило.
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.