Создание ресурса exe на лету
От: maks1180  
Дата: 27.07.20 01:29
Оценка:
Нужно создать динамически ресурс (диалог), и передать его функции DialogBoxParam. Ресурс не должен быть записан в exe.
Как можно это реализовать ?
===============================================
(реклама, удалена модератором)
Отредактировано 27.07.2020 1:31 maks1180 . Предыдущая версия . Еще …
Отредактировано 27.07.2020 1:30 maks1180 . Предыдущая версия .
Отредактировано 27.07.2020 1:30 maks1180 . Предыдущая версия .
Re: Создание ресурса exe на лету
От: FR  
Дата: 27.07.20 06:18
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Нужно создать динамически ресурс (диалог), и передать его функции DialogBoxParam. Ресурс не должен быть записан в exe.

M>Как можно это реализовать ?

DialogBoxIndirectParam не поможет?
Re[2]: Создание ресурса exe на лету
От: qaz77  
Дата: 27.07.20 08:33
Оценка:
Здравствуйте, FR, Вы писали:

FR>DialogBoxIndirectParam не поможет?


Она поможет.
Но тут основная сложность в формировании шаблона диалога в памяти для передачи этой функции.

Надо правильно посчитать размер буфера, который содержит заголовок ресурса (DLGTEMPLATE или DLGTEMPLATEEX),
меню, класс, текст заголовка, шрифт (при DS_SETFONT) и далее — контролы.
Муторно, но все описано в MSDN.

С контролами также: заголовок (DLGITEMTEMPLATE), класс, текст и данные, зависящие от типа.

Когда посчитали размер, то выделяем буфер и складываем в него все данные.
После вызываем DialogBoxIndirectParam.

Можно объединить расчет размера и заполнение буфера в одной функции.
Если передан нулевой указатель на буфер, то только считаем размер, иначе пишем данные в буфер.
Re[2]: Создание ресурса exe на лету
От: maks1180  
Дата: 27.07.20 10:23
Оценка:
FR>DialogBoxIndirectParam не поможет?

В моём случаи нет, так как для этого код нужно менять. Я хочу взять exe запаковать его в новый exe, при запуске которого распокавать старый exe в память и запустить его в текущем процессе.
Поэтому код не получиться поменять в exe.
===============================================
(реклама, удалена модератором)
Re[3]: Создание ресурса exe на лету
От: qaz77  
Дата: 27.07.20 12:10
Оценка:
Здравствуйте, maks1180, Вы писали:

FR>>DialogBoxIndirectParam не поможет?


M>В моём случаи нет, так как для этого код нужно менять. Я хочу взять exe запаковать его в новый exe, при запуске которого распокавать старый exe в память и запустить его в текущем процессе.

M>Поэтому код не получиться поменять в exe.

Это другой случай, понятно.
В исходном вопросе не стояло таких ограничений.

Самый простой путь кмк — это поставить хук на функцию DialogBoxParam.
Для этого надо подменить адрес в таблице импорта модуля exe из user32.dll вызовом WriteProcessMemory.

В своей функции DialogBoxParamHook смотреть на параметр lpTemplateName и вызывать, когда это тот диалог, который хотим заменить,
создавать шаблон в памяти и вызывать DialogBoxIndirectParam (вместо родной DialogBoxParam).
Re[4]: Создание ресурса exe на лету
От: maks1180  
Дата: 27.07.20 14:07
Оценка:
Q>Это другой случай, понятно.
Q>В исходном вопросе не стояло таких ограничений.

Q>Самый простой путь кмк — это поставить хук на функцию DialogBoxParam.

Q>Для этого надо подменить адрес в таблице импорта модуля exe из user32.dll вызовом WriteProcessMemory.

Q>В своей функции DialogBoxParamHook смотреть на параметр lpTemplateName и вызывать, когда это тот диалог, который хотим заменить,

Q>создавать шаблон в памяти и вызывать DialogBoxIndirectParam (вместо родной DialogBoxParam).

Это сложный путь. Есть опен сорт утилита UPX, она как то сжимает exe с ресурсами.
Причём далает она по другому так как в исходниках её я не нашёл DialogBoxParam, WriteProcessMemory, DialogBoxIndirectParam.
Как она это делает ?
===============================================
(реклама, удалена модератором)
Re[5]: Создание ресурса exe на лету
От: qaz77  
Дата: 27.07.20 14:12
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Это сложный путь. Есть опен сорт утилита UPX, она как то сжимает exe с ресурсами.

M>Причём далает она по другому так как в исходниках её я не нашёл DialogBoxParam, WriteProcessMemory, DialogBoxIndirectParam.
M>Как она это делает ?

Если exe можно курочить, то есть стандартный путь:
BeginUpdateResource — UpdateResource — EndUpdateResource.
Re[6]: Создание ресурса exe на лету
От: maks1180  
Дата: 27.07.20 15:36
Оценка:
Q>Если exe можно курочить, то есть стандартный путь:
Q>BeginUpdateResource — UpdateResource — EndUpdateResource.

нет,exe себя не может менять, так как он запущен.
===============================================
(реклама, удалена модератором)
Re: Создание ресурса exe на лету
От: SaZ  
Дата: 28.07.20 17:07
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Нужно создать динамически ресурс (диалог), и передать его функции DialogBoxParam. Ресурс не должен быть записан в exe.

M>Как можно это реализовать ?

Внешняя .dll с ресурсами и динамической перезагрузкой?
Re[5]: Создание ресурса exe на лету
От: FR  
Дата: 30.07.20 05:10
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Это сложный путь. Есть опен сорт утилита UPX, она как то сжимает exe с ресурсами.

M>Причём далает она по другому так как в исходниках её я не нашёл DialogBoxParam, WriteProcessMemory, DialogBoxIndirectParam.
M>Как она это делает ?

В подобных упаковщиках все просто, exe сжимается целиком, и добавляется как ресурс
или просто к концу специального загрузчика. Этот загрузчик загружает сжатый файл
разжимает его полностью в памяти и запускает.
Re[2]: Создание ресурса exe на лету
От: maks1180  
Дата: 04.08.20 13:02
Оценка:
SaZ>Внешняя .dll с ресурсами и динамической перезагрузкой?

нет, так не пойдёт
===============================================
(реклама, удалена модератором)
Re[6]: Создание ресурса exe на лету
От: maks1180  
Дата: 04.08.20 13:03
Оценка:
FR>В подобных упаковщиках все просто, exe сжимается целиком, и добавляется как ресурс
FR>или просто к концу специального загрузчика. Этот загрузчик загружает сжатый файл
FR>разжимает его полностью в памяти и запускает.

Как он ресурсы создаёт в памяти ?
===============================================
(реклама, удалена модератором)
Re[7]: Создание ресурса exe на лету
От: FR  
Дата: 05.08.20 04:02
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Как он ресурсы создаёт в памяти ?


Никак, он тупо восстанавливает, то есть разжимает образ exe в памяти, и потом используя
свой PE Loader запускает его. Упрощенное описание всего процесса есть например здесь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.