Можно ли перехватывать DNS-запросы, используя LSP / SPI? - PullRequest
3 голосов
/ 30 ноября 2011

Я написал свой собственный LSP, который работает нормально. Тем не менее, я не могу поймать DNS-запросы. Например, нет такой функции, как WSPGetHostByName или WSPGetAddrInfo.

Мой lsp также поддерживает протокол UDP, но он не работает. Если я запускаю nslookup из консоли (cmd.exe), он кажется работающим, но я не могу поймать gethostbyname. Кто-нибудь знает как это сделать? Я не думаю, что написание NSP (Name Service Provider) - это решение. Но я могу ошибаться.

Спасибо

Ответы [ 2 ]

4 голосов
/ 30 ноября 2011

Мы разработали LSP, который может «перехватывать» DNS-запросы.Единственный способ сделать это - подключиться ко всем функциям DNS, имейте в виду, что вам нужно решить несколько проблем:

  1. Вам необходимо использовать хорошую библиотеку перехвата, которая будет поддерживать оба32-битный и 64-битный код.
  2. Лицензия на библиотеку должна быть подходящей для вашего приложения, есть несколько бесплатных библиотек, но ее можно свободно использовать только с бесплатными проектами.
  3. Когда вы подключаете функции, вынеобходимо убедиться, что вы не изменили некоторые значения, которые не основаны на IP, и отложите запрос до реальной функции.

Перехват UDP не будет работать, поскольку запросы исходят от клиента MS DNS, поэтому, если тольковы пишете драйвер низкого уровня, такой как: TDI, NDIS или WFP, вы должны подключить функции (или написать NSP).NSLookup работает для вас, потому что он сам создает DNS-запросы.

0 голосов
/ 05 января 2015

Мое решение будет следующим:

  1. Возьмите известный веб-браузер: firefox.exe

  2. скопируйте его под новым именем: icefoxy.exe

  3. изменить EXE, чтобы он загружал пользовательскую DLL.

Я уже делал это несколько месяцев назад, нопоскольку Firefox постоянно получает обновления, это означает:

ИЛИ: сохраняйте одну версию и не обновляйте (на свой страх и риск, это может вызвать проблемы с безопасностью, поскольку это означает, что уязвимости не будут исправлены)

ИЛИ: обновляйте свою модификацию каждый раз, когда изменяется firefox.exe.

DLL легко записывается с использованием Delphi.

Для модификации Firefox необходим язык ассемблера, если вы не знаете, как загрузить все необходимые файлы вСкомпилируйте Firefox самостоятельно, получите доступ к компилятору C / C ++ (вероятно, mingw-gcc) и будьте готовы к тому, что существует 2 взаимоисключающих стандарта C ++, и если ваш g ++ (часть набора gcc) несовместим с вашимFirefox source, тогда ваша попытка потерпит неудачу.

Я сам не эксперт C ++, поэтому я выбрал (по крайней мере для меня) более простой маршрут с использованием машинного языка, поэтому мне не нужно быть C/ C ++ Эксперт, чтобы выполнить работу.

Некоторые относительные моменты:

  1. Какие функции должны быть перехвачены, чтобы перехватить весь доступ Firefox к DNS-серверам?

  2. Я заметил, что если вы загружаете Delphi DLL в Icefoxy.exe (переименованная копия Firefox.exe), то цвета формы Delphi отсутствуют, например.если вы установите (либо в объекте ispector, либо в коде):

Label1.Color: = clLime;

, вы все равно увидите метку с ВНЕШНИМ фоновым цветом.Я не знаю точной причины, но кажется, что Delphi VCL полагается на использование в EXE, и когда вы используете компоненты Delphi VCL внутри DLL вместо EXE, некоторые вещи (например, цвет) не работают должным образом.

Я был бы рад опубликовать мой код (как модификации на ассемблере для Firefox, так и исходный код Delphi DLL), но как / где я могу опубликовать его, чтобы он был общедоступным?

Я использовал Delphi 7 для создания DLL.

если вы используете Delphi 2009 или более позднюю версию, вам нужно быть особенно внимательным, чтобы любые строковые данные, передаваемые между кодом Delphi и любым не-Delphi кодом, имели правильную кодировку,из-за того, что в Delphi 2009 и во всех более новых версиях тип String является псевдонимом unicodestring, а в более старых версиях Delphi тип String является псевдонимом AnsiString.

В то время, когда я это делал,это был всего лишь небольшой эксперимент, чтобы выяснить, могу ли я заставить Firefox загрузить собственную DLL-библиотеку в адресное пространство процесса.

Другая интересная идеяЧтобы получить доступ к DOM (объектной модели документов) Firefox из DLL-библиотеки Delphi, это даст рабочую альтернативу использованию TWebBrowser (на основе ActiveX-версии Microsoft Internet Explorer).

Я знаю, что былитакие компоненты, как TWebBrowser, основаны на Firefox, но их проблема в том, что никто не заботился об их обновлении в течение очень долгого времени, поэтому они совместимы только с какой-то очень устаревшей версией Firefox.

...