Возникла такая проблемка — может, кто чего посоветует.
Моя апликуха ждет появления определенного процесса, по появлении инжектит в него мою дллку с помощью тыщу раз описанной методики через CreateRemoteThread. Так вот, если после появления процесса немного не подождать, то при вызове CreateRemoteThread тот прцесс тихо умирает
Собственно, вопрос: как, чего и сколько ждать? Когда процесс будет готов? А тупо ждать 5 сек неохота.
Всем спасибо!
Здравствуйте, namux, Вы писали:
N>Возникла такая проблемка — может, кто чего посоветует. N>Моя апликуха ждет появления определенного процесса, по появлении инжектит в него мою дллку с помощью тыщу раз описанной методики через CreateRemoteThread. Так вот, если после появления процесса немного не подождать, то при вызове CreateRemoteThread тот прцесс тихо умирает N>Собственно, вопрос: как, чего и сколько ждать? Когда процесс будет готов? А тупо ждать 5 сек неохота. N>Всем спасибо!
N>Моя апликуха ждет появления определенного процесса, по появлении инжектит в него мою дллку с помощью тыщу раз описанной методики через CreateRemoteThread. Так вот, если после появления процесса немного не подождать, то при вызове CreateRemoteThread тот прцесс тихо умирает
Падение целевого процесса происходит до или после начала исполнения внедрённого кода? Не кода DLL, а именно внедрённого кода.
Спасибо за развернутый ответ. Если кое-кто излишне умный немного подучится то поймет, что если CreateRemoteThread не отрабатывает то и никакой код не внедряется.
Здравствуйте, namux, Вы писали:
N>Спасибо за развернутый ответ. Если кое-кто излишне умный немного подучится то поймет, что если CreateRemoteThread не отрабатывает то и никакой код не внедряется.
не надо горячиться. Почитайте ЧТО спрашивает x64.
"начался ли выполняться внедренный код", а Вы отвечаете "падение происходит при CreateRemoteThread"
Здравствуйте, namux, Вы писали:
N>Спасибо за развернутый ответ. Если кое-кто излишне умный немного подучится то поймет, что если CreateRemoteThread не отрабатывает то и никакой код не внедряется.
Вы не кипятитесь .
Просто приведете код, где пытаетесь внедрить DLL и код самой DLL. Посмотрим, а то информации не так уж и много Вы привели.
где pszLibFileRemote — имя длл в адресном пространстве целевого процесса.
При вызове CreateRemoteThread процесс умирает, то есть как предлагаете проверить начал ли исполняться внедренный код?
Здравствуйте, 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()? Или догадываться?
Здравствуйте, namux, Вы писали:
N>Не работает — значит что поведение такое же как и без WaitForInputIdle() — процесс умирает. Приложение (куда инжектится) — не консольное.
Приложение, куда инжектится — твое ? Если да, передай ему в командной строке дескриптор окна из инжектора, и пусть он пришлет сообщение этому окну, когда будет готов (напрмер, на первом WM_PAINT или где-то еще). Или передай ему ID своего потока и пусть он PostThreadMessage.
PD>Приложение, куда инжектится — твое ? Если да, передай ему в командной строке дескриптор окна из инжектора, и пусть он пришлет сообщение этому окну, когда будет готов (напрмер, на первом WM_PAINT или где-то еще). Или передай ему ID своего потока и пусть он PostThreadMessage.
P>Приведите плз весь процесс ваших действий по внедрению полностью. P>WriteProcessMemory() делали? VirtualAllocEx()? VirtualProtectEx()? Или догадываться?
в данном случае догадаться легко. т.к. был намек, что "если подождать 5 сек то все работает".
Еще раз подчеркиваю — проблема проявляется только если длл инжектится сразу после запуска целевого процесса (процесс не мой). Если WaitForProcessUp состоит из вызова Sleep( 3000 ) то все работает ок.
N>При вызове CreateRemoteThread процесс умирает, то есть как предлагаете проверить начал ли исполняться внедренный код?
Т.е. ты предлагаешь мне рассказать тебе, как пользоваться отладчиком? Ну есть документация, почитай. Ты говоришь что падает целевой процесс. Следовательно, тебе нужно, как минимум, сузить область поиска ошибки. Для этого я предлагаю тебе разделить в уме весь алгоритм внедрения на три фазы: