В таком случае перед выходом потока из спящего состояния загрузи в Eax указатель на свой код, прежде определив текущий(это BaseProcessStart), затем управление получит твой код, из него нужно сохранить контекст потока, подгрузить модуль, восстановить контекст и загрузить в Eax значение, которое было изначально там, после чего выполнить NtContinue.
имхо, это то же самое, что использовать QueueUserAPC(), только сложнее. Я же говорил, что даже LoadLibrary("kernel32.dll") в начале потока может вывалиться, а процесс после этого уже поломанный. Мне кажется (но ещё надо будет проверить), что этот же поток инициализирует статически прилинкованные длл, а потом запускает WinMain.
А не, туплю, перед обработкой апк(NtTestAlert) лоадер разлочивается, не должно виснуть. Как по мне, так ерунда это всё, накой нужно грузить kernel32, если загрузчик её сам грузит.
у меня сначала вываливалось LoadLibrary("моя длл"), я подумал, что ошибка где-то в ней и решил проверить с kernel32, но всё равно валится. Всё это копание в грязи. Надо всё-таки подменить точку входа. Так надёжнее.
Насчёт точки входа я уже сказал #22. А на счёт того, что через апк падает - нужно не в небо пальцам тыкать, а на матчасть опираться. Существует определённая модель вызова и требования к APC.
leniviy сплайсил бы ты лучше из порождающего процесса - WriteProcessMemory, а остальная инициализация при первом вызове хука
Вроде получилось. Для запуска кода, который подгружает dll меняю CONTEXT.Eax, как посоветовал Clerk Для сплайсинга использую detours9xmod Глюков в Тотале/ie пока не видно
Под Win98 у спящего нового треда на threadproc указывает не eax, а dword ptr [esp+60] Под Vista64 32битные запускаются, iexplore нет - видимо 64битный Clerk, где ты читал про Eax? Хочу больше узнать о совместимости.
leniviy Причём здесь спящий новый поток и threadproc? В eax находится указатель на точку входа в PE в момент создания первичного потока. После проведения инициализации управление передаётся по адресу, который был в eax. Прочесть можно хотя бы у Неббета.
leniviy Нуб. Сурцы, дебаггер. Не сравнивай себя с некоторыми товарищами тут - то что для тебя иной мир, для меня как два пальца абасцать, задолбали.. Хуле там думать. Я лоадер тысячи раз дебажил. Что тебе мешает сделать тоже ?
Clerk Похоже слово "читал" задело неслабо. P.S. Кстати, если речь идёт о совместимости, то лучше увидеть один раз в более-менее официальной документации, чем сотню лоадеров отреверсить.