MCPcopy Create free account
hub / github.com/dobin/RedEdr / Catch_NtCreateThreadEx

Function Catch_NtCreateThreadEx

RedEdrDll/dllmain.cpp:706–742  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

704 );
705pNtCreateThreadEx Real_NtCreateThreadEx = NULL;
706NTSTATUS NTAPI Catch_NtCreateThreadEx(
707 OUT PHANDLE ThreadHandle,
708 IN ACCESS_MASK DesiredAccess,
709 IN POBJECT_ATTRIBUTES ObjectAttributes,
710 IN HANDLE ProcessHandle,
711 IN PVOID StartRoutine,
712 IN PVOID Argument,
713 IN ULONG CreateFlags,
714 IN ULONG_PTR ZeroBits,
715 IN SIZE_T StackSize,
716 IN SIZE_T MaximumStackSize,
717 IN PVOID AttributeList
718) {
719 int64_t time = get_time();
720 char buf[DATA_BUFFER_SIZE] = "";
721
722 NTSTATUS ret = Real_NtCreateThreadEx(ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle, StartRoutine, Argument, CreateFlags, ZeroBits, StackSize, MaximumStackSize, AttributeList);
723 if (HooksInitialized) { // dont log our own hooking
724 HANDLE rThreadHandle = (ThreadHandle != NULL) ? *ThreadHandle : NULL;
725
726 int offset = 0;
727 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "{");
728 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"type\":\"dll\",");
729 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"time\":%llu,", time);
730 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"pid\":%lu,", (DWORD)GetCurrentProcessId());
731 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"tid\":%lu,", (DWORD)GetCurrentThreadId());
732 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"func\":\"NtCreateThreadEx\",");
733 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"thread_handle\":%lld,", rThreadHandle);
734 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"handle\":%lld,", (long long)ProcessHandle);
735 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"start_routine\":%llu,", StartRoutine);
736 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"argument\":%llu", Argument);
737 //offset += LogMyStackTrace(&buf[offset], DATA_BUFFER_SIZE - offset);
738 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "}");
739 SendDllPipe(buf);
740 }
741 return ret;
742}
743
744
745/******************* NtOpenProcess ************************/

Callers

nothing calls this directly

Calls 2

get_timeFunction · 0.85
SendDllPipeFunction · 0.85

Tested by

no test coverage detected