Ho una funzione di Windows 7 callgate che uso per chiamare direttamente le funzioni NT:Cercando di creare una funzione di Windows 8 callgate syscall
//Windows 7 syscall
__declspec(naked)
NTSTATUS __fastcall wow64 (DWORD ecxId, char *edxArgs)
{
__asm
{
mov eax, ecx;
mov ecx, m_param;
call DWORD ptr fs:[0xc0];
add esp, 0x4;
retn;
};
}
NTSTATUS callGate (DWORD id, ...)
{
va_list valist;
va_start(valist,id);
return wow64(id,valist);
}
//Example NTClose function
NTSTATUS closeHandle (void *object)
{
m_param = 0;
return callGate (0xc, object);
}
che sto cercando di fare la stessa cosa per le finestre 8.1. Ho aggiornato tutti gli indici di chiamata di funzione; tuttavia ho notato la funzione callgate reale è molto diversa su Windows 8.1:
Ecco cosa la porta chiamata effettiva assomiglia (situato nel ntdll.dll) per la funzione ZwCreateThreadEx
mov eax, 0xA5 //the call index
xor ecx, ecx //(m_param)
lea edx, dword ptr ss:[esp + 0x4] //this causes an sp-analysis failure in IDA
call dword ptr fs:[0xC0]
add esp, 0x4
retn 0x2C
Ora qui è l'esatto stessa funzione NT (ZwCreateThreadEx) su Windows 8.1
mov eax, 0xB0 //the call index
call dword ptr fs:[0xC0]
retn 0x2C //2c/4 = 11 parameters
ho cercato tutti i tipi di roba per ottenere questo lavoro su Windows 8.1, ma non hanno avuto alcun risultato. Non riesco a spiegare qual è il problema o cosa sta andando male, tutto quello che so è che sto facendo correttamente su Windows 7.
Dall'aspetto della funzione W8.1, ho tentato di creare questa singola funzione (Non funziona):
DWORD dwebp,dwret,dwparams; //for saving stuff
NTSTATUS __cdecl callGate (DWORD id, DWORD numparams, ...)
{
_asm
{
pop dwebp; //save ebp off stack
pop dwret; //save return address
pop eax; //save id
pop dwparams; //save param count
push dwret; //push return addy back onto stack cuz thats how windows has it
JMP DWORD ptr fs:[0xc0]; //call with correct stackframe (i think)
mov ecx, numparams; //store num params
imul ecx, 4; //multiply numparams by sizeof(int)
add esp, ecx; //add to esp
ret;
};
}
Qualsiasi aiuto sarebbe molto apprezzato.
Perché-oh-perché vuoi farlo senza scrivere un autista? –