Tôi có một chức năng windows 7 callgate mà tôi sử dụng để gọi chức năng NT trực tiếp:Đang cố gắng để tạo ra một cửa sổ 8 syscall chức năng callgate
//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);
}
Tôi cố gắng để làm điều tương tự cho các cửa sổ 8.1. Tôi đã cập nhật tất cả các chỉ mục cuộc gọi chức năng; Tuy nhiên tôi nhận thấy chức năng callgate thực tế là khá khác nhau trên cửa sổ 8.1:
Dưới đây là những gì các cổng gọi thực tế trông như thế (nằm trong ntdll.dll) cho hàm 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
Bây giờ đây là CHÍNH XÁC cùng chức năng NT (ZwCreateThreadEx) trên windows 8.1
mov eax, 0xB0 //the call index
call dword ptr fs:[0xC0]
retn 0x2C //2c/4 = 11 parameters
Tôi đã thử mọi thứ để làm việc này trên windows 8.1 nhưng không có kết quả. Tôi không thể giải thích vấn đề là gì hoặc điều gì đang xảy ra, tất cả những gì tôi biết là tôi đang thực hiện chính xác trên các cửa sổ 7.
Từ giao diện của hàm W8.1, tôi đã cố gắng tìm ra chức năng này (Không hoạt động):
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;
};
}
Mọi trợ giúp sẽ được đánh giá cao.
Tại sao-oh-tại sao bạn muốn làm điều đó mà không cần viết trình điều khiển? –