Права кройка системния регистър на Windows

Ние се въвеждат в светая светих на системата без да минава през стандартни механизми

Гледайки напред, ще отбележа, че тази тема е интересна, но има цял набор от сериозни проблеми. Но кой казва, че не го правим по рамото? 🙂

От гледна точка на операционната система Windows, регистъра - това е уникална изба. Това уникално конструирани данни йерархични базата данни се съхраняват в конфигурацията, информация за регистрация и други глупости за почти всичко в системата, като се започне с програмата и завършва с настройките на даден потребител. Публични регистри на практика всичко. Въпреки факта, че някои програми предпочитат техните настройки в INI-довереник (особено програми, написани за Win 3.11 -. Ед ..), самият Windows цялата информация за себе си чете от системния регистър. В интерес на истината, ние се отбележи, че в * никс операционна система, подобна все още доминира на системните настройки се съхраняват в различни конфигурации.

Начинаещи - системни администратори в началото на старейшините в системния регистър, се страхуват, че грешна настройка и промяна на настройките на системния регистър може да изпълват напълно системата и последващо преинсталация. И това е вярно.

Така например, така наречените точки за възстановяване - копие на системния регистър. Те са широко използвани от потребителите в случай на различни проблеми, като например операционната система, и със софтуера и хардуера.

Аз трябва да кажа, че 99% от информацията в системния регистър на Windows - описание на основните ключове, плюс съвети за това как да се работи с тях. Но това е работа с регистъра на операционната система? И ако можем да подражават на своите действия? Нека да помислим малко.

Registry - и двете силни и слаби странични прозорци. Силна страна на системния регистър, е, че не е необходимо да се манипулира Tuyev huchey конфигурации за разработчици на софтуер, като, например, приложена в Никс. Регистрирайте се и удобен за създателите на COM-компоненти - системата автоматично разпознава компонент на системния регистър и го прави по-лесно за по-нататъшното му използване.

Registry слабост в тази достъп до чувствителни области на промяна на системния регистър, ви позволява да контролирате всяка програма за Windows написани някои нуво malvarschikom. Не забравяйте, дори и на най-известния клон на системния регистър в Windows, което позволява на програмата да работи на операционна система стартиране :) на.

Как Windows работи с регистъра

Ако регистър на Windows 98 може да кърпене всички, които го влезе в главите ни, като се започне с Windows XP достъп до регистъра Само потребители с администраторски акаунт. В Vista + достъп до регистъра е под защитата на UAC. Това е разбираемо.

Трябва да призная, че с пускането на Win7 концепция за сигурност при работа с регистъра да е била ревизирана към по-добро. Например, под закрилата е ключов отрасъл на HKEY_LOCAL_MACHINE. Като цяло, един опит да напиша нещо в него ще бъдат пренасочени към съответния клон HKEY_CURRENT_USER за текущия потребител.

За да работите директно с регистъра на Windows предлага на програмиста набор от WinAPI, която трябва да бъде запознат с всяка система, разработчик - е Reg * са функции като RegOpenKey, RegQueryValue и така нататък. В основата на Win е NtOpenKey, NtQueryValueKey и много други. Опишете ги няма специално значение - цялата документация за правилното използване на тези функции може да се намери на MSDN.

Заслужава да се отбележи, че тук. Антивирусен и proaktivki да следи действията на потребителите, определени капани на тези функции, както в ядрото и в yuzermode.

С пускането на Win7 x64 ситуацията се е променила, а аз вече писа. Windows разработчиците са решили да се откажат от възможността да се намеси потенциално опасни функции в Win ядро. Сега променлива KeServiceDescriptorTable в 64 вече се изнасят, и да пренапише правилната част от код няма да работи - PatchGuard няма. Има, разбира се, sadomasochistic решения, които да заобикалят тези ограничения - но няма да има повече глупости, отколкото печалба. Особено, че Microsoft предлага комфортни ObRegisterCallbacks обратни повиквания за наблюдение на системния регистър.

Информация в интернет за структурите, които описват основни регистрационни файлове са много малки. И почти всички от тях на английски език. Основни познания може да се намери тук. Освен това, както за регистъра е писано в Библията системи анализатор "Вътрешното устройство Windows» от неговите другари М. Русинович и Дейвид Соломон.

Но това, което е в регистъра за недвижими? Ако се вгледате в WINDOWSsystem32config папка, можете да видите, че има няколко файлове: система, софтуер, сигурност, Сам, и няколко други.

Този регистър файлове.

файлове на системния регистър на Windows

Въпреки това несправедливо да се говори за системния регистър също толкова някаква комбинация от файлове заредени в паметта. Голяма част от нея съдържа в регистъра е динамичен характер, има редица от стойности, изчислени при процеса на стартиране на системата, по-специално това се отнася за определени параметри желязо. Например, като под HKEY_DYN_DATA регистър, чиито данни при зареждане на операционната система в RAM и са там до приключване на операционната система. Същото, между другото, може да се каже за ключов раздела HKEY_LOCAL_MACHINE, който не разполага с съответния файл на диск, но всъщност формира от други файлове на системния регистър, като например софтуер, система и др.

По този начин, в рамките на системния регистър може да бъде много грубо, наречена "виртуални комбинация файлове на системния регистър". След стартиране на системата, тези файлове се съхраняват във файла за виртуална памет (пейджъра басейн), както и набор извън виртуалната памет памет (набор извън виртуалната памет).

За да научите как да се работи с регистъра директно, без да знаят нищо за нейната вътрешна структура не може да направи нищо. Като цяло, Microsoft никога не разкрива тайните на вътрешната структура на файловете, които правят копие на системния регистър, защото това застрашава безопасността. Според моите наблюдения, всички описания на файловете на системния регистър, както и неговата структура (и те са, между другото съвсем малко) - резултатите от изследвания pionerov изследователи. Най-пълен, по мое мнение, е "Проучване", можете да намерите тук. той принадлежи към някой Питър Норис.

Ние няма да навлизаме в подробности сега организацията и структурата на регистъра, случаят е дълъг, досаден, а в обхвата на тази статия не правят точно е удобно. Важно е да се разбере, че в регистъра - йерархична дървовидна структура на, понякога също се каже, че той прилича на пчелна пита.

Веднага разочаровам: poshamanit лесно директно с регистъра в yuzermode не работи, системата няма да го направя, тъй като това обикновено се случва с файловете, използвани от друг процес. Ако се опитате да укриват, можете просто да прочетете "зает" файл и след това предполагам, ако флаговете, с които тя е била открита. За съжаление, на записа от интерес за нас ", регистратура пила" информация не бъдат освободени. Между другото, тази функция с точната информация, вписан в регистъра може да се вози, ако напишете в reestrovskie * .bak-файлове, те просто са на разположение за запис.

Но от ядрото не е това, да се чете, но също така да записва необходимата информация в файловете на системния регистър е дори по-бързо.

Така че, да гледате :) на ръка.

Първото нещо, което може да дойде при светлината на главата - отворете файла регистър пряко и нещо да се запише.

На теория, можете да го направите, той трябва, на първо място, да бъде в състояние да работи с "зает" файл (начини в интернет изглежда), и второ, както вече казах по-горе, че е необходимо да се знае, вътрешната структура на файла на системния регистър. Този метод е по-скоро тромав, но въпреки неговата налудно, че е доста изгодно, въпреки че е трудно да се приложи на практика (опитайте да експериментирате с него сами по себе си).

Тук предлагаме два начина да ви помогнат да го нарежете на малки парченца регистър.

Първият начин е, че мениджърът на конфигурация (Конфигурация на мениджъра, част от операционната система, ако не знаете) на системния регистър е нищо повече от един набор от добре определени структури в оперативната памет, която, както се оказва, много лесно да се работи. Каква е структурата, ще попитате вие? HBASE_BLOCK, HHIVE, HBIN, HCELL, HMAP_ENTRY, HMAP_DIRECTORY, куп CM_ * структури, използвани от довереник-мениджър, за да работят в системния регистър. От гледна точка на операционната система, регистъра - това е просто набор от регулирани структури в паметта. Така например, подпис "regf" определяне "файла на системния регистър", не е предварително определена постоянна:

И тук е подпис «regf» на ...

Това е смисълът на всичко това, ми монолог, че има лукса на манипулации с регистъра на ниво операционна система, но не и с помощта на редовни й средства. Как е възможно това? Ние просто semuliruem действие на операционната система, така както тя работи с регистъра! Важно е, както казах, за да разбере какво регистъра на операционната система за не повече от набор от съответните структури в паметта.

Ако имате достъп до файловете на системния регистър на ниво ядро, а след това ние сме по-лошо от самата операционна система, за да се установи ред?

И тогава се появява на сцената, най-интересният въпрос - как да намерите същите тези модели в паметта? Вярно е, на стандартни средства за системата за справяне с този проблем не е, така че трябва да се измъкнем от трудни.

Знаейки как да изглежда структурата, ние трябва да помним, че всеки файл, раздел на системния регистър, има постоянна подпис. Например, «regf» - е 0x66676572. За подписването на кошера ще бъде равен 0xBEE0BEE0. Като достъп до паметта на ядрото, ние съвсем спокойно може да се намерят тези подписи в паметта, просто го proskaniv. Друга възможна proskanit памет в търсене на подписи «СМ 10» - те се причисляват към пейджъра паметта на довереник-мениджър единица, която е разпределена структура CMHIVE на. Аз вярвам в намирането на елемента ние се интересуваме памет, можете да си представите какво да правя с него :).

Как, например, промените стойността на клетката регистър? Стойността се съхранява в CM_KEY_VALUE-> данни, така че ако имате задача възниква, за да промените всяка област в определен ключ на системния регистър, да търсите стойността, която тя беше там:

Вторият вариант е модификация на първия вид. Ако знаете, че има една особеност при работа с регистъра - всичко се променя, че е "създаването на нови ключове / запис / изтриване на ключове", като правило, да влезе в сила след рестартиране на компютъра (или след рестартиране изследовател, това е рана метод). Преди това, всички промени, които са като че ли спряно, «мръсни» държави. Освен това, системата за обработка на системния регистър комуникира с него чрез кеш файл система. Това е разбираемо - се обръща към регистъра могат да бъдат стотици в секунда, съответно, в същото време разчитат на производителността на файловата система е неразумно, няма изпълнение няма да се спаси. Затова системата и работа с регистъра, казват те, на практика, чрез кеш файл система. И след това, за да получите червата регистър към светлината, за това е необходимо да се получи в кеш! Как се прави това вече е описано в tyrnete, включително в www.xakep.ru.

Какво да се каже, в края на краищата? Предложени в статията на читателя вариант на директен контрол на регистъра е изцяло експериментален. Аз не споря, това е много тежко за практическо прилагане, както и много бих казал, че е по-добре да се използват нормални WinAPI-функции за работа с регистъра - и ще бъде в нещо правилно. Въпреки това, в действителност, изпълнена die_hard Лииб, въз основа на принципите, посочени в статията ще има наистина термоядрена енергия се изплъзва нито Ейвъри, нито самата операционна система.

При което завършек. Успешно компилация и да Force бъде с вас!