Приложение как DLL, тупые вопросы

Тема в разделе "WASM.BEGINNERS", создана пользователем M0rg0t, 18 окт 2018.

Метки:
  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Очень тупой вопрос. Вот есть какая-нибудь софтина, которая должна работать как DLL. Т.е. раньше это было простое приложение, сейчас его надо переделать в дллку, которую будет запускать кто-то там через RUNDLL или память или еще как нибудь. Не суть. Вопрос в другом. Вот есть код:

    Код (ASM):
    1.  
    2. work proc uses ebx
    3. ... тут основной код приложения ..
    4. ret
    5. work endp
    6.  
    7. LibMain proc instance:DWORD,reason:DWORD,reserved:DWORD
    8.   .if reason == DLL_PROCESS_ATTACH
    9.     mov eax,1
    10.   .endif
    Реально ли сделать как-то автозапуск процедуры work (в которой основная логика приложения). Как я понимаю, вставить call work в process_attach нельзя, т.к. загрузчик не поймет, подгрузилась дллка или нет. Вариант - создавать в process_attach новый поток с рабочей процедурой потока - work. (CreateThread, ThreadProc - work). Нормально ли такое решение? Или может есть еще какое-то?

    Экспортировать функцию нельзя/либо она неизвестно, как будет называться. Так было бы самое простое решение (вызвать функцию из длл), но такое решение неприемлемо. Загрузчик только подгружает длл, а там дальше она сама уже должна запустить что надо.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Ходят слухи, что на виндах ниже висты нельзя потоки создавать из DllMain.
     
  3. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    f13nd, как же тогда быть? Как делают люди, чтоб грамотно было и работало везде? Когда-то видел 100500 семплов малвари , которая работает в виде дллки, сейчас же не могу найти пример.
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Если инжектишь эту длл внешним приложением, наверное лучше создать в ней поток CreateRemoteThread, если через Appinit_DLLs или еще как-то, то наверное по стеку можно пройтись и подменить адрес возврата из LdrLoadDll и поймав управление там, уже создавать поток. Честно говоря не сталкивался с тем, чтоб это исключение вызывало, просто обсуждалось недавно на другом форуме.
     
  5. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Инжектить не я буду, я не знаю как и кто будет запускать (через rundll, маппинг в памяти , etc. ). Важно, что должно сразу запускаться, без вызова каких-то функций.
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Ну так rundll можно задать вызываемую функцию, пусть в ней поток создается, если он так нужен.
     
    M0rg0t нравится это.
  7. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    f13nd, та функция не будет экспортироваться, вот в чем проблема.
    Короче, я сделал так - в _ATTACH идет вызов функции, а в ней уже идет вызов потока. Так проблем быть не должно вроде?
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    На старых виндах могут быть. DllMain c DLL_PROCESS_ATTACH вызывается LdrLoadDll. Правильней всего из одной из экспортируемых функций создавать поток.
     
  9. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    Делал когда то такое на XP, поток создается и живет пока приложение не начнёт создавать свои потоки.
     
  10. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Как делают? Вызов функции из DLL_main, а в функции стартует поток?