Тёмный Кодер
Green Team
Написал шеллкод, пишу инжектор на С++. Получаю PID процесса, открываю его, использую VirtualAlloc для выделения памяти под шеллкод. Записываю шеллкод в выделенную память через WriteProcessMemory, получаю адресс, куда был записан шеллкод. Открываю дебаггер, перехожу по адрессу, ставлю бряк, в инжекторе перед исполнением стоит getchar(), я тыкаю any key и в дебаггере вызывается бряк, но проблема в том, что в конце, после того как была найдена функция, в моём случае - MessageBoxA, и она была вызвана - то управление никуда не возвращается. Код выглядит следующим образом:
Как видите, шеллкод заканчивается инструкцией add ESP, 16.
В дебаггере после исполнения лежит мусор, и приложение, куда инжектился шеллкод - тупо вылетает.
Пробовал получать EP приложения, и после исполнения добавить: jmp 0x(EP), но толку от этого = 0, ибо исполнение шло в отдельном потоке.
Вопрос к тем, кто как и я, а может и больше, занимается программированием на С++. Новичков или скрипт-кидди прошу не отвечать в теме.
Исполняю шеллкод через CreateRemoteThread
Код:
xor ecx, ecx
mov eax, fs:[ecx + 0x30]
mov eax, [eax + 0xc]
mov esi, [eax + 0x14]
lodsd
xchg eax, esi
lodsd
mov ebx, [eax + 0x10]
mov edx, [ebx + 0x3c]
add edx, ebx
mov edx, [edx + 0x78]
add edx, ebx
mov esi, [edx + 0x20]
add esi, ebx
xor ecx, ecx
Get_Function:
inc ecx
lodsd
add eax, ebx
cmp dword [eax], 0x50746547
jnz Get_Function
cmp dword [eax + 0x4], 0x41636f72
jnz Get_Function
cmp dword [eax + 0x8], 0x65726464
jnz Get_Function
mov esi, [edx + 0x24]
add esi, ebx
mov cx, [esi + ecx * 2]
dec ecx
mov esi, [edx + 0x1c]
add esi, ebx
mov edx, [esi + ecx * 4]
add edx, ebx
xor ecx, ecx
push ebx
push edx
push ecx
push 0x41797261
push 0x7262694c
push 0x64616f4c
push esp
push ebx
call edx
add esp, 0xc
pop ecx
push eax
xor eax, eax
mov ax, 0x6c6c
push eax
push 0x642e3233
push 0x72657375
push esp
call [esp + 16]
add esp, 12
push eax
xor eax, eax
mov eax, 0x2341786f
push eax
sub dword [esp + 3], 0x23
push 0x42656761
push 0x7373654d
push esp
push dword [esp + 16]
call [esp + 28]
add esp, 12
push eax
xor eax, eax
mov eax, 0x23333231
push eax
sub dword [esp + 3], 0x23
push esp
xor eax, eax
mov eax, 0x23313233
push eax
sub dword [esp + 3], 0x23
push esp
push 0x20
push dword [ESP + 4]
push dword [ESP + 16]
xor eax, eax
push eax
call [ESP + 32]
add ESP, 16
Как видите, шеллкод заканчивается инструкцией add ESP, 16.
В дебаггере после исполнения лежит мусор, и приложение, куда инжектился шеллкод - тупо вылетает.
Пробовал получать EP приложения, и после исполнения добавить: jmp 0x(EP), но толку от этого = 0, ибо исполнение шло в отдельном потоке.
Вопрос к тем, кто как и я, а может и больше, занимается программированием на С++. Новичков или скрипт-кидди прошу не отвечать в теме.
Исполняю шеллкод через CreateRemoteThread