āĻāĻāĻā§ āĻāĻŽāĻ°āĻž āĻāĻ¨ā§āĻĒā§āĻ˛āĻŋāĻ¸ āĻāĻāĻ¨āĻŋāĻāĻžāĻ°ā§āĻ¸āĻŋāĻāĻŋāĻ° āĻā§āĻ˛ā§āĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻāĻžāĻŦā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻžāĻ° āĻĒāĻ°ā§ āĻ¯āĻ¤ āĻ¤āĻžāĻĄāĻŧāĻžāĻ¤āĻžāĻĄāĻŧāĻŋ āĻ¸āĻŽā§āĻāĻŦ āĻ¤āĻžāĻĻā§āĻ° āĻŽā§āĻļāĻŋāĻ¨ā§ āĻāĻžāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻŦāĻŋāĻāĻžāĻļ āĻāĻ°āĻāĻŋ āĻ¤āĻžāĻ° āĻāĻ˛ā§āĻĒāĻāĻŋ āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻā§āĻāĻŋāĨ¤ āĻāĻŽāĻ°āĻž āĻ¨ā§āĻāĻŋāĻ āĻāĻāĻ¨ā§āĻĄā§āĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦ, āĻ¤āĻžāĻĻā§āĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻŦāĻ āĻ˛āĻā§āĻā§āĻ° āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻ¸āĻšāĨ¤ āĻāĻžāĻā§āĻ° āĻ¨ā§āĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻā§āĻā§āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻ¨ā§āĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻā§āĻāĻžāĻŦā§ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻāĻžāĻāĻĄāĨ¤
āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻĒā§āĻ¸ā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻŋ āĻā§ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻĨāĻž āĻŦāĻ˛ā§āĻāĻŋ
- āĻ āĻ¨ā§āĻ āĻāĻā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻāĻŋ āĻ¨āĻŋāĻā§āĻ āĻāĻžāĻ˛ā§ āĻāĻ°ā§āĻ¨
- āĻā§āĻ˛āĻžāĻāĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻāĻžāĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻŦā§āĻ¯āĻžāĻāĻāĻĒ āĻ āĻ¨ā§āĻ āĻāĻā§ āĻ āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤
- āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻāĻŋ āĻā§āĻ¨ āĻŽā§āĻĄā§ āĻāĻā§ āĻ¤āĻž āĻŦā§āĻāĻ¤ā§ āĻ āĻ¨ā§āĻ āĻāĻā§ - āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻŦā§āĻ āĻŦāĻž āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ°
- āĻ āĻ¨ā§āĻ āĻāĻŽ āĻĢāĻžāĻāĻ˛ āĻ āĻā§āĻ°āĻŋāĻŽ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻ¤ā§
- āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻāĻ°āĻ āĻĻā§āĻ°ā§āĻ¤ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¨āĨ¤
āĻ¯āĻžāĻāĻšā§āĻ āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻĒ āĻāĻŋ?
āĻāĻ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻ¤ā§āĻ¤āĻ° āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻ¸ā§āĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻāĻŋ āĻ¯ā§ āĻāĻ˛āĻā§āĻ˛āĻŋ āĻāĻ°ā§ āĻ¤āĻžāĻ° āĻā§āĻ°āĻŽāĻāĻŋ āĻĻā§āĻāĻŋ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¯āĻĻāĻŋ āĻ¤āĻžāĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§ āĻāĻāĻāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻžāĻ° āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĨ¤
āĻĒāĻžāĻā§āĻ˛ āĻāĻ¯āĻŧā§āĻ¸āĻŋāĻĢā§āĻāĻŋāĻ - āĻāĻāĻ¨ā§āĻĄā§āĻ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ (2019)
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
āĻ¨ā§āĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ āĻ¯ā§ ntdll āĻā§ kernel32 āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻ āĻ¨ā§āĻ āĻāĻā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻŋ āĻ¯ā§āĻā§āĻ¤āĻŋāĻ, āĻāĻžāĻ°āĻŖ kernel32-āĻāĻ° āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ ntdll āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¨ā§āĻāĻŋāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŽāĻ¨ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻ āĻ¨ā§āĻ āĻāĻā§ āĻāĻžāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻāĻāĻžāĻŦā§, āĻāĻāĻ¨ā§āĻĄā§āĻ āĻ¨ā§āĻāĻŋāĻ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻšāĻ˛ āĻāĻŽāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¯āĻž āĻāĻāĻ¨ā§āĻĄā§āĻ āĻŦā§āĻ āĻļā§āĻ°ā§āĻ° āĻāĻā§ āĻļā§āĻ°ā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¤āĻžāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° ntdll āĻĨā§āĻā§ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤ āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ:
āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŋ āĻĻāĻ°āĻāĻžāĻ°?
DDK (āĻĄā§āĻ°āĻžāĻāĻāĻžāĻ° āĻĄā§āĻā§āĻ˛āĻĒāĻŽā§āĻ¨ā§āĻ āĻāĻŋāĻ), āĻāĻāĻ¨ WDK 7 (Windows Driver Kit) āĻ¨āĻžāĻŽā§āĻ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤āĨ¤- āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻ¨ā§āĻĄā§āĻ 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 āĻĢāĻžāĻāĻļāĻ¨ āĻ¨ā§āĻ (āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ°āĻžāĻ¨āĻāĻžāĻāĻŽ āĻ¸āĻŋ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨)āĨ¤ āĻ āĻŦāĻļā§āĻ¯āĻ, āĻāĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¤āĻŋāĻļā§āĻ˛āĻāĻžāĻŦā§ āĻŽā§āĻŽāĻ°āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻŋ āĻšāĻŋāĻĒā§ (āĻ āĻ°ā§āĻĨāĻžā§ āĻāĻžāĻĻāĻž) āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ āĻāĻ¸ā§āĻ¨ āĻ¨āĻŋāĻā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻĻāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¯āĻāĻ¨āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¤āĻāĻ¨āĻ āĻāĻāĻŋ āĻĨā§āĻā§ āĻ¸ā§āĻŽā§āĻ¤āĻŋ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻāĨ¤
āĻĢāĻžāĻāĻļāĻ¨ āĻāĻ āĻāĻžāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¯ā§āĻā§āĻ¤
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);
}
āĻĻā§āĻ°āĻˇā§āĻāĻŦā§āĻ¯: āĻāĻŽāĻ°āĻž āĻ¸āĻšāĻā§āĻ āĻĄāĻŋāĻŦāĻžāĻāĻžāĻ°ā§ āĻāĻāĻŋ āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻĄā§ DbgBreakPoint() āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻ¸āĻ¤ā§āĻ¯, āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĄāĻŋāĻŦāĻžāĻāĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ WinDbg-āĻā§ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
āĻ¸āĻāĻāĻ˛āĻ¨ āĻāĻŦāĻ āĻ¸āĻŽāĻžāĻŦā§āĻļ
āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻŋāĻ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ¸āĻšāĻ āĻāĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž
Makefile āĻ¨āĻžāĻŽāĻ
!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
āĻāĻĒāĻ¨āĻžāĻ° Makefile āĻšā§āĻŦāĻšā§ āĻāĻāĻ āĻšāĻŦā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ¸ā§āĻ¨ āĻāĻāĻā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ¸ā§āĻ¤ā§āĻ°ā§ āĻĻā§āĻā§āĻ¨āĨ¤ āĻāĻ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻ¸ā§āĻ°ā§āĻ¸ (.c āĻĢāĻžāĻāĻ˛), āĻŦāĻŋāĻ˛ā§āĻĄ āĻ āĻĒāĻļāĻ¨ āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°ā§āĨ¤
- TARGETNAME â āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻā§āĻŦāĻ˛ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¨āĻžāĻŽ āĻ¯āĻž āĻļā§āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤
- TARGETTYPE â āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻā§āĻŦāĻ˛ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ§āĻ°āĻ¨, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĄā§āĻ°āĻžāĻāĻāĻžāĻ° (.sys) āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻžāĻ°āĻĒāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻŽāĻžāĻ¨āĻāĻŋ āĻĄā§āĻ°āĻžāĻāĻāĻžāĻ° āĻšāĻ¤ā§ āĻšāĻŦā§, āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ (.lib), āĻ¤āĻžāĻšāĻ˛ā§ āĻŽāĻžāĻ¨āĻāĻŋ LIBRARYāĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻā§āĻŦāĻ˛ āĻĢāĻžāĻāĻ˛ (.exe) āĻĻāĻ°āĻāĻžāĻ°, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž PROGRAM-āĻ āĻŽāĻžāĻ¨ āĻ¸ā§āĻ āĻāĻ°āĻŋāĨ¤
- UMTYPE â āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻŽāĻžāĻ¨: āĻāĻāĻāĻŋ āĻāĻ¨āĻ¸ā§āĻ˛ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻ¸ā§āĻ˛, āĻāĻāĻ¨ā§āĻĄā§ āĻŽā§āĻĄā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻ¨ā§āĻĄā§āĻāĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĒā§āĻ¤ā§ nt āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
- BUFFER_OVERFLOW_CHECKS â āĻŦāĻžāĻĢāĻžāĻ° āĻāĻāĻžāĻ°āĻĢā§āĻ˛ā§ āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž, āĻĻā§āĻ°ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ¨āĻž, āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻŦāĻ¨ā§āĻ§.
- MINWIN_SDK_LIB_PATH â āĻāĻ āĻŽāĻžāĻ¨āĻāĻŋ SDK_LIB_PATH āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤āĻž āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻž āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻā§ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻā§āĻˇāĻŋāĻ¤ āĻ¨ā§āĻ, āĻ¯āĻāĻ¨ āĻāĻŽāĻ°āĻž DDK āĻĨā§āĻā§ āĻā§āĻ āĻāĻ°āĻž āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻžāĻ˛āĻžāĻŦ, āĻāĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻāĻŋ āĻā§āĻˇāĻŖāĻž āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ° āĻĻāĻŋāĻā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŦā§āĨ¤
- āĻāĻ¤ā§āĻ¸ - āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¤ā§āĻ¸āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻžā§ˇ
- āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ - āĻšā§āĻĄāĻžāĻ° āĻĢāĻžāĻāĻ˛ āĻ¯āĻž āĻ¸āĻŽāĻžāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĨ¤ āĻāĻāĻžāĻ¨ā§ āĻ¤āĻžāĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ DDK-āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¸āĻž āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻĒāĻĨ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§, āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ āĻ¨ā§āĻ¯ āĻ¯ā§āĻā§āĻ¨āĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
- āĻāĻžāĻ°ā§āĻā§āĻāĻ˛āĻŋāĻŦāĻ¸ - āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¯āĻž āĻ˛āĻŋāĻā§āĻ āĻāĻ°āĻž āĻĻāĻ°āĻāĻžāĻ°āĨ¤
- USE_NTDLL āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻ¯āĻž āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻ āĻāĻžāĻ°āĻŖā§ 1 āĻ āĻ¸ā§āĻ āĻāĻ°āĻž āĻāĻŦāĻļā§āĻ¯āĻā§ˇ
- USER_C_FLAGS â āĻ¯ā§āĻā§āĻ¨ āĻĒāĻ¤āĻžāĻāĻž āĻ¯āĻž āĻāĻĒāĻ¨āĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻā§āĻĄ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĒā§āĻ°āĻŋāĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ¤āĻžāĻ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻĻā§āĻ° x86 (āĻŦāĻž x64) āĻā§āĻ āĻāĻ°āĻž āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻšāĻŦā§, āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋāĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻāĻŋ āĻĒā§āĻ°āĻā§āĻā§āĻ āĻĢā§āĻ˛ā§āĻĄāĻžāĻ°ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĻāĻŋ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻā§āĻŦāĻ˛ āĻĢāĻžāĻāĻ˛ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻāĻ¤ āĻ¸āĻšāĻā§ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻž, āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ
āĻāĻŋāĻļāĻžāĻĒ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻ° āĻāĻāĻ°āĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻŦāĻ¤ā§ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ:
āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻāĻžāĻ˛ā§ āĻāĻ°āĻŦā§āĻ¨?
āĻ¯āĻāĻ¨ autochk āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ, āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻāĻžāĻ°ā§āĻāĻāĻĒ āĻā§āĻ°āĻŽ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻā§ āĻāĻ° āĻŽāĻžāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ:
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 āĻĢā§āĻ˛ā§āĻĄāĻžāĻ°ā§ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻā§āĻŦāĻ˛ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻāĻĒāĻŋ āĻāĻ°ā§āĻ¨
- āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
- āĻŽā§āĻļāĻŋāĻ¨ āĻ°āĻŋāĻŦā§āĻ āĻāĻ°ā§āĻ¨
āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ°ā§āĻĄāĻŋāĻŽā§āĻĄ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ°āĻ¯āĻŧā§āĻā§:
āĻŦā§āĻ¯āĻžāĻ
@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
āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ āĻāĻŦāĻ āĻ°āĻŋāĻŦā§āĻ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻ¨āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻ¸ā§āĻā§āĻ°ā§āĻ¨ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻā§, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻŦāĻŋ āĻĒāĻžāĻŦ:
āĻĢāĻ˛āĻžāĻĢāĻ˛
āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋ āĻ¯ā§ āĻāĻāĻ¨ā§āĻĄā§āĻ āĻ¨ā§āĻāĻŋāĻ āĻ¸ā§āĻ¤āĻ°ā§ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻŦā§āĻļ āĻ¸āĻŽā§āĻāĻŦāĨ¤ āĻāĻ° āĻĒāĻ°ā§, āĻāĻ¨ā§āĻĒā§āĻ˛āĻŋāĻ¸ āĻāĻāĻ¨āĻŋāĻāĻžāĻ°ā§āĻ¸āĻŋāĻāĻŋāĻ° āĻā§āĻ˛ā§āĻ°āĻž āĻāĻŦāĻ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĨāĻžāĻāĻŦ āĻ¯āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻā§āĻ° āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻ
āĻ¨ā§āĻ āĻāĻā§ āĻĄā§āĻ°āĻžāĻāĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻŋāĻĨāĻ¸ā§āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŦā§āĨ¤ āĻāĻŦāĻ win32 āĻļā§āĻ˛ā§āĻ° āĻāĻŦāĻŋāĻ°ā§āĻāĻžāĻŦā§āĻ° āĻ¸āĻžāĻĨā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŖāĻžāĻā§āĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ¤ā§ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻž āĻ¯ā§āĻā§āĻ¤āĻŋāĻ āĻšāĻŦā§ āĻ¯āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻŦāĻŋāĻāĻžāĻļ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ (āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻ°āĻž āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻāĻ°ā§āĻāĻāĻŋ āĻāĻĒāĻžāĻĻāĻžāĻ¨, āĻ¯āĻĨāĻž UEFI āĻĄā§āĻ°āĻžāĻāĻāĻžāĻ° āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻāĻ°āĻŦāĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ˛āĻā§ āĻ¸āĻžāĻŦāĻ¸ā§āĻā§āĻ°āĻžāĻāĻŦ āĻāĻ°ā§āĻ¨ āĻ¯āĻžāĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻĒā§āĻ¸ā§āĻāĻāĻŋ āĻŽāĻŋāĻ¸ āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com