На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> exe и dll отличие , как из exe сделать dll?
    Имеется ехе, который (по данным программы PE Explorer) может экспортировать функции в формате: (пример) Undecorated C++ Function:
    void __cdecl AlwaysActiveOn(void). Возможно ли превратить этот EXE в DLL? что нужно для этого и как блокировать выполнение его.
    По моим догадкам эта программа содержит в себе библиотеку и написана скорее всего на .net
      А с какой целью?
      если ехе на .нет то проблематично преобразовать его в длл, если обычный(не байткод), то необходимо чтобы у него были релоки
        Вобщем так: есть несколько демо написанное на DarkGDK, многие из них имеют одинаковую длину, и внутреннее сходство, по описанию это GDK используется с MSVC и .NET. Вот и думаю, можно ли выудить из exe эту библиотеку, ведь exe выдает все команды на экспорт. Насколько мне известно dll и exe не сильно отличаются. Пример как пишется:
        ExpandedWrap disabled
          #include "DarkGDK.h"
          void DarkGDK ( void )
          {
              // set sync on and sync rate to 60 frames per second
              dbSyncOn   ( );
              dbSyncRate ( 60 );
           
              // make a cube
              dbMakeObjectCube ( 1, 10 );
           
              // loop until the escape key is pressed
              while ( !dbEscapeKey ( ) )
              {
                  // update screen
                  dbSync ( );
              }
          }

        все эти функции идут на экспорт( только без приставок db).
        Знаком с асмом а вот в структуре РЕ плохо разбираюсь.
          RA9YTJ,секция релоков есть?
          Прогони через ИДА например, выдили все функции, всего сокрее они будут находится в одном блоке, потом можешь попробовать собрать из них дллку
            Файл Example1.exe состоит из 4 секций:
            .text addr 0401000 похоже сами коды функций и основной цикл
            .rdata addr 0580000 там есть немного строк с сообщениями об ошибках и какие-то данные
            .data addr 05b2000 тоже есть текст и какие-то данные много нулей
            .rsrc adrr a0c0000 ресурсы (эконки)
            какая из них является секцией реалоков?(а что это такое?)
            ИДА диссамблирует только начальную малую часть и к концу часть, видимо из-за простого примера большая часть функций не вызываются.
              RA9YTJ, прочитай пожалуйста для начала описание PE формата, и некоторые вопросы отпадут сами.
              Дока вроде где то валялась на исходниках, или вот ссылка с васма
              http://www.wasm.ru/docs/2/pe_docs.zip
                Еще вопрос:
                Если в этом ехе исполняемый цикл забить нопами и вписать например бесконечный цикл с sleep()с огромным числом. Запустить его, а другой программой находить в этом процессе функции по адресу и запускать их. Так возможно?
                  Были бы были релоки, тогда было бы все неплохо, не надо было бы ничего и преобразовывать, работал бы как с DLL - загружаешь с помошью LoadLibrary, находишь адреса функций с помощью GetProcAddress. Этим двум функциям не важно, exe или dll является исполняемый модуль (разве что в случае exe не вызывается DllMain, т.к. его там нет). Ну или импорт бы использовал...

                  А т.к. их нет - в таком случае или выдирай код дизассемблером, или еще что-нибудь придумай.
                  Но только ИМХО извращение какое-то - забивание нопами и sleep. Куда проще просто заморозить основной поток.

                  А потом что-нибудь придумать несложно - можешь выделить область памяти в этом процессе с помощью VirtualAllocEx, внедрить туда свой код и необходимые структуры данных (если функция принимает какие-либо указатели на структуры данных) с помощью WriteProcessMemory. Создать замороженный поток с помощью CreateRemoteThread, использовать GetThreadContext, SetThreadContext и WriteProcessMemory для записи аргументов функции и адреса возврата (внедренный код) в стек потока и установки правильных значений регистров (при этом eip установить на начало вызываемой функции). Сделать поток активным. После того, как функция отработает, выполняется ret на твой внедренный код, который в свою очередь сохраняет возвращенные данные (например, значение регистра eax) и убивает поток. При этом в основной программе используется WaitForSingleObject для синхронизации. После этого ты считываешь данные, возвращенные функцией и сохраненные твоим кодом, из адресного пространства этого процесса с помощью ReadProcessMemory. Если необходимо, используешь VirtualFreeEx чтобы очистить память в другом процессе и т.п.
                  Ну или можно не внедрять код, а создать процесс с флагом DEBUG_PROCESS, записать в стек потока заведомо неверный адрес возврата, к примеру, нулевой, и отловить при возврате из функции исключение. Может быть, это и проще будет.
                  Возможностей хватает, в принципе, было бы желание...
                  Сообщение отредактировано: inviZ -
                    RA9YTJ, возможно
                    можно ещё оставить место под тот ехе файл в своём адресном пространстве, догрузить его, заполная таблицу импорта, и выполнять любые функции из него:)
                      Цитата ProgramMan @
                      ... оставить место под тот ехе файл в своём адресном пространстве, догрузить его, заполная таблицу импорта, и выполнять любые функции из него:)

                      нельзя ли чуть подробнее описать, как это все сделать?
                      хотя бы какие функции ипользуются?

                      заранее спасибо.
                      l1l1l1
                        Смотри например тут
                        Пишем простейший загрузчик PE файлов

                        Это сообщение отправлено Нотифером
                          Цитата ProgramMan @
                          Пишем простейший загрузчик PE файлов

                          видимо это именно то, что мне нужно.
                          постараюсь разобраться.
                          большое спасибо!
                            Что бы ЕХЕ превратить в ДЛЛ - единственное, что надо сделать - заменить в
                            FileHeader поле Characteristics на соответствуещее длл. И добавить релоки, но тут уже смотря что нужно будет делать и какой EXE-файл...
                              Throne, релоков то нет ) читай выше

                              Это сообщение отправлено Нотифером
                                Цитата Throne @
                                Что бы ЕХЕ превратить в ДЛЛ - единственное, что надо сделать - заменить в
                                FileHeader поле Characteristics на соответствуещее длл. И добавить релоки, но тут уже смотря что нужно будет делать и какой EXE-файл...

                                А как поведет себя файл с точки зрения нормального ехе при замене этого поля? Вообще возможно использовать файл одновременно и как ехе и как длл? в смысле не в ущерб ни одному и ни другому.
                                Столкнулся с похожей задачей, делаю ехе с релоками, подгружаю как длл, определяю нормально адрес функции, но в самой функции адреса не поправленные, без смещений, получаю ошибку при выполнении.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0604 ]   [ 15 queries used ]   [ Generated: 2.05.24, 08:18 GMT ]