VMProtect и строковые ресурсы
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 21.01.14 19:26
Оценка:
Здравствуйте!

Никто не сталкивался с проблемами при загрузке строковых ресурсов в EXE после обработки его VMProtect'ом?
Диалоги грузятся нормально, строки — нет.
Ресурсы русские и английские, задаю так:

#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#include "apprc_en.rc"

#ifdef _WIN32
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
#pragma code_page(1251)
#endif //_WIN32
#include "apprc_ru.rc"


До обработки VMP все работает, после — перестает. Поискал в проекте VMP какие-либо опции защиты ресурсов — что-то не нашел.
Строки загружаю при помощи LoadString. Проверяю ошибку — 1813 — ERROR_RESOURCE_TYPE_NOT_FOUND.

PS Глянул ResHacker'ом — в защищенном EXE нет ни диалогов, ни строковых ресурсов — куда VMP их прячет?.
Маньяк Робокряк колесит по городу
Re: VMProtect и строковые ресурсы
От: eskimo82  
Дата: 21.01.14 20:54
Оценка:
M>До обработки VMP все работает, после — перестает. Поискал в проекте VMP какие-либо опции защиты ресурсов — что-то не нашел.
M>PS Глянул ResHacker'ом — в защищенном EXE нет ни диалогов, ни строковых ресурсов — куда VMP их прячет?.
В какую нибудь дополнительную шифрованую секцию — все пакеры так делают, а при загрузке воссоздают ресурсную секцию, подозреваю что и криптеры тоже.

M>Строки загружаю при помощи LoadString. Проверяю ошибку — 1813 — ERROR_RESOURCE_TYPE_NOT_FOUND.

Можно предположить:
1. не все ресурсы запаковываются (или распаковываются при загрузке программы)
2. забыли подхачить LoadString
Re[2]: VMProtect и строковые ресурсы
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 21.01.14 22:32
Оценка:
Здравствуйте, eskimo82, Вы писали:

M>>Строки загружаю при помощи LoadString. Проверяю ошибку — 1813 — ERROR_RESOURCE_TYPE_NOT_FOUND.

E>Можно предположить:
E>1. не все ресурсы запаковываются (или распаковываются при загрузке программы)
E>2. забыли подхачить LoadString

Похоже на то. Вопрос — что с этим делать?

Частично пока разобрался. В expert mode можно выбрать детально опции защиты, в том числе и упаковку ресурсов. Что интересно, при защите DLL при максимально защите опция "Защищать ресурсы" выключена, и ее не изменить (поэтому я раньше и не столкнулся с этой проблемой), а при защите EXE эта опция активна, вот я и напоролся. Пока просто отключил защиту ресурсов, все заработало. Но хочется разобраться с этим вопросом.
Маньяк Робокряк колесит по городу
Re: VMProtect и строковые ресурсы
От: drVanо Россия https://vmpsoft.com
Дата: 22.01.14 06:38
Оценка:
Здравствуйте, Marty, Вы писали:

M> Никто не сталкивался с проблемами при загрузке строковых ресурсов в EXE после обработки его VMProtect'ом?

M> Диалоги грузятся нормально, строки — нет.

Опция называется "Защита ресурсов". Если после обработки VMProtect-ом что-то работает не так как до обработки, то шли тестовый проект (оригинальный EXE+MAP+VMP файлы) на почту.
Re[2]: VMProtect и строковые ресурсы
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 22.01.14 13:07
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Опция называется "Защита ресурсов".

Да, с этим разобрался, отключил пока.

V>Если после обработки VMProtect-ом что-то работает не так как до обработки, то шли тестовый проект (оригинальный EXE+MAP+VMP файлы) на почту.

Отправил.
Маньяк Робокряк колесит по городу
Re: VMProtect и строковые ресурсы
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 27.01.14 13:39
Оценка:
Здравствуйте, Marty, Вы писали:

M> Никто не сталкивался с проблемами при загрузке строковых ресурсов в EXE после обработки его VMProtect'ом?

M> Диалоги грузятся нормально, строки — нет.

Вообщем, строковые ресурсы расположены в EXE, грузятся в EXE, но грузятся при помощи своей helper-функции, в которой вызывается LoadString и которая в DLL.

Пока нашел решение, которое, кстати, может использоваться и в других случаях. Что в нем удобно — когда надо загрузить несколько строк, они все сразу грузятся.
Суть идеи — создаем resource-only диалог, в нем — LTEXT'ы или другие контролы. В InitDialog перечисляем контролы (EnumChildWindows) и делаем EndDialog. На вход подается один большой буфер, в котором будут хранится строки, и адрес массива указателей на строки. В хэндлере EnumChildWindows получаем текст контролов через GetWindowText. Дополнительные плюсы, помимо того, что это работает с VMP — не надо заводить кучу строк (идентификаторы в хидере, строки в таблице строк). Еще плюс — экономим место на стеке — все строки идут плотненько одна за другой в буфере. Следующий плюс (может быть, правда, и минусом) — строки идут в заданном порядке, как в диалоге описаны. Из минусов — может работать несколько медленнее, чем просто загрузка строк (так как еще процедура диалога вызывается, и прочая), но если это для GUI (или однократно для последующего использования в критичной по времени части программы), то это не слишком принципиально.

Добавил в VMPKit
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.