Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: В каком месте втсавить криптоалгоритм в PASSTHRU?  (Прочитано 6146 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sysh
Гость
« : 15-12-2006 10:19 » 

Доброго всем времени суток.

С принципом работы IM драйвера passthru вроде разобрался. Но вот только не пойму, в какой момент уже можно преобразовывать данные(!) пакета MyPacket (насколько я понял они содержаться в цепочке буфферов) в функциях MpSend, MpSendPakets, PtReceive, PtReceivePacket?
А именно:
Там происходит следующее (для PtReceive)
MyPacket->Private.Head = Packet->Private.Head;
MyPacket->Private.Tail = Packet->Private.Tail;
далее идёт присвоение флагов пакетов и т.д.

Насколько я понял криптографию (например) нужно применять именно после
MyPacket->Private.Head = Packet->Private.Head;
MyPacket->Private.Tail = Packet->Private.Tail;

Знающие люди, поправьте пожалуйста если я что не так понимаю.
И еще вопросик: нужно ли при этом пересчитывать контрольные суммы? Не понял

Заранее всем благоларен.
Записан
aks68
Модератор

il
Offline Offline
Пол: Мужской

« Ответ #1 : 17-12-2006 17:17 » 

Доброго всем времени суток.

С принципом работы IM драйвера passthru вроде разобрался. Но вот только не пойму, в какой момент уже можно преобразовывать данные(!) пакета MyPacket (насколько я понял они содержаться в цепочке буфферов) в функциях MpSend, MpSendPakets, PtReceive, PtReceivePacket?
А именно:
Там происходит следующее (для PtReceive)
MyPacket->Private.Head = Packet->Private.Head;
MyPacket->Private.Tail = Packet->Private.Tail;
далее идёт присвоение флагов пакетов и т.д.

Насколько я понял криптографию (например) нужно применять именно после
MyPacket->Private.Head = Packet->Private.Head;
MyPacket->Private.Tail = Packet->Private.Tail;

Знающие люди, поправьте пожалуйста если я что не так понимаю.
И еще вопросик: нужно ли при этом пересчитывать контрольные суммы? Не понял

Заранее всем благоларен.

Здравствуйте.

Данные можно преобразовывать в тот момент, когда они получены  Ага  ,т.е, как Вы правильно отметили, в функциях MpSend, MpSendPakets, PtReceive, PtReceivePacket. Однако я не советовал-бы работать с представлением в форме NDIS_PACKET, а перегнал-бы весь пакет в буфер и там уже его криптовал-раскриптовывал.

Как это делать описанно в https://forum.shelek.ru/index.php/topic,7748.msg132341.html#msg132341

После изменения пакета (в буфере) ему надо пересчитать checksum.

Ваша тема значительно совпадает с темой "NDIS InterMediate Driver - Обсуждение", поэтому в скором времени я ее присоеденю туда.

С уважением,
Акс.
Записан
sysh
Гость
« Ответ #2 : 19-12-2006 13:34 » 

Спасибо за ответ. Улыбаюсь

Тему "NDIS InterMediate Driver - Обсуждение" я прочёл не один раз и видел исходник по чтению данных из NDIS_PACKET в буфер. Но если действовать этим способом, то, скопировав данные в буфер и преобразовав буфер в целом, потребуется обратно раскидывать этот буфер по цепочке буферов принятого (и скопированного) пакета.  Внимание! Говорит и показывает...

Мне показалось, что легче преобразовывать каждый буфер из цепочки. Или я не прав?  Скромно так...

А что касается CRC, то какую именно сумму нужно пересчитывать если меняешь только данные (ту что в заголовке?)?

И всё же если преобразовывать MyPacket, то это нужно делать непосредственно перед отправкой выше/ниже или где-то ранее?  :Улыбаюсь

                                                                             Заранее благодарю за информацию.
Записан
aks68
Модератор

il
Offline Offline
Пол: Мужской

« Ответ #3 : 21-12-2006 12:47 » 

Здравствуйте!

Цитата
Мне показалось, что легче преобразовывать каждый буфер из цепочки.

Можно, если алгоритм шифрования позволяет. Однако при этом данне все равно изменятся и их придется перепаковывать (в новые буферы). Не забудьте, что заголовки IP и (TCP/UDP)  - тоже часть данных, и если Вы не реализуете VPN, то шифровать их ненадо. ARP-пакеты наверное тоже шифровать ненадо.

Цитата
А что касается CRC, то какую именно сумму нужно пересчитывать если меняешь только данные (ту что в заголовке?)?

Суммы всех незашифрованных заголовков пакета.

Цитата
И всё же если преобразовывать MyPacket, то это нужно делать непосредственно перед отправкой выше/ниже или где-то ранее?


В случае если не шифровались IP/port ( все тот-же преславутый VPN) шифровать отправляемые данные Вы можете там, где хотите (хоть в user mode), непонятно зачем это надо делать именно внутри NDIS. Если все-же делать это в NDIS, то надо делать в том месте, где происходит перенос данных из пришедшего NDIS пакета (в случае inbound от miniport, а в случае outbound  от protocol) в NDIS_PACKET аллокированный  IM-драйвером.

С уважением,
Акс.

PS: Извините за телеграфный стиль - сейчас нет времени отвечать подробнее.
Записан
sysh
Гость
« Ответ #4 : 25-12-2006 13:14 » 

Спасибо за ответы!
Вроде более или менее разобрался.
Буду пробовать...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines