Системные библиотеки типа GDI32.DLL загружаются в память при запуске Windows, поскольку они обеспечивают основные функции ОС Windows (в данном случае, графические функции). Некоторые библиотеки DLL построены с фиксированной базой изображений (подозреваем, что это относится к наиболее важным системным библиотекам, например, KERNEL32, GDI32.DLL, USER32.DLL), и копирование и переименование библиотек этого типа и ссылки на них не будут работать, не без изменения их базы изображений в PE заголовок.
Это происходит потому, что они попытаются загрузить себя в память, указанную ImageBase, и потерпят неудачу, поскольку конкретное место в памяти уже занято исходной DLL, уже находящейся в памяти, и их фиксированная ImageBase предотвращает их загрузку в альтернативных местах памяти. Библиотеки DLL без фиксированной ImageBase будут перемещены Windows, чтобы использовать другую область памяти и работать без проблем.
Если ImageBase копии DLL изменяется на другое значение, библиотеки DLL с фиксированной ImageBase будут работать должным образом при условии, что область памяти, указанная в ImageBase, не занята.
Несмотря на то, что я успешно протестировал этот подход на копии Блокнота, а затем изменил импортированные имена DLL и базы изображений копий DLL в Windows XP, я СИЛЬНО ДИСКУРЖ эта игра с импортом и вмешательством системы Windows DLL в этом ключе.