Если посмотреть на блок-цепи с шестнадцатеричным редактором он появляется в начале каждого блока, я считаю. Я смотрю на BOOL LoadExternalBlockFile (FILE * fileIn) и BOOL ProcessMessages (CNode * pfrom) в main.cpp, чтобы увидеть, если неожиданный экземпляр pchMessageStart может вызвать проблемы.
Не похоже, нет.
В LoadExternalBlockFile, наиболее очевидным образом испортить его покрывается кодом уже. И таким образом, чтобы испортить его, чтобы попытаться получить анализатор, чтобы пропустить правильный блок, поставив в поддельном магическом числе и значении размера, которые сделали бы его пропустить начало реального блока следующим образом. Но код уже достаточно умен, чтобы избежать этой проблемы лишь опережения НССА, если он находит правильный блок. Если он не находит правильный блок, он пропускает только мимо несколько байт поддельного магического числа.
Это имеет смысл только, когда анализатор находится в "ищет в начале следующего блока" государство. Магическое число не имеет никакого специального значения внутри блока, и так как это только 32 бита, я думаю, что есть хорошие шансы, что некоторое количество блоков включает эту последовательность по случайности уже.
Следует также отметить, что загрузка внешних блоков файлов не является обычным делом. Люди не должны нагружать блокировать файлы из ненадежных источников, в первую очередь. Если кто-то имеет возможность изменить свой файл блока, вы, вероятно, имеют гораздо большие проблемы уже.
В ProcessMessage, контекст представляет собой сообщение, а не поток, так что синтаксический анализатор не должен быть умным. Он по-прежнему отмечают сверстникам отправки фиктивных сообщений блоков, как плохое поведение и в конечном итоге отключить и запретить их.