Нужен загрузчик EXE файлов.

Тема в разделе "WASM.RESEARCH", создана пользователем alix, 27 окт 2004.

  1. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    В ресурсы своей проги я прошил чужой EXE файл. И в

    определенные моменты, мне нужно запускать его из

    памяти без сохранения на диск. Может у кого нибудь

    есть EXE лоадер в виде DLL ?

    Лоадер должен получать указатель на первый байт

    загруженного EXE, и запускать его из массива или

    переменной не сохраняя на диск.
     
  2. khv_test

    khv_test New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    135
    вот вроде что хотел..

    29a-7_full_edition\Binaries\yoda\INCONEX

    е-зин бери на h††p://vx.netlux.org/

    ---------------------------------------------------------

    InConEx - executing PE files in the own process memory context

    --------------------------------------------------------------

    by yoda





    This program tries to load a target PE image into some memory in its

    own memory context and execute it there.

    Only PE files can be executed that have RelocationInformation included.

    The ImportTable is initialized, the Relocation items are applyed to the

    image and at the end also the windows internal stuff is adjusted, i.e.

    fixing calling process module information (ImageBase, ImageSize, module

    path, command line, current directory).



    The built virtual module image is executed in an own thread, so the

    server gets back execution control after the client thread terminates.



    To avoid that the client applications will terminate the whole process

    on the end of its execution, we simply hook the ExitProcess API. Every

    process has to use this API to finish its execution, also if it's

    not visible in the ImportTable because it's called by stubs (MFC, VB,

    .NET, MSVCRT,...).



    InConEx basically supports 9x and NT based operation systems but it

    doesn't work on 9x as good as on NT. E.g. on 9x the DialogBoxParam calls

    fail :dntknw:
     
  3. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    На vx.netlux.org не нашел InConEx :dntknw:((

    Если он у тебя есть, пришли пожалйста на alx_ps@mail.ru
     
  4. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    Нашел InConEx сейчас буду смотреть..

    Но там вроде PE загрузчик не в виде DLL
     
  5. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    Только не забудь что "пришитый" ехе надо грузить в память по нужному ему адресу, иначе потребуются релоки. И еще надо будет фиксить PEB, чтобы GetModuleHandle() возвращала нужный адрес, а не твой host. Ну и еще куча всего остального =)
     
  6. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    Посмотрел код лоадера InConEx, к сожалению он не подходит

    к моей задаче. Мне нужно запускать EXE из памяти, а не с

    диска. Вообще, я не понимаю смысла этого исходника, зачем

    так извратился товарисщ yoda? Хотел показать, что может

    написать аналог виндосовского загрузчика, который может

    запускать экзешники с диска? Так я тоже это умею, и

    мне только одна API функция понадобится - CreateProcess.

    Короче, не спасет InConEx отцов русской демократии... :dntknw:
     
  7. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    Приложил PE лоадер в виде DLL. К сожалению он запускает

    только EXE с релоками. Фиксит GetModuleHandle, ресурсы у EXE не теряет...

    Написан на PowerBASIC for Windows. Короче в примере запустите

    START.BAT и все поймете





    А мне надо запустить, VB экзешник в нем нет секции .rloc ! :dntknw:

    Если у кого-нибудь есть лоадер который может запускать экзешник

    без релоков,заверните его в DLL и выложите сюда пожалуйста,

    очень нужно...





    [​IMG] _1470862357__loader.zip
     
  8. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    Чтобы запустить .exe без релоков, он должен грузиться по iamgebase. Так что тебе наверное придется поменять imagebase у своего .exe(того, который будет "родителем")
     
  9. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    to ssx:



    Можно поменять iamgebase в уже откомпилированном EXE?

    Просто не каждый компилятор при сборке EXE позволяет указывать iamgebase
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    alix




    А какой у тебя компилятор и линковщик?
     
  11. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    Компилятор VB6, линкер стандартный от MS Visual Studio 6
     
  12. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    линкер от vs позволяет задать imagebase - /BASE
     
  13. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    Попробовал заменит BASE с 40000 на 10000 при старте проги получил GPF. Какой диапазон можно указывать в BASE?
     
  14. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Из Рихтера:



    "Базовый адрес, но которому загружается приложение, определяется компоновщиком. Разные компоновщики выбирают и разные (no умолчанию) базовые адреса. Ком поновщик Visual С++ использует по умолчанию базовый адрес 0x00400000 — самый нижний в Windows 98, начиная с которого в ней допускается загрузка образа испол няемого файла. Указав параметр /BASE: адрес (в случае компоновщика от Microsoft), можно изменить базовый адрес, по которому будет загружаться приложение.



    При попытке загрузить исполняемый файл в Windows 98 по базовому адресу ниже 0x00400000 загрузчик переместит его на другой адрес. Это увеличит время загрузки приложения, но оно по крайней мере будет выполнено. Если Вы разрабатываете программы и для Windows 98, и для Windows 2000, сделайте так, чтобы приложение загружалось по базовому адресу не ниже 0x00400000."



    Смотри в отладчике, что не так
     
  15. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    ImageBase нельзя менять в экзешнике тк все обрящения к памяти идут не по относительным адресам, а по абсолютным (это в случае отсутствия релоков).

    Единственный выход - писать базонезависимый код.
     
  16. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    Отставить единственный. Моча в голову ударила - придумал другой способ. Запустить любой процесс (типа Calc.exe) c флагом CREATE_SUSPENDED, потом сделать WriteProcessMemory, те скопировать нужный кусок в чужой процесс и потом продолжить выполнение. В принципе должно работать, только надо не забыть поставить права доступа на страницы в чужом процессе PAGE_EXECUTE_READWRITE
     
  17. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    Отставить единственный. Моча в голову ударила - придумал другой способ. Запустить любой процесс (типа Calc.exe) c флагом CREATE_SUSPENDED, потом сделать WriteProcessMemory, те скопировать нужный кусок в чужой процесс и потом продолжить выполнение. В принципе должно работать, только надо не забыть поставить права доступа на страницы в чужом процессе PAGE_EXECUTE_READWRITE
     
  18. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    alix




    Всё там нормально работает с BASE 10000, на w2k так точно (w98 у меня нету)

    Vb оказывается ещё и ассемблерные листинги может генерить

    [​IMG] _1046699318__loader.zip
     
  19. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    to bogrus:



    Спасибо.. А как VB может использовать ассемблер?
     
  20. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    to Turkish:



    А примеры копирования кода в чужой процесс есть?