Просмотр полной версии : С++. Создание PE-файла.
hiddenvi
05.06.2009, 22:52
Как просто записать текст в файл ясно, а как создать, PE-файл?
Например, имеется hello_world.exe на 1.5 кб размером. Нужно написать программу на С++, которая бы просто создавала такой файл. Т.е нужно как-то преобразовать для начала этот хелло_ворлд.ехе в текстовый вид, затем внести этот текст в исходный код приложения которое пишем - типа того, наверное.
Хранение файла в ресурсах не предлагать - это я знаю. Нужно узнать как без использования ресурсов, а просто записью в файл.
Заранее спасибо.
Насколько мне известно, преобразовать бинарник в текст будет мягко говоря проблематично...
0verbreaK
05.06.2009, 23:27
PE-файл - можно сказать является тоже текстовым файлов, в котором все расположено по определенным смещениям и который парсит PE-загрузщик Windows, затем исполняет, была встречал пару статей по созданию руками PE-файла, в упаковщиках в последний раз 1 ссылка на статью есть
hiddenvi
05.06.2009, 23:31
преобразовать бинарник в текст будет мягко говоря проблематично...
Мне лишь нужно, имея, определенный ехе-файл накодить программу, которая будет его создавать, при этом вариант с хранением его в ресурсах не катит, но, думаю, что катит любой другой вариант.
Я лишь предположил какой вариант может быть.
:confused:
шифруй base64, потом декодируй, если я тебя правильно понял
hiddenvi
05.06.2009, 23:33
Возможно, Вы меня правильно поняли, но я Вас не понял. :)
смотри гугл по словам base64. Когда найдёшь что-нибудь - шифруй свой exe base64 - получишь текст из нормальных печатаемых символов. В проге своей пишешь строку эту, делаешь от неё decode и пишешь в файл
в винхексе есть возможность представить хекс-код в виде массива на С. То есть открываешь свой хелловорлд в WinHex и экспортируешь его в виде массива в программу, которая должна этот хелловорлд как бы создать
ЫЫы канеша да и она создаст программу%)
киньте пример уже рас пишите такое...
hiddenvi
05.06.2009, 23:52
что-то не нашел там такого. где искать?
в WinHex:
1. Жмешь Ctrl+A чтобы выделить все
2. Меню Edit -> Copy Block -> C Source
3. В буфере обмена будет массив на С.
hiddenvi
06.06.2009, 00:23
в WinHex:
1. Жмешь Ctrl+A чтобы выделить все
2. Меню Edit -> Copy Block -> C Source
3. В буфере обмена будет массив на С.
Все получилось. Это именно то, что я хотел. Благодарю!
Gar|k
джоинер делает, палюбас :)))
Теоретически тут нет никакой проблемы.
Достаточно иметь в руках четыре дока.
1) структура MZ стаба. Он может быть и 64 байта. так что не важно особо.
Темболее нам понадобиться тока 2 поля. - magic - сама сигнатура MZ
и поля - 3Ch - оффсет на PE заголовок. Тут очень просто делается.
2) структура PE header - тут придется попотеть и всётаки заполнить все поля структуры. Геморно, но быстро реализуемо.
3) структура таблицы импорта. тут она понадобиться потому как будешь юзать MessageBoxA из user32.dll ну и другие нужные функции.
Мороки с импортом тоже не очень много.
4) таблица опкодов. С её помошью ты можеш создавать уже код проги.
Для теста, там опокодо в особо не много.
всего 3
push число
call [адрес]
ret
так что 3 опкода для messagebox хватит.
slesh
Бгг, теоритически, проблем никогда не бывает...
А на практике далеко не так как в теории...
это ни для кого не секрет...
metaldisc
09.06.2009, 18:23
http://www.wasm.ru/print.php?article=win32appbyhand_en
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot