Создание файла-контейнера |
Здравствуйте, гость ( Вход | Регистрация )
Создание файла-контейнера |
11.01.2008 - 23:29
Вставить ник | Быстрая цитата | Сообщение
#1
|
|
Звезда форума Группа: Участник Сообщений: 1009 Регистрация: 26.04.2006 Пользователь №: 13250 |
Подскажите как написать программу для создания файлов-контейнеров. Суть программы в том что она считывает контент выбранного exe файла и генерирует другой exe, в котором данные первого будут храниться в виде текста. При запуске сгенерированного exe, контент из контейнера должен подгружаться в память и ему должен передаваться контроль.
Считывание и хранение - понятно, а вот как загрузить из контейнера напрямую в память и передать контроль, я разобраться не могу... Желательно на С++ Сообщение отредактировано Micro Ice - 11.01.2008 - 23:29 |
|
|
12.01.2008 - 13:10
Вставить ник | Быстрая цитата | Сообщение
#2
|
|
void* Группа: Участник Сообщений: 1631 Регистрация: 29.09.2003 Пользователь №: 45 |
ммм...
Простейший вариант - выгрузить хранимые данные на диск в виде .exe-файла, далее ::CreateProcess(). |
|
|
12.01.2008 - 13:45
Вставить ник | Быстрая цитата | Сообщение
#3
|
|
Unknown Группа: Модератор Сообщений: 405 Регистрация: 29.09.2003 Пользователь №: 74 |
Ох и гемор ты себе придумал =)
Вообщем так: 1. Выделяем память с помощью VirtualAlloc такого размера как сам экзешник который будем запускать 2. Ставим с помощью VirtualProtect флажок PAGE_EXECUTE_READWRITE 3. Заливаем содержимое экзешника по адресу полученному VirtualAlloc 4. а дальше я наткнулся на вот такую статью: правда на асме +) ]]>http://www.wasm.ru/article.php?article=memfile]]> Альтернатива пункту 4: 4*. выдернуть таблицу релокаций, и ко всем ссылкам прибавлять адрес который вернул VirtualAlloc, только нужно учитывать что ссылки могут быть 16-бит, 32-бит, 48-бит. 5*. находим точку входа (WinMain наверно в твоём случае?) берём адрес и вызываем по нему Удачи! |
|
|
Текстовая версия | Сейчас: 27.04.2024 - 00:19 |