Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› Внедрение DLL в процесс
Посл.ответ Сообщение


Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 01 мая 2006 15:55
· Личное сообщение · #1

-----------------------
Приветствую всех
-----------------------
Внедряю в SERVICES.EXE свою DLL'ку, через автозагрузку в реестре (AppInit_DLL). В этом случае DLL загружается в адресное пространство каждого (или почти каждого) запущенного приложения (в том числе и SERVICES.EXE). Проблема вот в чем. Outpost кричит что Apllication Layer Gateway Service (alg.exe) изменен и сразу выводит путь к моей DLL'ке. Но прочитав статью Ms-Rem'а "Инжект как метод обхода фаерволлов, жив или мертв?", стал использовать этот метод (удаление DLL из списка модулей в PEB). Однако DLL'ка представляет из себя COM-сервер, точнее маскируется под него (т.е. в экспортах DllRegisterServer, DllUnregisterServer... и т.д.). Для установки в систему необходимо просто зарегистрировать DLL как COM-сервер, а в DllRegisterServer находится процедура инсталляции.
Вся хрень в том, что если выдергивать свою DLL из списка модулей в PEB сразу, в DllEntryPoint, то такая DLL не пашет, а точнее DllRegisterServer и любые другие экспортированные функции не работают (вернее они сами работают, но например regsvr32 говорит, что DLL вроде загружена, но какая-то левая и может даже это и не DLL вовсе). Можно, конечно и по другому инсталлироваться в систему, например создать еще и экзешник для установки DLL, но так через regsvr32 инсталлироваться предпочтительнее.
-----------------------
Короче говоря вопрос:
можно ли как-нибудь узнать будет ли экзешник, в адресное пространство которого мы грузимся использовать экспорты нашей DLL или просто загрузит и всё, а вызывать никакие функции из нашей DLL не будет (т.е. если программа юзает DllRegisterServer в нашей DLL, то тогда не надо удалять DLL из списка модулей в PEB, а иначе удалять, чтоб Outpost и другие фырволы не запалили)
-----------------------



Ранг: 2.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 мая 2006 16:08
· Личное сообщение · #2

ну дак разбери импорт модуля в памяти и все ...




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 01 мая 2006 16:34
· Личное сообщение · #3

ckbg пишет:
ну дак разбери импорт модуля в памяти и все ...


и как прикажешь это сделать! программа(ы) (например regsvr32) не статически к моей DLL привязаны, а динамически загружают её и юзают DllRegisterServer. И в импорте соответственно ничего нету.



Ранг: 10.5 (новичок)
Активность: 0=0
Статус: Участник

Создано: 01 мая 2006 16:45
· Личное сообщение · #4

может так:
в DllEntryPoint вызываеш GetModuleFileName(NULL,buf,sizeof(buf))
вернет имя exe загрузившего твою dll.
если это rundll32 или regsvr32 (или типа этого) то список
модулей не трогаешь.
если это SERVICES.EXE или SVCHOST.EXE - делаешь что нужно
во всех остальных случаях можно просто вернуть FALSE
(если тебе конечно не нужно во всех процессах присутствовать)




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 01 мая 2006 17:50 · Поправил: BaGiE
· Личное сообщение · #5

kropalik
спасибо за подсказку, но у меня уже так и есть. однако в этом способе нет универсальности - так как может быть кто-то по другому будет запускать DllRegisterServer, т.е. DLL'ку можно (и нужно) встроить в инсталлятор любой, и не факт, что он регистрирует OCX или DLL через regsvr32 или rundll32



Ранг: 10.5 (новичок)
Активность: 0=0
Статус: Участник

Создано: 01 мая 2006 18:22 · Поправил: kropalik
· Личное сообщение · #6

из MSDN:
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved);
последний параметр написано что reserved но на самом деле содержит 0 или 1
в зависимости от способа загрузки Dll (статически или через LoadLibrary)
может поможет ?
P.S. кстати удаление из списка загруженных Dll не всегда достаточно.
еще имеет смысл испохабить MZ и PE заголовки (после того как станут
ненужны) ато длл всеравно можно будет найти через VirtualQuery()




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 01 мая 2006 20:13
· Личное сообщение · #7

kropalik
насчет lpvReserved это я не знал. и хотя в данном случае это мне и не поможет (загрузка этой DLL всегда динамическая), но все равно спасибо за информацию, может и пригодится когда. А насчет того, чтобы испортить заголовки то это наверное пока-что слишком (Outpost вроде еще не дошел до такого), хотя может и сделать на всякий случай стоит

Вообще то я по пути еще хотел спросить - может кто-нить знает почему если я в своей DLL, внедренной в SERVICES.EXE вызываю MessageBox, то он не отображается, но звук от него слышно. Если внедриться в другой процесс, то все ок (но от имени пользователя, а не SYSTEM). А еще пробовал в WINLOGON.EXE внедряться - но система часто падает в BSOD почему-то. В CSRSS.EXE и LSASS.EXE DLL не грузится (???)



Ранг: 64.6 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 02 мая 2006 15:10
· Личное сообщение · #8

BaGiE пишет:
может кто-нить знает почему если я в своей DLL, внедренной в SERVICES.EXE вызываю MessageBox, то он не отображается, но звук от него слышно

Об этом много инфррмации. MessageBox показываеться на роб.столе указаной станции. Сам роб.стол может быть неактивным (скажем Winsta0\Winlogon - окошко увидишь только через Ctrl-Alt-Delete (и то не всегда ;) )... Посмотри на Васме. Там часто это обсуджалось: как именно переключить декстоп, как создать при желании свой, как подключиться к раб.станции...

А поконкретней об SERVICES.EXE: у него Service-0x0-3e7$\Default (что типично для таких сервисов)
Тебе нужно Winsta0\Default.

В крайнем случае обратись к первоисточнику - MSDN.



Ранг: 21.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 мая 2006 13:14
· Личное сообщение · #9

BaGiE пишет:
В CSRSS.EXE и LSASS.EXE DLL не грузится (???)

Это Ring-0 процессы, залезть в них просто так не получится



Ранг: 52.6 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 11 мая 2006 13:56
· Личное сообщение · #10

kkcos пишет:
BaGiE пишет:
В CSRSS.EXE и LSASS.EXE DLL не грузится (???)
Это Ring-0 процессы, залезть в них просто так не получится


Это не Ring-0 процессы



Ранг: 21.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 мая 2006 14:12
· Личное сообщение · #11

ошибочка вышла, и правда
правда всё равно к ним просто так не побкопаешься.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 11 мая 2006 16:33
· Личное сообщение · #12

kkcos пишет:
правда всё равно к ним просто так не побкопаешься.

А вирус Сассер смог подкопаться к lsass.exe. Если бы ему не нужна была перезагрузка, то наверное lsass так бы пропатченный и выполнялся.


 eXeL@B —› Программирование —› Внедрение DLL в процесс
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати