Сразу вопрос - ты свой пакер пишешь либо используешь какой-нибудь сторонний?
Если свой - то можно воровать первых 15-20 байт (в зависимости от инструкций), потом исполнять в секции распаковщика, а только потом возвращать управление в основную программу. В идеале разбор должна вести ВМ. Недостаток - нужно писать дизассемблер длин.
Если пакер сторонний, то можно перенести первых 30 команд в секцию распаковщика руками и подправить переход на OEP. Ну а чтобы враги не догадались разбавить команды мусором. Недостаток - невозможность автоматизации.
Как вариант использовать технологию CopyMem, что реализована в Armadillo. Суть ее в том, что происходить динамическая шифровка/дешифровка кода. Для этого используется DebugAPI.
Недостаток - медленннооо..
И еще.. Дамп можно снять в любом случае. Даже если в программе есть как-будто бы антидамповые технологии. Дамп можно снять при помощи функции ReadProcessMemory. А сколько байт считывать об этом скажет РЕ-заголовок.
Мой тебе совет - критические участки кода выполняй в виртуальной машине или используй скрипты. Есть очень хороший компонент FastScript 1.92 (скачать отсюда
http://www.fast-report.com/pbc_download/fsd7.exe
)
Если что пиши в личку.