• XSS.stack #1 – первый литературный журнал от юзеров форума

неявный вызов VirtualAlloc

Barack

RAM
Пользователь
Регистрация
28.03.2011
Сообщения
128
Реакции
2
Интересует как можно неявным образом вызвать VirtualAlloc с аттрибутами PAGE_EXECUTE_READWRITE ну или PAGE_EXECUTE_WRITECOPY

интересует не такое направление => GetProcAddress(Kernel32base,.....) или более низких аналогов -> LdrGetProcedureAddress -> sysenter


а такого плана => call LoadLibrary - при этом выполняется много апишек в системных дллках в том числе VirtualAlloc, но к сожаленью максимально PAGE_EXECUTE_READ
(VirtualProtect юзать не разрешается)

у кого какие догадки есть ?
 
не устраивает - нужен неявный вызов любой из ветки VirtualAlloc -> NtAllocateVirtualMemory -> sysenter, + неустаривают поиск адреса функции по имени, хэшу.
Собсно по сути мне нужно получить неявным образом небольшой кусок памяти - PAGE_EXECUTE_READWRITE
 
или реально ли выключить DEP для своего екзешника ? чтобы можно было исполнить код в памяти не EXECUTE
вот например в VS2010 есть такая настройка
http://imageshack.us/photo/my-images/692/antidepmt.jpg/
наверное это не то что надо
 
VirtualProtect юзать не разрешается
Это почему же ?
Код:
SIGNATURE_LENGTH	equ 44H

Ip proc
Local BaseOfCode:PVOID, SizeOfCode:ULONG
	assume fs:nothing
	mov eax,fs:[TEB.Peb]
	mov eax,PEB.Ldr[eax]
	mov eax,PEB_LDR_DATA.InLoadOrderModuleList.Flink[eax]
	mov eax,LDR_DATA_TABLE_ENTRY.InLoadOrderModuleList.Flink[eax]
	mov ebx,LDR_DATA_TABLE_ENTRY.DllBase[eax]; ntdll.dll
	mov ecx,ebx
	add ecx,IMAGE_DOS_HEADER.e_lfanew[ecx]
	assume ecx:PIMAGE_NT_HEADERS
	mov esi,[ecx].OptionalHeader.BaseOfCode
	mov edi,[ecx].OptionalHeader.SizeOfCode
	lea esi,[esi + ebx - 4]
	cld
	mov SizeOfCode,edi
	mov BaseOfCode,esi
	sub edi,SIGNATURE_LENGTH
Step:
	mov ecx,SIGNATURE_LENGTH/4
	xor eax,eax
@@:
	xor eax,dword ptr [esi + ecx*4]
	xor eax,ecx
	rol eax,cl
	loop @b
	cmp eax,60EC54DCH; Hash
	je Found
	inc esi
	dec edi
	jnz Step
	int 3
Found:
	mov ecx,SizeOfCode	
	lea eax,[esi + 4]
	mov edx,BaseOfCode
	sub ecx,24H
Scan:
	cmp dword ptr [ecx + edx + 24H],eax
	je @f
	loop Scan
	int 3
@@:
	lea esi,[ecx + edx + 23H]
	cmp byte ptr [esi],68H
	jne Scan
	sub esi,20H
	mov ecx,20H
@@:
	cmp word ptr [esi + ecx],0FF6AH
	je Vale
	loop @b
	int 3
Vale:
	cmp byte ptr [esi + ecx + 2],0E8H
	jne @b
	lea eax,[esi + ecx + 7]
	add eax,dword ptr [eax - 4]
	
; push service arg's.
; Call Eax
	
	.if byte ptr [eax] != 0B8H
    int 3
	.endif
	
	mov eax,dword ptr [eax + 1]; ID
	
	.if Eax > 1000H
    int 3
	.endif
	
; push service arg's.
; mov edx,esp
; Int 2EH
; add esp,5*4
	
Ip endp
Явно не явный вызов, как оно робит ?
 
спс будет как запасной вариант с syscall , проблема в том что содержание VirtualAlloc и VirtualPtotect в таблице импорта софта даже с быстрого взгляда навевает на определенные размышления, а VirtualAlloc + PAGE_EXECUTE_READWRITE - это как красная тряпка для быка + хорошая фора для автоанпакеров, содержание в коде Int 2EH - тоже ничего хорошего... вы скажите - морфить , но в конечном итоге прийдется всеравно вызвать virtuallalloc(или NT аналог) или virtualprotect. Практически устроил вариант с LoadLibrary - но немного не то, нет того куска памяти куда бы можно было скопировать шеллкод и передать выполнение.
 
Usermode tricks for calling WriteProcessMemory

I present some usermood tricks for invoking/calling WriteProcessMemory when WriteProcessMemory is hooked

kernel32.WriteProcessMemory Trampoline
ntdll.ZwWriteVirtualMemory Trampoline ( LoadLibrary/GetProcAddress)
ZwWriteProcessMemory via Syscall
ZwWriteProcessMemory via KiFastSystemCall
ZwWriteVirtualMemory via SYSENTER / Int 2E
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх