Никто не сталкивался с проблемами при загрузке строковых ресурсов в EXE после обработки его VMProtect'ом?
Диалоги грузятся нормально, строки — нет.
Ресурсы русские и английские, задаю так:
До обработки VMP все работает, после — перестает. Поискал в проекте VMP какие-либо опции защиты ресурсов — что-то не нашел.
Строки загружаю при помощи LoadString. Проверяю ошибку — 1813 — ERROR_RESOURCE_TYPE_NOT_FOUND.
PS Глянул ResHacker'ом — в защищенном EXE нет ни диалогов, ни строковых ресурсов — куда VMP их прячет?.
M>До обработки VMP все работает, после — перестает. Поискал в проекте VMP какие-либо опции защиты ресурсов — что-то не нашел. M>PS Глянул ResHacker'ом — в защищенном EXE нет ни диалогов, ни строковых ресурсов — куда VMP их прячет?.
В какую нибудь дополнительную шифрованую секцию — все пакеры так делают, а при загрузке воссоздают ресурсную секцию, подозреваю что и криптеры тоже.
M>Строки загружаю при помощи LoadString. Проверяю ошибку — 1813 — ERROR_RESOURCE_TYPE_NOT_FOUND.
Можно предположить:
1. не все ресурсы запаковываются (или распаковываются при загрузке программы)
2. забыли подхачить LoadString
Здравствуйте, eskimo82, Вы писали:
M>>Строки загружаю при помощи LoadString. Проверяю ошибку — 1813 — ERROR_RESOURCE_TYPE_NOT_FOUND. E>Можно предположить: E>1. не все ресурсы запаковываются (или распаковываются при загрузке программы) E>2. забыли подхачить LoadString
Похоже на то. Вопрос — что с этим делать?
Частично пока разобрался. В expert mode можно выбрать детально опции защиты, в том числе и упаковку ресурсов. Что интересно, при защите DLL при максимально защите опция "Защищать ресурсы" выключена, и ее не изменить (поэтому я раньше и не столкнулся с этой проблемой), а при защите EXE эта опция активна, вот я и напоролся. Пока просто отключил защиту ресурсов, все заработало. Но хочется разобраться с этим вопросом.
Здравствуйте, Marty, Вы писали:
M> Никто не сталкивался с проблемами при загрузке строковых ресурсов в EXE после обработки его VMProtect'ом? M> Диалоги грузятся нормально, строки — нет.
Опция называется "Защита ресурсов". Если после обработки VMProtect-ом что-то работает не так как до обработки, то шли тестовый проект (оригинальный EXE+MAP+VMP файлы) на почту.
Здравствуйте, drVanо, Вы писали:
V>Опция называется "Защита ресурсов".
Да, с этим разобрался, отключил пока.
V>Если после обработки VMProtect-ом что-то работает не так как до обработки, то шли тестовый проект (оригинальный EXE+MAP+VMP файлы) на почту.
Отправил.
Здравствуйте, Marty, Вы писали:
M> Никто не сталкивался с проблемами при загрузке строковых ресурсов в EXE после обработки его VMProtect'ом? M> Диалоги грузятся нормально, строки — нет.
Вообщем, строковые ресурсы расположены в EXE, грузятся в EXE, но грузятся при помощи своей helper-функции, в которой вызывается LoadString и которая в DLL.
Пока нашел решение, которое, кстати, может использоваться и в других случаях. Что в нем удобно — когда надо загрузить несколько строк, они все сразу грузятся.
Суть идеи — создаем resource-only диалог, в нем — LTEXT'ы или другие контролы. В InitDialog перечисляем контролы (EnumChildWindows) и делаем EndDialog. На вход подается один большой буфер, в котором будут хранится строки, и адрес массива указателей на строки. В хэндлере EnumChildWindows получаем текст контролов через GetWindowText. Дополнительные плюсы, помимо того, что это работает с VMP — не надо заводить кучу строк (идентификаторы в хидере, строки в таблице строк). Еще плюс — экономим место на стеке — все строки идут плотненько одна за другой в буфере. Следующий плюс (может быть, правда, и минусом) — строки идут в заданном порядке, как в диалоге описаны. Из минусов — может работать несколько медленнее, чем просто загрузка строк (так как еще процедура диалога вызывается, и прочая), но если это для GUI (или однократно для последующего использования в критичной по времени части программы), то это не слишком принципиально.