простите за глупый вопрос но не могу сообразить есть процесс, к нему подгружена dll как мне инжектнуть кусок кода в этот exe из dll (для того чтобы обеспечить принуд. выгрузку dll)
Если тебе надо выгрузить удаленно dll из процесса передай этой процедуре PID, имя_dll,размер_имени. CautchDll proc pPIDWORD,pDllNameWORD,szDllNameWORD ;;;;;;;;;; возвращает (eax=0-удача), (еах=-1)-ошибка LOCAL hprocWORD LOCAL pmemoryWORD LOCAL hthreadWORD invoke OpenProcess,PROCESS_ALL_ACCESS,0,pPID ;открываем процесс mov hproc,eax .if eax==0 or eax,-1 jmp CautchDllError ;;; ecли ошибка, то выходим .endif invoke VirtualAllocEx,eax,0,szDllName,MEM_COMMIT,PAGE_EXECUTE mov pmemory,eax invoke WriteProcessMemory,hproc,eax,pDllName,szDllName,0 ;;;переписываем имя DLL invoke GetModuleHandle,SADD("kernel32.dll") invoke GetProcAddress,eax,SADD("FreeLibraryA") invoke CreateRemoteThread,hproc,0,0,eax,pmemory,NULL,NULL mov hthread,eax .if eax==0 or eax,-1 ; если не получается создать поток, jmp CautchDllError ; то выходим invoke CloseHandle,hproc .endif invoke WaitForSingleObject,eax,-1 invoke CloseHandle,hthread invoke CloseHandle,hproc xor eax,eax CautchDllError: ret CautchDll endp
Очень просто на asm. К примеру в DLLEntry (или как там она называется) в стеке всегда существует адрес возврата в вызывающую программу, формируешь новый стек, Так чтобы по возврату из FreeLibraryA преход был на основной код вызывающей программы, в него же запихиваешь параметры и делаешь jmp FreeLibraryA из dll