让后台去入库了。
__int64 __fastcall sub_111E8(struct _DEVICE_OBJECT *a1, IRP *a2)
{
unsigned int v3; // edx
struct _IO_STACK_LOCATION *CurrentStackLocation; // rax
void **MasterIrp; // rbx
v3 = 0;
if ( a1 == DeviceObject )
{
CurrentStackLocation = a2->Tail.Overlay.CurrentStackLocation;
if ( CurrentStackLocation->MajorFunction == 14 )
{
switch ( CurrentStackLocation->Parameters.Read.ByteOffset.LowPart )
{
case 0x8505E000:
v3 = sub_1137C(a2->AssociatedIrp.MasterIrp, CurrentStackLocation->Parameters.Read.Length);
break;
case 0x8505E004:
qword_13148 = *(_QWORD *)a2->AssociatedIrp.MasterIrp;
*(_DWORD *)a2->AssociatedIrp.MasterIrp = ObReferenceObjectByHandle(
(HANDLE)qword_13148,
0x1F0003u,
0i64,
0,
&Event,
0i64) == 0;
goto LABEL_8;
case 0x8505E008:
MasterIrp = (void **)a2->AssociatedIrp.MasterIrp;
*(_DWORD *)MasterIrp = sub_1142C(*MasterIrp) != 0;
LABEL_8:
v3 = 4;
break;
}
}
}
a2->IoStatus.Status = 0;
a2->IoStatus.Information = v3;
IofCompleteRequest(a2, 0);
return 0i64;
}
char __fastcall sub_1142C(void *a1)
{
NTSTATUS v2; // eax
NTSTATUS v4; // eax
struct _CLIENT_ID ClientId; // [rsp+20h] [rbp-48h] BYREF
struct _OBJECT_ATTRIBUTES ObjectAttributes; // [rsp+30h] [rbp-38h] BYREF
void *ProcessHandle; // [rsp+70h] [rbp+8h] BYREF
ProcessHandle = 0i64;
memset(&ObjectAttributes.RootDirectory, 0, 0x28ui64);
memset(&ObjectAttributes.RootDirectory, 0, 20);
ObjectAttributes.SecurityDescriptor = 0i64;
ObjectAttributes.SecurityQualityOfService = 0i64;
ClientId.UniqueThread = 0i64;
ObjectAttributes.Length = 48;
ClientId.UniqueProcess = a1;
v2 = ZwOpenProcess(&ProcessHandle, 0x1FFFFFu, &ObjectAttributes, &ClientId);
if ( v2 < 0 )
{
DbgPrint("xkpsm : ZwOpenProcess Error [%d]\n", (unsigned int)v2);
return 0;
}
v4 = ZwTerminateProcess(ProcessHandle, -1073741823);
if ( v4 < 0 )
{
DbgPrint("xkpsm : ZwTerminateProcess Eror [ %d ]\n", (unsigned int)v4);
return 0;
}
if ( ProcessHandle )
ZwClose(ProcessHandle);
return 1;
} |