![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CreateRemoteThread???
volser © (2005-01-20 19:21:00)Мне нужно запустить поток в чужом процесе.
Как работать с функцией
CreateRemoteThread(hProcess,nil, 0, @myProc, nil, 0,ThreadID)
myProc - доступна только в моем адресном пространстве. Как сделать так что бы она была доступна и в hProcess?
Digitman (2005-02-03 17:43:00) [1]
> Eraser © (03.02.05 17:27) [151]
ты же оба процесса имеешь не в разных версиях, а в одной и той же)
Eraser (2005-02-03 17:27:00) [2]Piter ©
При этом кстати в разных версиях видов адрес отличается...
Kerk (2005-02-03 16:44:00) [3]Piter © (03.02.05 16:40) [149]
если я хочу перехватить функцию из, например, USER32? Или он тоже грузится всегда по своему предпочтительному адресу?
А какая разница? Мы же IAT правим.
Piter (2005-02-03 16:40:00) [4]Digitman © (03.02.05 15:50) [148]
да точно так же как и при правке "изнутри".
хм... вероятно, это расчитано на то, что ImageDirectoryEntryToData будет выполняться одинаково, что в нашем процессе, что в удаленном?
Но тогда такой метод перехвата подходит только для библиотек, которые обязательно грузятся по своему предпочтительному базовому адресу?
А если я хочу перехватить функцию из, например, USER32? Или он тоже грузится всегда по своему предпочтительному адресу?
В любом случае, метод не такой универсальный - так не перехватишь функции из любых библиотек...
Digitman (2005-02-03 15:50:00) [5]
> Piter © (03.02.05 15:46) [147]
> как ты узнаешь нужные адреса для правки извне?
да точно так же как и при правке "изнутри".
Piter (2005-02-03 15:46:00) [6]Kerk © (03.02.05 15:35) [146]
буду править "снаружи", т.е. не внедренным кодом, а из своего процесса
а как ты узнаешь нужные адреса для правки извне?
Kerk (2005-02-03 15:35:00) [7]Piter © (03.02.05 15:34) [145]
а как ты собираешься править таблицы импорта?
буду править "снаружи", т.е. не внедренным кодом, а из своего процесса.
> а это 100% для всех версий windows при любых
> настройках?
абсолютный факт.
Piter (2005-02-03 15:34:00) [8]Kerk © (03.02.05 6:24) [143]
а зачем она мне когда я уже внедрился? :)
а как ты собираешься править таблицы импорта?
Digitman © (03.02.05 9:44) [144]
этот адрес неизменен и актуален для всех прикл.процессов в системе
а это 100% для всех версий windows при любых настройках?
Digitman (2005-02-03 09:44:00) [9]
> Piter © (02.02.05 23:26) [142]
достаточно параметром в стартуемый удаленный трэд передать адрес т.входа в ф-цию kernel32.GetProcAddress (этот адрес неизменен и актуален для всех прикл.процессов в системе).. можно, конечно, передать еще и kernel32 Imagebase (он же будет являться хэндлом модуля kernel32 в целевом процессе), но это уже - на вкус и цвет, ибо удаленный трэд сразу после старта в состоянии сам найти kernel32 Imagebase
Kerk (2005-02-03 06:24:00) [10]Piter © (02.02.05 23:26) [142]
Как хотя бы ты узнаешь адрес WriteProcessMemory?
а зачем она мне когда я уже внедрился? :)
> Можно примерчик?
Ну посмотри ты мой пример по ссылке выше. :) Адреса функций определяются заранее и записываются в АП чужого процесса вместе с кодом. ImageBase кернела32 совпадает для всех процессов.
Piter (2005-02-02 23:26:00) [11]Kerk © (02.02.05 20:36) [141]
пишем свой код в процесс, тем же способом с помощью WriteProcessMemory меняем адрес в IAT
а как ты будешь импортировать функции в удаленном потоке? Как хотя бы ты узнаешь адрес WriteProcessMemory? Можно примерчик?
Kerk (2005-02-02 20:36:00) [12]Piter © (02.02.05 19:53) [140]
а в чем принципиальная разница? пишем свой код в процесс, тем же способом с помощью WriteProcessMemory меняем адрес в IAT. см, например, мой пример, выше ссылка была.
Piter (2005-02-02 19:53:00) [13]Kerk © (02.02.05 18:49) [139]
но я, все же, предпочел бы без ДЛЛ перехват делать.
Перехват без DLL? Каким образом?
Kerk (2005-02-02 18:49:00) [14]Piter © (02.02.05 18:36) [138]
Ну хорошо. признаю, что этот метод имеет право на существование. :) Извратом, учитывая релоки, не назовешь... но я, все же, предпочел бы без ДЛЛ перехват делать.
Piter (2005-02-02 18:36:00) [15]Kerk © (02.02.05 16:45) [136]
раз создали поток, то код уже внедрен. нафига еще какие-то ДЛЛки подгружать?
у DLL'ки будут автоматически верно настроены все реллоки, а также импорт любых функций. Можно, конечно, и в удаленном потоке все организовать, но так геморройно.
Теперь понятно, каким образом CreateRemoteThread участвует в перехвате функций? :)
Piter (2005-02-02 17:04:00) [16]А кто говорит про тайные замыслы?
Kerk (2005-02-02 16:45:00) [17]Piter © (02.02.05 15:32) [134]
ну теперь то наконец понятно зачем нужна CreateRemoteThread в перехвате WinApi функций, какую роль она играет?
не понятно.
> 1) Создаем поток в удаленном процессе
раз создали поток, то код уже внедрен. нафига еще какие-то ДЛЛки подгружать?
Игорь Шевченко (2005-02-02 16:18:00) [18]Господа хорошие, для того, чтобы запустить хоть что-то, даже CreateRemoteThread, надо создать процесс. Вот он-то аудитом и будет пойман, или тем оповещателем, о котором на этом форуме неоднократно упоминал Digitman. И все ваши тайные замыслы станут явными. Лучше займитесь чем-нибудь более полезным, самодвижущееся пресс-папье изобретите или архитектурный институт закончите.
Piter (2005-02-02 15:32:00) [19]Kerk © (02.02.05 4:21) [131]
CreateRemoteProcessНЕ ИСПОЛЬЗУЕТСЯ для внедрения кода
:))
Ну ладно. Разжевываем еще проще, а то опять неясности.
Итак, CreateRemoteThread используется для внедрения в удаленный процесс. Порядок внедрения такой:
1) Создаем поток в удаленном процессе
2) Этот поток загружает нашу библиотеку
3) сам поток завершается
4) имеем загруженную DLL в "чужом" ВАП
То есть, фактически произошло внедрение, аналогичное хукам (почти), но мы не использовали хуки. Причем таким способом можно внедриться в процессы, в которые хуками не внедришься (например, консольное приложение, если там не делается выборка сообщений)
А внедрились мы для того, чтобы перехватывать WinApi функции.
ну теперь то наконец понятно зачем нужна CreateRemoteThread в перехвате WinApi функций, какую роль она играет?
kaZaNoVa (2005-02-02 07:13:00) [20]Piter © (01.02.05 23:49) [130]
> Но я смотрю возникают вопросы как используется
>CreateRemoteThread в перехвате АПИ.
>
> Она используется для ВНЕДРЕНИЯ в удаленный процесс,
> ибо это есть условие перехвата WinApi функции (см.
> пункт 1).
LOL, она имхо просто запускает поток ...