Доброго времени суток, уважаемые. Столкнулся со следующей проблемой: пытаюсь проинжектиться в уже запущенный процесс (с помощью NtMapViewOfSection), получаю контекст потока и т.д. Мне необходимо вызвать в чужом процессе CreateThread с моим кодом и вернуть управление процессу, т.е. восстановить контекст. Каким образом должен выглядеть данный шеллкод для корректного создания потока и восстановления контекста? (синтаксис masm) Благодарю за внимание.
Вопрос неточный. Тебе нужно, чтобы мы для тебя шелкоднаписали? Ты пиши свой кодес, если что-то не получается - задавай конкретные вопросы.
итак, имеется код (синтаксис masm): Код (Text): ... delta equ ebx - main_thread ... main_thread proc call $ + 5 pop ebx sub ebx, $ - main_thread - 1 lea eax, [delta + offset szUser32] push eax call dword ptr [delta + _LoadLibraryA] push 0 lea eax, [delta + offset szTitle] push eax lea eax, [delta + offset szMessage] push eax push 0 call dword ptr [delta + _MessageBoxA] ret main_thread endp InjectShell: pushfd pushad call $+5 pop ebx sub ebx,$-main_thread-1 lea edi,.address_return+delta lea eax,code_shell_replaced+delta lea edx,main_thread+delta push 0 push 0 push esp push edx push 0 push 0 call dword ptr [delta + _CreateThread] push eax call dword ptr [delta + _CloseHandle] popad popfd db 68h .address_return: dd 4 ret InjectShell_size = $ - InjectShell code_to_call_shell: db 0xE9 .correct_call: dd 4 code_to_call_shell_size = $ - code_to_call_shell code_shell_replaced dd code_to_call_shell_size old_protect dd 1 inject proc dwPID : DWORD ... invoke VirtualAlloc,0,InjectSize,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE mov hMem,eax invoke OpenProcess,... ... invoke find_thread_in_process, dwPID ... invoke suspend_all_threads, dwPID ... invoke GetThreadContext,... mov edx,code_shell_replaced-main_thread add edx,hMem invoke ReadProcessMemory,hProcess,context.regEip,edx,code_to_call_shell_size,0 mov eax,old_protect-main_thread add eax,hMem invoke VirtualProtectEx,hProcess,context.regEip,code_to_call_shell_size,PAGE_WRITECOPY,eax mov eax,InjectShell.address_return-main_thread add eax,hMem mov ecx,context.regEip mov eax,ecx ; пишем в шеллкод-файл invoke WriteFile,... ... invoke CreateFileMapping,... ... invoke ZwMapViewOfSection,.... ... mov edx,code_to_call_shell.correct_call-main_thread add edx,hMem mov eax,ViewBase add eax,InjectShell-main_thread mov ecx,context.regEip add ecx,5 sub eax,ecx mov edx,eax mov edx,code_to_call_shell-main_thread add edx,hMem invoke ZwWriteVirtualMemory,hProcess,context.regEip,edx,code_to_call_shell_size,0 invoke VirtualProtectEx,hProcess,context.regEip,code_to_call_shell_size,\ PAGE_EXECUTE_READWRITE,addr temp mov edx,code_shell_replaced-main_thread add edx,hMem invoke WriteProcessMemory,hProcess,context.regEip,edx,code_to_call_shell_size,0 mov eax,old_protect-main_thread add eax,hMem VirtualProtectEx,hProcess,context.regEip,code_to_call_shell_size,\ eax,addr temp ... invoke ZwUnmapViewOfSection,... ... не работает... (( может быть я не правильно восстанавливаю контекст? будьте любезны, направте на путь истинный
GeNeZiS Собираешь обычный PE-файл пытаешься вывести через call dword ptr [delta+LoadLibraryA]/call dword ptr [delta+MessageBoxA] MessageBox, получилось? переходишь к следующему пункту - CreateThread/СloseHandle, после которых выводишь MessageBox и так далее пока не соберешь весь шелл