рдХреНрдпрд╛ рдЖрдк рдХрднреА рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рддрдВрддреНрд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рд╢рд┐рдХрдВрдЬрд╛ рдШреБрдорд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдЕрд╡рд╕рд░реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЦреБрд▓ рдЧрдП рд╣реИрдВ? рд╢рд╛рдпрдж рд╡реЗ рднреА рд╕реАрдзреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд▓рдЧрд╛ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рд░реЙрдХреЗрдЯ рдереЗ?
рдореИрдВ рдкреБрд▓ рдХреЗ рд╕рд╛рде рдХреЛрд░ рддрдХ рдЪрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЦрд░рдЧреЛрд╢ рдЫреЗрдж рдХрд┐рддрдирд╛ рдЧрд╣рд░рд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХрд░реНрдиреЗрд▓ рд╣реИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ C ++ 17 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХрд░реНрдиреЗрд▓ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдХреЗ рдмреАрдЪ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдпрд╛ рдпрдерд╛рд╕рдВрднрд╡ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдФрд░ рдпрд╣ рднреА, рд╢реБрд░реБрдЖрддреА рдФрд░ рдЙрдиреНрдирдд рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП Ring0 рдореЗрдВ рддреНрд╡рд░рд┐рдд рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдФрд░ рдХрд░реНрдиреЗрд▓ рдПрдкреАрдЖрдИ рдФрд░ рд░реИрдкрд░ рдХрд╛ рдПрдХ рд╕реЗрдЯред
рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
- IOP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ I / O рдкреЛрд░реНрдЯ рддрдХ рдкрд╣реБрдБрдЪ, рд╕рд╛рде рд╣реА, рдмрд╛рд╣рд░ , cli рдФрд░ sti рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛
- рд╕рд┐рд╕реНрдЯрдо рдЯреНрд╡реАрдЯрд░ рдкрд░ рд▓рдкреЗрдЯрддрд╛ рд╣реИ
- рдПрдХреНрд╕реЗрд╕ MSR (рдореЙрдбрд▓-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░)
- рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ
- рднреМрддрд┐рдХ рдореЗрдореЛрд░реА, DMI / SMBIOS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдФрд░ рдкрд░рдорд╛рдгреБ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдПрдкреАрд╕реА рд╡рд┐рддрд░рдг
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдУрдм *** рдФрд░ рдкреАрдПрд╕ *** рдХреЙрд▓рдмреИрдХ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░
- рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдХрд░реНрдиреЗрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
... рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред
рдФрд░ рд╣рдо рдЕрдкрдиреЗ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
GitHubрдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдирд╡реАрдирддрдо рдЙрдкрд▓рдмреНрдз WDK (рд╡рд┐рдВрдбреЛрдЬ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд┐рдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Microsoft рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд╕рд╛рде рдореБрдлреНрдд VMware рдкреНрд▓реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд, рдХрд┐рд╕реА рднреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╡рд┐рдВрдбреЛрдЬ 7 рд╕реЗ рдХрдо рдирд╣реАрдВ, рдПрдХрджрдо рд╕рд╣реА рд╣реИред
рдЕрд╕реЗрдВрдмрд▓реА рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ:
- рдХрд░реНрдиреЗрд▓-рдмреНрд░рд┐рдЬ рдЦреЛрд▓реЗрдВ
- рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ рдЪреБрдиреЗрдВ
- Ctrl + Shift + B
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рд╕рд╛рде рд╣реА рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╛рдЗрд▓реЗрдВ (
* рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП
* .ff , Microsoft рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд░рдорд╛рдгрди рдкреНрд░рдХрд╛рд╢рдХ, рдЖрджрд┐ рдкрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
* .cab) рдорд┐рд▓рддреА рд╣реИрдВ ред
рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрджрд┐ x64 рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ - рд╕рдВрдмрдВрдзрд┐рдд рдИрд╡реА рдкреНрд░рдорд╛рдг рдкрддреНрд░), рдЖрдкрдХреЛ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкрд░реАрдХреНрд╖рдг рдореЛрдб рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдВ:
bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit.exe /set TESTSIGNING ON
... рдФрд░ рдорд╢реАрди рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░реЗрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдирд┐рдЪрд▓реЗ рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬреЛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░реАрдХреНрд╖рдг рдореЛрдб рдореЗрдВ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рдирд╛ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЖрдЗрдП рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВред
рд░реВрдкрд░реЗрдЦрд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реИ:
/ рдХрд░реНрдиреЗрд▓-рдмреНрд░рд┐рдЬ / рдПрдкреАрдЖрдИ - рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдФрд░
рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
/ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдмреНрд░рд┐рдЬ / рдПрдкреАрдЖрдИ - рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдХреНрддрд╛-рдореЛрдб рд░реИрдкрд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдЬреЛ рдкреАрдИ-рдлрд╛рдЗрд▓, рдкреАрдбреАрдмреА-рдЕрдХреНрд╖рд░ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
/ SharedTypes / - рджреЛрдиреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рд╡рд╛рд▓реЗ рдкрд░рдорд╛рдгреБ рд╣реЗрдбрд░
рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рдирд┐рдпрдорд┐рдд рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдПрдХ рдорд┐рдиреАрдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВред рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдкрд╕рдВрдж рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдХреЙрд▓рдмреИрдХ рдХреА рдЙрдиреНрдирдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рддреЛ, C ++ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд▓реЛрдб рдХрд░реЗрдВ:
#include <Windows.h> #include "WdkTypes.h" // x32/x64 WDK #include "CtlTypes.h" // IOCTL- #include "User-Bridge.h" // API, int main() { using namespace KbLoader; BOOL Status = KbLoadAsFilter( L"X:\\Folder\\Path\\To\\Kernel-Bridge.sys", L"260000" // ); if (!Status) return 0; // ! // API ... // : KbUnload(); return 0; }
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рд╣рдо рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдореГрддрд┐ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛:
using namespace Processes::MemoryManagement; constexpr int Size = 64; BYTE Buffer[Size] = {}; BOOL Status = KbReadProcessMemory(
рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ! рдЖрдЗрдП рдПрдХ рд╕реНрддрд░ рдиреАрдЪреЗ рдЬрд╛рдПрдВ - рдкрд░рдорд╛рдгреБ рдореЗрдореЛрд░реА рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛:
using namespace VirtualMemory; constexpr int Size = 64; BYTE Buffer[Size];
рд▓реЛрд╣реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, I / O рдкреЛрд░реНрдЯред
рд╣рдо рдЙрдиреНрд╣реЗрдВ EFlags рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ 2 IOPL рдмрд┐рдЯреНрд╕ рдХреЛ рдХреЙрдХ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рднреЗрдЬреЗрдВрдЧреЗ, рдЬреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ /
рдмрд╛рд╣рд░ /
cli /
sti рдирд┐рд░реНрджреЗрд╢ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдХреНрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:
#include <intrin.h> using namespace IO::Iopl; // , ! KbRaiseIopl(); // in/out/cli/sti ! ULONG Frequency = 1000; // 1 kHz ULONG Divider = 1193182 / Frequency; __outbyte(0x43, 0xB6); // // : __outbyte(0x42, static_cast<unsigned char>(Divider)); __outbyte(0x42, static_cast<unsigned char>(Divider >> 8)); __outbyte(0x61, __inbyte(0x61) | 3); // ( ) for (int i = 0; i < 5000; i++); // Sleep(), IOPL ! __outbyte(0x61, __inbyte(0x61) & 252); // KbResetIopl();
рд▓реЗрдХрд┐рди рд╕рдЪреНрдЪреА рдЖрдЬрд╛рджреА рдХрд╛ рдХреНрдпрд╛? рд╕рдм рдХреЗ рдмрд╛рдж, рдПрдХ рдЕрдХреНрд╕рд░ рдХрд░реНрдиреЗрд▓ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рд╕рднреА рдХрд░реНрдиреЗрд▓ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдЗрд╕реЗ рдХрд░реНрдиреЗрд▓ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (SMEP рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ FPU рд╕рдВрджрд░реНрдн рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓ рд╕реНрд╡рдпрдВ
try.except рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддреА рд╣реИ):
using namespace KernelShells;
рд▓реЗрдХрд┐рди рдЧреЛрд▓реЗ рдХреЗ рд╕рд╛рде рд▓рд╛рдбрд╝ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЧрдВрднреАрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓, рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд░рд▓ рдбреАрдПрд▓рдкреА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдкрдХреЛ
CreateFile /
ReadFile /
WriteFile /
DeviceIoControl , рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣реИрдВрдбрд▓ / рдбреБрдкреНрд▓рд┐рдХреЗрдЯрд┐рдВрдЧ рд╣реИрдВрдбрд▓ (
ObRegisterCallbacks ) рдЦреЛрд▓рдиреЗ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ / рдереНрд░реЗрдб рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдореЙрдбреНрдпреВрд▓ (
PsSet *** NotifyRoutine ) рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдордирдорд╛рдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдпрд╛ рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХ рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдХрд╛рдо рд╕рд┐рджреНрдзрд╛рдВрдд:
- рдбреНрд░рд╛рдЗрд╡рд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ Ob *** / Ps *** рдХреЙрд▓рдмреИрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ
- рдбреНрд░рд╛рдЗрд╡рд░ рдПрдХ рд╕рдВрдЪрд╛рд░ рдкреЛрд░реНрдЯ рдЦреЛрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдИрд╡реЗрдВрдЯ рдХрдиреЗрдХреНрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЛрд░реНрдЯ рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдореЗрдВ рдЯреНрд░рдВрдХрдЯ рд╣реИрдВрдбрд▓, рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рдЖрджрд┐) рдФрд░ рдШрдЯрдирд╛ рдХреЛ рдХрд░реНрдиреЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдВ
- рдбреНрд░рд╛рдЗрд╡рд░ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
ObRegisterCallbacks рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдХ рдкрд╣реБрдБрдЪ рдореЗрдВ рдХрдЯреМрддреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
#include <Windows.h> #include <fltUser.h> #include "CommPort.h" #include "WdkTypes.h" #include "FltTypes.h" #include "Flt-Bridge.h" ... // ObRegisterCallbacks: CommPortListener<KB_FLT_OB_CALLBACK_INFO, KbObCallbacks> ObCallbacks; // PROCESS_VM_READ: Status = ObCallbacks.Subscribe([]( CommPort& Port, MessagePacket<KB_FLT_OB_CALLBACK_INFO>& Message ) -> VOID { auto Data = static_cast<PKB_FLT_OB_CALLBACK_INFO>(Message.GetData()); if (Data->Target.ProcessId == GetCurrentProcessId()) { Data->CreateResultAccess &= ~PROCESS_VM_READ; Data->DuplicateResultAccess &= ~PROCESS_VM_READ; } ReplyPacket<KB_FLT_OB_CALLBACK_INFO> Reply(Message, ERROR_SUCCESS, *Data); Port.Reply(Reply); // });
рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рднрд╛рдЧ рдХреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЧрдП, рд▓реЗрдХрд┐рди рдХреЛрд░ рдПрдкреАрдЖрдИ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд░рд╣рд╛ред
рд╕рднреА рдПрдкреАрдЖрдИ рдФрд░ рд░реИрдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ:
/ рдХрд░реНрдиреЗрд▓-рдмреНрд░рд┐рдЬ / рдПрдкреАрдЖрдИ /рдЙрдирдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рддрд╛рд░ рдФрд░ рддрд╛рд▓реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдПрдкреАрдЖрдИ рдФрд░ рд░реИрдкрд░ рдХреЗрд╡рд▓ рд╕реНрд╡рдпрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд░реНрдиреЗрд▓ рдореЗрдВ рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рднреА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдареЛрдХрд░ рд╣реИ:
#include <wdm.h> #include <ntstrsafe.h> #include <stdarg.h> #include "StringsAPI.h" WideString wString = L"Some string"; AnsiString aString = wString.GetAnsi().GetLowerCase() + " and another string!"; if (aString.Matches("*another*")) DbgPrint("%s\r\n", aString.GetData());
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдИрдУрд╕реАрдПрд▓рдПрд▓ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦреЗрдВ / рдХрд░реНрдиреЗрд▓- Bridge/Kernel-Bridge/IOCTLHandlers.cpp
- рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, DispatchIOCTL рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рд╕рд░рдгреА рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ
- Ctl рдореЗрдВ рдХреНрд╡реЗрд░реА рдЗрдВрдбреЗрдХреНрд╕ :: KbCtlIndices enumeration рдХреЛ CtlTypes.h рдореЗрдВ SAME рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЗрдЯрдо 2 рдореЗрдВ рд╣реИрдВрдбрд▓рд░реНрд╕ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
- User-Bridge.cpp рдореЗрдВ рд░реИрдкрд░ рд▓рд┐рдЦрдХрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рд╕реЗ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ KbSendRequest рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рд╕рднреА рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ I / O рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ (METHOD_BUFFERED, METHOD_NEITHER рдФрд░ METHOD_IN_DIRECT / METHOD_OUT_DIRECT) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, METHOD_NEITHER рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╣ рд╕рдм рд╣реИ! рд▓реЗрдЦ рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдВрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдлреНрд░реЗрдо рдХрд░реНрдиреЗрд▓ рдШрдЯрдХреЛрдВ, рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ, рдзреЛрдЦрд╛ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕, рдПрдВрдЯреА-рдЪреАрдЯреНрд╕ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдиреМрд╕рд┐рдЦрд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдФрд░ рдпрд╣ рднреА рдХрд┐, рд╕рднреА рдХреЛ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ:
- рдкреАрдЯреАрдИ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд╣реЗрд░рдлреЗрд░ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдкрд░ рдкрд░рдорд╛рдгреБ рд╕реНрдореГрддрд┐ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░реНрд╕
- рдореМрдЬреВрджрд╛ рдПрдкреАрд╕реА рдкреНрд░рд╡рд╛рд╣ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рддрд░рдг рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрдВрдЬреЗрдХреНрдЯрд░
- рдЬреАрдпреВрдЖрдИ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХрд░реНрдиреЗрд▓ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо
- рдХрд░реНрдиреЗрд▓ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдЗрдВрдЬрди
- рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрд╕рдИрдПрдЪ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
- рдПрдЪрдПрд▓рдХреЗ рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рдХрд░рдирд╛
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!