![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CreateRemoteThread???
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?