Странно если возвратить FALSE Код (Text): DllEntry proc hinstDLL:dword,dwReason:dword,lpvReserved:dword .if dwReason == DLL_PROCESS_ATTACH invoke MessageBox,0,addr mes,0,0 .endif xor eax,eax ret DllEntry endp То сообщение появится три раза
Дело не в количестве деатачей (когда инжектишь в эксплорер, тот вообще при каждом движении по папкам выбрасывает пачку этих сообщений), а в том, что код после Код (Text): .if dwReason == DLL_PROCESS_ATTACH invoke MessageBox,0,addr mes,0,0 .endif выполниться железно один раз. Согнал весь функционал в потоки, и возврат. Так же спокойно можешь окна и диалоги в потоках обрабатывать (правда там есть пара особенностей).
Какой один раз, если мы например хотим попасть в процесс, так попали, выделяем память, записуем туда базонезависимый код, создаём поток, и возвращаем FALSE, так вот эта вся байда будет вызыватся несколько раз если конечно флаг какойнибудь не поставить
Я имею ввиду при вызове LoadLibrary. "Заходов" в DllMain будет несколько, но дальше DLL_PROCESS_ATTACH пройдёт только раз. При одном вызове LoadLibrary естественно.
Понту с АПС если писать в память... Смысл то был в инжекте без открытия процесса: Код (Text): PVOID GetDllNameAddress() { PVOID pMZ=GetModuleHandle(TEXT("ntdll.dll")); DWORD dwExportSize; return (PVOID)((DWORD_PTR)pMZ+((PIMAGE_EXPORT_DIRECTORY)RtlImageDirectoryEntryToData(pMZ,TRUE,IMAGE_DIRECTORY_ENTRY_EXPORT,&dwExportSize))->Name+2); } ZwQueueApcThread(OpenThread(THREAD_SET_CONTEXT,FALSE,(DWORD)(DWORD_PTR)GetThreadIDByName(&usServName,1)),LoadLibraryExA,GetDllNameAddress(),0,0)))
tylerdurden А как это будет на ассемблере? мож скопилишь с ключом /FA у меня чото не получается. с С++ воабще не дружу =(
2FED Блин, почитай стотью...как ее...обзор неск-ких методик обхода фаеров. Так этот способ расписан. Если не ошибаюсь, просто ищешь смещение строки с названием ntdll.dll (или любой другой, которая присутсвует в процессе, прибавляешь нему пару байт и через апс инжектишь свою длл с названием dll.dll, например. Но, все равно палится уже.