Сначала небольшое объяснение того, что я пытаюсь сделать. Я пишу приложение на Java (1.7), которое будет пытаться «запихивать» XML-сообщения, отправленные через ActiveMQ, используя формат OpenWire от производителя к целевому потребителю. Цель состоит в том, чтобы оценить, как цель реагирует на нечеткие сообщения, отправленные ей. Я использую ActiveMQ версии 5.12.1 в Linux CentOS 6.6.
Существует схема XML, которая определяет типы сообщений, которые будут отправлены. У меня есть отдельные программы, которые генерируют примеры экземпляров этих сообщений и идентифицируют, где информация находится в отправленном формате (в данном случае OpenWire). Эта информация будет использоваться в процессе фаззинга для определения местоположения данных, которые нужно изменить.
Часть процесса фаззинга включает захват сообщения проводного формата с провода, внесение изменений и пересылку измененного сообщения на цель. Мне удалось успешно изменить данные и отправить их вперед, если я изменил только содержимое, а не длину. Если изменение приводит к изменению длины, подключение к серверу ActiveMQ закрывается и происходит сбой программы.
Исследования показывают, что все сообщения OpenWire начинаются с 4-байтового целого числа, представляющего длину следующих данных сообщения. Я изменил свой код, чтобы скорректировать эту длину, чтобы отразить изменение, внесенное в данные испытаний. Это не сработало. После еще одного исследования я обнаружил, что просто изменить поле длины было неправильно, но неясно, что нужно (или можно) сделать.
У меня сложилось сильное впечатление, что лучшее, что можно сделать, - это использовать API ActiveMQ, чтобы перенастроить измененные данные сообщения и перенаправить их на цель. Я понятия не имею, доступна ли мне эта опция.
Я попытался найти информацию, которая поможет мне определить структуру сообщений OpenWire, чтобы я мог знать, что мне нужно делать при изменении сообщения. Я начал смотреть на javadocs ActiveMQ и нашел пакеты openwire. Возможно, я смогу использовать их для внесения необходимых изменений и их успешной пересылки через ActiveMQ и получения цели.
Существует ли какая-либо документация или пример кода, в котором содержатся инструкции или примеры того, как правильно использовать этот API для выполнения того, что мне нужно? Исходя из того, что я описал, возможно ли это с помощью API? Любая помощь будет оценена. Спасибо.