Process up and ready?
От: namux  
Дата: 21.05.09 06:19
Оценка:
Возникла такая проблемка — может, кто чего посоветует.
Моя апликуха ждет появления определенного процесса, по появлении инжектит в него мою дллку с помощью тыщу раз описанной методики через CreateRemoteThread. Так вот, если после появления процесса немного не подождать, то при вызове CreateRemoteThread тот прцесс тихо умирает
Собственно, вопрос: как, чего и сколько ждать? Когда процесс будет готов? А тупо ждать 5 сек неохота.
Всем спасибо!
Re: Process up and ready?
От: Сергей Мухин Россия  
Дата: 21.05.09 06:21
Оценка:
Здравствуйте, namux, Вы писали:

N>Возникла такая проблемка — может, кто чего посоветует.

N>Моя апликуха ждет появления определенного процесса, по появлении инжектит в него мою дллку с помощью тыщу раз описанной методики через CreateRemoteThread. Так вот, если после появления процесса немного не подождать, то при вызове CreateRemoteThread тот прцесс тихо умирает
N>Собственно, вопрос: как, чего и сколько ждать? Когда процесс будет готов? А тупо ждать 5 сек неохота.
N>Всем спасибо!

WaitForInputIdle
---
С уважением,
Сергей Мухин
Re[2]: Process up and ready?
От: Аноним  
Дата: 21.05.09 06:27
Оценка:
Проверял — не работает. Кстати, так и не понял — почему?
Re[3]: Process up and ready?
От: Сергей Мухин Россия  
Дата: 21.05.09 06:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Проверял — не работает. Кстати, так и не понял — почему?


что значит "не работает"?
выдает ошибку? какую?
не дожидается?
приложение консольное?
---
С уважением,
Сергей Мухин
Re[4]: Process up and ready?
От: namux  
Дата: 21.05.09 06:33
Оценка:
Не работает — значит что поведение такое же как и без WaitForInputIdle() — процесс умирает. Приложение (куда инжектится) — не консольное.
Re: Process up and ready?
От: x64 Россия  
Дата: 21.05.09 06:47
Оценка: +1
N>Моя апликуха ждет появления определенного процесса, по появлении инжектит в него мою дллку с помощью тыщу раз описанной методики через CreateRemoteThread. Так вот, если после появления процесса немного не подождать, то при вызове CreateRemoteThread тот прцесс тихо умирает

Падение целевого процесса происходит до или после начала исполнения внедрённого кода? Не кода DLL, а именно внедрённого кода.
Re[2]: Process up and ready?
От: namux  
Дата: 21.05.09 06:52
Оценка:
Падение происходит при вызове CreateRemoteThread.
Re[3]: Process up and ready?
От: x64 Россия  
Дата: 21.05.09 07:07
Оценка: +1
N>Падение происходит при вызове CreateRemoteThread.

Это не ответ.
Re[4]: Process up and ready?
От: namux  
Дата: 21.05.09 07:16
Оценка:
??? Объясните, плз, что Вас интересует?
Re[5]: Process up and ready?
От: x64 Россия  
Дата: 21.05.09 07:30
Оценка:
N>??? Объясните, плз, что Вас интересует?

Меня интересует ровно то, что я спросил здесь
Автор: x64
Дата: 21.05.09
. Если ты не понимаешь, что это значит, то пожалуй тебе стоит сходить подучиться немного, и только после этого заниматься подобными вещами.
Re[6]: Process up and ready?
От: namux  
Дата: 21.05.09 07:33
Оценка: -2
Спасибо за развернутый ответ. Если кое-кто излишне умный немного подучится то поймет, что если CreateRemoteThread не отрабатывает то и никакой код не внедряется.
Re[7]: Process up and ready?
От: Сергей Мухин Россия  
Дата: 21.05.09 07:42
Оценка:
Здравствуйте, namux, Вы писали:

N>Спасибо за развернутый ответ. Если кое-кто излишне умный немного подучится то поймет, что если CreateRemoteThread не отрабатывает то и никакой код не внедряется.


не надо горячиться. Почитайте ЧТО спрашивает x64.
"начался ли выполняться внедренный код", а Вы отвечаете "падение происходит при CreateRemoteThread"

Это же РАЗНЫЕ процессы!
---
С уважением,
Сергей Мухин
Re[7]: Process up and ready?
От: -prus-  
Дата: 21.05.09 07:47
Оценка:
Здравствуйте, namux, Вы писали:

N>Спасибо за развернутый ответ. Если кое-кто излишне умный немного подучится то поймет, что если CreateRemoteThread не отрабатывает то и никакой код не внедряется.


Вы не кипятитесь .
Просто приведете код, где пытаетесь внедрить DLL и код самой DLL. Посмотрим, а то информации не так уж и много Вы привели.
С уважением,
Евгений
Re[8]: Process up and ready?
От: namux  
Дата: 21.05.09 08:00
Оценка:
Я не кипячусь, просто не люблю хамства.
Насчет внедренного кода я же ответил — внедрение происходит посредством CreateRemoteThread:

PTHREAD_START_ROUTINE pfnThreadRtn = ( PTHREAD_START_ROUTINE ) GetProcAddress( GetModuleHandle( TEXT( "Kernel32" )), "LoadLibraryW" );
CreateRemoteThread( hProcess, NULL, 0, pfnThreadRtn, pszLibFileRemote, 0, NULL );

где pszLibFileRemote — имя длл в адресном пространстве целевого процесса.
При вызове CreateRemoteThread процесс умирает, то есть как предлагаете проверить начал ли исполняться внедренный код?
Re[9]: Process up and ready?
От: -prus-  
Дата: 21.05.09 08:13
Оценка:
Здравствуйте, namux, Вы писали:

N>Я не кипячусь, просто не люблю хамства.

N>Насчет внедренного кода я же ответил — внедрение происходит посредством CreateRemoteThread:

N>PTHREAD_START_ROUTINE pfnThreadRtn = ( PTHREAD_START_ROUTINE ) GetProcAddress( GetModuleHandle( TEXT( "Kernel32" )), "LoadLibraryW" );

N>CreateRemoteThread( hProcess, NULL, 0, pfnThreadRtn, pszLibFileRemote, 0, NULL );

N>где pszLibFileRemote — имя длл в адресном пространстве целевого процесса.

N>При вызове CreateRemoteThread процесс умирает, то есть как предлагаете проверить начал ли исполняться внедренный код?

Приведите плз весь процесс ваших действий по внедрению полностью.
WriteProcessMemory() делали? VirtualAllocEx()? VirtualProtectEx()? Или догадываться?
С уважением,
Евгений
Re[5]: Process up and ready?
От: Pavel Dvorkin Россия  
Дата: 21.05.09 08:13
Оценка:
Здравствуйте, namux, Вы писали:

N>Не работает — значит что поведение такое же как и без WaitForInputIdle() — процесс умирает. Приложение (куда инжектится) — не консольное.


Приложение, куда инжектится — твое ? Если да, передай ему в командной строке дескриптор окна из инжектора, и пусть он пришлет сообщение этому окну, когда будет готов (напрмер, на первом WM_PAINT или где-то еще). Или передай ему ID своего потока и пусть он PostThreadMessage.
With best regards
Pavel Dvorkin
Re[6]: Process up and ready?
От: Pavel Dvorkin Россия  
Дата: 21.05.09 08:15
Оценка:
PD>Приложение, куда инжектится — твое ? Если да, передай ему в командной строке дескриптор окна из инжектора, и пусть он пришлет сообщение этому окну, когда будет готов (напрмер, на первом WM_PAINT или где-то еще). Или передай ему ID своего потока и пусть он PostThreadMessage.

Сорри, отменяется. Не совсем внимательно прочитал
With best regards
Pavel Dvorkin
Re[10]: Process up and ready?
От: Сергей Мухин Россия  
Дата: 21.05.09 08:15
Оценка:
Здравствуйте, -prus-, Вы писали:


P>Приведите плз весь процесс ваших действий по внедрению полностью.

P>WriteProcessMemory() делали? VirtualAllocEx()? VirtualProtectEx()? Или догадываться?

в данном случае догадаться легко. т.к. был намек, что "если подождать 5 сек то все работает".
---
С уважением,
Сергей Мухин
Re[10]: Process up and ready?
От: namux  
Дата: 21.05.09 08:19
Оценка:
Ок, вот код инжектора:

BOOL InjectDLL( TCHAR * ProcessName, TCHAR * DllName )
{
DWORD pID;

if ( !GetProcessID( ProcessName, pID )) return FALSE;

HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pID );

WaitForProcessUp( pID, hProcess );

if ( hProcess == NULL ) return FALSE;

int Len = _tcsclen( DllName ) + 1;

TCHAR * pszLibFileRemote = ( TCHAR * ) VirtualAllocEx( hProcess, NULL, Len * 2, MEM_COMMIT, PAGE_READWRITE );

if ( pszLibFileRemote == NULL )
{
CloseHandle( hProcess );

return FALSE;
}

if ( !WriteProcessMemory( hProcess, pszLibFileRemote, DllName, Len * 2, NULL ))
{
CloseHandle( hProcess );

return FALSE;
}

PTHREAD_START_ROUTINE pfnThreadRtn = ( PTHREAD_START_ROUTINE ) GetProcAddress( GetModuleHandle( TEXT( "Kernel32" )), "LoadLibraryW" );

if ( CreateRemoteThread( hProcess, NULL, 0, pfnThreadRtn, pszLibFileRemote, 0, NULL ) == NULL )
{
CloseHandle( hProcess );

return FALSE;
}

CloseHandle( hProcess );

return TRUE;

} /* InjectDLL */

Еще раз подчеркиваю — проблема проявляется только если длл инжектится сразу после запуска целевого процесса (процесс не мой). Если WaitForProcessUp состоит из вызова Sleep( 3000 ) то все работает ок.
Re[9]: Process up and ready?
От: x64 Россия  
Дата: 21.05.09 08:21
Оценка:
N>При вызове CreateRemoteThread процесс умирает, то есть как предлагаете проверить начал ли исполняться внедренный код?

Т.е. ты предлагаешь мне рассказать тебе, как пользоваться отладчиком? Ну есть документация, почитай. Ты говоришь что падает целевой процесс. Следовательно, тебе нужно, как минимум, сузить область поиска ошибки. Для этого я предлагаю тебе разделить в уме весь алгоритм внедрения на три фазы:

1. Подготовительные действия.
2. Запуск внедрённого кода.
3. Запуск кода DLL.

Найди хотя бы фазу, в которой ошибка, — уже станет сильно легче.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.