Перейти к содержанию

Скрытие инъектируемой .dll в процессе


RockHammer

Рекомендуемые сообщения

Здравствуйте.

 

Как скрыть нашу инъектируемую (чужеродную) дллку в процессе?

Я помню, у кодера в его инжекторе было такое, что дллка в процессе не регистрируется. 

DLL в процессе не регистрируется и поэтому в списке модулей процесса она не отображается, следовательно - такие функции как GetModuleHandle, EnumerateProcessModules и Module32Next не смогут найти внедрённую DLL.

 

Как сделать тоже самое, только со стороны дллки?

Изменено пользователем RockHamer
Ссылка на комментарий
Поделиться на другие сайты

через PEB или пишешь свой pe loader... PEB вариант простой:

в DLL_PROCESS_ATTACH добавляешь (как такое повторить "правильно" на с++ не спрашивай lol)

GetModuleHandle будет работать. ты можешь занулить его если нужно +можно другие поля занулить. хотя какой в этом смысл...

х32:

mov eax,[hInstDLL]mov ecx,[fs:0x30] ;PEBmov ecx,[ecx+12] ;LDR_DATAmov ecx,[ecx+12] ;InLoadOrderModuleListmov edx,ecx@@:mov edx,[edx] ;exe skippedcmp ecx,edxje @fcmp [edx+24],eaxjnz @bmov eax,[edx] ;InLoadOrderModuleListmov ecx,[edx+4]mov [eax+4],ecxmov [ecx],eaxmov eax,[edx+8] ;InMemoryOrderModuleListmov ecx,[edx+4+8]mov [eax+4],ecxmov [ecx],eaxmov eax,[edx+16] ;InInitializationOrderModuleListmov ecx,[edx+4+16]mov [eax+4],ecxmov [ecx],eax@@:

ps переделать на х64 легко xD

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

через PEB или пишешь свой pe loader... PEB вариант простой:

в DLL_PROCESS_ATTACH добавляешь (как такое повторить "правильно" на с++ не спрашивай lol)

GetModuleHandle будет работать. ты можешь занулить его если нужно +можно другие поля занулить. хотя какой в этом смысл...

х32:

mov eax,[hInstDLL]mov ecx,[fs:0x30] ;PEBmov ecx,[ecx+12] ;LDR_DATAmov ecx,[ecx+12] ;InLoadOrderModuleListmov edx,ecx@@:mov edx,[edx] ;exe skippedcmp ecx,edxje @fcmp [edx+24],eaxjnz @bmov eax,[edx] ;InLoadOrderModuleListmov ecx,[edx+4]mov [eax+4],ecxmov [ecx],eaxmov eax,[edx+8] ;InMemoryOrderModuleListmov ecx,[edx+4+8]mov [eax+4],ecxmov [ecx],eaxmov eax,[edx+16] ;InInitializationOrderModuleListmov ecx,[edx+4+16]mov [eax+4],ecxmov [ecx],eax@@:

ps переделать на х64 легко xD

 

Что-что, прости? При чем тут PE Loader?)

Ссылка на комментарий
Поделиться на другие сайты

Обычно DLL инжектится в процесс через удаленный вызов функции LoadLibrary. Т.е. берешь тело dll, записываешь ее в адресное пространство процесса, а затем создаешь новый поток с указателем на нужную функцию этой dll, обычно - на ее точку входа, т.е. на dllmain. Задача - написать собственную LoadLibrary, которая не будет оповещать головной процесс о том, что в него была подгружена новая библиотека, как это происходит в обычном случае. Еще один вариант - инжектить код, а не библиотеку.

Ссылка на комментарий
Поделиться на другие сайты

А чем собственно говоря мой инжектор не угодил?

Он прекрасен, спору нет)

Только вот всего на свете

Вот таких инжов - две тыщи)

 

З.ы. если бы для себя кодил - то мне бы инжектора твоего хватило. Но я же кодю для пользователя... Он может не догадаться про это. Гораздо практичней сделать это "изнутря".

 

Обычно DLL инжектится в процесс через удаленный вызов функции LoadLibrary. Т.е. берешь тело dll, записываешь ее в адресное пространство процесса, а затем создаешь новый поток с указателем на нужную функцию этой dll, обычно - на ее точку входа, т.е. на dllmain. Задача - написать собственную LoadLibrary, которая не будет оповещать головной процесс о том, что в него была подгружена новая библиотека, как это происходит в обычном случае. Еще один вариант - инжектить код, а не библиотеку.

Идея хороша, и еще был бы не плох пример реализации)

З.ы. сам код чита в либе еще как-то вывожу, но вот про фишку со скрытием - пока впервые услышал) 

А чем собственно говоря мой инжектор не угодил?

Да, кстати... Не подскажешь, как это ты так сделал, чтоб "внедренная" библиотека не отображалась в списке дллок?)

Прост, для себя)

Ссылка на комментарий
Поделиться на другие сайты

Да, кстати... Не подскажешь, как это ты так сделал, чтоб "внедренная" библиотека не отображалась в списке дллок?)

Прост, для себя)

Я просто не записывал в память процесса NT_IMAGE_HEADERS и не уведомлял процесс о том, что в него загружен был образ PE файла.

Ссылка на комментарий
Поделиться на другие сайты

Но я же кодю для пользователя... Он может не догадаться про это. Гораздо практичней сделать это "изнутря".

 

хммм можно еще сделать самоинжекторную длку ака .cpl (инжект через rundll32.exe). уровень сложности минимум, все в 1 файле и скрыть ее через PEB после инжекта.

1 проверка "где длл" например GetModuleHandleW имя ехе/длл какой-то из игры, когда ехе/длл нету - инжект, а когда есть - инициализацию

2 поиск окна/проц/откр. проц.

3 получение пути к длл GetModuleFileNameW+хендл длл

4 VirtualAllocEx/пишем в проц путь к длл/создаем поток на LoadLibraryW

5 ожидаем загрузку, VirtualFreeEx, закрываем хендлы и валим без ExitProcess (rundll32.exe)

6 когда длл подгрузили первым делом код проверяет "где длл". если GetModuleHandleW вернул не 0 - мы в игре

7 переходим на инициализацию, делаем hide PEB, дальше все как обычно..

примерно так. все это должно быть внутри DLL_PROCESS_ATTACH. помоему самый норм метод после pe loader'а

Ссылка на комментарий
Поделиться на другие сайты

А я не соглашусь. Например, у меня сработает защита, я посмотрю, что rundll32.exe требует эскалации привилегий и фиг дам ему это сделать, ибо это открывание дверей на встречу всяким червям и ботнетам. Ну и, естественно, подобный способ уже не сработает.

Ссылка на комментарий
Поделиться на другие сайты

А я не соглашусь. Например, у меня сработает защита, я посмотрю, что rundll32.exe требует эскалации привилегий и фиг дам ему это сделать, ибо это открывание дверей на встречу всяким червям и ботнетам. Ну и, естественно, подобный способ уже не сработает.

эээ.. ну запустился рундлл, загрузилась в него длка которая потом сама себя загрузила куда то еще.. что тут такого? :D

он ведь системный, длка будет иметь расширение .cpl - 2 клика и инжект готов..

 

Воу воу... Что такое pe loader? И как его использовать для хайда дллки?

ручная инициализация модуля. типа выравнивание, обработка релоков/импорта и все это своим базонезависимым кодом.

можешь примеры поискать. они все правда жуткий говнокод lol

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.