Aangetoonde concepten:
Het Gebruik van de registratie (zie procedure TfrmLoadHive.btnDisplayValueClick (Afzender: TObject))
Bijenkorven & de bijenkorf Standaard van de Gebruiker &. Gebrek (zie verder)
Het uitvoeren van een ander programma van binnen een programma van Delphi (zie procedure TfrmLoadHive.btnExecRegEditClick)
Gebruik van de Symbolische Voorrechten van het Proces in Delphi (zie verder)
RE: Bijenkorven
De registratie WinXP is verdeeld in vele verschillende secties. Elke belangrijke sectie wordt genoemd een bijenkorf. De behandeling van volledige takken van de registratie als afzonderlijke bijenkorven staat Microsoft toe om verscheidene keurige trucs uit te voeren. Eerst en vooral, staat het bijenkorf toe om in verscheidene plaatsen in de registratie met verschillende namen te verschijnen. Het duidelijkste voorbeeld van dit is HKey_Current_User die natuurlijk aan de bijenkorf van de gebruiker richt die het programma heeft geopend. Een minder bekend voorbeeld is HKEY_CLASSES_ROOT die eenvoudig een herladen versie van KEY_LOCAL_MACHINE \ de Klassen van de SOFTWARE \ is. Die vertrouwd met het bevel van Dos subst en de symbolische verbindingen Linux kunnen vergelijkingen daar ook trekken.
Een gelijk minder bekend gebruik van venstersbijenkorven is dat de Vensters elk van zijn bijenkorven niet actief houdt. Het heeft afzonderlijke bijenkorven als voorbeelden te gebruiken om lokale gebruikers te creëren, en andere voor het creëren van gebruikersrekeningen wanneer iemand in de machine ver door een domein heeft geregistreerd. Ik schijn om daar te herinneren die een paar meer voorbeelden is maar zij ontwijken op het ogenblik me. Die bijenkorven worden opgeslagen als Dat- dossiers op de harde aandrijving. Bijvoorbeeld, in het gebrek XP installeer, zal de registratiebijenkorf die bij `c:\ Van \- Standaard documenten en van Montages \ \ Gebruiker \ \ NTUSER.DAT wordt opgeslagen worden gebruikt om alle standaardregistratieingangen te plaatsen wanneer een nieuwe gebruiker in de machine registreert. Plaats een waarde in die bijenkorf, en alle toekomstige gebruikers zullen die waarde hebben.
NOTA: Verwar dit niet met HKEY_USERS \ .DEFAULT. De bijenkorf HKEY_USERS \ .DEFAULT slaat de gebruikte waarden op wanneer niemand het programma wordt geopend. „Huh? Hoe dat nuttig kon zijn?“ Goed, als u over het denkt, kan controleren al dan niet een computer zich aan slaap zet als iemand heeft geïnitialiseerdr het maar niet het programma geopend zeer belangrijk zijn. Het zou ook aardig kunnen zijn om een screensaver te plaatsen die werkt wanneer u logout van uw computer maar het aangezet verlaat. Een ultra veilige persoon kon het kleurenschema plaatsen volledig zwart op zwarte te zijn, dan slechts een persoon die werkelijk weet wat zij doen kon in de computer registreren - LOL. In elk geval, zijn .DEFAULT en de bijenkorven Standaard van de Gebruiker NIET het zelfde ding.
RE: Symbolische Voorrechten:
De vensters XP/NT/2000 en de nieuwere werkende systemen hebben veiligheidsmethodes vooruitgegaan om te beperken welke programma's en niet kunnen kunnen doen. Deze beperkingen staan ook het registreren van sommige beperkte toegangsfuncties toe. Zo, bijvoorbeeld, terwijl het voor programma's mogelijk is om de systeemtijd te plaatsen, enkel kan om het even welk oud programma niet het doen.
Het programma moet vragen om en toestemming krijgen om de tijd bij te werken, alvorens het kan worden verwezenlijkt. Het is een beetje als wat een klokhop moet doen in het hotelruimte van iemand krijgen. Als een klokhop in ruimte 5321 (beweren dit hotel gebruiken sleutels en niet plastic kaarten) moet krijgen, zal de klokhop zijn manager vertellen hij gaat wensen om in een ruimte te krijgen, omhoog kijken die zeer belangrijk dat de ruimtebehoeften, de manager om die sleutel vragen, de ruimte openen en zijn ding doen. Dan zal hij natuurlijk de deur sluiten zodra hij wordt gedaan. Merk op dat als de klokhop een bos van andere dingen vóór het sluiten van de deur doet, de ruimte zou kunnen worden ingebroken. En wanneer een goede klokhop tot de ruimte moet toegang hebben meerdere keren, zal de ruimte tussen tijden worden gesloten hij tot het toegang heeft.
Het proces voor Vensters is het zelfde:
Vertel Vensters u voorrechten door te roepen zult aanpassen: OpenProcessToken (GetCurrentProcess (),
TOKEN_ADJUST_PRIVILEGES of TOKEN_QUERY, TTokenHd);
Vind de lokale naam van het voorrecht u door LookupPrivilegeValue te roepen zult aanpassen
Verleen me toegang door TTokenPvg.Privileges [0] te plaatsen. Attributen aan SE_PRIVILEGE_ENABLED
Sluit opnieuw de deur door TTokenPvg.Privileges [0] te plaatsen. Attributen aan SE_PRIVILEGE_DISABLED
In mijn programma, heb ik drie helperroutines voor het werken met de tekenen gecreÃërd: SetTokenPrivilege, GrantPrivilege en RevokePrivilege. Laatstgenoemden twee dienen slechts om mijn roepende code duidelijk te maken. De leesbaarheid is essentieel voor om het even welk professioneel rangprogramma. Op wat punt zult u de details van elk enig programma vergeten u hebt schrijven. Zo, zelfs als u slechts een routine voor uw eigen gebruik schrijft, zou u moeten doen wat u het kunt maken gemakkelijker te lezen. De taken als dit kunnen worden verspild schijnen die op wegwerpprogramma's, maar doet u het meer, zal sneller u zijn en waarschijnlijker zal het zijn dat uw gewoonte van het schrijven van goede code uiteindelijk resultaat op zal leveren.
Hier zijn mijn het voorrechtroutines van Delphi:
DELPHI:
-
{******************************************************************************
-
 SetTokenPrivilege
-
 Een helperfunctie die toelaat of specifieke voorrechten op onbruikbaar maakt
-
 gespecificeerde computer. Een NUL in SystemName betekent het voorrecht zal worden verleend
-
 voor de huidige computer. Een andere waarde moet de naam van een computer aanpassen
-
 op uw netwerk.
-
******************************************************************************}
-
procedure SetTokenPrivilege (aSystemName: PChar; aPrivilegeName: PChar; aEnabled: Van Boole);
-
var
-
 TTokenHd: T-hendel;
-
 TTokenPvg: TTokenPrivileges;
-
 cbtpPrevious: DWORD;
-
 rTTokenPvg: TTokenPrivileges;
-
 pcbtpPreviousRequired: DWORD;
-
 TokenOpened, ValueFound: Van Boole;
-
begin met // SetPrivilege
-
 // het voorrechtsysteem op NT en voorbij slechts beschikbaar is
-
 als (Win32Platform = VER_PLATFORM_WIN32_NT)
-
 dan begin
-
  // wint het Teken terug dat deze huidige toepassingszitting vertegenwoordigt
-
  TokenOpened: = OpenProcessToken (GetCurrentProcess (),
-
                  TOKEN_ADJUST_PRIVILEGES of TOKEN_QUERY,
-
                  TTokenHd);
-
Â
-
  // Controle voor mislukking
-
  als (niet TokenOpened)
-
  dan hef Exception.Create op (`de huidige gebruiker heeft niet de toegang die wordt vereist om dit programma in werking te stellen. ')
-
  anders begin
-
   // krijgt de naam van het voorrecht (aangezien de Vensters meertalig is, moet dit worden gedaan)
-
   ValueFound: = LookupPrivilegeValue (aSystemName, aPrivilegeName, TTokenPvg.Privileges [0]. Luid);
-
   TTokenPvg.PrivilegeCount: = 1;
-
Â
-
   // laat of maakt de vlag volgens overgegaane bool toe onbruikbaar
-
   als (aEnabled)
-
   dan TTokenPvg.Privileges [0]. Attributen: = SE_PRIVILEGE_ENABLED
-
   anders TTokenPvg.Privileges [0]. Attributen: = SE_PRIVILEGE_DISABLED; // ziet nota over lokale constante verklaring
-
   cbtpPrevious: = SizeOf (rTTokenPvg);
-
   pcbtpPreviousRequired: = 0;
-
   als (niet ValueFound)
-
   dan hef Exception.Create op (`Dit programma is onverenigbaar met het werkende systeem dat op deze computer wordt geïnstalleerd. ')
-
   anders begin
-
    probeer
-
     // past zonodig de toestemmingen aan.
-
     Windows.AdjustTokenPrivileges (Valse TTokenHd, cbtpPrevious TTokenPvg,
-
                    rTTokenPvg, pcbtpPreviousRequired);
-
    behalve
-
     hef Exception.Create op (`de huidige gebruiker heeft niet de vereiste toegang om een registratiebijenkorf te laden. ')
-
    eind;
-
   eind;
-
  eind
-
 eind;
-
eind;Â // SetPrivilege
-
{******************************************************************************
-
 GrantPrivilege
-
 Deze routine verleent het voorrecht nodig om tot de verborgen systeembijenkorf toegang te hebben
-
 en laad het in geheugen.
-
******************************************************************************}
-
procedure TfrmLoadHive.GrantPrivilege (aPrivilegeName: Koord);
-
begin met // GrantPrivilege
-
 SetTokenPrivilege (NUL, PChar (aPrivilegeName), WAAR);
-
eind;Â // GrantPrivilege
-
Â
-
{******************************************************************************
-
 RevokePrivilege
-
 Deze routine herroept voorrecht dat in GrantPrivilege wordt gegeven
-
******************************************************************************}
-
procedure TfrmLoadHive.RevokePrivilege (aPrivilegeName: Koord);
-
begin met // RevokePrivilege
-
 SetTokenPrivilege (NUL, PChar (aPrivilegeName), VALS);
-
eind;Â // RevokePrivilege
In mijn geval, gebruik ik het teken SeRestorePrivilege. Dit is eigenlijk één van de krachtigste en dodelijke tekenen. Met het vertelt u Vensters dat u een Hard reserveprogramma bent van de Aandrijving en u toegang tot alle soorten dossiers wilt hebben dat de meeste programma's geen toegang tot worden verleend. Vermoedelijk doet u dit voor goed en niet kwaad. Andere tekenen zijn:
SeCreateTokenPrivilege, SeAssignPrimaryTokenPrivilege, SeLockMemoryPrivilege, SeIncreaseQuotaPrivilege, SeUnsolicitedInputPrivilege, SeMachineAccountPrivilege, SeTcbPrivilege, SeSecurityPrivilege, SeTakeOwnershipPrivilege, SeLoadDriverPrivilege, SeSystemProfilePrivilege, SeSystemtimePrivilege, SeProfileSingleProcessPrivilege, SeIncreaseBasePriorityPrivilege, SeCreatePagefilePrivilege, SeCreatePermanentPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeShutdownPrivilege, SeDebugPrivilege, SeAuditPrivilege, SeSystemEnvironmentPrivilege, SeChangeNotifyPrivilege, SeRemoteShutdownPrivilege, SeUndockPrivilege, SeSyncAgentPrivilege, SeEnableDelegationPrivilege, SeManageVolumePrivilege
Zo, is dat de grondbeginselen. Neem een blik de commentaren in de rest van de broncode en u zult spoedig zien wat gebeurt en waarom.
Probeer ook sommige verschillende dingen. Stel RegEdit in werking en laad manueel de bijenkorf door Bijenkorf File>Load. Merkte u dat op u op een punt binnen één van de voorgeladen bijenkorven moet zijn alvorens die optie wordt toegelaten? Wat gebeurt wanneer u de knoop drukt van de ladingsbijenkorf maar hebt u zich geen voorrechten verleend? Wat gebeurt wanneer u uw zelfvoorrechten verleent en hen niet herroept die b4 het programma sluiten. Kunt u de dan laden bijenkorf wanneer u het programma herhaalt? Wat gebeurt als u verleent slechts keer 4 maar eens leegmaakt?
Experiment. Maar herinner me, speelt u met de registratie en Thar is daar monsters. Deze app de werkenboete op mijn systeem, heb ik gelijkaardige routine regelmatig een paarjaren nu gebruikt, maar ik heb het niet met alle versies van Vensters getest en ik heb geen idee hoe het uit-van-de-gewone omstandigheden, zoals slechte sectoren in een datdossier op uw HD zal behandelen. Bovendien, kon een pak van de Dienst van Vensters totaal veranderen wat dit programma doet. Zo, in het kort, kom niet aan me wanneer u Vensters moet opnieuw installeren. Ik zal eenvoudig zeggen het een slecht toeval was en hoe dan ook uw systeem voorbij mijn controle is, zou u nooit dit programma moeten in werking gesteld hebben over het. Ik ben niet verantwoordelijk voor uw financieel en emotioneel verlies. U bent verantwoordelijk voor het ervoor zorgen die broncode u op uw computer in werking stelt geen weloverwogen of toevallig kwaadwillig gedrag heeft.
http://www.TheCodeCave.com/downloads/delphi/LoadHiveDemo.exe
http://www.TheCodeCave.com/downloads/delphi/LoadHiveDemo.dpr
http://www.TheCodeCave.com/downloads/delphi/U_LoadHive.dfm
http://www.TheCodeCave.com/downloads/delphi/U_LoadHive.pas