|
|
Improper use of this program can be disastrous. SteelWerx is not liable for any damage done due to the (mis)use of
its programs. By using these applications, you are accepting all responsibilities associated, and will use them at
your own risk.
|
REG.EXE is a program that is deployed with Microsoft Windows XP. It is a way to manipulate the Registry from the
command line. So it can be used in batchfiles, called from program and in Console Windows. But as you can read earlier,
it is only there for Windows XP. If you want to use it on another Windows platform you are out of luck.
By downloading a huge set of support tools
you can get one you can use with Windows 2000, but other platforms are not available.
SteelWerX programmed a version of REG.EXE known as SWReg (SteelWerX Reg). But even using SWReg on Windows XP might
prove handy, since it also implements a few goodies that are not available with the original. So read about the
possibilities of SWReg. If something is not possible with the original Microsoft program it is noted in bold.
SWReg is a complete copy of REG.EXE, so it supports the same options With SWReg you can IMPORT and
EXPORT script-files, SAVE and RESTORE hive-files. QUERY the contents of keys or values.
LOAD and UNLOAD hives, COPY and COMPARE keys. And DELETE keys or values.
Additionaly, you can also MOVE (or rename) Registry keys and manipulate the Access Control Lists (ACL)
of Registry keys, and much more...
A few standard things about the command line for use with SWReg.
FullKeyName means a complete keyname consisting of a Rootkey and the Subkeys. The following Rootkeys are
available
- HKEY_LOCAL_MACHINE, or the short version HKLM
- HKEY_CURRENT_USER, or HKCU
- HKEY_CLASSES_ROOT, or HKCR
- HKEY_USERS, or HKU
- HKEY_CURRENT_CONFIG, or HKCC
|
| QUERY |
SWReg QUERY FullKeyName [ /v ValueName | /ve | /s ]
ValueName: The value name, under the selected Key to query. When omitted, all values under the Key are
queried
/ve query the empty value name <no name>
/s queries all subkeys and values This commands queries the given keys and subkeys. It will list all values
and their data under the key. In contrast to Microsoft SWReg will also list the decimal equivalent of the hexadecimal values
that REG shows. |
| ADD |
SWReg ADD FullKeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/b]
ValueName: The value name to add under the selected Key. If omitted or supplied as /ve the value of empty
value name <no name> will be changed.
Type: Datatype of the new entry. Possible entries are REG_SZ, REG_MULTI_SZ,
REG_RESOURCE_REQUIREMENTS_LIST, REG_DWORD, REG_BINARY, REG_DWORD_LITTLE_ENDIAN, REG_DWORD_BIG_ENDIAN, REG_NONE,
REG_RESOURCE_LIST, REG_FULL_RESOURCE_DESCRIPTOR, REG_QWORD or REG_EXPAND_SZ.
If omitted, the new entry will be added as a REG_SZ entry.
Separator: Specify one character that you use as the separator in your data string for REG_MULTI_SZ. If
not given with a REG_MULTI_SZ entry, the program uses "\0" as the separator.
Data: The data to assign to the registry ValueName being added.
You can add numeric data in two ways, the familiar decimal way, or as a hexadecimal value. To enter a hexadecimal
value you have to enter the data starting with 0x. So to add 64 to the Registry in hexadecimal you enter 0x40 as
Data.
On top of what REG implements you can also add four extra types of Registrydata with SWREG. These are shown in bold
above. To add data to these 4 types (and to REG_BINARY and REG_NONE) enter the data in binary. For use with REG_NONE
data there is a switch (/B) that will make the program use an interpreted binary version of the supplied data.
Omission of this switch results in the same addition as reg.exe does.
As an example... Suppose that the supplied data was deadbeef. Without /B this will be entered as
64006500610064006200650065006600, with the /B switch as deadbeef
To use environment variables in REG_EXPAND_SZ values you have to play a bit with the data. The problem is that it
depends on the Operating System that you are using. In Windows 95, 98 and ME you will always have to enter the
variable with double quotes (") surrounded. If you don't, then Windows will substitute the variable with the actual
value of the variable. So to enter the text %SystemRoot% in a REG_EXPAND_SZ value you will have to supply
%"SystemRoot"% as data, otherwise you'll end up with C:\WINDOWS (most probably) in the Registry. On the other hand
Windows 2000 and XP it depends on how you use SWReg. If it is used in a batchfile you have to use two percentage
signs to denote an environment variable. Straight on the command line itself, act as if it were Windows 98 and use ".
To enter %SystemRoot% from a batchfile use %%SystemRoot%%, from the command line %"SystemRoot"%.
As doublequotes are used to keep parameters with spaces as one, this rises the question how to add a doublequote
on the commandline itself. The solution is to use the backslash character as an escape sign, so simply prepend the
doublequote with a backslash and everything should go. An example is: "He said: \"Hi!\""
|
| DELETE |
SWReg DELETE FullKeyName [/v ValueName | /ve | /va]
ValueName: The value name, under the selected Key, to delete. When omitted, all subkeys and values under
the Key are deleted
/ve: delete the value of empty value name <no name>
/va: delete all values under this key
This deletes the given value under the the specified key. Opposed to Microsoft I operate under the assumption that
you know what you are doing. There are no questions, it simply deletes!
|
| COPY |
SWReg COPY SourceKeyName DestKeyName [/s] [/noacls]
/s: Copies all subkeys and values
/noacls: Skip copying the permissions to the new key. Not specifying this switch will copy the
permissions from SourceKeyName to DestKeyName. This includes the subkeys.
Just as with REG SWreg copies the contents of SourceKeyName to DestKeyName. REG sets default permissions to the new
key in Windows versions that support Permissions on the Registry. SWReg does not! You asked it to copy, this would
logically include permissions as well. To mimic the behavior of REG and set default permissions include the /noacls
switch to the command.
|
| SAVE |
SWReg SAVE FullKey FileName
FullKey: The full name of a registry key to save to a hive file.
FileName: The name of the disk file to save. If no path is specified, the file is created in the current
folder of the calling process.
This will save a key to a hive file. To save as a text file (a Regfile or Regscript) use EXPORT.
|
| RESTORE |
SWReg RESTORE FullKey FileName
FullKey: The full name of a registry key to restore the hive file into. Overwriting the existing key's
values and subkeys
FileName: The name of the hive file to restore.
This will restore a hive file to a key. The command will overwrite all the values and subkeys stored in the key if the
already exists. To import a Regfile use IMPORT.
|
| LOAD |
SWReg LOAD FullKeyName FileName
FullKeyName: The key to load the hive file in.
FileName: The name of the hive file to load
This command will load a hive file into the Registry. The key you want to load the file in has to be either in
HKEY_LOCAL_MACHINE or in HKEY_USERS because the other keys are shortcuts (pointers) to other parts in the Registry.
|
| UNLOAD |
SWReg UNLOAD FullKeyName
FullKeyName: The key name of the hive to unload
This command will unload a key in the Registry.
|
| COMPARE |
SWReg COMPARE KeyName1 KeyName2 [/v ValueName | /ve] [Output] [/s]
ValueName: The value name, under the selected Key, to compare
/ve: compare the value of empty value name <no name>
/s: Compare all subkeys and values
Output [/oa | /od | /os | /on]
When omitted, output only differences
/oa: Output all of differences and matches
/od: Output only differences
/os: Output only matches
/on: No output
This will compare two keys in the Registry and report the differences. Optionally this command can check two values,
and report only the differences, only the matches, both or nothing. If Valuename is not given it will compare all
the values under the given key.
|
| EXPORT |
SWReg EXPORT KeyName FileName [/nt4]
Keyname: Keyname to be exported
FileName: The name of the disk file to export
/nt4: Output reg file as old NT4 format
This will export a key to a "regscript" or "Regfile". A textual representation of the contents of the key in
question.
When run under Windows 95, Windows 98, or Windows ME the output will be in ASCII coding. Under Windows 2000 and
Windows XP the result will be a file in Unicode. If you want an ASCII file on these platforms you will have to add
the /nt4-parameter to the command.
|
| IMPORT |
SWReg IMPORT FileName [/test]
FileName: The name of the disk file to import (local machine only)
/test: The supplied file will only be tested on syntax. It will not be imported.
This command will incorporate the changes in the file into the Registry. Before it will be imported, a test of the
file in question will be performed, and if found that it cannot import the file it will show a message what is wrong.
|
| MOVE |
SWReg MOVE SourceKeyName DestKeyName [/noacls]
/noacls: Skip moving the permissions to the new key. Not specifying this switch will move the
permissions from SourceKeyName to DestKeyName. This includes the permissions to subkeys.
In effect this is the same as copy. It will only delete the SourceKeyName afterwards (provided permissions are
granted to do that).
|
| ACL |
SWReg ACL FullKeyName [[/G user:GUI;Spec/Inh] [/GX:GUI;Spec/Inh] [...]]
[/P | /E] [[/D user:GUI;Spec/Inh] [/DX:GUI;Spec/Inh] [...]]
[[/R user] [/RX] [...]] [/I ENABLE|COPY|REMOVE]
[/SPEC A|B|C [-]] [/L filename] [/Q]
[[/O user]| /OA | /OM ] [/RE-SET ENABLE|COPY|REMOVE]
[/VERBOSE] [/N NULL Sequence]
This command will manipulate the permissions to a Registry key. Since the manipulation of permissions is the same
as with files I refer to the documentation of SWXCACLS to find the deeper meaning of
the various switches. The differences between these two programs I will explain now.
- The GUI permissions are simplified to just 2. Full Control (F) and Read (R). Other permissions are not granted
to Registry keys.
- Since Registry keys are slightly different in behavior to files and folders. The Specific rights that can be granted
are the following:
- E Synchronize
- D Take Ownership
- C Change Permissions
- B Read Permissions
- A Delete
- 6 Create Link
- 5 Notify
- 4 Enumerate Subkeys
- 3 Create Subkeys
- 2 Set Value
- 1 Query Value
As you can see I've omitted a few that are defined with SWXCACLS. I have done this so the permissions are sort of
transparent.
- One predefined group has been added to the possible groups you can assign permissions to: (R) Restricted.
- The SPEC switch has been augmented with the minus sign switch to indicate that given permissions are only to
this key and the direct Subkeys. The permissions will not be propagated to the lower Subkeys
- Another difference with SWXCACLS is that Registry keys can include NULL characters (see NULL command). To facilitate
the permission manipulation of these keys I've added an optional NULL sequence. This will not work with the /RESET parameter
as that will automatically handle these keys when encountered
|
| INFO |
SWReg INFO KeyName [/s |/f] [/0[-]]
KeyName: Key to extract information about.
This command will output the number of subkeys and value that are present in the key. It will be only that
specific key, not for its subkeys.
It will also show the last date and time that the Registry key was written to.
/s: Will show the the last date and time that the subkeys of the supplied Registry key have been written to.
/f: Does the same as /s but just for the immediate subkeys.
/o: Sorts the date output on Last Access Date-time instead of hierarchical. Adding a minus will sort in reverse, ergo the latest dates first.
|
| NULL |
SWReg NULL ADD FullKeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/b] [/n NULL sequence]
SWReg NULL DELETE FullKeyName [/v ValueName | /ve | /va] [/n NULL sequence]
SWReg NULL QUERY FullKeyName [/v ValueName | /ve | /s ] [/n NULL sequence] [/f]
See the documentation for the various subcommands to find the meaning of the parameters.
A simple trick to hide the contents of a Registry key is to insert a NULL character somewhere in it. The technical
explanation behing this is that in programming languages a string ends with a NULL terminator. Some functions
in a programming language allow the programmer to input more memory than needed. As long as the called
function knows how much memory there is to work with, the called function is happy. By using these functions
programmers create Registry keys that cannot be opened by programs that use the "normal" functions to manipulate
the Registry. End effect... The key is cannot be opened and thus can be used to store secret data.
As is to be expected ADD will add one of these keys (and optionally a value), DELETE will get rid of it and QUERY gives
you a way to check for the existence of these keys. You can also use these functions to add, delete and query keys that
do not have NULL characters embedded in them though.
By default, the NULL sequence is \0. Unfortunately this would mean that you will not be able to use these functions
to manipulate a NULL embedded Registrykey that contains the sequence of its own. To overcome this problem all the
subcommands have an extra parameter (/n) with which you can specify an alternative NULL sequence, for example *.
The subcommand QUERY has been augmented with the /f parameter. This parameter will filter the output to only contain the
NULL embedded keys and their contents, all according to the other provided command line switches.
|
| LINK |
SWReg LINK ADD LinkName FullKeyName [/temp]
SWReg LINK DELETE LinkName
LinkName: Key that can be used as a shortcut to FullKeyName.
FullKeyName: Key to use as source for the shortcut
/temp: Creates the link in memory only. The next time the computer is started the shortcut will be erased.
Registry shortcuts (or officially SymLinks) are shortcuts to other keys in the Registry. One of the most familiar shortcuts to users is the
HKEY_CURRENT_USER key that points to a key under the HKEY_USERS key. With the subcommands in LINK you can ADD and DELETE
these links.
Be careful with this command because it will do just as you ask... And leave you with the mess after execution. If you delete a vital
SymLink in the Registry you may end up in a Blue Screen and an unbootable computer. Enjoy the hours of reinstalling afterward!
|
|
<NOTE !!!!>
The following assumptions have been made for using these programs!- These programs will not be used on networked machines to work on another machine.
These programs only work on the machine it runs on!
- You know what you are doing. There are no "Are you sure?" prompts or any other form of confirmations asked
|
| Updates: |
| 24 january 2009 v. 3.0.0.4: added the parameters /f and /o to INFO
| 21 january 2009 v. 3.0.0.3: - added subkey search to INFO
- Added permission management of NULL embedded Registry keys to ACL
- The /RESET parameter in ACL has been renamed to /RE-SET, this to end confusion about what the thing does.
Just to reiterate: the parameter re-sets permissions to what is supplied on the command line. It does not reset the permissions to some sort of default state!
|
| 9 december 2008 v 3.0.0.2: bugfix on IMPORT where some characters in hexencoded data were decoded. |
| 24 february 2008 v 3.0.0.1: Big endian numbers shouldn't be present in the Registry, but apparently are. So the support for that datatype has been added. |
28 january 2008 v 3.0.0.0: - New: LINK and NULL functionality
- Changed the Administrator check on Vista to include SYSTEM in case this program is run in the SYSTEM context
- Changed a crash with username retrieval when the program runs as the user SYSTEM
|
| 12 december 2007 v 2.0.1.11: The Vista check backfired on Vista machines with UAC disabled |
| 4 december 2007 v: 2.0.1.10: bugfix on COPY and MOVE command. Thanks to the Vista check these failed |
1 december 2007 v: 2.0.1.9:- Complete Vista compatibilty check.
- introduction of /B switch in the ADD command. This switch will interpret supplied REG_NONE data as binary
|
| 22 july 2007 v: 2.0.1.8: bugfix on QUERY command. Opening the key with the wrong permissions resulted in wrong answers |
| 11 april 2007 v: 2.0.1.7: bugfix on INFO command. Calling it with the various parameters to show Help info
will not result in Rootkey errors. |
30 march 2007 v: 2.0.1.6: - bugfix on importing files with (Default) assignments
- bugfix on hexdecoding during import
- workaround for adding a doublequote(") character on the commmandline.
|
| 27 february 2007 v: 2.0.1.5: bugfix on 'Stream Read Error' |
| 17 february 2007 v: 2.0.1.4: added the INFO command |
| 4 november 2006 v: 2.0.1.3: got rid of a Range Check Error in the EXPORT command. |
| 2 november 2006 v: 2.0.1.1: my last update killed the ACL command so I had to rebuild it. Oops... |
| 30 october 2006 v: 2.0.1.0: got rid of a small bug resulting in REG_MULTI_SZ values having an extra line when added through ADD |
9 augustus 2006 v: 2.0.0.1: complete reprogrammed version.- Program should be Unicode aware, but I haven't been able to test that.
- Added new switches MOVE and ACL.
- Checked the working of all options on Windows 95, Windows 98,Windows 2000 and Windows XP. I haven't explicitly tested under Windows ME, but I doubt that there will be problems.
|
| 10 september 2005: an exploit in RegEdit.exe has made me recode the entire export that is being used in the EXPORT option. Since IMPORT wasn't affected
by this exploit, only the export was recoded, not the import. |
| Download address: SWReg |
|