Ога, после обработки релоков там как раз будет первоначальный хэш,=)) дада, а ещё и криптор там постараецца. К вашему сведению есть крипторы, которые самостоятельно подсчитывают контрольные суммы, только правда толку от этова совсем нет(( И чо? Ждём загрузки модуля, снимаем дамп, смотрим чо надо патчить и делаем онлайн патч. Такие крипторы как ехекриптор летят на йух. Тогда уж лучче приватным протектором, типа wm prot, правда, чтобы приватный стал протектором, придёцца пару-тройку лет поизучать формат PE и работу виндовых лоадеров. Может быть чонить и родиш. Ну ничево, время есть)) Снимем. Пральна!!! Маладца!!!!
Если ты в контексте нужного процесса, просто берешь нужные участки памяти и считаешь от них MD5. Если в контексте другого - OpenProcess, ReadProcessMemory, а в остальном ничем не отличается от первого случая. Надо обратить внимание на то, что считать MD5 от всего образа программы в памяти не имеет смысла, тк у тебя скорее всего есть глобальные переменные, которые все время меняются и таблица импорта, состояние которой зависит по крайней мере от версии ОС. Лучше всего проверять контрольную сумму секции кода, притом лучше использовать что-то попроще, чем MD5, тк такая проверка все равно обходится модификацией от 4х до 10и байт.