เจ เฉฑเจ เจ เจธเฉเจ เจเจธ เจเจนเจพเจฃเฉ เจจเฉเฉฐ เจเจพเจฐเฉ เจฐเฉฑเจเจฆเฉ เจนเจพเจ เจเจฟ เจเจฟเจตเฉเจ เจ เจธเฉเจ, เจเจจเฉเจชเฉเจฒเจฟเจธ เจฏเฉเจจเฉเจตเจฐเจธเจฟเจเฉ เจฆเฉ เจฎเฉเฉฐเจกเจฟเจเจ เจฆเฉ เจจเจพเจฒ, เจเฉฑเจ เจ เจธเจซเจฒเจคเจพ เจคเฉเจ เจฌเจพเจ เจฆ เจเจชเจญเฉเจเจคเจพ เจจเฉเฉฐ เจเจฟเฉฐเจจเฉ เจเจฒเจฆเฉ เจนเฉ เจธเจเฉ เจเจชเจฃเฉ เจฎเจธเจผเฉเจจ 'เจคเฉ เจเฉฐเจฎ เจเจฐเจจเจพ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฆเฉ เจเจเจฟเจ เจฆเฉเจฃ เจฒเจ เจเจเจเจฟเจต เจฐเฉเจธเจเฉเจฐ เจคเจเจจเจพเจฒเฉเจเฉ เจฆเจพ เจตเจฟเจเจพเจธ เจเจฐ เจฐเจนเฉ เจนเจพเจเฅค เจ เจธเฉเจ เจฎเฉเจฒ เจตเจฟเฉฐเจกเฉเจเจผ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจพเจเจเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจเจนเจจเจพเจ เจฆเฉ เจฐเจเจจเจพ เจ เจคเฉ เจฒเจพเจเจ เจฆเฉเจเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจเฉฑเจ เจฆเฉ เจนเฉเจ เจพเจ เจธเจพเจกเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฌเจพเจฐเฉ เจฅเฉเฉเจพ เจเจฟเจนเจพ เจนเฉ, เจจเจพเจฒ เจนเฉ เจจเฉเจเจฟเจต เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเจพ เจนเฉ เจเจธ เจฌเจพเจฐเฉ เจเฉฑเจ เจตเจฟเจนเจพเจฐเจ เจเจพเจเจก เจนเฉเฅค
เจชเจฟเจเจฒเฉเจเจ เจชเฉเจธเจเจพเจ เจตเจฟเฉฑเจ เจ
เจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจธ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐ เจเฉเฉฑเจเฉ เจนเจพเจ เจเจฟ เจเจน เจเฉ เจนเฉ
- เจธเฉเจตเจพ เจจเฉเฉฐ เจฌเจนเฉเจค เจชเจนเจฟเจฒเจพเจ เจฒเจพเจเจ เจเจฐเฉ
- เจเจฒเจพเจเจก เจจเจพเจฒ เจธเฉฐเจชเจฐเจ เจเจฐเฉ เจเจฟเฉฑเจฅเฉ เจฌเฉเจเจ เฉฑเจช เจฌเจนเฉเจค เจชเจนเจฟเจฒเจพเจ เจธเจฅเจฟเจค เจนเฉ
- เจเจน เจธเจฎเจเจฃ เจฒเจ เจฌเจนเฉเจค เจชเจนเจฟเจฒเจพเจ เจเจฟ เจธเจฟเจธเจเจฎ เจเจฟเจธ เจฎเฉเจก เจตเจฟเฉฑเจ เจนเฉ - เจธเจงเจพเจฐเจจ เจฌเฉเจ เจเจพเจ เจฐเจฟเจเจตเจฐเฉ
- เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจฐเจฟเจเจตเจฐ เจเจฐเจจ เจฒเจ เจฌเจนเฉเจค เจเฉฑเจ เจซเจพเจเจฒเจพเจ
- เจเจชเจญเฉเจเจคเจพ เจจเฉเฉฐ เจนเฉเจฐ เจตเฉ เจคเฉเจเจผเฉ เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฆเจฟเจเฅค
เจตเฉเจธเฉ เจตเฉ เจเฉฑเจ เจฎเฉเจฒ เจเจช เจเฉ เจนเฉ?
เจเจธ เจธเจตเจพเจฒ เจฆเจพ เจเจตเจพเจฌ เจฆเฉเจฃ เจฒเจ, เจเจ เจธเจฟเจธเจเจฎ เจฆเฉเจเจฐเจพ เจเฉเจคเฉเจเจ เจเจเจเจ เจเจพเจฒเจพเจ เจฆเฉ เจเฉเจฐเจฎ เจจเฉเฉฐ เจตเฉเจเฉเจ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉเจเจฐ เจเจธเจฆเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจตเจฟเฉฑเจ เจเฉฑเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐ เจเฉฑเจ เจซเจพเจเจฒ เจฌเจฃเจพเจเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเจฆเจพ เจนเฉ.
เจชเจพเจตเฉเจฒ เจฏเฉเจธเฉเจซเฉเจตเจฟเจ - เจตเจฟเฉฐเจกเฉเจเจผ เจเจฐเจจเจฒ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฟเฉฐเจ (2019)
เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐ เจซเฉฐเจเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉ
เจจเฉเจเจฟเจต เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฆเจพ เจฎเฉเฉฑเจ เจซเจพเจเจฆเจพ เจเจน เจนเฉ เจเจฟ ntdll เจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ kernel32 เจคเฉเจ เจฌเจนเฉเจค เจชเจนเจฟเจฒเจพเจ เจฒเฉเจก เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเจน เจฒเจพเจเจผเฉเจเจฒ เจนเฉ, เจเจฟเจเจเจเจฟ kernel32 เจจเฉเฉฐ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ ntdll เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจจเจคเฉเจเฉ เจตเจเฉเจ, เจจเฉเจเจฟเจต เจซเฉฐเจเจธเจผเจจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจตเจพเจฒเฉเจเจ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฌเจนเฉเจค เจชเจนเจฟเจฒเจพเจ เจเฉฐเจฎ เจเจฐเจจเจพ เจธเจผเฉเจฐเฉ เจเจฐ เจธเจเจฆเฉเจเจ เจนเจจเฅค
เจเจธ เจคเจฐเฉเจนเจพเจ, เจตเจฟเฉฐเจกเฉเจเจผ เจจเฉเจเจฟเจต เจเจชเจฒเฉเจเฉเจธเจผเจจ เจเจน เจชเฉเจฐเฉเจเจฐเจพเจฎ เจนเจจ เจเฉ เจตเจฟเฉฐเจกเฉเจเจผ เจฌเฉเจ เจฆเฉ เจธเจผเฉเจฐเฉ เจตเจฟเฉฑเจ เจธเจผเฉเจฐเฉ เจนเฉ เจธเจเจฆเฉ เจนเจจเฅค เจเจน เจธเจฟเจฐเจซ ntdll เจคเฉเจ เจซเฉฐเจเจธเจผเจจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจจเฅค เจ
เจเจฟเจนเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ:
เจธเจพเจจเฉเฉฐ เจเฉ เจเจพเจนเฉเจฆเจพ เจนเฉ?
เจกเฉ.เจกเฉ.เจเฉ (เจกเจฐเจพเจเจตเจฐ เจกเจฟเจตเฉเจฒเจชเจฎเฉเจเจ เจเจฟเฉฑเจ), เจนเฉเจฃ WDK 7 (เจตเจฟเฉฐเจกเฉเจเจผ เจกเจฐเจพเจเจตเจฐ เจเจฟเฉฑเจ) เจตเจเฉเจ เจตเฉ เจเจพเจฃเฉ เจเจพเจเจฆเฉ เจนเฉเฅค- เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ (เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจตเจฟเฉฐเจกเฉเจเจผ 7 x64)
- เจเจผเจฐเฉเจฐเฉ เจจเจนเฉเจ เจนเฉ, เจชเจฐ เจนเฉเจกเจฐ เจซเจพเจเจฒเจพเจ เจเฉ เจกเจพเจเจจเจฒเฉเจก เจเฉเจคเฉเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจ เจฎเจฆเจฆ เจเจฐ เจธเจเจฆเฉเจเจ เจนเจจ
เจเฉฑเจฅเฉ
เจเฉเจก เจตเจฟเฉฑเจ เจเฉ เจนเฉ?
เจเจ เจฅเฉเฉเจพ เจ เจญเจฟเจเจธ เจเจฐเฉเจ เจ เจคเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉฑเจ เจเฉเจเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฒเจฟเจเฉ เจเฉ:
- เจธเจเจฐเฉเจจ 'เจคเฉ เจเฉฑเจ เจธเฉเจจเฉเจนเจพ เจตเฉเจเจพเจเจฆเจพ เจนเฉ
- เจเฉเจ เจฎเฉเจฎเฉเจฐเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจฆเจพ เจนเฉ
- เจเฉเจฌเฉเจฐเจก เจเจจเจชเฉเจ เจฆเฉ เจเจกเฉเจ เจนเฉ
- เจตเจฐเจคเฉ เจเจ เจฎเฉเจฎเฉเจฐเฉ เจจเฉเฉฐ เจเจพเจฒเฉ เจเจฐเจฆเจพ เจนเฉ
เจจเฉเจเจฟเจต เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจตเจฟเฉฑเจ, เจเจเจเจฐเฉ เจชเฉเจเจเฉฐเจ เจฎเฉเฉฑเจ เจเจพเจ เจตเจฟเจจเจฎเฉเจจ เจจเจนเฉเจ เจนเฉ, เจชเจฐ NtProcessStartup เจซเฉฐเจเจธเจผเจจ เจนเฉ, เจเจฟเจเจเจเจฟ เจ เจธเฉเจ เจ เจธเจฒ เจตเจฟเฉฑเจ เจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ เจจเจตเฉเจเจ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจจเฉเฉฐ เจธเจฟเฉฑเจงเจพ เจฒเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจเฅค
เจเจ เจธเจเฉเจฐเฉเจจ เจคเฉ เจเฉฑเจ เจธเฉเจจเฉเจนเจพ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเจฐเจเฉ เจธเจผเฉเจฐเฉ เจเจฐเฉเจเฅค เจเจธเจฆเฉ เจฒเจ เจธเจพเจกเฉ เจเฉเจฒ เจเฉฑเจ เจจเฉเจเจฟเจต เจซเฉฐเจเจธเจผเจจ เจนเฉ
//usage: WriteLn(L"Here is my textn");
void WriteLn(LPWSTR Message)
{
UNICODE_STRING string;
RtlInitUnicodeString(&string, Message);
NtDisplayString(&string);
}
เจเจฟเจเจเจเจฟ เจธเจฟเจฐเจซ ntdll เจคเฉเจ เจซเฉฐเจเจธเจผเจจ เจธเจพเจกเฉ เจฒเจ เจเจชเจฒเจฌเจง เจนเจจ, เจ เจคเฉ เจฎเฉเจฎเฉเจฐเฉ เจตเจฟเฉฑเจ เจ เจเฉ เจเฉเจ เจนเฉเจฐ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉเจเจ เจจเจนเฉเจ เจนเจจ, เจธเจพเจจเฉเฉฐ เจฏเจเฉเจจเฉ เจคเฉเจฐ 'เจคเฉ เจฎเฉเจฎเฉเจฐเฉ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจเจพ เจนเฉ เจเจธ เจตเจฟเฉฑเจ เจธเจฎเฉฑเจธเจฟเจ เจนเฉเจตเฉเจเฉเฅค เจจเจตเจพเจ เจเจชเจฐเฉเจเจฐ เจ เจเฉ เจฎเฉเจเฉเจฆ เจจเจนเฉเจ เจนเฉ (เจเจฟเจเจเจเจฟ เจเจน C++ เจฆเฉ เจฌเจนเฉเจค เจเฉฑเจ-เจชเฉฑเจงเจฐเฉ เจฆเฉเจจเฉเจ เจคเฉเจ เจเจเจเจฆเจพ เจนเฉ), เจ เจคเฉ เจเฉเจ เจตเฉ malloc เจซเฉฐเจเจธเจผเจจ เจจเจนเฉเจ เจนเฉ (เจเจธ เจฒเจ เจฐเจจเจเจพเจเจฎ C เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉเจเจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ)เฅค เจฌเฉเจธเจผเฉฑเจ, เจคเฉเจธเฉเจ เจธเจฟเจฐเจซเจผ เจเฉฑเจ เจธเจเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจชเจฐ เจเฉเจเจฐ เจธเจพเจจเฉเฉฐ เจเจคเฉเจธเจผเฉเจฒ เจคเฉเจฐ 'เจคเฉ เจฎเฉเจฎเฉเจฐเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจคเจพเจ เจธเจพเจจเฉเฉฐ เจเจธเจจเฉเฉฐ เจนเฉเจช (เจเจฟเจตเฉเจ เจเจฟ เจนเฉเจช) 'เจคเฉ เจเจฐเจจเจพ เจชเจตเฉเจเจพเฅค เจเจธ เจฒเจ เจเจ เจเจชเจพเจ เจเจชเจฃเฉ เจฒเจ เจเฉฑเจ เจขเฉเจฐ เจฌเจฃเจพเจเจ เจ เจคเฉ เจเจฆเฉเจ เจตเฉ เจธเจพเจจเฉเฉฐ เจเจธเจฆเฉ เจฒเฉเฉ เจนเฉเจตเฉ เจเจธ เจคเฉเจ เจฏเจพเจฆเจพเจ เจฒเฉ เจฒเจเจเฅค
เจซเฉฐเจเจธเจผเจจ เจเจธ เจเฉฐเจฎ เจฒเจ เจขเฉเจเจตเจพเจ เจนเฉ
PVOID memory = NULL;
PVOID buffer = NULL;
ULONG bufferSize = 42;
// create heap in order to allocate memory later
memory = RtlCreateHeap(
HEAP_GROWABLE,
NULL,
1000,
0, NULL, NULL
);
// allocate buffer of size bufferSize
buffer = RtlAllocateHeap(
memory,
HEAP_ZERO_MEMORY,
bufferSize
);
// free buffer (actually not needed because we destroy heap in next step)
RtlFreeHeap(memory, 0, buffer);
RtlDestroyHeap(memory);
เจเจฒเฉ เจเฉเจฌเฉเจฐเจก เจเจจเจชเฉเจ เจฆเฉ เจเจกเฉเจ เจตเจฟเฉฑเจ เจ เฉฑเจเฉ เจตเจงเจฆเฉ เจนเจพเจเฅค
// https://docs.microsoft.com/en-us/windows/win32/api/ntddkbd/ns-ntddkbd-keyboard_input_data
typedef struct _KEYBOARD_INPUT_DATA {
USHORT UnitId;
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
ULONG ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;
//...
HANDLE hKeyBoard, hEvent;
UNICODE_STRING skull, keyboard;
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK Iosb;
LARGE_INTEGER ByteOffset;
KEYBOARD_INPUT_DATA kbData;
// inialize variables
RtlInitUnicodeString(&keyboard, L"DeviceKeyboardClass0");
InitializeObjectAttributes(&ObjectAttributes, &keyboard, OBJ_CASE_INSENSITIVE, NULL, NULL);
// open keyboard device
NtCreateFile(&hKeyBoard,
SYNCHRONIZE | GENERIC_READ | FILE_READ_ATTRIBUTES,
&ObjectAttributes,
&Iosb,
NULL,
FILE_ATTRIBUTE_NORMAL,
0,
FILE_OPEN,FILE_DIRECTORY_FILE,
NULL, 0);
// create event to wait on
InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
NtCreateEvent(&hEvent, EVENT_ALL_ACCESS, &ObjectAttributes, 1, 0);
while (TRUE)
{
NtReadFile(hKeyBoard, hEvent, NULL, NULL, &Iosb, &kbData, sizeof(KEYBOARD_INPUT_DATA), &ByteOffset, NULL);
NtWaitForSingleObject(hEvent, TRUE, NULL);
if (kbData.MakeCode == 0x01) // if ESC pressed
{
break;
}
}
เจธเจพเจจเฉเฉฐ เจธเจฟเจฐเจซเจผ เจตเจฐเจคเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ
เจจเฉเจเจฟเจต เจเจชเจฒเฉเจเฉเจธเจผเจจ เจซเฉฐเจเจธเจผเจจ เจเจพเจฒ เจจเจพเจฒ เจเจคเจฎ เจนเฉเฉฐเจฆเฉ เจนเฉ
เจธเจพเจกเฉ เจเฉเจเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฒเจ เจธเจพเจฐเฉ เจเฉเจก:
#include "ntifs.h" // WinDDK7600.16385.1incddk
#include "ntdef.h"
//------------------------------------
// Following function definitions can be found in native development kit
// but I am too lazy to include `em so I declare it here
//------------------------------------
NTSYSAPI
NTSTATUS
NTAPI
NtTerminateProcess(
IN HANDLE ProcessHandle OPTIONAL,
IN NTSTATUS ExitStatus
);
NTSYSAPI
NTSTATUS
NTAPI
NtDisplayString(
IN PUNICODE_STRING String
);
NTSTATUS
NtWaitForSingleObject(
IN HANDLE Handle,
IN BOOLEAN Alertable,
IN PLARGE_INTEGER Timeout
);
NTSYSAPI
NTSTATUS
NTAPI
NtCreateEvent(
OUT PHANDLE EventHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN EVENT_TYPE EventType,
IN BOOLEAN InitialState
);
// https://docs.microsoft.com/en-us/windows/win32/api/ntddkbd/ns-ntddkbd-keyboard_input_data
typedef struct _KEYBOARD_INPUT_DATA {
USHORT UnitId;
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
ULONG ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;
//----------------------------------------------------------
// Our code goes here
//----------------------------------------------------------
// usage: WriteLn(L"Hello Native World!n");
void WriteLn(LPWSTR Message)
{
UNICODE_STRING string;
RtlInitUnicodeString(&string, Message);
NtDisplayString(&string);
}
void NtProcessStartup(void* StartupArgument)
{
// it is important to declare all variables at the beginning
HANDLE hKeyBoard, hEvent;
UNICODE_STRING skull, keyboard;
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK Iosb;
LARGE_INTEGER ByteOffset;
KEYBOARD_INPUT_DATA kbData;
PVOID memory = NULL;
PVOID buffer = NULL;
ULONG bufferSize = 42;
//use it if debugger connected to break
//DbgBreakPoint();
WriteLn(L"Hello Native World!n");
// inialize variables
RtlInitUnicodeString(&keyboard, L"DeviceKeyboardClass0");
InitializeObjectAttributes(&ObjectAttributes, &keyboard, OBJ_CASE_INSENSITIVE, NULL, NULL);
// open keyboard device
NtCreateFile(&hKeyBoard,
SYNCHRONIZE | GENERIC_READ | FILE_READ_ATTRIBUTES,
&ObjectAttributes,
&Iosb,
NULL,
FILE_ATTRIBUTE_NORMAL,
0,
FILE_OPEN,FILE_DIRECTORY_FILE,
NULL, 0);
// create event to wait on
InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
NtCreateEvent(&hEvent, EVENT_ALL_ACCESS, &ObjectAttributes, 1, 0);
WriteLn(L"Keyboard readyn");
// create heap in order to allocate memory later
memory = RtlCreateHeap(
HEAP_GROWABLE,
NULL,
1000,
0, NULL, NULL
);
WriteLn(L"Heap readyn");
// allocate buffer of size bufferSize
buffer = RtlAllocateHeap(
memory,
HEAP_ZERO_MEMORY,
bufferSize
);
WriteLn(L"Buffer allocatedn");
// free buffer (actually not needed because we destroy heap in next step)
RtlFreeHeap(memory, 0, buffer);
RtlDestroyHeap(memory);
WriteLn(L"Heap destroyedn");
WriteLn(L"Press ESC to continue...n");
while (TRUE)
{
NtReadFile(hKeyBoard, hEvent, NULL, NULL, &Iosb, &kbData, sizeof(KEYBOARD_INPUT_DATA), &ByteOffset, NULL);
NtWaitForSingleObject(hEvent, TRUE, NULL);
if (kbData.MakeCode == 0x01) // if ESC pressed
{
break;
}
}
NtTerminateProcess(NtCurrentProcess(), 0);
}
PS: เจ
เจธเฉเจ เจเจธเจจเฉเฉฐ เจกเฉเจฌเจเจฐ เจตเจฟเฉฑเจ เจฐเฉเจเจฃ เจฒเจ เจเจชเจฃเฉ เจเฉเจก เจตเจฟเฉฑเจ DbgBreakPoint() เจซเฉฐเจเจธเจผเจจ เจจเฉเฉฐ เจเจธเจพเจจเฉ เจจเจพเจฒ เจตเจฐเจค เจธเจเจฆเฉ เจนเจพเจเฅค เจเจน เจธเฉฑเจ เจนเฉ, เจเจฐเจจเจฒ เจกเฉเจฌเฉฑเจเจฟเฉฐเจ เจฒเจ เจคเฉเจนเจพเจจเฉเฉฐ WinDbg เจจเฉเฉฐ เจเฉฑเจ เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจ เจจเจพเจฒ เจเจจเฉเจเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเจตเฉเจเฉเฅค เจเจน เจเจฟเจตเฉเจ เจเจฐเจจเจพ เจนเฉ เจเจธ เจฌเจพเจฐเฉ เจนเจฆเจพเจเจคเจพเจ เจฒเฉฑเจญเฉเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจ
เจธเฉฐเจเจฒเจจ เจ เจคเฉ เจ เจธเฉเจเจฌเจฒเฉ
เจจเฉเจเจฟเจต เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจฃ เจฆเจพ เจธเจญ เจคเฉเจ เจเจธเจพเจจ เจคเจฐเฉเจเจพ เจนเฉ เจตเจฐเจคเจฃเจพ
เจฎเฉเจเจซเจพเจเจฒ
!INCLUDE $(NTMAKEENV)makefile.def
เจธเจฐเฉเจค:
TARGETNAME = MyNative
TARGETTYPE = PROGRAM
UMTYPE = nt
BUFFER_OVERFLOW_CHECKS = 0
MINWIN_SDK_LIB_PATH = $(SDK_LIB_PATH)
SOURCES = source.c
INCLUDES = $(DDK_INC_PATH);
C:WinDDK7600.16385.1ndk;
TARGETLIBS = $(DDK_LIB_PATH)ntdll.lib
$(DDK_LIB_PATH)nt.lib
USE_NTDLL = 1
เจคเฉเจนเจพเจกเฉ เจฎเฉเจเจซเจพเจเจฒ เจฌเจฟเจฒเจเฉเจฒ เจเจนเฉ เจนเฉเจตเฉเจเฉ, เจชเจฐ เจเจ เจฅเฉเฉเฉ เจนเฉเจฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจธเจฐเฉเจคเจพเจ เจจเฉเฉฐ เจตเฉเจเฉเจ. เจเจน เจซเจพเจเจฒ เจคเฉเจนเจพเจกเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉ เจธเจฐเฉเจคเจพเจ (.c เจซเจพเจเจฒเจพเจ), เจฌเจฟเจฒเจก เจตเจฟเจเจฒเจชเจพเจ เจ เจคเฉ เจนเฉเจฐ เจฎเจพเจชเจฆเฉฐเจกเจพเจ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเฉ เจนเฉเฅค
- TARGETNAME โ เจเฉฑเจฒเจฃเจฏเฉเจ เจซเจพเจเจฒ เจฆเจพ เจจเจพเจฎ เจเฉ เจ เฉฐเจค เจตเจฟเฉฑเจ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
- TARGETTYPE - เจเจเจเจผเฉเจเจฟเจเจเฉเจฌเจฒ เจซเจพเจเจฒ เจฆเฉ เจเจฟเจธเจฎ, เจเจน เจเฉฑเจ เจกเจฐเจพเจเจตเจฐ (.sys) เจนเฉ เจธเจเจฆเฉ เจนเฉ, เจซเจฟเจฐ เจซเฉเจฒเจก เจฆเจพ เจฎเฉเฉฑเจฒ เจกเฉเจฐเจพเจเจตเจฐ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจเฉเจเจฐ เจเฉฑเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ (.lib), เจคเจพเจ เจฎเฉเฉฑเจฒ LIBRARY เจนเฉเฅค เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจเจเจเจผเฉเจเจฟเจเจเฉเจฌเจฒ เจซเจพเจเจฒ (.exe) เจฆเฉ เจฒเฉเฉ เจนเฉ, เจเจธเจฒเจ เจ เจธเฉเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจฎเฉเฉฑเจฒ เจธเฉเฉฑเจ เจเจฐเจฆเฉ เจนเจพเจเฅค
- UMTYPE โ เจเจธ เจเฉเจคเจฐ เจฒเจ เจธเฉฐเจญเจต เจฎเฉเฉฑเจฒ: เจเฉฑเจ เจเฉฐเจธเฉเจฒ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฒเจ เจเฉฐเจธเฉเจฒ, เจตเจฟเฉฐเจกเฉเจเจผ เจฎเฉเจก เจตเจฟเฉฑเจ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจตเจฟเฉฐเจกเฉเจเจผเฅค เจชเจฐ เจธเจพเจจเฉเฉฐ เจจเฉเจเจฟเจต เจเจชเจฒเฉเจเฉเจธเจผเจจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ nt เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค
- BUFFER_OVERFLOW_CHECKS - เจฌเจซเจฐ เจเจตเจฐเจซเจฒเฉ เจฒเจ เจธเจเฉเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจเจพ, เจฌเจฆเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ เจธเจพเจกเฉ เจเฉเจธ เจจเจนเฉเจ, เจ เจธเฉเจ เจเจธเจจเฉเฉฐ เจฌเฉฐเจฆ เจเจฐ เจฆเจฟเฉฐเจฆเฉ เจนเจพเจเฅค
- MINWIN_SDK_LIB_PATH - เจเจน เจฎเฉเฉฑเจฒ SDK_LIB_PATH เจตเฉเจฐเฉเจเจฌเจฒ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ, เจเจฟเฉฐเจคเจพ เจจเจพ เจเจฐเฉ เจเจฟ เจคเฉเจนเจพเจกเฉ เจเฉเจฒ เจ เจเจฟเจนเจพ เจธเจฟเจธเจเจฎ เจตเฉเจฐเฉเจเจฌเจฒ เจเฉเจธเจผเจฟเจค เจจเจนเฉเจ เจนเฉ, เจเจฆเฉเจ เจ เจธเฉเจ DDK เจคเฉเจ เจเฉเฉฑเจ เจเฉเจคเฉ เจฌเจฟเจฒเจก เจจเฉเฉฐ เจเจฒเจพเจเจเจฆเฉ เจนเจพเจ, เจคเจพเจ เจเจน เจตเฉเจฐเฉเจเจฌเจฒ เจเฉเจธเจผเจฟเจค เจเฉเจคเจพ เจเจพเจตเฉเจเจพ เจ เจคเฉ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉเจเจ เจตเฉฑเจฒ เจเจธเจผเจพเจฐเจพ เจเจฐเฉเจเจพเฅค
- เจธเจฐเฉเจค โ เจคเฉเจนเจพเจกเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฒเจ เจธเจฐเฉเจคเจพเจ เจฆเฉ เจธเฉเจเฉเฅค
- เจธเจผเจพเจฎเจฒ เจนเจจ - เจนเฉเจกเจฐ เจซเจพเจเจฒเจพเจ เจเฉ เจ เจธเฉเจเจฌเจฒเฉ เจฒเจ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจนเจจเฅค เจเฉฑเจฅเฉ เจเจน เจเจฎ เจคเฉเจฐ 'เจคเฉ เจซเจพเจเจฒเจพเจ เจฆเจพ เจฎเจพเจฐเจ เจฆเจฐเจธเจพเจเจเจฆเฉ เจนเจจ เจเฉ DDK เจจเจพเจฒ เจเจเจเจฆเฉเจเจ เจนเจจ, เจชเจฐ เจคเฉเจธเฉเจ เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ เจเจฟเจธเฉ เจนเฉเจฐ เจจเฉเฉฐ เจตเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
- TARGETLIBS - เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉเจเจ เจฆเฉ เจธเฉเจเฉ เจเจฟเจจเฉเจนเจพเจ เจจเฉเฉฐ เจฒเจฟเฉฐเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค
- USE_NTDLL เจเฉฑเจ เจฒเฉเฉเฉเจเจฆเจพ เจเฉเจคเจฐ เจนเฉ เจเฉ เจธเจชเฉฑเจธเจผเจ เจเจพเจฐเจจเจพเจ เจเจฐเจเฉ 1 'เจคเฉ เจธเฉเฉฑเจ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
- USER_C_FLAGS - เจเฉเจ เจตเฉ เจซเจฒเฉเจ เจเฉ เจคเฉเจธเฉเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจเฉเจก เจคเจฟเจเจฐ เจเจฐเจฆเฉ เจธเจฎเฉเจ เจชเฉเจฐเฉเจชเฉเจฐเฉเจธเฉเจธเจฐ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจตเจฟเฉฑเจ เจตเจฐเจค เจธเจเจฆเฉ เจนเฉเฅค
เจเจธ เจฒเจ เจฌเจฟเจฒเจก เจเจฐเจจ เจฒเจ, เจธเจพเจจเฉเฉฐ x86 (เจเจพเจ x64) เจเฉเฉฑเจเจก เจฌเจฟเจฒเจก เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจตเจฐเจเจฟเฉฐเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจจเฉเฉฐ เจชเฉเจฐเฉเจเฉเจเจ เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ เจฌเจฆเจฒเฉ เจ เจคเฉ เจฌเจฟเจฒเจก เจเจฎเจพเจเจก เจเจฒเจพเจเฅค เจธเจเจฐเฉเจจเจธเจผเจพเจ เจตเจฟเฉฑเจ เจจเจคเฉเจเจพ เจฆเจฟเจเจพเจเจเจฆเจพ เจนเฉ เจเจฟ เจธเจพเจกเฉ เจเฉเจฒ เจเฉฑเจ เจเจเจเจผเฉเจเจฟเจเจเฉเจฌเจฒ เจซเจพเจเจฒ เจนเฉเฅค
เจเจน เจซเจพเจเจฒ เจเฉฐเจจเฉ เจเจธเจพเจจเฉ เจจเจพเจฒ เจฒเจพเจเจ เจจเจนเฉเจ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ, เจธเจฟเจธเจเจฎ เจธเจฐเจพเจช เจฆเจฟเฉฐเจฆเจพ เจนเฉ เจ
เจคเฉ เจธเจพเจจเฉเฉฐ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจเจฒเจคเฉ เจจเจพเจฒ เจเจธเจฆเฉ เจตเจฟเจตเจนเจพเจฐ เจฌเจพเจฐเฉ เจธเฉเจเจฃ เจฒเจ เจญเฉเจเจฆเจพ เจนเฉ:
เจเฉฑเจ เจจเฉเจเจฟเจต เจเจชเจฒเฉเจเฉเจธเจผเจจ เจเจฟเจตเฉเจ เจฒเจพเจเจ เจเจฐเฉเจ?
เจเจฆเฉเจ เจเจเฉเจเฉฑเจ เจธเจผเฉเจฐเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจคเจพเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจฆเจพ เจธเจผเฉเจฐเฉเจเจคเฉ เจเฉเจฐเจฎ เจฐเจเจฟเจธเจเจฐเฉ เจเฉเฉฐเจเฉ เจฆเฉ เจฎเฉเฉฑเจฒ เจฆเฉเจเจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ:
HKLMSystemCurrentControlSetControlSession ManagerBootExecute
เจธเฉเจธเจผเจจ เจฎเฉเจจเฉเจเจฐ เจเจธ เจธเฉเจเฉ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ-เจเฉฑเจ เจเจฐเจเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจเจฆเจพ เจนเฉเฅค เจธเจผเฉเจธเจผเจจ เจฎเฉเจจเฉเจเจฐ เจธเจฟเจธเจเจฎ32 เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเฉฑเจ เจเจเจเจผเฉเจเจฟเจเจเฉเจฌเจฒ เจซเจพเจเจฒเจพเจ เจฆเฉ เจเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค เจฐเจเจฟเจธเจเจฐเฉ เจเฉเฉฐเจเฉ เจฎเฉเฉฑเจฒ เจซเจพเจฐเจฎเฉเจ เจนเฉเจ เจฒเจฟเจเฉ เจ เจจเฉเจธเจพเจฐ เจนเฉ:
autocheck autochk *MyNative
เจฎเฉเฉฑเจฒ เจนเฉเจเจธเจพเจกเฉเจธเฉเจฎเจฒ เจซเจพเจฐเจฎเฉเจ เจตเจฟเฉฑเจ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจจเจพ เจเจฟ เจเจฎ ASCII, เจเจธ เจฒเจ เจเฉฑเจชเจฐ เจฆเจฟเจเจพเจ เจเจ เจเฉเฉฐเจเฉ เจซเจพเจฐเจฎเฉเจ เจตเจฟเฉฑเจ เจนเฉเจตเฉเจเฉ:
61,75,74,6f,63,68,65,63,6b,20,61,75,74,6f,63,68,6b,20,2a,00,4d,79,4e,61,74,69,76,65,00,00
เจธเจฟเจฐเจฒเฉเจ เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจฒเจ, เจคเฉเจธเฉเจ เจเฉฑเจ เจเจจเจฒเจพเจเจจ เจธเฉเจตเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ,
เจเจน เจชเจคเจพ เจเจฒเจฆเจพ เจนเฉ เจเจฟ เจเฉฑเจ เจฎเฉเจฒ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฒเจพเจเจ เจเจฐเจจ เจฒเจ, เจธเจพเจจเฉเฉฐ เจฒเฉเฉ เจนเฉ:
- เจเจเจเจผเฉเจเจฟเจเจเฉเจฌเจฒ เจซเจพเจเจฒ เจจเฉเฉฐ เจธเจฟเจธเจเจฎ 32 เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ เจเจพเจชเฉ เจเจฐเฉ
- เจฐเจเจฟเจธเจเจฐเฉ เจฒเจ เจเฉฑเจ เจเฉเฉฐเจเฉ เจธเจผเจพเจฎเจฒ เจเจฐเฉ
- เจฎเจธเจผเฉเจจ เจจเฉเฉฐ เจฐเฉเจฌเฉเจ เจเจฐเฉ
เจธเจนเฉเจฒเจค เจฒเจ, เจเฉฑเจฅเฉ เจเฉฑเจ เจฎเฉเจฒ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจฒเจ เจเฉฑเจ เจคเจฟเจเจฐ เจธเจเฉเจฐเจฟเจชเจ เจนเฉ:
install.bat
@echo off
copy MyNative.exe %systemroot%system32.
regedit /s add.reg
echo Native Example Installed
pause
add.reg
REGEDIT4
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager]
"BootExecute"=hex(7):61,75,74,6f,63,68,65,63,6b,20,61,75,74,6f,63,68,6b,20,2a,00,4d,79,4e,61,74,69,76,65,00,00
เจเฉฐเจธเจเจพเจฒเฉเจธเจผเจจ เจ เจคเฉ เจฐเฉเจฌเฉเจ เจคเฉเจ เจฌเจพเจ เจฆ, เจเจชเจญเฉเจเจคเจพ เจเฉเจฃ เจธเจเฉเจฐเฉเจจ เจฆเฉ เจเจเจฃ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ, เจธเจพเจจเฉเฉฐ เจนเฉเจ เจฒเจฟเจเฉ เจคเจธเจตเฉเจฐ เจฎเจฟเจฒเฉเจเฉ:
เจจเจคเฉเจเจพ
เจ
เจเจฟเจนเฉ เจเฉเจเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจเจฆเจพเจนเจฐเจฃ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจธเจพเจจเฉเฉฐ เจฏเจเฉเจจ เจนเฉ เจเจฟเจ เจธเฉ เจเจฟ เจตเจฟเฉฐเจกเฉเจเจผ เจจเฉเจเจฟเจต เจชเฉฑเจงเจฐ 'เจคเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจเจฒเจพเจเจฃเจพ เจเจพเจซเจผเฉ เจธเฉฐเจญเจต เจนเฉเฅค เจ
เฉฑเจเฉ, เจเจจเฉเจชเฉเจฒเจฟเจธ เจฏเฉเจจเฉเจตเจฐเจธเจฟเจเฉ เจฆเฉ เจฎเฉเฉฐเจกเฉ เจ
เจคเฉ เจฎเฉเจ เจเฉฑเจ เจธเฉเจตเจพ เจฌเจฃเจพเจเจฃเจพ เจเจพเจฐเฉ เจฐเฉฑเจเจพเจเจเฉ เจเฉ เจธเจพเจกเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจชเจฟเจเจฒเฉ เจธเฉฐเจธเจเจฐเจฃ เจจเจพเจฒเฉเจ เจฌเจนเฉเจค เจชเจนเจฟเจฒเจพเจ เจกเจฐเจพเจเจตเจฐ เจจเจพเจฒ เจเฉฑเจฒเจฌเจพเจค เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจธเจผเฉเจฐเฉ เจเจฐเฉเจเฉเฅค เจ
เจคเฉ เจตเจฟเจจ 32 เจธเจผเฉเฉฑเจฒ เจฆเฉ เจเจเจฎเจจ เจฆเฉ เจจเจพเจฒ, เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจจเฉเฉฐ เจเฉฑเจ เจชเฉเจฐเฉ เจธเฉเจตเจพ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒ เจเจฐเจจเจพ เจฒเจพเจเจผเฉเจเจฒ เจนเฉเจตเฉเจเจพ เจเฉ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจตเจฟเจเจธเจค เจเฉเจคเฉ เจเจพ เจเฉเฉฑเจเฉ เจนเฉ (เจเจธ เจฌเจพเจฐเฉ เจนเฉเจฐ
เจ
เจเจฒเฉ เจฒเฉเจ เจตเจฟเฉฑเจ เจ
เจธเฉเจ เจเจเจเจฟเจต เจฐเฉเจธเจเฉเจฐ เจธเฉเจตเจพ เจฆเฉ เจเฉฑเจ เจนเฉเจฐ เจนเจฟเฉฑเจธเฉ เจจเฉเฉฐ เจเฉเจนเจพเจเจเฉ, เจ
เจฐเจฅเจพเจค UEFI เจกเจฐเจพเจเจตเจฐเฅค เจธเจพเจกเฉ เจฌเจฒเฉเจ เจฆเฉ เจเจพเจนเจเฉ เจฒเจ เจคเจพเจ เจเฉ เจคเฉเจธเฉเจ เจ
เจเจฒเฉ เจชเฉเจธเจ เจจเฉเฉฐ เจจเจพ เจเฉเฉฐเจเฉเฅค
เจธเจฐเฉเจค: www.habr.com