āĻāĻ āĻāĻŽāϰāĻž āĻāύā§āĻĒāϞāĻŋāϏ āĻāĻāύāĻŋāĻāĻžāϰā§āϏāĻŋāĻāĻŋāϰ āϏāĻžāĻĨā§ āĻā§āĻāĻžāĻŦā§ āĻ ā§āϝāĻžāĻā§āĻāĻŋāĻ āϰāĻŋāϏā§āĻā§āϰ āĻĒā§āϰāϝā§āĻā§āϤāĻŋ āϤā§āϰāĻŋ āĻāϰāĻāĻŋ, āϏā§āĻ āĻāϞā§āĻĒāĻāĻŋ āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāĻŦāĨ¤ āĻāĻ āĻĒā§āϰāϝā§āĻā§āϤāĻŋāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āĻŽā§āĻļāĻŋāύ āĻā§āϰā§āϝāĻžāĻļā§āϰ āĻĒāϰ āϝāϤ āĻĻā§āϰā§āϤ āϏāĻŽā§āĻāĻŦ āϤāĻžāĻĻā§āϰ āĻāĻžāĻ āĻĒā§āύāϰāĻžāϝāĻŧ āĻļā§āϰ⧠āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ āĻāĻŽāϰāĻž āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒ āύāĻŋāϝāĻŧā§ āĻāĻĨāĻž āĻŦāϞāĻŦāĨ¤ WindowsāϤāĻžāĻĻā§āϰ āύāĻŋāϰā§āĻŽāĻžāĻŖ āĻ āĻĒā§āϰāĻāĻžāĻļā§āϰ āĻā§āĻāĻāĻŋāύāĻžāĻāĻŋ āϏāĻšāĨ¤ āύāĻŋāĻā§ āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāĻāϞā§āĻĒ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻāĻāĻŋ āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āĻĒāĻāĻā§āĻŽāĻŋ āĻāĻŦāĻ āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒ āϞā§āĻāĻžāϰ āĻāĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āĻĻā§āĻāϝāĻŧāĻž āĻšāϞā§āĨ¤

āĻāĻā§āϰ āĻĒā§āϏā§āĻāĻā§āϞā§āϤ⧠āĻāĻŽāϰāĻž āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āĻāϞā§āĻāύāĻž āĻāϰā§āĻāĻŋ āϝ⧠āĻāĻāĻŋ āĻā§āĨ¤ āĻāĻŦāĻ āĻāύā§āĻĒāϞāĻŋāϏ āĻĨā§āĻā§ āĻāϏāĻž āĻļāĻŋāĻā§āώāĻžāϰā§āĻĨā§āϰāĻž āĻā§āĻāĻžāĻŦā§ āĻŦāĻŋāĻāĻļāĻŋāϤ āĻšāĻā§āĻā§ āĻāĻ āĻāĻŽāĻŋ āύā§āĻāĻŋāĻ āĻ
ā§āϝāĻžāĻĒāĻā§āϞā§āϰ āĻāĻĒāϰ āĻāϞā§āĻāĻĒāĻžāϤ āĻāϰāϤ⧠āĻāĻžāĻ, āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻāĻŽāĻžāĻĻā§āϰ āϏāĻā§āϰāĻŋāϝāĻŧ āϰāĻŋāĻāĻāĻžāϰāĻŋ āϏāĻžāϰā§āĻāĻŋāϏāĻāĻŋāĻā§ āĻāĻĄāĻŧāĻžāϞ⧠āϰāĻžāĻāϤ⧠āĻāĻžāĻāĨ¤ āϏāĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻāĻ āĻžāĻ āĻāϞāϞā§, āĻāĻŽāϰāĻž āϝāĻž āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦ āϤāĻž āĻšāϞā§:
- āĻĒāϰāĻŋāώā§āĻŦāĻžāĻāĻŋ āĻāϰāĻ āĻ āύā§āĻ āĻāĻā§ āĻāĻžāϞ⧠āĻāϰā§āύ
- āĻŦā§āϝāĻžāĻāĻāĻĒāĻāĻŋ āϝā§āĻāĻžāύ⧠āĻ āĻŦāϏā§āĻĨāĻŋāϤ āϏā§āĻ āĻā§āϞāĻžāĻāĻĄā§āϰ āϏāĻžāĻĨā§ āĻ āύā§āĻ āĻāĻā§āĻ āϝā§āĻāĻžāϝā§āĻ āĻāϰā§āύāĨ¤
- āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āĻā§āύ āĻŽā§āĻĄā§ āĻāĻā§âāύāϰāĻŽāĻžāϞ āĻŦā§āĻ āύāĻžāĻāĻŋ āϰāĻŋāĻāĻāĻžāϰāĻŋâāϤāĻž āĻ āύā§āĻ āĻāĻā§āĻ āĻŦā§āĻāĻž āϏāĻŽā§āĻāĻŦāĨ¤
- āĻāĻā§ āĻĨā§āĻā§ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĢāĻžāĻāϞā§āϰ āϏāĻāĻā§āϝāĻž āĻ āύā§āĻ āĻāĻŽāĨ¤
- āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻāϰāĻ āĻĻā§āϰā§āϤ āĻāĻžāĻ āĻļā§āϰ⧠āĻāϰāĻžāϰ āϏā§āϝā§āĻ āĻĻāĻŋāύāĨ¤
āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒ āĻŦāϞāϤ⧠āĻāϏāϞ⧠āĻā§ āĻŦā§āĻāĻžāϝāĻŧ?
āĻāĻ āĻĒā§āϰāĻļā§āύā§āϰ āĻāϤā§āϤāϰ āĻĻāĻŋāϤā§, āĻāϞā§āύ āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āϝ⧠āĻāϞāĻā§āϞā§āϰ āĻā§āϰāĻŽ āĻ āύā§āϏāϰāĻŖ āĻāϰ⧠āϤāĻž āĻĻā§āĻāĻŋ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āϝāĻĻāĻŋ āĻā§āύ⧠āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻžāϰ āϤāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ⧠āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύāĨ¤

āĻĒāĻžāĻā§āϞ āĻāϝāĻŧā§āϏāĻŋāĻĢā§āĻāĻŋāĻ â Windows āĻāĻžāϰā§āύā§āϞ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ (⧍ā§Ļ⧧⧝)
āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻžāϰ āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϝāĻž fileapi.h āĻšā§āĻĄāĻžāϰ āĻĢāĻžāĻāϞ⧠āĻā§āώāĻŋāϤ āĻāĻŦāĻ Kernel32.dll-āĻ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāĻŋāϤāĨ¤ āϤāĻŦā§, āĻāĻ āĻĢāĻžāĻāĻļāύāĻāĻŋ āύāĻŋāĻā§ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰ⧠āύāĻž; āĻāĻāĻŋ āĻā§āĻŦāϞ āĻāύāĻĒā§āĻ āĻāϰā§āĻā§āĻŽā§āύā§āĻāĻā§āϞ⧠āϝāĻžāĻāĻžāĻ āĻāϰ⧠āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύāĻāĻŋāĻā§ āĻāϞ āĻāϰā§āĨ¤ (Nt āĻĒā§āϰāĻŋāĻĢāĻŋāĻā§āϏāĻāĻŋ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰ⧠āϝ⧠āĻĢāĻžāĻāĻļāύāĻāĻŋ āύā§āĻāĻŋāĻ)āĨ¤ āĻāĻ āĻĢāĻžāĻāĻļāύāĻāĻŋ winternl.h āĻšā§āĻĄāĻžāϰ āĻĢāĻžāĻāϞ⧠āĻĄāĻŋāĻā§āϞā§āϝāĻŧāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻāĻŦāĻ ntdll.dll-āĻ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ āĻāĻāĻŋ āĻāĻžāϰā§āύā§āϞ āϏā§āĻĒā§āϏ⧠āĻāĻžāĻŽā§āĻĒ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϏā§āϤā§āϤāĻŋ āύā§āϝāĻŧ, āϝāĻžāϰ āĻĒāϰ⧠āĻāĻāĻŋ āĻĢāĻžāĻāϞāĻāĻŋ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāĻŋāϏā§āĻā§āĻŽ āĻāϞ āĻāϰā§āĨ¤ āĻāĻā§āώā§āϤā§āϰā§, Kernel32 āĻšāϞ⧠Ntdll-āĻāϰ āĻāύā§āϝ āĻā§āĻŦāϞ āĻāĻāĻāĻŋ āϰâā§āϝāĻžāĻĒāĻžāϰāĨ¤ āĻāϰ āĻāĻāĻāĻŋ āĻāĻžāϰāĻŖ āĻšāϞ⧠āϝāĻžāϤ⧠āĻŽāĻžāĻāĻā§āϰā§āϏāĻĢāĻ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āĻāύā§āĻāĻžāϰāĻĢā§āϏāĻā§āϞā§āĻā§ āĻĒā§āϰāĻāĻžāĻŦāĻŋāϤ āύāĻž āĻāϰā§āĻ āύā§āĻāĻŋāĻ āĻĢāĻžāĻāĻļāύāĻā§āϞ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻŽāĻžāĻāĻā§āϰā§āϏāĻĢāĻ āϏāϰāĻžāϏāϰāĻŋ āύā§āĻāĻŋāĻ āĻĢāĻžāĻāĻļāύ āĻāϞ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻā§āϝāĻŧ āύāĻž āĻāĻŦāĻ āϏā§āĻā§āϞā§āϰ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻā§āϰ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύāĻ āĻāϰ⧠āύāĻžāĨ¤ āĻĒā§āϰāϏāĻā§āĻāϤ, āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύāĻŦāĻŋāĻšā§āύ āĻĢāĻžāĻāĻļāύ āĻā§āĻāĻā§ āĻĒāĻžāĻāϝāĻŧāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ .
āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāϰ āĻĒā§āϰāϧāĻžāύ āϏā§āĻŦāĻŋāϧāĻž āĻšāϞā§, kernel32-āĻāϰ āϤā§āϞāύāĻžāϝāĻŧ ntdll āĻ āύā§āĻ āĻāĻā§āĻ āϏāĻŋāϏā§āĻā§āĻŽā§ āϞā§āĻĄ āĻšāϝāĻŧāĨ¤ āĻāĻāĻŋ āϝā§āĻā§āϤāĻŋāĻ, āĻāĻžāϰāĻŖ kernel32-āĻāϰ āĻāĻžāĻ āĻāϰāĻžāϰ āĻāύā§āϝ ntdll āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤ āĻĢāϞā§, āύā§āĻāĻŋāĻ āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋ āĻ āύā§āĻ āĻāĻā§ āĻāĻžāĻ āĻļā§āϰ⧠āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
āϏā§āϤāϰāĻžāĻ, Windows āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻšāϞ⧠āĻāĻŽāύ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āϝāĻž āĻŦā§āĻ āĻšāĻāϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āĻļā§āϰā§āϤā§āĻ āĻāĻžāϞ⧠āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ WindowsāϤāĻžāϰāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ ntdll-āĻāϰ āĻĢāĻžāĻāĻļāύāĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāĻ āϧāϰāύā§āϰ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāϞā§: āϝā§āĻāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰ⧠āĻŽā§āϞ āĻĒāϰāĻŋāώā§āĻŦāĻžāĻā§āϞāĻŋ āĻļā§āϰ⧠āĻāϰāĻžāϰ āĻāĻā§ āĻĄāĻŋāϏā§āĻā§ āĻā§āύ⧠āϤā§āϰā§āĻāĻŋ āĻāĻā§ āĻāĻŋāύāĻž āϤāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻŽāϰāĻž āĻāĻžāĻ āĻāĻŽāĻžāĻĻā§āϰ āĻ ā§āϝāĻžāĻā§āĻāĻŋāĻ āϰāĻŋāϏā§āĻā§āϰ āĻ āĻŋāĻ āĻāĻ āϏā§āϤāϰā§āĻ āĻāĻžāĻ āĻāϰā§āĻāĨ¤
āĻāĻŽāĻžāĻĻā§āϰ āĻā§ āĻĒā§āϰāϝāĻŧā§āĻāύ?
- (āĻĄā§āϰāĻžāĻāĻāĻžāϰ āĻĄā§āĻā§āϞāĻĒāĻŽā§āύā§āĻ āĻāĻŋāĻ), āϝāĻž āĻāĻāύ WDK 7 āύāĻžāĻŽā§āĻ āĻĒāϰāĻŋāĻāĻŋāϤ (Windows āĻĄā§āϰāĻžāĻāĻāĻžāϰ āĻāĻŋāĻ)āĨ¤
- āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ āĻŽā§āĻļāĻŋāύ (āϝā§āĻŽāύ Windows ā§ x ā§Ŧā§Ē)
- āĻāĻŦāĻļā§āϝāĻ āύāϝāĻŧ, āϤāĻŦā§ āĻĄāĻžāĻāύāϞā§āĻĄāϝā§āĻā§āϝ āĻšā§āĻĄāĻžāϰ āĻĢāĻžāĻāϞāĻā§āϞ⧠āϏāĻšāĻžāϝāĻŧāĻ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻā§āĻĄāĻāĻŋāϤ⧠āĻā§ āĻāĻā§?
āĻāϞā§āύ āĻāĻāĻā§ āĻ āύā§āĻļā§āϞāύ āĻāϰāĻŋ āĻāĻŦāĻ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāĻŋāϏā§āĻŦā§ āĻāĻāĻāĻŋ āĻā§āĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϞāĻŋāĻāĻŋ āϝāĻž:
- āϏā§āĻā§āϰāĻŋāύ⧠āĻāĻāĻāĻŋ āĻŦāĻžāϰā§āϤāĻž āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰā§
- āĻāĻŋāĻā§ āĻŽā§āĻŽāϰāĻŋ āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰā§
- āĻāĻŋāĻŦā§āϰā§āĻĄ āĻāύāĻĒā§āĻā§āϰ āĻāύā§āϝ āĻ āĻĒā§āĻā§āώāĻž āĻāϰāĻž āĻšāĻā§āĻā§
- āĻĻāĻāϞāĻā§āϤ āϏā§āĻŽā§āϤāĻŋāĻā§ āĻŽā§āĻā§āϤ āĻāϰā§
āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāϤ⧠āĻāύā§āĻā§āϰāĻŋ āĻĒāϝāĻŧā§āύā§āĻ main āĻŦāĻž winmain āύāϝāĻŧ, āĻŦāϰāĻ NtProcessStartup āĻĢāĻžāĻāĻļāύ, āĻāĻžāϰāĻŖ āĻāĻā§āώā§āϤā§āϰ⧠āĻāĻŽāϰāĻž āϏāϰāĻžāϏāϰāĻŋ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻāĻāĻāĻŋ āύāϤā§āύ āĻĒā§āϰāϏā§āϏ āĻāĻžāϞ⧠āĻāϰāĻŋāĨ¤
āĻāϞā§āύ āϏā§āĻā§āϰāĻŋāύ⧠āĻāĻāĻāĻŋ āĻŦāĻžāϰā§āϤāĻž āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰ⧠āĻļā§āϰ⧠āĻāϰāĻž āϝāĻžāĻāĨ¤ āĻāϰ āĻāύā§āϝ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻāĻŋ āύā§āĻāĻŋāĻ āĻĢāĻžāĻāĻļāύ āĻāĻā§āĨ¤ āϝāĻž āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻšāĻŋāϏā§āĻŦā§ āĻāĻāĻāĻŋ UNICODE_STRING āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻ āĻŦāĻā§āĻā§āĻā§āϰ āĻĒāϝāĻŧā§āύā§āĻāĻžāϰ āĻā§āϰāĻšāĻŖ āĻāϰā§āĨ¤ RtlInitUnicodeString āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻŋāĻā§ āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāϞāĻžāĻāĻ āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§āĨ¤ āĻĢāϞā§, āϏā§āĻā§āϰāĻŋāύ⧠āĻā§āĻā§āϏāĻ āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŽāϰāĻž āĻāĻāϰāĻāĻŽ āĻāĻāĻāĻŋ āĻā§āĻ āĻĢāĻžāĻāĻļāύ āϞāĻŋāĻāϤ⧠āĻĒāĻžāϰāĻŋ:
//usage: WriteLn(L"Here is my textn");
void WriteLn(LPWSTR Message)
{
UNICODE_STRING string;
RtlInitUnicodeString(&string, Message);
NtDisplayString(&string);
}āϝā§āĻšā§āϤ⧠āĻāĻŽāϰāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ ntdll-āĻāϰ āĻĢāĻžāĻāĻļāύāĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ āĻāĻŦāĻ āĻŽā§āĻŽāϰāĻŋāϤ⧠āĻāĻāύāĻ āĻ āύā§āϝ āĻā§āύ⧠āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āύā§āĻ, āϤāĻžāĻ āĻŽā§āĻŽāϰāĻŋ āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰāϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŽāϏā§āϝāĻž āĻšāĻŦā§āĻāĨ¤ new āĻ āĻĒāĻžāϰā§āĻāϰāĻāĻŋ āĻāĻāύāĻ āύā§āĻ (āĻāĻžāϰāĻŖ āĻāĻāĻŋ C++-āĻāϰ āĻ āϤāĻŋ-āĻāĻā§āĻ āϏā§āϤāϰā§āϰ āĻāĻā§ āĻĨā§āĻā§ āĻāϏā§āĻā§), āĻāĻŦāĻ malloc āĻĢāĻžāĻāĻļāύāĻ āύā§āĻ (āĻāϰ āĻāύā§āϝ āϰāĻžāύāĻāĻžāĻāĻŽ C āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύ)āĨ¤ āĻ āĻŦāĻļā§āϝāĻ, āĻāĻŽāϰāĻž āϏā§āĻā§āϝāĻžāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāϤāĻžāĻŽāĨ¤ āĻāĻŋāύā§āϤ⧠āϝāĻĻāĻŋ āĻāĻŽāĻžāĻĻā§āϰ āĻĄāĻžāĻāύāĻžāĻŽāĻŋāĻāĻāĻžāĻŦā§ āĻŽā§āĻŽāϰāĻŋ āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ, āϤāĻŦā§ āϤāĻž āĻšāĻŋāĻĒ-āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āϤāĻžāĻ āĻāϞā§āύ, āĻāĻŽāϰāĻž āύāĻŋāĻā§āĻĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻšāĻŋāĻĒ āϤā§āϰāĻŋ āĻāϰāĻŋ āĻāĻŦāĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϰ āϏāĻŽāϝāĻŧ āϏā§āĻāĻžāύ āĻĨā§āĻā§ āĻŽā§āĻŽāϰāĻŋ āύāĻŋāĻāĨ¤
āĻāĻ āĻāĻžāĻā§āϰ āĻāύā§āϝ āĻāĻĒāϝā§āĻā§āϤ āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻšāϞ⧠āĻāϰāĻĒāϰā§, RtlAllocateHeap āĻāĻŦāĻ RtlFreeHeap āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž āĻĒā§āϰāϝāĻŧā§āĻāύāĻŽāϤ⧠āĻŽā§āĻŽāϰāĻŋ āĻŦāϰāĻžāĻĻā§āĻĻ āĻ āĻŽā§āĻā§āϤ āĻāϰāĻŦāĨ¤
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;
}
}āĻāĻŽāĻžāĻĻā§āϰ āĻļā§āϧ⧠āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻā§āϞāĻž āĻĄāĻŋāĻāĻžāĻāϏāĻāĻŋāϤ⧠āĻāĻŦāĻ āĻā§āĻŦā§āϰā§āĻĄ āĻĨā§āĻā§ āĻā§āύ⧠āĻā§āϏā§āĻā§āϰā§āĻ āĻāϏāĻž āĻĒāϰā§āϝāύā§āϤ āĻ āĻĒā§āĻā§āώāĻž āĻāϰā§āύāĨ¤ āϝāĻĻāĻŋ ESC āĻā§ āĻāĻžāĻĒāĻž āĻšāϝāĻŧ, āĻāĻŽāϰāĻž āĻāĻžāĻ āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāĻŦāĨ¤ āĻĄāĻŋāĻāĻžāĻāϏāĻāĻŋ āĻā§āϞāĻžāϰ āĻāύā§āϝ, āĻāĻŽāĻžāĻĻā§āϰ NtCreateFile āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻāϞ āĻāϰāϤ⧠āĻšāĻŦā§ (DeviceKeyboardClass0 āĻā§āϞāĻž āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§)āĨ¤ āĻāĻŽāϰāĻž āĻāϰāĻ āĻāϞ āĻāϰāĻŦ āĻ āĻĒā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋ āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāϞāĻžāĻāĻ āĻāϰāϤā§, āĻāĻŽāϰāĻž āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ KEYBOARD_INPUT_DATA āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰāĻāĻŋ āĻĄāĻŋāĻā§āϞā§āϝāĻŧāĻžāϰ āĻāϰāĻŦ, āϝāĻž āĻāĻŋāĻŦā§āϰā§āĻĄā§āϰ āĻĄā§āĻāĻž āĻāĻĒāϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āĨ¤ āĻāϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻ āϏāĻšāĻ āĻšāĻŦā§āĨ¤
āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āĻāϞā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āĻŦāύā§āϧ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ āĻāĻžāϰāĻŖ āĻāĻŽāϰāĻž āύāĻŋāĻā§āĻĻā§āϰ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻā§āĻ āĻšāϤā§āϝāĻž āĻāϰāĻāĻŋāĨ¤
āĻāĻŽāĻžāĻĻā§āϰ āĻā§āĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāϰ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻā§āĻĄ:
#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 āĻĢāĻžāĻāϞ), āĻŦāĻŋāϞā§āĻĄ āĻ āĻĒāĻļāύ āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āĨ¤
- āĻāĻžāϰā§āĻā§āĻāύā§āĻŽ â āĻĢāϞāĻžāĻĢāϞāϏā§āĻŦāϰā§āĻĒ āϝ⧠āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻā§āĻŦāϞ āĻĢāĻžāĻāϞāĻāĻŋ āϤā§āϰāĻŋ āĻšāĻŦā§ āϤāĻžāϰ āύāĻžāĻŽāĨ¤
- āĻāĻžāϰā§āĻā§āĻāĻāĻžāĻāĻĒ (TARGETTYPE) â āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻā§āĻŦāϞ āĻĢāĻžāĻāϞā§āϰ āϧāϰāύāĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĄā§āϰāĻžāĻāĻāĻžāϰ (.sys) āĻšāϤ⧠āĻĒāĻžāϰā§, āϏā§āĻā§āώā§āϤā§āϰ⧠āĻĢāĻŋāϞā§āĻĄā§āϰ āĻŽāĻžāύ DRIVER āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤ; āϝāĻĻāĻŋ āĻāĻāĻŋ āĻāĻāĻāĻŋ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ (.lib) āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻŽāĻžāύāĻāĻŋ LIBRARY āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤāĨ¤ āĻāĻŽāĻžāĻĻā§āϰ āĻā§āώā§āϤā§āϰā§, āĻāĻāĻāĻŋ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻā§āĻŦāϞ āĻĢāĻžāĻāϞ (.exe) āĻĒā§āϰāϝāĻŧā§āĻāύ, āϤāĻžāĻ āĻāĻŽāϰāĻž āĻŽāĻžāύāĻāĻŋ PROGRAM āϏā§āĻ āĻāϰāĻŋāĨ¤
- UMTYPE â āĻāĻ āĻĢāĻŋāϞā§āĻĄā§āϰ āϏāĻŽā§āĻāĻžāĻŦā§āϝ āĻŽāĻžāύāĻā§āϞ⧠āĻšāϞā§: āĻāύāϏā§āϞ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āĻāύā§āϝ console, āĻāĻŦāĻ āĻāĻāύā§āĻĄā§āĻĄ āĻŽā§āĻĄā§ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ windowsāĨ¤ āϤāĻŦā§, āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĒā§āϤ⧠āĻšāϞ⧠āĻāĻŽāĻžāĻĻā§āϰ nt āĻāϞā§āϞā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
- BUFFER_OVERFLOW_CHECKS â āĻŦāĻžāĻĢāĻžāϰ āĻāĻāĻžāϰāĻĢā§āϞā§āϰ āĻāύā§āϝ āϏā§āĻā§āϝāĻžāĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž, āĻĻā§āϰā§āĻāĻžāĻā§āϝāĻŦāĻļāϤ āĻāĻŽāĻžāĻĻā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻŋ āĻĒā§āϰāϝā§āĻā§āϝ āύāϝāĻŧ, āϤāĻžāĻ āĻāĻŽāϰāĻž āĻāĻāĻŋ āύāĻŋāώā§āĻā§āϰāĻŋāϝāĻŧ āĻāϰ⧠āϰā§āĻā§āĻāĻŋāĨ¤
- MINWIN_SDK_LIB_PATH â āĻāĻ āĻŽāĻžāύāĻāĻŋ SDK_LIB_PATH āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻā§ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰā§āĨ¤ āĻāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āĻ āύā§āϰā§āĻĒ āĻā§āύ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻĄāĻŋāĻā§āϞā§āϝāĻŧāĻžāϰ āĻāϰāĻž āύāĻž āĻĨāĻžāĻā§, āϤāĻŦā§ āĻāĻŋāύā§āϤāĻžāϰ āĻā§āύ⧠āĻāĻžāϰāĻŖ āύā§āĻāĨ¤ āϝāĻāύ āĻāĻŽāϰāĻž DDK āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻā§āĻā§āĻ āĻŦāĻŋāϞā§āĻĄ āϰāĻžāύ āĻāϰāĻŦ, āϤāĻāύ āĻāĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻāĻŋ āĻĄāĻŋāĻā§āϞā§āϝāĻŧāĻžāϰ āĻāϰāĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāĻā§āϞā§āĻā§ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰāĻŦā§āĨ¤
- āĻā§āϏāϏāĻŽā§āĻš â āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϰ āĻā§āϏāĻā§āϞā§āϰ āĻāĻāĻāĻŋ āϤāĻžāϞāĻŋāĻāĻžāĨ¤
- āĻ āύā§āϤāϰā§āĻā§āĻā§āϤāĻŋāϏāĻŽā§āĻš â āĻŦāĻŋāϞā§āĻĄ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻšā§āĻĄāĻžāϰ āĻĢāĻžāĻāϞāĨ¤ āĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĄāĻŋāĻĄāĻŋāĻā§-āĻāϰ āϏāĻžāĻĨā§ āĻ āύā§āϤāϰā§āĻā§āĻā§āϤ āĻĢāĻžāĻāϞāĻā§āϞā§āϰ āĻĒāĻžāĻĨ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻŋ āĻāĻžāĻāϞ⧠āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āϝā§āĻā§āύ⧠āĻĢāĻžāĻāϞāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
- TARGETLIBS â āϞāĻŋāĻā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāϰ āϤāĻžāϞāĻŋāĻāĻžāĨ¤
- USE_NTDLL āĻāĻāĻāĻŋ āĻāĻŦāĻļā§āϝāĻ āĻā§āώā§āϤā§āϰ āϝāĻž āĻ āĻŦāĻļā§āϝāĻ 1-āĻ āϏā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āϏā§āϏā§āĻĒāώā§āĻ āĻāĻžāϰāĻŖā§āĻāĨ¤
- USER_C_FLAGS â āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻā§āĻĄ āĻĒā§āϰāϏā§āϤā§āϤ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻĒā§āϰāĻŋāĻĒā§āϰāϏā§āϏāϰ āĻĄāĻŋāϰā§āĻā§āĻāĻŋāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝā§āĻā§āϝ āϝā§āĻā§āύ⧠āĻĢā§āϞā§āϝāĻžāĻāĨ¤
āϏā§āϤāϰāĻžāĻ, āĻŦāĻŋāϞā§āĻĄ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻŽāĻžāĻĻā§āϰ x86 (āĻŦāĻž x64) āĻā§āĻā§āĻ āĻŦāĻŋāϞā§āĻĄ āĻāĻžāϞāĻžāϤ⧠āĻšāĻŦā§, āĻāϝāĻŧāĻžāϰā§āĻāĻŋāĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āĻĒā§āϰāĻā§āĻā§āĻ āĻĢā§āϞā§āĻĄāĻžāϰ⧠āϝā§āϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ āĻŦāĻŋāϞā§āĻĄ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻāĻžāϞāĻžāϤ⧠āĻšāĻŦā§āĨ¤ āϏā§āĻā§āϰāĻŋāύāĻļāĻāĻāĻŋāϤ⧠āĻĻā§āĻāĻž āϝāĻžāĻā§āĻā§ āϝ⧠āĻāĻŽāϰāĻž āĻāĻāĻāĻŋāĻŽāĻžāϤā§āϰ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻā§āĻŦāϞ āĻĢāĻžāĻāϞ āĻŦāĻŋāϞā§āĻĄ āĻāϰā§āĻāĻŋāĨ¤

āĻāĻ āĻĢāĻžāĻāϞāĻāĻŋ āĻāϤ āϏāĻšāĻā§ āĻāϞāĻŦā§ āύāĻž; āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āĻāĻĒāϤā§āϤāĻŋ āĻāĻžāύāĻžāϝāĻŧ āĻāĻŦāĻ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāĻŋāϝāĻŧā§ āĻāϰ āĻāĻāϰāĻŖ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻŦāϤ⧠āĻŦāϞā§:

āĻā§āĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻžāϞ⧠āĻāϰāĻŦā§āύ?
āϝāĻāύ autochk āĻāĻžāϞ⧠āĻšāϝāĻŧ, āϤāĻāύ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻžāϞ⧠āĻšāĻāϝāĻŧāĻžāϰ āĻā§āϰāĻŽāĻāĻŋ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻā§-āĻāϰ āĻŽāĻžāύ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ āĻšāϝāĻŧ:
HKLMSystemCurrentControlSetControlSession ManagerBootExecuteāϏā§āĻļāύ āĻŽā§āϝāĻžāύā§āĻāĻžāϰ āĻāĻ āϤāĻžāϞāĻŋāĻāĻž āĻĨā§āĻā§ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻā§āϞ⧠āĻāĻ āĻāĻ āĻāϰ⧠āĻāĻžāϞāĻžāϝāĻŧāĨ¤ āϏā§āĻļāύ āĻŽā§āϝāĻžāύā§āĻāĻžāϰ system32 āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻā§āĻŦāϞ āĻĢāĻžāĻāϞ āĻā§āĻāĻā§āĨ¤ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻā§-āĻā§āϝāĻžāϞ⧠āĻĢāϰāĻŽā§āϝāĻžāĻāĻāĻŋ āύāĻŋāĻŽā§āύāϰā§āĻĒ:
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āύāĻžāĻŽāĻāĻŋ āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰāϤā§, āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻ āύāϞāĻžāĻāύ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, .

āĻĻā§āĻāĻž āϝāĻžāϝāĻŧ āϝā§, āĻāĻāĻāĻŋ āύā§āĻāĻŋāĻ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻžāϞ⧠āĻāϰāϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ:
- āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻā§āĻŦāϞ āĻĢāĻžāĻāϞāĻāĻŋ system32 āĻĢā§āϞā§āĻĄāĻžāϰ⧠āĻāĻĒāĻŋ āĻāϰā§āύāĨ¤
- āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋāϤ⧠āĻāĻāĻāĻŋ āĻā§ āϝā§āĻ āĻāϰā§āύ
- āĻŽā§āĻļāĻŋāύāĻāĻŋ āϰāĻŋāĻŦā§āĻ āĻāϰā§āύ
āĻāĻĒāύāĻžāϰ āϏā§āĻŦāĻŋāϧāĻžāϰ āĻāύā§āϝ, āĻāĻāĻžāύ⧠āĻāĻāĻāĻŋ āύā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒ āĻāύāϏā§āĻāϞ āĻāϰāĻžāϰ āĻāύā§āϝ āϤā§āϰāĻŋ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻĻā§āĻāϝāĻŧāĻž āĻšāϞā§:
āĻŦā§āϝāĻžāĻ
@echo off
copy MyNative.exe %systemroot%system32.
regedit /s add.reg
echo Native Example Installed
pauseadd.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āĻāύāϏā§āĻāϞā§āĻļāύ āĻāĻŦāĻ āϰāĻŋāĻŦā§āĻā§āϰ āĻĒāϰā§, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āύāĻŋāϰā§āĻŦāĻžāĻāύā§āϰ āϏā§āĻā§āϰāĻŋāύāĻāĻŋ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāĻāϝāĻŧāĻžāϰ āĻāĻā§, āĻāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻŦāĻŋāĻāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦ:

āĻĢāϞāĻžāĻĢāϞ
āĻāĻ āĻā§āĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāĻā§ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāĻŋāϏā§āĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻšāϝāĻŧā§āĻāĻŋāϞāĻžāĻŽ āϝā§, āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻžāϞ⧠āĻāϰāĻž āĻšāϞ⧠āϤāĻž āĻāĻ āϏā§āϤāϰ⧠Windows āύā§āĻāĻŋāĻ āĻšāĻāϝāĻŧāĻž āĻĒā§āϰā§āĻĒā§āϰāĻŋ āϏāĻŽā§āĻāĻŦāĨ¤ āĻāϰāĻĒāϰ, āĻāύā§āĻĒāϞāĻŋāϏ āĻāĻāύāĻŋāĻāĻžāϰā§āϏāĻŋāĻāĻŋāϰ āĻāĻŦā§āώāĻāĻāĻŖ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻāĻŽāύ āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻŋāϏ āϤā§āϰāĻŋ āĻāϰāĻž āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāĻŦ āϝāĻž āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āϏāĻāϏā§āĻāϰāĻŖā§āϰ āϤā§āϞāύāĻžāϝāĻŧ āĻ āύā§āĻ āĻāĻā§ āĻĄā§āϰāĻžāĻāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āϝā§āĻāĻžāϝā§āĻ āĻļā§āϰ⧠āĻāϰāĻŦā§āĨ¤ āĻāĻŦāĻ āĻāĻāĻ¨ā§Šā§¨ āĻļā§āϞ-āĻāϰ āĻāĻŦāĻŋāϰā§āĻāĻžāĻŦā§āϰ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§, āĻāϤā§āĻŽāϧā§āϝ⧠āϤā§āϰāĻŋ āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻŖāĻžāĻā§āĻ āϏāĻžāϰā§āĻāĻŋāϏā§āϰ āĻāĻžāĻā§ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻšāϏā§āϤāĻžāύā§āϤāϰ āĻāϰāĻž āϝā§āĻā§āϤāĻŋāĻ āĻšāĻŦā§ (āĻ āĻŦāĻŋāώāϝāĻŧā§ āĻĒāϰ⧠āĻāϰāĻ āĻŦāϞāĻž āĻšāĻŦā§)āĨ¤ ).
āĻāĻŽāĻžāĻĻā§āϰ āĻĒāϰāĻŦāϰā§āϤ⧠āĻāϰā§āĻāĻŋāĻā§āϞ⧠āĻāĻŽāϰāĻž āĻ
ā§āϝāĻžāĻā§āĻāĻŋāĻ āϰāĻŋāϏā§āĻā§āϰ āϏāĻžāϰā§āĻāĻŋāϏā§āϰ āĻāϰā§āĻāĻāĻŋ āĻāĻĒāĻžāĻĻāĻžāύ, āĻ
āϰā§āĻĨāĻžā§ āĻāĻāĻāĻāĻĢāĻāĻ āĻĄā§āϰāĻžāĻāĻāĻžāϰ āύāĻŋāϝāĻŧā§ āĻāϞā§āĻāύāĻž āĻāϰāĻŦāĨ¤ āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒā§āϏā§āĻā§āϰ āĻāĻĒāĻĄā§āĻ āĻĒā§āϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻŦā§āϞāĻā§ āϏāĻžāĻŦāϏā§āĻā§āϰāĻžāĻāĻŦ āĻāϰā§āύāĨ¤
āĻāϤā§āϏ: www.habr.com
