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

Тема в разделе "WASM.WIN32", создана пользователем 63F45EF45RB65R6VR, 7 дек 2011.

  1. 63F45EF45RB65R6VR

    63F45EF45RB65R6VR New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2011
    Сообщения:
    70
    сабж один процесс инжектит DLL в другой процесс первому надо передать в DllMain которая загружена во второй процесс несколько байт трабл в том что DllMain не принимает юзерских аргументов поэтому надо какой то IPC какой вариант правильный ?
    из того что не хочется общий маппинг, через файл на диске, через реестр, через переменные окружения (и так уже начудил с возвращаемым значением), и тем более не маилслоты и пайпы конкретно надо 4 байта передать хочется как то локально что бы несколько инстансов программы работать могли

    инжект обычный через RtlCreateUserThread которая запускает шеллкод записанный в целевой процесс который и грузит DLL почему сделал так ? потому что надо было возвращать код ошибки определенный мной почему DllMain веренула FALSE как я сделал в DllMain устанавливается переманнная окружения для процесса SetEnvironmentVariable а по возвращении в шеллкод из LoadLibrary преобразую его в число и возвращаю результат вот это делает DllMain
    Код (Text):
    1. VOID SetError(DWORD dwError)
    2. {
    3.     CHAR szErr[256];
    4.     sprintf(szErr, "%lu", dwError);
    5.     SetEnvironmentVariable("0xdeadc0de", szErr);
    6. }
    а вот это шеллкод
    Код (Text):
    1. __declspec(dllexport)
    2. VOID WINAPI Shell(REMSTART *pCtx)
    3. {
    4.     pCtx->pLoadLibraryA(pCtx->sz);
    5.    
    6.     CHAR szVar[] = {'0','x','d','e','a','d','c','0','d','e','\0'};
    7.        
    8.     CHAR szErr[256];
    9.    
    10.     if (!pCtx->pGetEnvironmentVariableA(szVar, szErr, sizeof(szErr)))
    11.         pCtx->pExitThread(ERROR_LOAD_HOOK_DLL);
    12.    
    13.     DWORD dwError = 0;
    14.  
    15.     for (DWORD i = 0; szErr[i]; i++)
    16.     {
    17.         dwError *= 10;
    18.         dwError += szErr[i] - '0';
    19.     }
    20.  
    21.     pCtx->pExitThread(dwError);
    22. }
    попутно вопрос может как то попроще можно вернуть код ошибки в инжектирующий процесс из DllMain ? надо выдавать точное сообщение не загрузилась потому то потому то если GetEnvironmentVariable вернет ошибку я делаю вывод что зафейлилась сама LoadLibrary и код в DllMain вообще управление не получал иначе он бы в любом случае установил переменную окружения с успешным или каким то неуспешным кодом

    [added]
    кстати вот еще одна причина почему шеллкод грузит DLL почему то поток созданный через RtlCreateUserThread не имеет адреса возврата из стартовой процедуры адрес которой передается RtlCreateUserThread как аргумент поэтому работает только когда явно вырубаеш поток ExitThread естественно если точкой входа указывать LoadLibrary все зафейлится так как LoadLibrary попытается вернуть управление.. почему на стеке нет адреса возврата никто не знает ?
    ось винда 5.1
     
  2. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Через LPC может быть?
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    ну вот что ты опять нагородил? потом удивляешься, че я твой код называю говнокодом... что тебе мешает оставить DllMain пустой, а всю инициализацию и тд вынести в отдельную экспортную функцию... а в шелл-коде после LoadLibrary вставить GetProcAddress на инициализирующую функцию, которая у тебя может быть такой, какой ты захочешь... допустим она будет возвращать код ошибки: DWORD InitFunc... тогда достаточно pCtx->pExitThread(pInitFunc()) и забрать в своем процессе код ошибки с помощью функции GetExitCodeThread... более того, такой вариант предпочтительнее, тк скорее всего не может вызвать дедлока в коде загрузщика при создании потоков в DllMain и тд... и не будет никакого бреда и палева по переменным окружения, и не надо переводить код ошибки в строку и обратно... это все очень дико смотрится...
     
  4. 63F45EF45RB65R6VR

    63F45EF45RB65R6VR New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2011
    Сообщения:
    70
    ....Здесь был поток чего-то непонятного...
    [modnote=TermoSINteZ]Забанен за мат и оскорбление.[/modnote]
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Используйте шаред секцию.
     
  6. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Нас снова посетил г-н Clerk, насколько понимаю? =)
    Что ж, позвольте выступить в этой высокоумной дискуссии третьей стороной.

    Так вот, наведя справки, я узнал, что у Вас очень оригинальный, если не сказать экстравагантный, стиль мышления. В частности, трюк с запуском Olly из-под Olly в своё время сделал меня охренеть и просветлиться.
    Но, прошу заметить — оригинальность просто ради оригинальности есть дурной тон. Иногда самое верное решение всё-таки может лежать на поверхности, в чём Вас и пытается убедить г-н Rel.
    А уж тем более не является хорошим тоном вместо контр-аргументации играть в «бокс по переписке» и швыряться в оппонента оскорблениями (да ещё и с таким количеством орфографических ошибок). Это, прошу прощения, стиль обиженного школьника.

    В общем и целом — имейте мужество признать, что иногда бываете неправы.
     
  7. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Ок, забудём об "архитектуре" сего кода, гхм. Чем тебе LPC не нравится? Local Procedure Call, если поточнее. Нугуглить, что это за механизм сможешь сам, надеюсь.
     
  8. 63F45EF45RB65R6VR

    63F45EF45RB65R6VR New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2011
    Сообщения:
    70
    ладно что нибудь буду думать
     
  9. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    Booster
    +100 Это самое простое и верное решение! Всё гениальное просто!!!
     
  10. ejbfcrfvyr

    ejbfcrfvyr New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2011
    Сообщения:
    18
    DEEP
    Нет, в тот раз вы ошиблись(не каждый инде кто ругается матом). Инде не может такой дебильны вопрос задавать. Вдобавок у меня не хватило сейчас терпения дочитать вопрос тс доконца, я бы ответил :)
    Вопросы по загрузчику кстате из той области, где корректно поставленный вопрос содержит в себе ответ.