Извлечение HTTPS-пакетов перед шифрованием
Скажем, у нас есть приложение Windows, которое отправляет некоторые пакеты по HTTPS. Нам нужно извлечь содержимое этих пакетов (конечно, в незашифрованном виде).
Нет никакого способа получить частный сертификат сервера, и атака MitM не работает (некоторая защита MitM используется этим приложением). Таким образом, расшифровка, кажется, со стола.
Единственный выбор (я полагаю) состоит в том, чтобы извлечь эти пакеты из приложения, прежде чем они будут зашифрованы. Приложение хорошо защищено, оно не зависит от DLL-библиотек OpenSSL. Тем не менее, у нас есть определенное ощущение, что он использует OpenSSL (но, статически связанный, может быть, исходный код OpenSSL даже был изменен до компиляции / компоновки).
Перехват вызова функций OpenSSL (например, ssl_write()) не прост, потому что исполняемый файл приложения упакован и запутан. Он также имеет защиту отладки, но отладчик-невидимка, который избегает этой защиты, уже найден. Итак, мы можем отладить это приложение. Тем не менее, код, как видно во время отладки, является полным беспорядком (запутанным). Даже системные DLL, загружаемые этим приложением, полностью запутаны. Вот пример того, как функция send() из WS2_32.dll выглядит во время отладки этого приложения: http://s2.postimg.org/pjzaipx0p/image.png Для справки, вот как это выглядит из обычного (незащищенный) application: http://s21.postimg.org/3kzntkn93/image.png Итак, очень трудно понять, как передаются аргументы функции, более того, похоже, что они могут передаваться разными способами (не уверен, но выглядит так по экспериментам по отладке).
Похоже, это довольно распространенная задача, поскольку существует много приложений Windows, которые используют HTTPS и статически связанные OpenSSL.
Надеюсь, у кого-то есть такой опыт и он может им поделиться.