Пробывал различные варианты: перехват CreateProcessA,CreateProcessW. iexplore.exe и т.д. иногда не загружаются до конца. NewCreateProcessX(...){ .... ret=OldCreateProcessX(..CREATE_SUSPENDED...); DoInject(Pid,Proc); ResumeThread(lpProcessInformation->hThread); return ret; } перехват NtCreateThread NtResumeThread по MS-Rem- тотже эфект NewNtCreateThread(...){ .... ret=OldZwCreateThread(...); if (CurrentPid!=ClientId->UniqueProcess){ NewProcessFlag=true; } if (!CreateSuspended){ ResumeThread((HANDLE)*ThreadHandle); } return ret; } NewNtResumeThread(...){ NtQueryInformationThread(ThreadHandle, 0, &ThreadInfo, sizeof(mTHREAD_BASIC_INFORMATION), NULL); if (NewProcessFlag && (ThreadInfo.ClientId.UniqueProcess != CurrentPid) ){ DoInject(PidThreadInfo.ClientId.UniqueProcess,Proc); NewProcessFlag=false; } return OldNtResumeThread(ThreadHandle,PreviousSuspendCount); } внедрение в процесс через CreateRemoteThread. Удалённая процедура юзает функции из ntdll.dll kernel32.dll user32.dll advapi32.dll. Возникновение бага нестабильно. Особо часто проявляется на тормозном целероне примерно через раз. На более быстром пне раз из 30-50 примерно. Может и меньше. Ося одна - XP SP3.
уже стопцот раз говорилось, что кодес со статей рема довольно стрёмный и с кучей недостатков. сам юзаю перехват CreateProcessIndirectW (вроде так) и не использую саспендед/перехват резум. работает вплоть до вин7. и конешн это не самый крутой вариант из тех, которые предумале (а многие даже обсудиле тут на форуме) со времён стотей рема