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?


kaZaNoVa   (2005-01-25 11:51:00) [81]

DeadMeat ©   (25.01.05 11:41) [71]

> вот DEP

а что это такое ?


DeadMeat   (2005-01-25 11:41:00) [82]

Да ничего особенного.. Встроенный файер отключен. Только этот и вот DEP... И все...

Насчет жесткого не знаю. Я с другими не сравнивал... Этот меня пока устривает. Я его всегда на максимум выкручиваю по защите..

---
...Death Is Only The Begining...


kaZaNoVa   (2005-01-25 11:34:00) [83]

DeadMeat ©   (25.01.05 11:12) [68]

> отругался мой ZoneAlarm

я слышал это самый "жесткий" фарволл ))


kaZaNoVa   (2005-01-25 11:33:00) [84]

DeadMeat ©   (25.01.05 11:12) [68]

> DEP... И послал ее вместе с Explorer-ом.. Но перед
> этим отругался мой ZoneAlarm.. Но оно и понятно. Он на
> OpenProcess ругался..

что у тебя из защит установлено?
//как то круто, интересно)))


DeadMeat   (2005-01-25 11:12:00) [85]


> [54] Kerk ©   (21.01.05 18:27)

ты мою демку смотрел вообще???

Так. На всякий случай. Я код не смотрел, т.к. в асме не шибко шарю, но на моей WinXP_SP2EN на твою прогу отругался DEP... И послал ее вместе с Explorer-ом.. Но перед этим отругался мой ZoneAlarm.. Но оно и понятно. Он на OpenProcess ругался..
Это так... Просто чтоб ты знал..

Сорри всем за оффтоп..

---
...Death Is Only The Begining...


GuAV   (2005-01-24 16:58:00) [86]

Digitman ©   (24.01.05 16:45) [66]

> только не так как ты написал - вызовом GetProcAddres().

Я писал не применительно к внедряемому коду, а применительно к случаю вызвова LoadLibrary как ThreadProc без предварительной записи кода в чужое АП.

Я понимаю что кроме кода нужно записать в чужое АП ещё структуру со всеми необходимыми указателями. Или обойтись одним указателем на GetProcAddres или LoadLibrary[Ex] (как параметр CreateRemoteThread).
Или "по-хакерски" сформировать код как структуру из "заготовки" типа
PUSH $FFFFFFFF
PUSH $FFFFFFFF
PUSH $FFFFFFFF
CALL $FFFFFFFF
RET 12


Digitman   (2005-01-24 16:45:00) [87]


> GuAV ©   (24.01.05 16:33) [65]


> А оно оказывается записать код который уже вызовет LoadLibraryEx
>


только не так как ты написал - вызовом GetProcAddres().
ОТКУДА там возьмется адрес ф-ции 'GetProcAddres' ?

если уж на то пошло, можно даже не адрес 'LoadLibrary' передавать параметром в CreateremoteThread(), а сразу адрес 'GetProcAddress'


GuAV   (2005-01-24 16:33:00) [88]

Digitman ©   (24.01.05 16:04) [64]

> ты копируешь код будущего трэда в удаленное ВАП

Так бы сразу... а то

Digitman ©   (22.01.05 15:10) [57]

>  LoadLibrary[Ex] .. адрес т.входа в эту ф-цию
> передается параметром в CreateRemoteThread

т.е. я понял передать

CreateRemoteThread(
...
GetProcAddres(hKernel32, 'LoadLibraryExA'),    // thread function
GlobalStrPtr,                       // thread argument
...
);

А оно оказывается записать код который уже вызовет LoadLibraryEx и передать указатель на этот код... больше вопросов не имею.


Digitman   (2005-01-24 16:04:00) [89]


> GuAV


ты дуриком-то не прикидывайся !

ты копируешь код будущего трэда в удаленное ВАП, тело этого трэде первым делом будет вызывать LoadLibrary[Ex]
далее ты копируешь в удаленное ВАП параметры ф-ции LoadLibraryEx
далее ты стартуешь удал.трэд, передавая ему структуру, содержащую И адрес ф-ции LoadLibraryEx И адреса необходимых ей УЖЕ СКОПИРОВАННЫХ тобой в чужое ВАП параметров

ЧТО еще непонятно ?


GuAV   (2005-01-24 15:44:00) [90]


>как ты их передашь, так они и "прочитаются"
> у тебя же не вызывает вопросов передача единственного
> параметра для вызова LoadLibrary() ? тогда почему
> вызывает вопрос передача более чем одного параметра ?


Смотрим CreateRemoteThread

HANDLE CreateRemoteThread(
 ...
 LPTHREAD_START_ROUTINE lpStartAddress,    // thread function
 LPVOID lpParameter,                       // thread argument
 ...
);

LPTHREAD_START_ROUTINE протипа ThreadProc

Смотрим ThreadProc

DWORD WINAPI ThreadProc(
 LPVOID lpParameter   // thread data
);


WINAPI означает использование модели stdcall.
Это значит что один параметр должен быть прочитан из стека и удалён оттуда при возврате.

Смотрим LoadLibrary

HMODULE LoadLibrary(
 LPCTSTR lpFileName   // file name of module
);


Тот же один параметр будет прочитан из стека и удалён оттуда при возврате.

т.е. можно передать lpFileName как lpParameter в CreateRemoteThread.

Смотрим LoadLibraryEx

HMODULE LoadLibraryEx(
 LPCTSTR lpFileName,  // file name of module
 HANDLE hFile,        // reserved, must be NULL
 DWORD dwFlags        // entry-point execution option
);


Три параметра будут прочитаны из стека. первый (lpFileName) будет равен  lpParameter в CreateRemoteThread. Что будет в последних двух ? И как это отразится на коде ОС который вызывает ThreadProc из CreateRemoteThread ?


Digitman   (2005-01-24 12:28:00) [91]


> Да, это справка по LoadLibraryEx но там нет упоминания совместного
> использования с CreateRemoteThread.


да мало ли каких еще упоминаний там нет !
все 3 ф-ции документированы, используй их как умеешь !


> Ничего, что первые два параметра прочитаются непоняно откуда
>


как ты их передашь, так они и "прочитаются"
у тебя же не вызывает вопросов передача единственного параметра для вызова LoadLibrary() ? тогда почему вызывает вопрос передача более чем одного параметра ?


GuAV   (2005-01-24 12:10:00) [92]


> http://msdn.microsoft.com/library/en-us/dllproc/base/lo
> adlibraryex.asp

Да, это справка по LoadLibraryEx но там нет упоминания совместного использования с CreateRemoteThread.


> что "точно" ?

Ничего, что первые два параметра прочитаются непоняно откуда и там будут возможно проблемы со стеком ?


Kerk   (2005-01-24 08:17:00) [93]

Digitman ©   (22.01.05 15:10) [57]
наиболее совершенен лишь способ, документированный самим разработчиком ОС - LoadLibrary[Ex] .. адрес т.входа в эту ф-цию передается параметром в CreateRemoteThread


Прочитал раза четыре и ПОНЯЛ!!! Супер! Мне в голову такое не могло прийти.


Digitman   (2005-01-24 08:07:00) [94]


> GuAV ©   (22.01.05 15:41) [58]


> Где ?

http://msdn.microsoft.com/library/en-us/dllproc/base/loadlibraryex.asp


> Точно ?


что "точно" ?


GuAV   (2005-01-22 15:41:00) [95]

Digitman ©   (22.01.05 15:10) [57]
LoadLibrary[ Ex]


Точно ?

HMODULE LoadLibraryEx(
 LPCTSTR lpFileName,  // file name of module
 HANDLE hFile,        // reserved, must be NULL
 DWORD dwFlags        // entry-point execution option
);



> документированный самим разработчиком ОС

Где ?


Digitman   (2005-01-22 15:10:00) [96]


> Какие есть способы с №2 и какой из них более совершенный?


наиболее совершенен лишь способ, документированный самим разработчиком ОС - LoadLibrary[Ex] .. адрес т.входа в эту ф-цию передается параметром в CreateRemoteThread .. адрес этот будет одинаков и для процесса приложения, вызывающего CreateRemoteThread, и для процесса, в чьем АП этот RemoteThread собственно требуется запустить .. утверждение равенства адресов основывается на факте того , что модуль kernel32, в котором реализована ф-ция CreateRemoteThread и который в обязательном порядке используется любым прикл.процессом в системе, загружается системой в АП любого процесса всегда по одному и тому же фактическому лин.адресу


> Как обмениваться данными с главным приложением и dll?


способов - масса.
но, наверно, наилучший же (и самый универсальный, рекомендуемый самим разработчиком) способ - использование именованых программных каналов (named pipes), технология и механизм которых как раз и предназначены для быстрой и надежной интеркоммуникации между различными процессами в системе.


GuAV   (2005-01-21 20:05:00) [97]

volser   (21.01.05 19:56) [55]

Тогда [27] - вполне возможно на дельфи.


volser   (2005-01-21 19:56:00) [98]


> Kerk ©  

Я не шарю в асьме и свои выводы формировал на основе примеров, котрые наводились на делфи


Kerk   (2005-01-21 18:27:00) [99]

volser   (21.01.05 18:07) [53]
1. Запустить функцию в процессе эксплорера без dll 100% не возможно и основано на теории вероятности, что не устраивает большинство.

ты мою демку смотрел вообще???


volser   (2005-01-21 18:07:00) [100]

Хочу обобщить понятое мной в этой ветки и все таки найти окончательный ответ на мой вопрос:
1. Запустить функцию в процессе эксплорера без dll 100% не возможно и основано на теории вероятности, что не устраивает большинство.
2. Существует несколько способов сделать это при помощью допольнительной dll.

Вопрос сосотоит в том:
- Какие есть способы с №2 и какой из них более совершенный?
- Как обмениватьося данными с главным приложением и dll?


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

Наверх

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