File: MANUAL.txt

package info (click to toggle)
chntpw 140201-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,100 kB
  • sloc: ansic: 23,909; makefile: 137
file content (516 lines) | stat: -rw-r--r-- 18,352 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516

The Offline Windows Password Editor
(c) 1997-2014 Petter Nordahl-Hagen

Command line utilities

All these programs need one (or more) registry files to work on.
These are the binary registry files, called "hives" that usually are
located on a Windows machine under \WINDOWS\System32\config
where the most important ones are:
SAM - HKEY_LOCAL_MACHINE\SAM, Security Accounts Manager
      contains local user / group info, user passwords are here
SYSTEM - HKEY_LOCAL_MACHINE\SYSTEM: System settings / configuration
         (services, drivers, hardware info, some boot config)
SOFTWARE - HKEY_LOCAL_MACHINE\SOFTARE: Config and info of installed
           software and a lot of higher level windows config

Note that these programs (and the registry library they use) do not
join all these files in the same tree like Windows does.
For example, a path like
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control
is not valid, it is instead just
ControSet001\Control
(after selecting the hive if more than one is loaded)
But, unless you use the registry edit or export/import functions, you
do not need think about this as for other things the tools handle
this.


chntpw: Program for interactively resetting passwords and group
memberships.
My boot CD runs this with options -i -L SAM

  chntpw: change password of a user in a Windows SAM file,
  or invoke registry editor. Should handle both 32 and 64 bit windows and
  all version from NT3.x to Win8
  chntpw [OPTIONS] <samfile> [systemfile] [securityfile] [otherreghive] [...]
   -h          This message
   -u <user>   Username or RID (0x3e9 for example) to interactively edit
   -l          list all users in SAM file and exit
   -i          Interactive Menu system
   -f          Interactively edit first admin user
   -e          Registry editor. Now with full write support!
   -d          Enter buffer debugger instead (hex editor), 
   -v          Be a little more verbose (for debuging)
   -L          For scripts, write names of changed files to /tmp/changed
   -N          No allocation mode. Only same length overwrites possible (very safe mode)
   -E          No expand mode, do not expand hive file (safe mode)



 -u <user>   Username or RID (0x3e9 for example) to edit interactively

Invoke the interactive edit menu on the specified user.
Specifying a user name will most likely fail if the username has international
characters, so itis better to use the user's ID (RID), for example
 chnptw -u 0x3e9 SAM
to edit the user with hexadecimal RID 3e9


 -l          list all users in the SAM file and exit

Just that, list all the users in human readable form, with some information
about the user, such as if the user is an administrator user and if the password is set.

 -i          Interactive Menu system

Invokes the menu system. Menu items will vary a bit depending on what
registry hives are loaded.

 -f          Interactively edit the first admin user

Select the first admin user for edit. This is the user with the lowest RID that
also is member of the administrators group, or the built-in user 0x1f4 if no
other users are found.

 -e          Registry editor. Now with full write support!

Enter the registry editor. It is a small command system. Press '?' for help
there. See other documentation for more information on regedits.

 -d          Enter the buffer debugger instead (hex editor), 

Command line type hex editor, mostly used for debugging purposes. ? for help.

 -v          Be a little more verbose (for debugging)

Lots of debug output during most operations (especially hive loading)

 -L          For scripts, write names of changed files to /tmp/changed

If any of the other functions changes the registry, the changed files
are listed here. This option can be used by wrapper scripts to know what to save.
My boot CD uses it.

 -N          No allocation mode. Only same length overwrites possible (very safe mode)

Safe mode. This option will only allow changes in the registry that overwrite old
values with the same length data. Password reset only changes 2 bytes, and
does not change value length, so password resets will still work in
this safe mode. If something tries to violate this safe mode, a lot of
error messages (some of them rather obscure) may be shown.

 -E          No expand mode, do not expand hive file (safe mode)

Safe mode. Does not allow expanding the size of the file, but will
allow adding keys/values as long as there is enough free space in the file
already. (most files contains some free space)
If expansion is needed but not allowed by this option,
a lot of obscure error messages may be show, and the file should not be saved.

-------------------------------------------------------------------------

reged: Registry editor and export and import of .reg files.

  reged version 0.1 110511, (c) Petter N Hagen

  Modes:
  -x <registryhivefile> <prefixstring> <key> <output.reg>
     Xport. Where <prefixstring> for example is HKEY_LOCAL_MACHINE\SOFTWARE
     <key> is key to dump (recursively), \ or \\ means all keys in hive
     Only one .reg and one hive file supported at the same time
  -I <registryhivefile> <prefixstring> <input.reg>
     Import from .reg file. Where <prefixstring> for example is HKEY_LOCAL_MACHINE\SOFTWARE
     Only one .reg and one hive file supported at the same time
  -e <registryhive> ...
     Interactive edit one or more of registry files

  Options:
  -L : Log changed filenames to /tmp/changed, also auto-saves
  -C : Auto-save (commit) changed hives without asking
  -N : No allocate mode, only allow edit of existing values with same size
  -E : No expand mode, do not expand hive file (safe mode)
  -t : Debug trace of allocated blocks
  -v : Some more verbose messages


Modes:
-x <registryhivefile> <prefixstring> <key> <output.reg>
   Xport. Where <prefixstring> for example is HKEY_LOCAL_MACHINE\SOFTWARE
   <key> is key to dump (recursively), \ or \\ means all keys in hive
   Only one .reg and one hive file supported at the same time

Exports everything below the specified <key> of the hive to .reg file.
Since the program does not care about what part of the registry
Windows thinks it is, you must specify the prefix if the .reg file
needs to be used in Windows.
Prefix is like
HKEY_LOCAL_MACHINE\SOFTWARE for software hive file
HKEY_LOCAL_MACHINE\SYSTEM for system hive file
and so on, look in regedit.exe in windows for details.

To dump the whole hive, use \ or \\ or . as the key.
Examples:

  reged -x system HKEY_LOCAL_MACHINE\\SYSTEM ControlSet001 output.reg

should export everything below ControlSet001 key from the registry hive
file named 'system' into the .reg file named 'output.reg', using
HKEY_LOCAL_MACHINE\SYSTEM in front of every key name in the .reg file.
(in most shells \\ is needed to ignore the meaning '\' has to the shell)

  reged -x system HKEY_LOCAL_MACHINE\\SYSTEM ControlSet001\\Enum output.reg

same, but start from ControlSet001\Enum

  reged -x system HKEY_LOCAL_MACHINE\\SYSTEM \\ output.reg

exports everything in the system file



  -I <registryhivefile> <prefixstring> <input.reg>
     Import from .reg file. Where <prefixstring> for example is HKEY_LOCAL_MACHINE\SOFTWARE
     Only one .reg and one hive file supported at the same time

This option is the opposite of -x: it reads from a .reg file and puts it into the hive
file, just like 'regedit.exe foobar.reg' will do in Windows.
The <prefixstring> is removed from the beginning of each key name, if you
specify this wrong, the result may not be what you expected.
KNOWN PROBLEM: This routine is slow, very slow indeed on binary values (has
hex numbers in .reg file). It may take over 5 minutes to import a file
the size of a normal XP software-hive .reg export.
Problems / unusual things in the .reg file may cause crash or
unexpected data or some times even an error messsage! :)

KNOWN PROBLEMS: May bork on some wide character (UTF16) .reg files.
(crash or does not do exactly what you would expect)

  -e <registryhive> ...
     Interactive edit one or more of registry files

Enter the registry editor. This is a small command system. Press '?' for help
there. See other documentation for more on regedits.
If both -I and -e given, editor will be entered after importing, but
before saving, so you can check things if you need.


 Options:
 -L : Log changed filenames to /tmp/changed, also auto-saves
 -C : Auto-save (commit) changed hives without asking

Usually this command prompts for save, since import may have messed up.

-N : No allocate mode, only allow edit of existing values with same size
-E : No expand mode, do not expand hive file (safe mode)

same as on chntpw

-t : Debug trace of allocated blocks

lot of hive load debug info. very much. allocator debug.

-v : Some more verbose messages

a bit debug messages

** In interactive registry editor:
<keyname> name of a key (not a path), ex: MyKey
<valuename> name of a value (not a path), ex: MyCoolValueName
<keypath> may be a path, ex: foobar\baz\gazonk
as usual with paths, \ starts from the root key, without it is relative to
current key
<valuepath> value, may have path. ex: \foo\bar\MyValue
is value named MyValue in key bar in key foo
cd .. goes back a directory


List subkeys and values in current key
  dir
  ls

Change current key:
  cd <keypath>
  cd ..        # goes back a key

Show a value, tries to show according to type, else hexdump
  type <valuepath>
  cat <valuepath>

Hexdump value data (no matter what type it is)
  hex <valuepath>

Edit a value:
  ed <valupath>
and it will show old value and ask for new

Make a new key (cannot be a path)
  nk <keyname>

Delete a key, key must be empty, cannot be a path
  dk <keyname>

Delete a value, cannot be a path
  dv <valuename>

Delete all values in current key (no questions asked!)
  delallv

Delete recursively key and all keys under it (no questions asked)
May take some time if large tree
  rdel <keyname>

Make a new value of selected type. It will be empty, use 'ed' afterwards.
  nv <type> <valuename>
Where type is a hex number, from this list:
  0 : REG_NONE
  1 : REG_SZ
  2 : REG_EXPAND_SZ
  3 : REG_BINARY
  4 : REG_DWORD
  5 : REG_DWORD_BIG_ENDIAN
  6 : REG_LINK
  7 : REG_MULTI_SZ
  8 : REG_RESOUCE_LIST
  9 : REG_FULL_RES_DESC
  a : REG_RES_REQ
  b : REG_QWORD
it will not prevent you from using other numbers

Show key class data, in hexdump (class data has no special type)
  ck <keypath>

Export to .reg file, same as -x option above
  ek <filename.reg> <prefix> <keyname>





------------------------------

samusrgrp
is a command line tool to add users to groups or remove users from
groups. Users and groups must be local (i.e. they cannot be domain / AD).
It can also list the groups with their members in several forms, the
output can be used in scripts as it is provided in machine readable format.

Listing groups will also list domain users that are members of the
group (if any), but it will not be able to look up the name, so they
will be listed as a SID only.

  samusrgrp version 0.2 130501, (c) Petter N Hagen
  ./samusrgrp  [-a|-r] -u <user> -g <groupid> <samhive>
  Add or remove a (local) user to/from a group
  Mode:
     -a = add user to group
     -r = remove user from group
     -l = list groups
     -L = list groups and also their members
     -s = Print machine SID

To add or remove a user, you must also specify some more information:

  Parameters:
     <user> can be given as a username or a RID in hex with 0x in front
     <group> is the group number, in hex with 0x in front
     Example:
     -a -u theboss -g 0x220 -> add user named 'theboss' group hex 220 (administrators)
     -a -u 0x3ea -g 0x221 -> add user with RID (hex) 3ea group hex 221 (users)
     -r -u 0x3ff -g 0x220 -> remove user RID 0x3ff from grp 0x220
     Note that usernames with international characters usually fails to be found
     so please use RID number instead
     If success, there will be no output, and exit code is 0
     Also, success if user already in (or not in if -r) the group

  Options:
     -H : Human readable output, else parsable
     -N : No allocate mode, only allow edit of existing values with same size
     -E : No expand mode, do not expand hive file (safe mode)
     -t : Debug trace of allocated blocks
     -v : Some more verbose messages/debug

  Multi call binary, if program is named:
    samusrtogrp -- Assume -a mode: Add a user into a group
    samusrfromgrp -- Assume -r mode: Remove user from a group

Example of group listing:


 samusrgrp -L SAM

will list groups with member users, for example:

222:Guests:0:1f4:Administrator:S-1-5-21-596911364-3511430013-269812654-500
222:Guests:1:1f5:Guest:S-1-5-21-596911364-3511430013-269812654-501
223:Power Users:0:1f4:Administrator:S-1-5-21-596911364-3511430013-269812654-500
223:Power Users:1:1f5:Guest:S-1-5-21-596911364-3511430013-269812654-501
223:Power Users:2:3e9:foo:S-1-5-21-596911364-3511430013-269812654-1001

Fields are:
Group ID (hex)
Group name
Member number (starts at 0)
Members RID (hex)
Members name (if available, else SID)
Members SID

So in this example, the Guests group has 2 members: Administrator and
Guest.
At the time of writing this, it WILL NOT LIST EMPTY GROUPS (groups with no
members). I plan to change this, empty groups on one line with -1 in
member number field, and rest of user fields empty.

 samusrgrp -l SAM

will list groups (no members)

220:Administrators:2
221:Users:2
222:Guests:1
223:Power Users:0

Fields are:

Group ID (hex)
Group name
Number of members

this listing will show all groups, also empty groups.


-------------------------------------------------

sampasswd
Password reset from command line (scriptable)
Or list users in SAM file in a few different formats.



  ./sampasswd  [-r|-l] [-H] -u <user> <samhive>
  Reset password or list users in SAM database
  Mode:
     -r = reset users password
     -l = list users in sam

One mode must be selected

  Parameters:
     <user> can be given as a username or a RID in hex with 0x in front
     Example:
     -r -u theboss -> resets password of user named 'theboss' if found
     -r -u 0x3ea -> resets password for user with RID 0x3ea (hex)
     -r -a -> Reset password of all users in administrators group (0x220)
     -r -f -> Reset password of admin user with lowest RID
              not counting built-in admin (0x1f4) unless it is the only admin
     Note that usernames with international characters usually fails to be found
     so please use RID number instead
     If success, there will be no output, and exit code is 0

  Options:
     -H : For list: Human readable listing (default is parsable table)
     -H : For reset: Will output confirmation message if success
     -N : No allocate mode, only allow edit of existing values with same size
     -E : No expand mode, do not expand hive file (safe mode)
     -t : Debug trace of allocated blocks
     -v : Some more verbose messages/debug

List examples:

 sampasswd -l xpreg/SAM

01f4:Administrator:1:210:14
01f5:Guest:0:8215:4
03e8:HelpAssistant:0:8211:14
03e9:foo:1:210:14

Fields are:

User RID (hex)
User name
Is the user an administrator? (1 = yes, 0 = no) (member of group ID 0x220)
Account flags, ACB (hex). See sam.h file.
Password hash length. 14 = normal password. 0 or 4 = probably blank.

The bulk reset (-r -a) will also output parsable result:


 sampasswd -H -r -a xpreg/SAM

Reset user :01f4:Administrator
Reset user :03e9:pnh

which of course is in the format :RID:username


Explanation on this:
     -r -f -> Reset password of admin user with lowest RID
              not counting built-in admin (0x1f4) unless it is the only admin

All Windows systems, from version NT3.1 up, include a predefined administrator account
with RID (user ID) 0x1f4 (500 decimal)

Before Windows XP, the installer asked for a password for this account,
and then it was used to login right after installation.
(The built-in 'Guest' account was also created by the installer, but it has
always been disabled by default)

On Windows XP and newer Windows systems, the installer also creates this
account, but it is locked down. It cannot be used to log in. It is
also not shown on the 'Welcome' screen (unless all other users are
deleted or disabled)

Instead, the installer asks for a new user to create during the installation. That
user is a normal non-hardwired user (RID > 0x3e8, 1000 decimal),
and it is added to the built-in Administrators' group (group # 0x220). 

The users in the built-in group 0x220 ('Administrators') generally have full
administrator rights to the machine.

(Note: XP installer can create several users, but only the first user gets group
0x220)

More users can of course be added from the Control Panel, and they can
be added to the 0x220 group if neccessary. From the "simplified"
Control Panel dialog this is what happens if a user is selected and is configured to
have full (or admin) access to the machine. If a user is set to "normal"
or something like that, it will not be included in the 0x220 group.

From the "Users and Groups" part of the administrative tools (not
available on some Windows Home versions) the group assignments and
other user info can be changed in more detail of course.

From there, users in a domain (if machine is in domain) can also be
added to the local 0x220 group. A domain user will have full access to that
local machine even if the user is not included in any Domain Administrators'
group.

Anyway..
On XP and newer Windows version, the hardwired 0x1f4 account is not used
for administrative purposes. On home machines it is most often the first
regular user (since most people do not change any user stuff after the
installation) or it could be any other user in the list.

So this reset function picks the first user it finds over 0x3e8 (1000)
that is also in the 0x220 group. It will most likely work for 98% of
home user machines :) If there are no users in the 0x220 group,
then it will pick the 0x1f4 hard-wired user (since the system may be Windows
2000??????).

This may of course be wrong if someone managed to remove all accounts
above 1000 from the 0x220 group. But then they have "samusrgrp" to add
someone back :)


Explanation on -a -r:

The -r -a option will reset all users in the 0x220 group. This includes user
0x1f4, which maybe is bad.. will consider changing this...