Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CreateRemoteThread???


Страницы:   1 2 3 4 5 6 7 8

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, она имхо просто запускает поток ...


Страницы:   1 2 3 4 5 6 7 8

Наверх

Титульная страница Поиск, карта сайта Написать письмо