Я не могу придумать ни одного эффективного решения, которое не предполагает внедрения кода в другой процесс (это, кстати, то, что делают многие типы хуков между прочим). Но если вы хотите пойти по этому пути, вы можете перехватывать вызовы MessageBox.
Потратьте некоторое время, чтобы перейти к вызову MessageBox в отладчике в режиме ассемблера, и вы увидите, что это косвенный вызов через таблицу поиска (так работает экспорт). так что если вы можете вставить свой код в процесс, вы можете вместо этого исправить таблицу, чтобы перейти к вашему коду.
См. http://www.codeproject.com/KB/threads/completeinject.aspx для кода, показывающего, как внедрить dll в другой процесс.