Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Перехват функции SSL


Автор: lollollollol 23.4.2013, 16:26
Здравствуйте, выполняю перехват функции send в моём приложении.
В программе есть компонент WebBrowser. 
При переходе на сайты http перехват работает идеально, а вот при попытке поймать данные отправляемые на https получаю крякозябры.
Верояно причина в ssl шифровании данных. 
Я хочу перехватить функцию шифрования данныых, с целью получения не зашифрованной информации которую отправляет программа.

Помогите разобраться, какую функцию следует перехватывать?

Автор: lollollollol 23.4.2013, 21:02
Попытался изучить synapsовский ssl_openssl, и как я понял там используется SSL_write из libssl.dll, но это не то.

А как можно отловаить/узнать список вызываемых api функций в конкретный момент работы программы? 

Автор: Чучмек 23.4.2013, 21:45
Цитата(lollollollol @  23.4.2013,  21:02 Найти цитируемый пост)
А как можно отловаить/узнать список вызываемых api функций в конкретный момент работы программы?  

Перехватить все используемые программой функции.

Добавлено через 1 минуту и 35 секунд
Или используй отладчик.

Автор: lollollollol 24.4.2013, 04:03
Цитата

Или используй отладчик.

Ну я так тоже пдумал, в OllyDbg есть окно со стеком вызовов, но при переходе на https ничего кроме создания потоков и разрушения потока не ловится (как и при переходе на http)
Код

New thread 52. (ID 00000D54) created
New thread 53. (ID 000017C3) created
Thread 52. (ID 00000D54) terminated, exit code 0
Thread 53. (ID 000017C8) terminated, exit code 0


Хотя при выполнении других операций видно что OllyDbg показывает какие функции вызываются.

Такое впечатление что ssl шифрование выполняется глубже. 
Вообще моя задача получить httpS данные отправляемые на сервер до того как они будут зашифрованы в по ssl, подскажите в какую сторону копать


Автор: lollollollol 25.4.2013, 04:11
А если отловить коннект на 443 порт и перенаправить трафик на мой прокси (127.0.0.1:port) он будет шифроваться?

Автор: Illusion Dolphin 25.4.2013, 09:02
Цитата

А если отловить коннект на 443 порт и перенаправить трафик на мой прокси (127.0.0.1:port) он будет шифроваться? 

Да, при этом вы можете эмулировать работу прокси-сервера, при этом это будет выглядеть как атака типа man-in-the-middle на ssl соединение. Но переххват данных через сплайсинг, я думаю, будет проще. 

Автор: lollollollol 25.4.2013, 09:39
Эх, а ведь мне нужно только получить трафик который отправляется, не нужно ничего изменять в нём, и даже не нужен ответ.
А какие функции осуществляют шифрование? Я не смог понять/найти этой информации. 

Ведь если я правильно понимаю я могу перехватить функцию шифрования, прочитать данные и всё, никаких проблем.
Помогите разобраться с вопросом

Добавлено через 14 минут и 14 секунд
А как это делает http analyzer например?

Автор: Illusion Dolphin 25.4.2013, 13:15
Цитата

А как это делает http analyzer например? 

Тут я не в курсе как оно там работает, но fiddler делал так для мониторинга траффика.

Цитата

А какие функции осуществляют шифрование

Я думаю что тут это может быть зависимо от программы. Если оно использует libssl.dll, то тогда надо происследовать, что из неё вызывается, возможно доки по ней глянуть будет очень кстати на первом этапе. Посмотрите таблицу экспорта в этой библиотеке, поставьте хуки на нужные функции. Только не забудьте что эта библиотека грузится скорее всего динамически и при перехвате надо ловить момент подгрузки библиотеки и поиска в ней функций для подмены.

Автор: lollollollol 25.4.2013, 13:19
Как ни странно ниодной dll где встречается ssl приложение не использует. Я читал про эти длл.
Вот попробуй на форму кинуть веббраузер, и сделать navigate на https://mail.ru например. 

Потом ollydbg использую чтобы смотреть дллки испоьзуемые, ничего такого нет.

Автор: Illusion Dolphin 25.4.2013, 15:24
Цитата

 на форму кинуть веббраузер

В таком случае используется IE который установлен в системе, а он использует свои длл, а не libssl.dll

Автор: lollollollol 25.4.2013, 15:27
я думаю он вообще без вызова функций из длл шифрует, иначе дебагер бы отловил их. А я думал это какой-то стандартной api делается.

Есть идеи как поймать трафик до шифрования?

Автор: Illusion Dolphin 26.4.2013, 13:31
Цитата

я думаю он вообще без вызова функций из длл шифрует

Весь IE это по сути набор разных dll. Проблема в том что их имена и структура не является публичной и может меняться компанией. В данном случае наиболее общее решение - сделать прокси с атакой man-in-the-middle, но браузер при определённых настройках может отказаться отображать сайты по https т.к. бузопасность соединения будет отсутствовать. Можно пытаться лазить в глубины IE, но это исследовательская задача и я не думаю, что тут будет какое-то общее решение.

Автор: lollollollol 26.4.2013, 16:13
Скажу прямо, для самообразования хочу сделать некое подобие снифера, программа с веббраузером эт лишь как вариант, для тестов. Вообще требуется снифать в любом процессе. Прокси не очень удобно в этом случае. Очень много сниферов, например http analyzer и другие бз проблем это делают, не используя драйверов. Вопрос в том Как лучьше это реализовать? Безопасность соединения не должна страдать, как в случае с атакой man-in-the-middle.


http analyzer работает лишь при запущеном процессе-сервисе, вот бы за ним понаблюдать с помощью oledbg, но ведь он как системный сервис работает. Может кто знает как ssl трафик увидеть?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)