Привет. Есть внедрение длл методом рихтера через CreateRemoteThread. Заметил дурацкую особенность.Если запустить мой ехе_шник,то длл внедряется только в процессы,запущеные под юзером. Однако ,если запустить через студию,то внедреятся во все. Ничего не могу понять-почему так происходит? Может надо какие права выставить в SECURITY_ATTRIBUTES в параметрах CreateRemoteThread? Может еще что? И еще-ребята,скиньте плиз,пример на С++,когда CreateRemoteThread используется c QueueUserAPC
Ну и ? Есть у меня код Код (Text): HANDLE hToken; TOKEN_PRIVILEGES* NewState; OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES, &hToken); NewState = (TOKEN_PRIVILEGES*) malloc (sizeof (TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES)); NewState->PrivilegeCount = 1; LookupPrivilegeValue (NULL, SE_SHUTDOWN_NAME, &NewState->Privileges[0].Luid); NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges (hToken, FALSE, NewState, NULL, NULL, NULL); free (NewState); CloseHandle (hToken); Который вызывается перед Код (Text): //открыть процесс с нужным доступом hProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_WRITE| PROCESS_VM_OPERATION, FALSE, dwProcessId); И что дальше? Все так же и остается...
Если под вистой то надо юзать RtlCreateUserThread ! Причем куда он выходит под вистой я не смотрел, но под ХРю надо инжектить код, и выходить ExitThread'ом
Адреса возврата для RtlCreateUserThread нет. Такие потоки не начинаются с BaseThreadStart, а начинаются прямо с адреса который ты передаешь.