(Bemærk, gammel vejledning (opr. fra 2006), primært skrevet med WindowsXP for øje. Primært lagt ud fordi nogle af grundprincipperne stadig er gældende)

I denne artikel vil jeg introducere til registrerings-databasen: grundbegreberne, arkitekturen, tilladelser, scripts og Regedit-kommandoen. Artiklen er introducerende, men kræver et vist kendskab til styresystemerne.

ver 1: onsdag, 17. maj 2006
ver 2: Søndag, 18. juni 2006: Hovedsagelig tilføjet et punkt om katastrofe-management.

Registreringsdatabasen fungerer som et sted, hvor systemet og de forskellige programmer kan lægge informationer ind om forskellige indstillinger i systemet. Registreringsdatabasen kan bruges til snart sagt alt. Dermed også være sagt, at man skal være varsom med, at lave ændringer i den. Forkerte indgreb i registreringsdatabasen kan medføre, at du bliver nødt til at formatere computeren — OGSÅ SELVOM DU HAR LAVET EN BACKUP INDEN DU LAVER ÆNDRINGER. Så vær forsigtig når du begiver dig ind i dette univers. Undertegnede tager intet ansvar for problemer der måtte opstå efter sådanne indgreb.

1. Grundbegreberne.

Når man skal arbejde med registreringsdatabasen, kan det være nyttigt at have styr på grundbegreberne i databasen. Når man taler om indholdet, skelner man overordnet set mellem NØGLER, VÆRDIER og DATA (på engelsk: KEYS, VALUES, DATA). Disse distinktioner kan sammenlignes lidt med opdelingen af harddisken i mapper, filer og filindhold. En nøgle kan have flere undernøgler, som igen kan have flere undernøgler. Nøglerne i sig selv indeholder ikke data, men er blot til stede for at strukturere dataene. Det er først når der ligger et antal værdier i nøglerne, at en nøgle begynder at kunne have nogen betydning for systemet. Værdierne kan have et indhold (data).

Dataene kan struktureres i forskellige datatyper. Der findes følgende officielle datatyper:

  • * REG_SZ: Er den mest brugte datatype. Denne type kan kun indeholde almindelig – direkte læselig – tekststrenge.
  • * REG_EXPAND_SZ: Som REG_SZ, men kan også indeholde system-variable (fx kan man bruge “%SystemRoot%” hvis man vil henvise til Windows-biblioteket).
  • * REG_MULTI_SZ: Denne datatype kan indeholde flere tekststrenge i hver værdi. Hver tekst-streng er adskilt med 2 nul-karakterere.
  • * REG_BINARY: Denne type gemmer en værdi med rå binære data. Disse vises i de fleste editorer som hexadecimale tal.
  • * REG_DWORD: En simplere udgave af REG_BINARY. Denne type indeholder ét tal, der består af 4 bytes (altså et tal, der i decimal-tal-systemet kan række mellem 0-4294967296). Bruges typisk som en boolean-værdi, hvor en given indstilling enten er slået fra (“0”) eller til (“1”).

Der findes også et antal data-typer, som er mindre officielle. Dem vil jeg ikke komme ind på her, men blot liste dem:

  • * REG_DWORD_LITTLE_ENDIAN
  • * REG_DWORD_BIG_ENDIAN
  • * REG_LINK
  • * REG_NONE (ikke-defineret datatype)
  • * REG_QWORD – A 64-bit number.
  • * REG_QWORD_LITTLE_ENDIAN
  • * REG_RESOURCE_LIST

2. Arkitekturen.

For at få et indtryk af registreringsdatabasens opbygning, kan du starte med at åbne den indbyggede registreringsdatabase-editor: Regedit. Det gør du således:
Klik på star-kør, skriv Regedit, og klik på OK. (i Windows2000 vil det være bedre at skrive Regedt32.exe).

Herefter åbnes et stifinder-lignede vindue, hvor du ude i venstre side vil se et antal “mapper”, der hedder noget med “HKEY”. Dette er en liste over de “rodnøgler” som findes på dit system. Typisk vil man kunne finde følgende rodnøgler:

  • HKEY_LOCAL_MACHINE (forkortes ofte til HKLM)
  • HKEY_USERS (forkortes ofte til HKU)
  • HKEY_CLASSES_ROOT (forkortes ofte til HKCR)
  • HKEY_CURRENT_USER (forkortes ofte til HKCU)
  • HKEY_CURRENT_CONFIG (forkortes ofte til HKCC)
  • HKEY_DYN_DATA (forkortes ofte til HKDD — kun på Win9x/ME)

Af disse rodnøgler er kun de 2 første (HKLM & HKU) faktisk eksisterende. Fysisk eksisterer de som filer på harddisken. I Windows 9x/Me findes registreringsdatabasen i 2 skjulte filer i Windows-biblioteket (USER.DAT & SYSTEM.DAT). I Windows 2000/XP er registreringen gemt i flere filer, inde i System32\Config mappen i Windowsbiblioteket, og inde i \Documents and Settings\{brugernavn}-mappen. Disse filer kaldes ofte for databasens “Hive”-filer — opkaldt efter det format, som de er gemt i. Det drejer sig om følgende filer:

Windows 9x/Me:

  • HKU: %Windir%\USER.DAT
  • HKLM: %Windir%\SYSTEM.DAT

Windows 2000/XP

  • HKU: \Documents and Settings\{brugernavn}\NTUSER.dat
  • HKLM: %Windir%\System32\Config\DEFAULT.
  • %Windir%\System32\Config\SAM.
  • %Windir%\System32\Config\SECURITY.
  • %Windir%\System32\Config\SOFTWARE.
  • %Windir%\System32\Config\SYSTEM.

HKLM bærer på indstillingerne for “den lokale computer” — dvs. de indstillinger, der gælder ligegyldigt hvilken bruger, der er logget ind. Ofte har disse indstillinger at gøre med den tilsluttede hardware, men det kan også være de software-indstillinger som skal gælde for “alle brugere”.

HKU-rodnøglen er opdelt i et antal undernøgler. Bl.a. vil du finde disse undernøgler:

.DEFAULT-nøglen: Gemmer de indstillinger, der gælder når der endnu ikke er logget en bruger på systemet.
Dertil kommer et antal nøgler, som hedder noget med en masse tal. Nogle af disse har blot formen:
S-1-*-**
Andre har vedhæftet et længere tal bagefter:
HKEY_USERS\S-1-*-**-*********-*********-*********-****
HKEY_USERS\S-1-*-**-*********-*********-*********-****_classes

Disse undernøgler med lange tal (det såkaldte SID – security identifyer) repræsenter de brugere, som er oprettet på computeren. Når den pågældende bruger logger ind, “oversættes” den pågældende undernøgle til HKEY_CURRENT_USER-nøglen.

Denne nøgle (HKEY_CURRENT_USER) er, ligesom et antal af de andre rodnøgler, således blot et “spejlbilleder” af en del af de 2 “rigtige” rod-nøgler. På følgende måde:

  • HKCU spejler HKU\ ( varierer udfra forskellige parametre)
  • HKCR spejler HKLM\Software\Classes
  • HKCC spejler HKLM\System\CurrentControlSet\Hardware Profiles\Current
  • HKDD – Peger på Win9x/ME-systemer på HKLM’s Plug-&-Play område (kan variere fra system til system. Jeg kender ikke så meget til denne nøgle, og vil derfor i det følgende ikke beskæftige mig med den).

3. Adgangsbegrænsninger til registreringsdatabasen.

Af sikkerhedsmæssige årsager kan det nogle gange være en ide at begrænse brugeres adgang til at ændre i registreringsdatabasen. Eftersom registreringsdatabasen indeholder oplysninger om afgørende forhold i systemet, kan det være godt at holde ikke-kompetente brugere fra at kunne ændre i den. Dette foregår typisk ved at en bruger med administrator-rettigheder går ind og sætter “tilladelserne” for den pågældende bruger. Tilladelser kan man få at se gennem Regedit-programmet (i Windows2000: Regedt32-programmet) — og hvis man har administratorrettigheder, kan man også ændre dem. Det gøres således:

Inde i Regedit markerer du først den nøgle i venstre side, som du vil undersøge tilladelser for. Herefter klikker du på Rediger-Tilladelser (Edit-Permissions på engelske installationer). Så får du en oversigt over forskellige bruger-kategoriers tilladelser. Hvis du klikker på Avanceret/Advanced, får du en mere detaljeret oversigt. “Full Access” giver både læse og skrive-rettigheder. “Read” giver kun læse-rettigheder.

Hvis du har problemer med at gennemtrumfe en ændring i registreringsdatabasen, kan det skyldes at du ikke har skriverettigheder til den pågældende nøgle. Det kan også skyldes at der er et program, der holder øje med nøglen, og fører den tilbage til den oprindelige værdi. Dette er fx ofte tilfældet med virus-registreringer.

4. Registrerings-scripts.

Hvis man gerne vil ændre i registreringsdatabasen, uden at skulle gå ind i Regedit, kan registrerings-scripts være et rigtig godt værktøj. Registrerings-scripts er tekstfiler, der overholder en bestemt syntaks, og som har filendelsen “.reg”. Hvis du dobbeltklikker på en fil med denne filendelse, vil Windows forsøge at tilføje de oplysninger, der findes i filen, til registreringsdatabasen. Hvis der er fejl i syntaksen, får man en fejlmelding.

I Windows 2000/XP kan man vælge mellem 2 formater for registreringsscripts. I Windows 9x/ME kan man kun bruge den første. På det overordnede plan er de næsten identiske, idet den eneste forskel her er den første linie:

Win9x/ME/2000/XP:
REGEDIT4

Win9x/ME/2000/XP:
Windows Registry Editor Version 5.00

Herefter følger en tom linie

Herefter følger et mønster, hvor man først skriver den nøgle, som man vil gøre noget med i firkantede parenteser — med backslash imellem hvert niveau af nøgler. Fx:
[HKEY_CURRENT_USER\Control Panel\PowerCfg\PowerPolicies]

Hvis første tegn indenfor disse parenteser er en bindestreg (-) betyder det, at nøglen (inklusiv undernøgler, værdier og data) skal slettes.

Hvis der blot står en sti ind til en nøgle, kan det betyde flere ting, og betydningen afgøres af den/de linie(r), der følger efter. Hvis der i de efterfølgende linier står linier af denne type:
“xxxxx”=-

…betyder det, at værdien “xxxxx” skal slettes.

I alle andre tilfælde, hvor der står en linie, der starter således:
“xxxxx”=______

Betyder det, at værdien “xxxxx” skal tillægges nogle data. Findes nøglen eller værdien ikke i forvejen, oprettes den/de. Som nævnt tidligere findes der imidlertid flere forskellige datatyper, og dette er også nødt til at kunne ses i registreringsscriptet. Det gøres efter følgende mønster:

  • REG_SZ none “Value”=”data”
  • REG_EXPAND_SZ hex(2) “Value”=hex(2):64,61,74,61,00

I den nye version, kan REG_EXPAND_SZ også angives i unicode-format:

  • “Value”=hex(2):64,00,61,00,74,00,61,00,00,00
  • REG_MULTI_SZ hex(7) “Value”=hex(7):64,61,74,61,00,00
  • REG_DWORD dword “Value”=dword:00000001 (en 8-cifret hexadecimal gengivelse af tallet)
  • REG_BINARY hex “Value”=hex:64,61,74,61,00,00

Hvis en linie i en registrerings-script starter med et semikolon, fortolkes den som en kommentar, som ikke skal lægges ind i registreringsdatabasen.

5. Regedit som kommando.

Ud over at være et program til at vise en grafisk repræsentation af registreringsdatabasen, kan Regedit også bruges til at importere og eksportere indholdet af registreringsdatabasen.

Import (importere en script-fil til registreringsdatabasen):
REGEDIT.EXE [/S] importfil.REG

Export (eksportere — dele af — registringsdatabasen til en script-fil):
REGEDIT.EXE /E exportfil “registringsnøglen_der_skal_eksporteres”

Ved en eksport, bliver resultatet en script-fil, som umiddelbart følger syntaksen, og som følgelig kan bruges direkte til at blive importeret på et andet system, eller på det samme system til et andet tidspunkt. Dette kan være smart, hvis man laver ændringer, som man ikke er helt sikker på. Så kan man senere tilbageføre indstillingerne som de var på eksport-tidspunktet. Bemærk dog, at en sådan tilbageførsel ikke sletter de værdier og nøgler, som er blevet oprettet siden eksporten. Den retter kun de nøgler/værdier, som allerede eksisterede på eksport-tidspunktet.

I WindowsXP findes også kommandoen Reg.exe, som kan mange af de samme ting. Den kan du finde info på ved at søge på filen inde i hjælp (Klik på start-hjælp/help).

6. Andre værktøjer.

Det kan være en fordel nogle gange at få “ryddet op” i registreringsdatabasen, idet det ikke altid er sådan at programmerne selv efter endt brug fjerner de ting, som de sætter ind. Til dette formål er der udviklet en lang række værktøjer. Du finder en god oversigt over disse her:

http://www.ctrlaltdel.dk/forum/forum_posts.asp?TID=41&PN=1 [link virker ikke mere…]

Her finder du også et godt værktøj til at lave en sikkerhedskopi af registreringsdatabasen, hvis du vil til at lave ændringer, som du ikke er helt sikker på. En anden måde at lave en sådan kopi er at oprette et nyt systemgendannelsespunkt. Her skal du dog være opmærksom på, at disse punkter slettes med tiden, så du vil kun have en sådan sikkerhed indenfor et vist tidsrum.

Hvis du har behov for et program til at ændre i tilladelserne for access til databasen, er RegDacl et godt program:

http://www.heysoft.de/en/software/regtools.php?lang=EN

7. Når det går galt.

Det kan gå gruelig galt når man arbejder med registreringsdatabasen. Hvis man får gjort registreringsdatabase-filerne ubrugelige, eller man på en eller anden måde kommer til at fraskrive sig alle tilladelser i databasen, kan du ende i en situation, hvor Windows ikke kan starte. Og du kan derfor umiddelbart ikke få rettet op på dine fejl. Det er en skidt situation, og for den uerfarne vil det sandsynligvis betyde, at man er nødt til at formatere computeren. Vær derfor varsom.

Der findes dog et par muligheder, som man kan arbejde med alligevel.

Hvis du har været forudseende, har du fået lavet nogle backups af database-filerne, har du mulighed for at erstatte de ødelagte filer med backuppen. Har du ikke bevidst lavet en backup, kan du prøve om du kan bruge de backups som ligger i hhv.
\System Volume Information\_restore{xxxxxxxxx}\RP1\snapshot\
%windir%\system32\config\

For erstatte den syge hive-fil med en backup, kræves det, at du kan få adgang til harddisken udenom Windows. Den mest universelle mulighed er her, hvis man piller harddisken ud af computeren, og sætter den over i en anden computer med samme styresystem. Så vil du kunne starte styresystemet, og uden videre kopiere de relevante hive-filer.

Vil man ikke pille i hardwaren findes der også alternative måder at gøre det på. Hvis harddisken er formateret i FAT32 formatet, kan du starte med en almindelig Dos boot diskette, og gøre det ad den vej. Du kan bruge kommandoen COPY eller XCOPY. Kender du ikke disse programmer, kan du få dem beskrevet ved at skrive “copy /?” og “xcopy /?”.

Har du formateret i NTFS-formatet (hvilket de fleste med Win2000/xp har) bliver det lidt mere kompliceret. Du skal enten have fat i en BootCD eller Bootdiskette, der kan læse disse formater. Eksempler på dette, finder du her:
Diskette-boot: http://uploads.ejvindh.net/Ntfs4freedos2.exe
CD-boot: http://uploads.ejvindh.net/Ntfs4freedos.iso

Du kan også prøve at gøre det ved hjælp af recovery consollen:
— Boot op på XP CD’en
— Vælg “R” Repair på det første billede
— Log in på den XP partion, der har problemet (i de fleste tilfælde “C:\Windows”)
— Indtast Password for administrator-kontoen (mange har ikke et password her — og så undlader du bare at skrive noget)
— Du kan kopiere filerne med copy-kommandoen
— Genstart computeren, hvorefter det burde virke igen.

Hvis du har været forudseende har du måske en Boot-cd, som giver et mere Windows-agtigt udseende. Vejledninger herom kan ses på disse links:
http://bjergs.net/live_cd.html
http://www.ctrlaltdel.dk/forum/forum_posts.asp?TID=100&PN=1 [dødt link]

Med disse cd’ere kan man også kopiere de relevante Hive-filer. (vha det Stifinder-lignende program “A43 File management utility”)

Men de åbner også for en mulighed for at redigere i de ødelagte hive-filer. Denne mulighed har du også, hvis du har flyttet harddisken over i en fremmed computer. For inde i Regedit-editoren (som også findes på disse cd’ere) findes der nemlig en funktion, der hedder “Load hive”. Den kan bruges til at hente fremmede hive-filer ind i editoren, redigere dem, og herefter gemme dem. Det gøres således:

I venstre side af editoren skal du stille dig på enten HKLM- eller HKU-hovednøglerne. Så får du oppe under “Filer” muligheden for at vælge “Indlæs hive” (“load hive”). Vælg dette punkt. Så får du mulighed for at navigere frem til de filer, som jeg nævnte ovenfor. Når du har valgt dem, skal du give den et navn (som ikke allerede findes i lag 2 af den aktuelle hovednøgle). Så vil der blive oprettet en ny nøgle i lag 2 af den aktuelle hovednøgle, med det navn, som du angav. Og herefter kan du editere i den, som var det en almindelig nøgle i registreringsdatabasen. Når du er færdig med dette, gemmer du filen igen ved at stille dig på den fremmede nøgle, klik på “Filer”-“Eksporter”. I den dialogbox der dukker op, skal du ved “Gem som type” vælge “Registrerings hive”, herefter skal du gemme filen oveni den ødelagte fil. Herefter har du muligvis (hvis du fik rettet den relevante fejl) igen en velfungerende registreringsdatabase.

8. Links til mere info.

http://en.wikipedia.org/wiki/Windows_registry
http://support.microsoft.com/kb/256986
http://support.microsoft.com/default.aspx?scid=kb%3Bda%3B322756
http://www.windowsitlibrary.com/Content/224/1.html
http://www.akadia.com/services/windows_registry_tutorial.html
http://www.microsoft.com/technet/prodtechnol/windows2000serv/maintain/operate/distreg.mspx
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnarexnt02/html/ewn0102.asp
http://www.robvanderwoude.com/index.html
http://www.bufferzone.dk/Vidensbank/IT%20sikkerhed/registreringsdatabase-hacking.htm