Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Внедрение dll с помошью потоков |
Автор: drZmeu 25.2.2007, 22:08 | ||
Всем добрый вечер есть трабл = ![]() Вот код:
А dll из книжки Рихтера 'заногу его б =((' Вобшем с его примера dll "это DLL, которая, будучи внедрена в адресное пространство процесса, выдает список всех DLL, используемых этим процессом. " Если я узаю его утилиту InjLib то всё ОК а если свою вроде всё норм только ничего непроисходит и невыводится почуму ? Как исправить? |
Автор: azesmcar 26.2.2007, 11:06 |
поставь где нибудь std::cout на szLibFile и pszLibFileRemote. У меня сомнения что path неправильный.. |
Автор: criz 13.2.2008, 18:42 | ||||
Товарищи, помогите понять где ошибка: test.dll:
test.c
ГетЛастЕррор выдает 1114ую ошибку. Совет от МискроСофта не помог, сделал все как они писали. Если я делаю просто LoadLibrary, то все гут... З.Ы. может я теорию неправильно понял: -- открываем процесс -- выделяем память в открытом процессе -- пишем данные в выделенную память -- узнаем адрес LoadLibrary в Kernel32 -- Создаем поток.... верно? ![]() |
Автор: PPS05 14.2.2008, 00:00 |
а где именно? |
Автор: criz 14.2.2008, 09:00 | ||||
Перед выходом из функции inj(). Трасер нигде не "застревает". Оля(OllyDBG) тоже показывает -- "error_dll_init_failed"
|
Автор: PPS05 14.2.2008, 12:20 | ||||
А ошибка вот где: строка 54 - ваши действия: вы нашли адрес LoadLibraryW и и создаете поток, который начинает выполнение как раз в начале этой функции. По-русски: вы вызываете LoadLibraryW без параметров, тогда логично, что ошибка "error_dll_init_failed" и еще чудо, что удаленный процесс не падает: два dword'а то снимаются со стека... Если ты хочешь подрузить dll от имени другого процесса, то в psRemFile должен фактически загнать машинный код, который произведет данные действия. Где-то на rsdn.ru была статья "Перехват API вызовов на Windows NT" (или что-то такое). Там есть этот способ внедрения. Сам когда-то писал такое, вот исходник, но, думаю, разобраться в нем не так-то просто. На всякий случай выложу:
Т.е. cti будет содержать такой код:
Добавлено через 40 секунд P.S. Здесь много непонятно, поэтому спрашивайте. ![]() |
Автор: 586 14.2.2008, 17:58 | ||
Ошибок море: проблемы с юникодом, незакрытые дескрипторы и пр. Перечислять долго, надеюсь сам разберёшся.
|
Автор: PPS05 14.2.2008, 19:20 | ||
Строка 47: pThRtn принимает значение адреса LoadLibraryW Строка 54: pThRtn указывается как стартовый адрес потока. Таким образом, функция внезапно получает управление, при этом в стеке нет ни адреса возврата, ни параметров... (поток только-только запущен). |
Автор: criz 14.2.2008, 21:02 | ||
...это решается путем инициализации cti, так? Повторюсь, без знаний ассемблера трудно разобраться ![]() |
Автор: 586 14.2.2008, 21:32 | ||
На низком уровне функция LoadLibrary соответствует функции типа THREAD_START_ROUTINE. По соглашению вызова они тоже совпадают (__stdcall). |
Автор: PPS05 14.2.2008, 22:37 | ||
Но "error_dll_init_failed" мы-таки получим!!! ![]() |
Автор: 586 14.2.2008, 23:15 |
Интересно, откуда? ![]() |
Автор: PPS05 14.2.2008, 23:38 |
![]() |
Автор: criz 15.2.2008, 20:30 |
удалено мной.... ![]() |