С++. Создание PE-файла.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by hiddenvi, 5 Jun 2009.

  1. hiddenvi

    hiddenvi New Member

    Joined:
    7 Feb 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Как просто записать текст в файл ясно, а как создать, PE-файл?
    Например, имеется hello_world.exe на 1.5 кб размером. Нужно написать программу на С++, которая бы просто создавала такой файл. Т.е нужно как-то преобразовать для начала этот хелло_ворлд.ехе в текстовый вид, затем внести этот текст в исходный код приложения которое пишем - типа того, наверное.
    Хранение файла в ресурсах не предлагать - это я знаю. Нужно узнать как без использования ресурсов, а просто записью в файл.
    Заранее спасибо.
     
  2. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    Насколько мне известно, преобразовать бинарник в текст будет мягко говоря проблематично...
     
  3. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    PE-файл - можно сказать является тоже текстовым файлов, в котором все расположено по определенным смещениям и который парсит PE-загрузщик Windows, затем исполняет, была встречал пару статей по созданию руками PE-файла, в упаковщиках в последний раз 1 ссылка на статью есть
     
  4. hiddenvi

    hiddenvi New Member

    Joined:
    7 Feb 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Мне лишь нужно, имея, определенный ехе-файл накодить программу, которая будет его создавать, при этом вариант с хранением его в ресурсах не катит, но, думаю, что катит любой другой вариант.
    Я лишь предположил какой вариант может быть.
    :confused:
     
  5. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    шифруй base64, потом декодируй, если я тебя правильно понял
     
  6. hiddenvi

    hiddenvi New Member

    Joined:
    7 Feb 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Возможно, Вы меня правильно поняли, но я Вас не понял. :)
     
  7. NorB

    NorB Elder - Старейшина

    Joined:
    20 Jul 2007
    Messages:
    109
    Likes Received:
    12
    Reputations:
    -2
    лолы
     
  8. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    смотри гугл по словам base64. Когда найдёшь что-нибудь - шифруй свой exe base64 - получишь текст из нормальных печатаемых символов. В проге своей пишешь строку эту, делаешь от неё decode и пишешь в файл
     
  9. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    в винхексе есть возможность представить хекс-код в виде массива на С. То есть открываешь свой хелловорлд в WinHex и экспортируешь его в виде массива в программу, которая должна этот хелловорлд как бы создать
     
    #9 bons, 5 Jun 2009
    Last edited: 5 Jun 2009
  10. NorB

    NorB Elder - Старейшина

    Joined:
    20 Jul 2007
    Messages:
    109
    Likes Received:
    12
    Reputations:
    -2
    ЫЫы канеша да и она создаст программу%)
    киньте пример уже рас пишите такое...
     
  11. hiddenvi

    hiddenvi New Member

    Joined:
    7 Feb 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    что-то не нашел там такого. где искать?
     
  12. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    в WinHex:
    1. Жмешь Ctrl+A чтобы выделить все
    2. Меню Edit -> Copy Block -> C Source
    3. В буфере обмена будет массив на С.
     
  13. hiddenvi

    hiddenvi New Member

    Joined:
    7 Feb 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Все получилось. Это именно то, что я хотел. Благодарю!
     
  14. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    hiddenvi и зачем? o_O
     
    _________________________
  15. x0man

    x0man Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    33
    Likes Received:
    13
    Reputations:
    0
    Gar|k
    джоинер делает, палюбас :)))
     
  16. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Теоретически тут нет никакой проблемы.
    Достаточно иметь в руках четыре дока.
    1) структура MZ стаба. Он может быть и 64 байта. так что не важно особо.
    Темболее нам понадобиться тока 2 поля. - magic - сама сигнатура MZ
    и поля - 3Ch - оффсет на PE заголовок. Тут очень просто делается.
    2) структура PE header - тут придется попотеть и всётаки заполнить все поля структуры. Геморно, но быстро реализуемо.
    3) структура таблицы импорта. тут она понадобиться потому как будешь юзать MessageBoxA из user32.dll ну и другие нужные функции.
    Мороки с импортом тоже не очень много.
    4) таблица опкодов. С её помошью ты можеш создавать уже код проги.
    Для теста, там опокодо в особо не много.
    всего 3
    push число
    call [адрес]
    ret
    так что 3 опкода для messagebox хватит.
     
    1 person likes this.
  17. x0man

    x0man Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    33
    Likes Received:
    13
    Reputations:
    0
    slesh
    Бгг, теоритически, проблем никогда не бывает...
    А на практике далеко не так как в теории...
    это ни для кого не секрет...
     
  18. metaldisc

    metaldisc Banned

    Joined:
    6 Aug 2008
    Messages:
    9
    Likes Received:
    1
    Reputations:
    0
    http://www.wasm.ru/print.php?article=win32appbyhand_en