RockHammer Опубликовано 18 января, 2015 Поделиться Опубликовано 18 января, 2015 (изменено) Здравствуйте. Как скрыть нашу инъектируемую (чужеродную) дллку в процессе?Я помню, у кодера в его инжекторе было такое, что дллка в процессе не регистрируется. DLL в процессе не регистрируется и поэтому в списке модулей процесса она не отображается, следовательно - такие функции как GetModuleHandle, EnumerateProcessModules и Module32Next не смогут найти внедрённую DLL. Как сделать тоже самое, только со стороны дллки? Изменено 18 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 18 января, 2015 Поделиться Опубликовано 18 января, 2015 через 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 19 января, 2015 Автор Поделиться Опубликовано 19 января, 2015 через 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?) Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 19 января, 2015 Поделиться Опубликовано 19 января, 2015 Обычно DLL инжектится в процесс через удаленный вызов функции LoadLibrary. Т.е. берешь тело dll, записываешь ее в адресное пространство процесса, а затем создаешь новый поток с указателем на нужную функцию этой dll, обычно - на ее точку входа, т.е. на dllmain. Задача - написать собственную LoadLibrary, которая не будет оповещать головной процесс о том, что в него была подгружена новая библиотека, как это происходит в обычном случае. Еще один вариант - инжектить код, а не библиотеку. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 19 января, 2015 Поделиться Опубликовано 19 января, 2015 А чем собственно говоря мой инжектор не угодил? Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 19 января, 2015 Автор Поделиться Опубликовано 19 января, 2015 А чем собственно говоря мой инжектор не угодил?Он прекрасен, спору нет)Только вот всего на светеВот таких инжов - две тыщи) З.ы. если бы для себя кодил - то мне бы инжектора твоего хватило. Но я же кодю для пользователя... Он может не догадаться про это. Гораздо практичней сделать это "изнутря". Обычно DLL инжектится в процесс через удаленный вызов функции LoadLibrary. Т.е. берешь тело dll, записываешь ее в адресное пространство процесса, а затем создаешь новый поток с указателем на нужную функцию этой dll, обычно - на ее точку входа, т.е. на dllmain. Задача - написать собственную LoadLibrary, которая не будет оповещать головной процесс о том, что в него была подгружена новая библиотека, как это происходит в обычном случае. Еще один вариант - инжектить код, а не библиотеку.Идея хороша, и еще был бы не плох пример реализации)З.ы. сам код чита в либе еще как-то вывожу, но вот про фишку со скрытием - пока впервые услышал) А чем собственно говоря мой инжектор не угодил?Да, кстати... Не подскажешь, как это ты так сделал, чтоб "внедренная" библиотека не отображалась в списке дллок?)Прост, для себя) Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 19 января, 2015 Поделиться Опубликовано 19 января, 2015 Да, кстати... Не подскажешь, как это ты так сделал, чтоб "внедренная" библиотека не отображалась в списке дллок?)Прост, для себя)Я просто не записывал в память процесса NT_IMAGE_HEADERS и не уведомлял процесс о том, что в него загружен был образ PE файла. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 19 января, 2015 Поделиться Опубликовано 19 января, 2015 Но я же кодю для пользователя... Он может не догадаться про это. Гораздо практичней сделать это "изнутря". хммм можно еще сделать самоинжекторную длку ака .cpl (инжект через rundll32.exe). уровень сложности минимум, все в 1 файле и скрыть ее через PEB после инжекта.1 проверка "где длл" например GetModuleHandleW имя ехе/длл какой-то из игры, когда ехе/длл нету - инжект, а когда есть - инициализацию2 поиск окна/проц/откр. проц.3 получение пути к длл GetModuleFileNameW+хендл длл4 VirtualAllocEx/пишем в проц путь к длл/создаем поток на LoadLibraryW5 ожидаем загрузку, VirtualFreeEx, закрываем хендлы и валим без ExitProcess (rundll32.exe)6 когда длл подгрузили первым делом код проверяет "где длл". если GetModuleHandleW вернул не 0 - мы в игре7 переходим на инициализацию, делаем hide PEB, дальше все как обычно..примерно так. все это должно быть внутри DLL_PROCESS_ATTACH. помоему самый норм метод после pe loader'а Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 19 января, 2015 Поделиться Опубликовано 19 января, 2015 А я не соглашусь. Например, у меня сработает защита, я посмотрю, что rundll32.exe требует эскалации привилегий и фиг дам ему это сделать, ибо это открывание дверей на встречу всяким червям и ботнетам. Ну и, естественно, подобный способ уже не сработает. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 19 января, 2015 Автор Поделиться Опубликовано 19 января, 2015 Воу воу... Что такое pe loader? И как его использовать для хайда дллки? Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 19 января, 2015 Поделиться Опубликовано 19 января, 2015 А я не соглашусь. Например, у меня сработает защита, я посмотрю, что rundll32.exe требует эскалации привилегий и фиг дам ему это сделать, ибо это открывание дверей на встречу всяким червям и ботнетам. Ну и, естественно, подобный способ уже не сработает.эээ.. ну запустился рундлл, загрузилась в него длка которая потом сама себя загрузила куда то еще.. что тут такого? он ведь системный, длка будет иметь расширение .cpl - 2 клика и инжект готов.. Воу воу... Что такое pe loader? И как его использовать для хайда дллки?ручная инициализация модуля. типа выравнивание, обработка релоков/импорта и все это своим базонезависимым кодом.можешь примеры поискать. они все правда жуткий говнокод lol Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения