Copy Link
Add to Bookmark
Report

Hackers 4 Hackers #8

Hackers 4 Hackers Issue 8, released on 01-05-2000

eZine's profile picture
Published in 
Hackers 4 Hackers
 · 8 months ago

		  ___ ___    _____    ___ ___ 
/ | \ / | | / | \
/ ~ \/ | |_/ ~ \
\ Y / ^ /\ Y /
\___|_ /\____ | \___|_ /
\/ |__| \/

+-+-+-+-+-+-+-+ +-+ +-+-+-+-+-+-+-+-+-+-+
|h|a|c|k|e|r|s| |4| |h|a|c|k|e|r|s| |0|8|
+-+-+-+-+-+-+-+ +-+ +-+-+-+-+-+-+-+-+-+-+
http://www.hackers4hackers.org
'01-05-2000', Momenteel 892 lezers.


Om je aan te melden bij de maillijst kan je een mailtje sturen
naar subscribe@hackers4hackers.org met als titel "subscribe h4h
emailadres"


Of je kan je online aanmelden op http://www.hackers4hackers.org

Artikelen en dergelijke kun je mailen naar post@hackers4hackers.org
Vragen kun je mailen naar de desbetreffende auteur of ook naar
post@hackers4hackers.org

Uitspraak:
[Tonus: Omdat je goedwillende een kans moet geven, Spread information.]

Enkele interessante sites:
http://itris.eu.org
http://www.security.nl
http://www.hit2000.org
http://hier.is/Triples
http://www.whatis.com
http://viper.dmrt.com
http://www.klaphek.nl
http://www.hack.vuurwerk.nl
http://www.astalapasta.com
http://kickme.to/hackfaq

Leuke kanaaltjes op IRCnet:
#h4h
#hit2000
#nlcoders


01. Disclaimer............................................... (Redactie)
02. Inleiding................................................ (Redactie)
03. Lezerspost............................................... (Redactie)
04. Cracken voor Newbies..................................... (The Itch)
05. Inleiding tot encryptie (deel 2)......................... (Zym0t1c)
06. Verslag H4H-Meeting 4 Maart.............................. (N|ghtHawk)
07. Dynamic HTML............................................. (Anoniem)
08. Evenementen.............................................. (Redactie)
09. Cursus Php3.............................................. (Frazzle_Freckle)
10. Eindwoord................................................ (Redactie)

-------------------------------------------------------
01. Disclaimer
-------------------------------------------------------
We zijn niet verantwoordelijk voor datgene wat jullie met deze informatie
doen. Deze informatie dient alleen voor educatieve doeleinden. Als je in
problemen komt, kan je ons niks verwijten. Gebruik maken van deze
informatie kan strafbaar zijn. Meningen van auteurs hoeven niet hetzelfde
te zijn als die van de redactie.

Correspondentie met de redactie is mogelijk per email :
Algemeen - post@hackers4hackers.org
Asby (Hoofdredacteur) - asby@hackers4hackers.org
Berry (Website + Eind redactie) - berry@hackers4hackers.org
Tozz (Redactie + Lezerspost) - tozz@hackers4hackers.org
Viper (Redactie) - viper@hackers4hackers.org
Nighthawk (Redactie) - nighthawk@hackers4hackers.org

-------------------------------------------------------
02. Inleiding
-------------------------------------------------------
En het was Lente in Nederland. Er staat weer een nieuwe meeting voor de
deur. Dit keer geen grote meeting maar een soort van tussen door meeting.
We gaan met de halve redactie naar pinkpop en staan daar open om lezers
daar te gaan ontmoeten. Onder het genot van een drankje onder de zon
(Hopelijk) op Pinksteren te ontmoeten. Kom dus gezellig langs tussen 10
en 12 juni op Pinkpop ( http://www.hackers4hackers.org/h4h-meeting )

De poll's van deze maand waren een beetje een onzin poll's, Dit omdat
we hier op de redactie even geen zinnige poll wisten. Als je zelf een
leuke poll zou weten mail dan naar post@hackers4hackers.org dan kan
jouw poll de onze worden. Toch nog even de uitslag van de poll's van
deze maand :

--
Hoe vonden jullie de H4H Meeting?

Jammer dat ik er niet bij kon zijn ! 40.9% - (43 Votes)
Meeting?? Welke meeting? 29.5% - (31 Votes)
Was een topper.. wanneer is de volgende?? 11.4% - (12 Votes)
Hmmmz... ik stond ineens op een #gayteen.nl meeting ?!?! 7.6% - (8 Votes)
Een beetje ver... 7.6% - (8 Votes)
Meeting was cool... ben nog aan het uitrusten... 2.8% - (3 Votes)
--
Wat willen jullie in de volgende H4H zien?

Naaktfoto's van N|ghtHawk 40% - (166 Votes)
"Een dag uit het leven van een Sjonnie" door ViPER 21.9% - (91 Votes)
"Hoe Rijd Ik Brommer" door Tozz 16.4% - (68 Votes)
Kokerellen met Asby 16.1% - (67 Votes)
Oom Berry's Moppentrommel 5.3% - (22 Votes)
--

Nighthawk heeft beloofd de naaktfoto's op de volgende meeting te laten zien,
Dus komt allen zou ik zeggen ;P

Het #h4h kanaal op IRCnet wordt ook steeds drukker. Dus als je eens een loos
moment hebt en je zit toch op internet wissel je mening eens uit met de redactie
op irc. Ook voor ideeën en tips kan je daar terecht.

We wensen iedereen veel leesplezier toe en mochten er op of aanmerkingen zijn,
Surf dan even naar onze website en vul het in bij commentaar.


De redactie
-------------------------------------------------------
03. Lezerspost
-------------------------------------------------------
En het houd niet op.
Dit maal ik ik de eer om de lezerpost te mogen indelen..
Het valt nog mee dat H4H geen "Bare my baby" mail heeft ontvangen.
-ViPER


>From dhellwich@hetnet.nl <mailto:dhellwich@hetnet.nl> Sun Mar 26 04:19:29 2000
>Ik ben een gewone jongen die niets van hacken afweet!!!
>Wil jij mij dan leren hacken,

Sorry alleen vage mensen komen aan bod.

-
>Email : grattin70@hotmail.com <mailto:grattin70@hotmail.com>
>WAAROM donderen julie mij steeds van #h4h af eikels ik doe toch gewoon
normaal!!!
>Ideen :
>donder op krijd toch zo'n dup antwoord

/kick #h4h eikel Q: *Unf,*Unf,*Unf,*Unf ! A: dup !

-
>.zip?...bah!...
>kwak ze ook in een paar tarballen...
>Avondje IRC...de "grote" hackkanalen af..loggen maar...
>en wachten op de onzin die gespuid gaat worden door naar rode
>hoeden stinkende wannabees....

Ermz wacht ik weet hem ,33 rood ?

-
>Commentaar :
>De H4H is super goed maar jullie site is een beetje saai.
>Ideen :
>Misschien jullie site wat meer interactief maken bv met flash of zoiets

Interactief ? Flash ? lynx zegt dan *Keh
Ik zal aan Berry vragen of hij wat TGA logo's op de site zet en een
browser killende 7mb java menu aan de zijkant.
Het duurt even ,maar dan heb je ook niks.

-
>Wat is in godsnaam IRC?

Internet Rokers Channel.

-
>wat dachten jullie ervan om die flauwe antwoorden op lezerspost weg te
laten??
>plaats anders helemaal geen lezerspost meer.

*Grin*

-------------------------------------------------------
04. Cracken voor Newbies
-------------------------------------------------------
Dit artikel gaat over cracken voor newbies, dus niet eigenlijk hacken,
maar het verwijderen van registratie codes/serials op programma's zodat je een
volledige versie van het programma krijgt en niet een soort gecrippled
versie die je als evaluation krijgt.

Ik zelf ben ook nog een newbie als het cracken betreft, maar ik weet toch
net iets meer dan de echt beginnende cracker, dus hier een uitleg om het
simpeler te maken.

oke, als voorbeeld gaan we het programma Download Accelerator plus cracken.
Wat hebben we nodig, allereerst Download Accelerator natuurlijk, die kan je
downloaden van:

http://www.downloadaccelerator.com

en een debugger / disassembler. Ik heb voor Download accelarator W32Dasm
gebruikt.

http://hackersclub.com/km/files/cfiles/cfiles99/w32ds893.zip

Maar dat is nog niet alles, je hebt ook een Hex-editor nodig om de goede
bytes te patchen (kom ik later op terug) dus, download ook een goede
hex-editor (www.hackers.com heeft ze wel). Zelf gebruik ik HexWorkshop.

Heb je dat allemaal? Mooi! Dan kunnen we nu echt aan het cracken beginnen.
Het eerste wat we te weten moeten komen is wat voor soort protectie
er wordt gebruikt, start download accelarator en kijk bij Help > About.
Wat zien we daar? Ja hoor: User, Email, en de registration code die
je gaat cracken. Vul maar een username in wat je wil, en een code, maakt
niet uit wat, en klik op Register. Nu krijg je de melding:

'Registration Invalid. Please recheck your registration Code.'

Dat is mooi, nu weten we de foutmelding. Nu start je W32Dasm op, en laad
je dap.exe in het geheugen (dap.exe = de executable van download
accelarator). Nu zie je allemaal rare tekens, en vreemde codes. Dit is nou
Assembley, scroll maar eens een stukje naar beneden, en dan zal ik uitleggen
wat sommige codes betekenen.

Je komt nu ongeveer dit soort regels tegen:
:00401750 56 push esi
:00401751 8BF1 mov esi, ecx
| | |
| hexadecimaal voor: |
| de code rechts dit is nou de assembly code
|
locatie in het programma
waar zich deze line van code begint

Eerst even een kleine crash course Assembley voor crackers (van nu af aan:
asm) Een paar basic commando's die interessant zijn voor crackers:

CALL
springt naar een geheugenlocatie toe, bijv:
CALL 00401750

RET
keert terug na de regel onder een function van CALL of JMP bijv:
RET

CMP dest,src
vergelijkt iets met elkaar, bijv:
CMP AX, 03h

TEST dest, scr
test 2 bytes met elkaar, een soort CMP commando
TEST AL, AL

JMP dest

dit is ongeveer de belangrijkste voor ons newbie crackers, deze code springt
ook naar een bepaalt stukje code toe, maar hier zijn variaties op. Je hebt
bijv:

JE (jump to adress if equal)
JNE (jump to adress if NOT equal)

dus, een klein voorbeeldje hoe we het jump commando tot ons voordeel gaan
gebruiken:


CMP RealSerial,BadSerial ; vergelijk goeie serial met ingevoerde serial
JNE GoAwayBadCracker ; als ze niet gelijk zijn, jump weg en geef
een foutcode

hmmz... Oke, nu weten jullie deze basics van ASM, laten we nu weer terug
keren naar onze debugger / disassembler.

Je hebt nu de code geladen, en nu klik je op: String Data References (vakje
in de taskbar helemaal aan de rechterkant; links van het print knopje)

Nu krijg je bijna alle strings te zien in het programma, maar waar wij naar
op zoek zijn is de errorcode die we kregen toen we onze foute serial
invoerden. Zoek die op, en dubbelklik daarop, je zal waarschijnlijk niet
de complete error message vinden, maar zoek op woorden waarvan jij denkt
die er iets mee te maken hebben. Mooi! Gevonden.... In ons geval hebben we
geluk, we zien 3 dingen staan:

Registration Approved. Save Failed <--- serial was goed, maar ging nog
iets mis...

Registration Approved. Thank You <--- uiteindelijk moeten we dit bericht
krijgen bij onze serial

Registration Invalid. Please Recheck <--- aha, een deel van de errorcode van
de fout serial!

dubbelklik nu op Registration Invalid. Please Recheck. Oke, nu kan je het
String Data Reference scherm weer sluiten, en terug keren naar W32Dasm
scroll een stukje omhoog tot je dit ziet:

* Possible StringData Ref from Data Obj ->"Registration Invalid. Please
Recheck "

->"your Registration Code."

:0040A0DB 68986E4800 push 00486E98
:0040A0E0 E8926B0400 call 00450C77
:0040A0E5 5E pop esi
:0040A0E6 C3 ret

AHA, we zien een [RET] dat betekent dat ze terugkeren nadat ze de test van
een foute serial op het scherm hebben laten zien, scroll nu een stuk
omhoog tot je dit ziet:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040A0AE(C)

deze regel betekent dat naar de code met het foutstukje wordt gesprongen
vanaf dit adress (in ons geval dus 0040A0AE (vergeet die (C)))
Druk nu op SHIFT-F12 en type 0040A0AE in en druk op enter.

Kijk nou eens ... hij springt naar de code met een [JE] commando.
( :0040A0AE 7427 je 0040A0D7 )

En kijk de regel daarboven eens:

:0040A0AC 84C0 test al, al

het [TEST] commando wordt gebruikt, en als die equal zijn (JE) jump dan naar
de foutcode toe!

dat is nou eens interessant. Maar hoe krijg je nou zover dat ie elk serial
accepteert, wat je ook invoert. Dat is simpel, draai het [JE] commando om,
verander hem dus in: [JNE]

Als het goed is accepteert ie nu alle serials, dat moeten we even testen.
Onderaan in W32Dasm zie je staan (als je tenminste met de lightbar op de
[JE] line staat):

Line: 17661 Pg 208 of 2647 Code Data @:0040A0AE @Offset 0000A0AEh in
file:dap.exe
|
|
dit is de locatie in de EXE
file (negeer die h, dat geeft
het einde van de
hexadecimale code aan)

Oke, start nu je hexeditor, en ga dus naar: 0000A0AE
Je ziet nu dit staan op die locatie: 7427
(herinner W32Dasm code: :0040A0AE 7427 je 0040A0D7)

Nu is het nog de bedoeling dat [JE] word verandert in [JNE] dat is simpel,
verander de 4 in een 5 en nu is het [JNE], sluit je hexeditor af, en save
de changes (EN MAAK EEN BACKUP!)

Nu gaan we testen. Sluit DAP af, en start hem opnieuw (de door jouw
gepatchde dan :)) Wat zien we nu:

Registration Approved. Save Failed

Hey, herinner je die nog!

Start W32Dasm weer op, en open je gepatchde DAP.EXE, start weer de String
Data Reference menuutje weer op, en zoek nu naar jou errorcode, oftewel:

Registration Approved. Save Failed

Als je nu op die locatie zit, zie je dit:

* Possible StringData Ref from Data Obj ->"Registration Approved. Save
Failed."


:0040A0BF 680C6F4800 push 00486F0C
:0040A0C4 E8AE6B0400 call 00450C77

Maar vraag je je af, hoe komt ie nou op dit stukje, want hij wordt niet
aangeroepen door een call statement zoals die andere foutcode. Scroll nu
een stukje omhoog, en je zien dat dat je bekend voorkomt, omdat dit
vlakbij de vorige check was, die jij gepatcht hebt.

maar we zien nu dit:

:0040A0AC 84C0 test al, al
:0040A0AE 7527 jne 0040A0D7 <--- heej, jouw gepatchde
stukje, als je w32dasm
:0040A0B0 8BCE mov ecx, esi niet had afgesloten en
opniew met jouw
:0040A0B2 E899DF0100 call 00428050 gepatchde versie had
geladen zie je daar
:0040A0B7 84C0 test al, al natuurlijk [je] staan ipv
[jne]
:0040A0B9 6A00 push 00000000
:0040A0BB 6A00 push 00000000
:0040A0BD 750C jne 0040A0CB

* Possible StringData Ref from Data Obj ->"Registration Approved. Save
Failed."


:0040A0BF 680C6F4800 push 00486F0C
:0040A0C4 E8AE6B0400 call 00450C77
:0040A0C9 5E pop esi
:0040A0CA C3 ret

Oke, nu zie je dit dus, even een uitleg, bij het pijltje was de eerste patch
die we gaven, toen jumpte ie dus nooit meer door naar: 0040A0D7, want daar
was de foute serial code, nu loopt ie lekker door, wat zien we, we zien
een [call], is niet echt interessant, een [test], hey, die is wel weer
interessant...even onthouden, we zien 2 push commando's, en een
[JNE] dus, dat wil zeggen, als de [test al, al] niet equal is, jump naar
0040A0CB

Laten we even zien wat er bij 0040A0CB staat (onthoud wel even de positie
van het [JNE] commando, 0040A0BD is dat dus) oke, nu jumpen we dus naar
0040A0CB (shift-f12), en wat zien we daar: (als je het niet ziet, scroll
een klein stukje omhoog)

* Possible StringData Ref from Data Obj ->"Registration Approved. Thank you
"

->"for Registering."

:0040A0CB 68D86E4800 push 00486ED8
:0040A0D0 E8A26B0400 call 00450C77
:0040A0D0 E8A26B0400 call 00450C77
:0040A0D6 C3 ret

kijk kijk kijk, hij moet dus hiernaartoe jumpen om dus GOED te registreren
... even denken hoe jumpte hij hier naartoe, welk commando was dat, dat
was een [JNE] commando, ga nu weer terug naar de plek van waar ik zei dat
je die positie moest onthouden (0040A0BD) en we zien weer het
[JNE] commando ... om die dus goed te laten springen moeten we die ook weer
omdraaien, maar nu dus in een [JE] commando.

:0040A0BD 750C jne 0040A0CB

In dit geval moeten dus 750C veranderen in 740C om een [JE] commando te
krijgen, onthoud weer de offset (in dit geval: 0000A0BD) en start nu weer
je Hexeditor op, ga naar die offset, verander de 75 in 74, en save het
programma weer.

Nu gaan we het nog een keer testen, start Download Accelarator plus op, ga
weer naar het registration gedeelte, en vul een naam in en elk serial dat
je wilt. En als je alles goed hebt gedaan, accepteert ie nu elke naam,
email, en serial!

Viola! je eerste crack ;]

Download Accelarator Plus heb ik als voorbeeld genomen omdat het programma
nog in beta stadium is, en daarom is het NU nog freeware is, maar ze
hebben we al een serial key erin gezet. Wanneer je hem dus gecrackt heb,
zal je ook geen speciale extra features krijgen omdat het simpelweg nog
een beta is. Never the less was het een mooi voorbeeld om te gebruiken.

Mzzls & happy cracking!

- The Itch
mail: checkpwd@hotmail.com

-------------------------------------------------------
05. Inleiding tot encryptie (deel 2)
-------------------------------------------------------
Legal shit & andere shit

Niks van dezen text mag gewijzigd worden zonder toelating van den auteur.
Verspreid em zoveel ge wilt, print em desnoods uit en hangt em in uw WC,
één ding vraag ik gewoon: laat dezen disclaimer staan, no mather what!
Stukken uit dezen text zijn wa geïnspireerd op da boek van William
Stallings, "Cryptography and Network Security - Principles and Practice -
Second Edition"
en nog enkele andere docs die kunnen gevonden worden op
het net. De indeling (ook enkele voorbeelden) heb ik deels overgenomen
uit da boek. Losers die hierop commentaar hebben en denken 'Ja, zo kan ik
ook nen text ineen flansen!': wel, doeget dan zelf! Commentaar geven is
heel gemakkelijk als ge zelf niks wilt doen. Dienen boek is heel goe
geschreven, en ik doen toch de moeite om het in verstaanbare taal te
schrijven. Wat zit ik hier eigenlijk te doen? Ik moet mij hier helemaal
ni verontschuldigen...

Opmerkingen, bijvulsels, verbeteringen of andere zinvolle suggesties mogen
altijd doorgemaild worden naar zym0t1c@hotmail.com, andere shit naar
dev/null.
Spread (crack) the word people!


Ter nader info

Als alles goe gaat, dan zal ik een stuk of vijf delen schrijven over
encryptie. Wie weet worden er da meer, wie weet minder...
In 't eerste deel heb ik geprobeerd -in simpele woorden- uit te leggen wa
encryptie eigenlijk is plus de mogelijke 'attacks' hierop. De voor- en
nadelen van encryptie werden ook tegen elkaar afgewogen voor hen die er
geen benul van hebben waartoe encryptie kan leiden...
Het tweede deel (dees dus) beschrijft de 'klassieke' encryptietechnieken
-zowel de substitutie (Caesar Ciphers, Monoalphabetic Ciphers, Playfair
Ciphers, Hill Ciphers en Polyalphabetic Ciphers), de transpositie
(Transposition Ciphers) als rotor machines...
Hopelijk hebde genoeg kaas gegeten van wiskunde... ;)
Vanaf 't derde deel pushen we het niveau fameus op. Hier beschrijf ik
vooral de 'moderne' -en meest gebruikte- encryptietechniek DES. Feistel
Ciphers komen trouwens ook aan bod.
In 't vierde deel sluit ik de 'conventionele' encryptietechnieken af.
Hier komen (waarschijnlijk) triple DES, IDEA, Blowfish, RC5, CAST-128 en
RC2 aan bod.
Het vijfde (en misschien laatste) deel geeft een inleiding tot 'publieke
sleutel' encryptietechieken zoals RSA, Diffie-Hellman en Elliptic Curves.

Ik weet ni wanneer een deel gaat afgewerkt zijn en dus moet ge daarover
ook geen mails sturen (ik heb ook nog andere zaken te doen).
Ik kan ook ten allen tijde mijn indeling veranderen, daar moet ge dan
gewoon maar mee leren leven!
Allez kom, on with the show...


Caesar Cipher

Encryptie bestaat al lang, héél lang. (Sinds den tijd van Julius Caesar.)
Ik herinner mij nog goed, da is een jaar of zeven geleden... Ik was ewa
aan't klooien op mijne (voor dienen tijd prachtige) 386 in den dosshell
van versie 5. Wa menu's en dergelijke aanmaken, veranderen, enz. Ge kent
da wel! Ik had ook diene file gevonden waarda alle menu's en instellingen
in beschreven stonden. Terug in den dosshell voegde ik enkele paswoorden
bij en opende vervolgens terug diene file. De paswoorden stonden erbij
maar dan wel gecodeerd. 'Shit!' dacht ik. Ik had al die paswoorden
tijdelijk opgeschreven (doe da nooit! =)) en vergeleek ze met de
cyphertext. Het eerste waar iedereen normaal gezien op let is de
lengte van de cyphertext. Da kwam overeen met de lengte van die
paswoorden. Dan bekeek ik den eerste letter. Ik zag dat diene zich drie
posities verder bevond in 't alfabet. Vervolgens den tweede letter.
Diene bevond zich ook drie posities verder in 't alfabet. Geïnspireerd
hierdoor, schreef ik vervolgens het volledige alfabet op met daarnaast de
overeenkomende letters, er rekening mee houdende da het alfabet van links
naar rechts circulair doorlopen werd...
Da klopte allemaal! Aan de hand van dienen tabel kon ik alle gebruikte
paswoorden vinden! Ik had net de voorhistorisch simpele encryptiemethode
van Micro$oft gebroken! Trots da ik was! (Niet slecht voor nen
twaalfjarige he? =)) Later leerde ik da deze methode 'Caesar Cipher'
werd genoemd - één van de eerste echte encryptiemethoden. Inderdaad,
Julius Caesar gebruikte deze methode om berichten te verzenden naar zijn
generaals omdat em zijn berichtgevers ni vertrouwde.
Na verder onderzoek kon ik op die manier ook cijfers en leestekens
ontcijferen...

Brute force cracking is in dees geval kinderspel - we hebben amper 25
mogelijke sleutels. Meestal hebde na den derde sleutelvariant de
plaintext al gevonden.


Monoalphabetic Cipher

Iedereen ziet da het Caesar Cipher eigenlijk verre van veilig is. Amper
25 mogelijke sleutels en diene plaintext kan gevonden worden! Stel,
moesten we nu in plaats van elke letter te vervangen door nen anderen
afgesproken letter, diene letter telkens vervangen door ne willekeurige
letter. Hierdoor schiet de beveiliging (aantal mogelijke sleutels) direct
een stuk de hoogte in, wa brute force cracking praktisch onmogelijk zou
maken. Deze methode wordt het Monoalphabetic Cipher genoemd.

Maar, als we weten in welke taal diene plaintext was, awel dan zouden we
nen totaal anderen techniek kunnen toepassen, 'frequentie analyse'.
Relatieve frequentietabellen bevatten het percentage per letters (of per
woorden) in welke mate die voorkomen in de taal - dees tabellen kunnen
gemakkelijk gevonden worden op 't net of aangevraagd. Awel dus, den
analyst zou dan simpelweg nen tabel kunnen opstellen van alle letters die
voorkomen in diene ciphertext en naast elke letter schrijven hoeveel keer
dat em voorkomt in diene ciphertext. (De tabel die ge dan verkrijgt wordt
vanaf hier efkes een ciphertabel genoemd.) We kunnen er dan vanuit gaan
dat de letter die het meeste voorkomt in diene ciphertabel waarschijnlijk
zal overeenkomen met de meest voorkomende letter van de relatieve
frequentietabel. Dus, vervangt elke letter uit de ciphertabel door de
letter uit den anderen tabel die er ongeveer mee overeenkomt, en zo kunde
de plaintext (normaal gezien) vinden zonder da ge de sleutel moet kraken.

Via relatieve frequentietabellen van woorden in de taal te gebruiken,
kunde de cryptanalyse veel sneller doen verlopen...


Playfair Cipher

Het Playfair Cipher werd ontwikkelt door den Britse Wetenschapper Sir
Charles Wheatstone in 1854 (is da diene van The Bridge of Wheatstone?),
maar draagt eigenelijk de naam van zijne vriend Baron Playfair of
St. Andrews. Het is een methode die werkt aan de hand van ne
5 x 5-matrix, gevuld met letters (de 26 letters van het alfabet, behalve
da i en j beschouwd worden als één enkel element). Eerst wordt de
plaintext erin opgeborgen en vervolgens wordt diene verder aangevuld met
alle andere letters van het alfabet.
Als plaintext gebruiken we het woord 'monarchy', de matrix ziet er dan als
volgt uit:

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

De plaintext wordt geëncodeerd per twee letters, maar we moeten rekening
houden met enkele voorwaarden:
- twee dezelfde opeenvolgende letters die in eenzelfde paar voorkomen,
worden gescheiden door nen andere letter zoals bijvoorbeeld 'x'
'balloon' wordt dan 'ba lx lo on'
- plaintext-letters die in dezelfde rij vallen worden telkens vervangen
door de letter die da er rechts van staat, er rekening mee houdende
da die rij van links naar rechts circulair doorlopen wordt
'ar' wordt dan 'rm'
- plaintext-letters die in dezelfde kolom vallen worden telkens
vervangen door de letter die da zich eronder bevindt, er rekening mee
houdende da die kolom van boven naar onder circulair doorlopen wordt
'mu' wordt dan 'cm'
- bij alle andere mogelijkheden wordt elke plaintext-letter vervangen
door de letter die da in zijn eigen rij en de kolom waar den andere
letter zich in bevindt staat. Eigenlijk ne moeilijke uitleg om
simpelweg het volgende te bedoelen:
'ea' wordt 'im' of 'jm' (zoals ge zelf verkiest)

Het Playfair Cipher biedt meer voordelen dan het Monoalphabetic Cipher.
Ten eerste zijn er 676 mogelijke matrices wa het veel moeilijker maakt om
te 'raden' naar ne matrix. Ten tweede moeten bij deze methode alle
letters afhankelijk worden geanaliseerd (zelfden techniek als bij het
Monoalphabetic Cipher) in tegenstelling tot het gebruiken van nen
frequentietabel van woorden wa de cryptanalyse enorm versnelde.
Hierdoor werd het Playfair Cipher lang beschouwd als zijnde onbreekbaar en
werd dees cipher veel gebruikt door het Britse leger tijdens den eerste
Wereldoorlog en door het Amerikaanse leger tijdens den tweede
Wereldoorlog.

Ondanks zijn sterkte is het Playfair Cipher ni zo veilig. Heel kort komt
het erop neer dat diene plaintext gewoon in nen andere structuur gegoten
wordt. Alle letters uit de plaintext bevinden zich nog steeds in dezelfde
matrix (de ciphertext). Den uitleg over het kraken van deze methode laat
ik achterwege omdat da moet gedaan worden aan de hand van verschillende
frequentiegrafieken...


Hill Cipher

Net als het Playfair Cipher is ook het Hill Cipher nen andere vorm van
encryptie, 'meervoudige letter encryptie'. Dees methode werd ontwikkelt
door de wiskundige Lester Hill in 1929. Het Hill Cipher is gesteund op
het vervangen van plaintext-letters via lineaire vergelijkingen waarbij da
elke letter van 't alfabet een numerieke waarde toegewezen krijgt (van 0
tot 25). Voor elke plaintext-letter wordt dan een aparte vergelijking
opgesteld.
Stel da we 3 letters hebben, dan krijgen we de volgende vectoren en
matrices:

/C1\ /k11 k12 k13\ /p1\
( C2 ) = ( k21 k22 k23 )( p2 ) of C = KP
\C3/ \k31 k32 k33/ \p3/

waarbij C en P kolomvectors zijn van lengte 3 die ciphertext-letters
en plaintext-letters voorstellen. K is dan den 3 x 3-matrix en is dus
de sleutel.

Bewerkingen worden uitgevoerd aan de hand van mod 26 (26 letters).
Stel, we hebben de plaintext 'paymoremoney', en gebruiken de volgende
sleutel:

/17 17 5\
K = ( 21 18 21 )
\2 2 19/

De eerste drie plaintext-letters worden dan voorgesteld door de vector
(15 0 24). (p is 15, a is 0 en y is 24)
Dan wordt K(15 0 24) = (375 819 486) mod 26 = (11 13 18) = LNS.
Doet da hier met alle andere letters en we krijgen 'LNSHDLEWMMTRW.'

Decryptie is eigenlijk helemaal ni moeilijk: gewoon den inverse nemen van
K. Inverse matrices (K tot de -1e macht) moet ge zelf kunnen berekenen.

In grote lijnen kunde het Hill Cipher op de volgende manier wiskundig
voorstellen:

C = Ek(P) = KP
-1 -1
P = Dk(C) = K C = K KP = P

Net als bij het Playfair Cipher bestaat de kracht van het Hill Cipher
eruit da het de letterfrequentie volledig verbergt. Hoe groter diene
matrix en hoe meer letters da er tegelijkertijd worden geëncodeerd, des
te beter de frequentie verborgen wordt.

Maar, zoals alles (ooit ne keer) te kraken valt, is het Hill Cipher
helemaal ni bestendig tegen nen 'plaintext attack'. Hier gaat da kortweg
als volgt:
we hebben nen m x m Hill Cipher en m plaintext-ciphertext paren, elk met
een lengte m en ne geheime sleutel K (ongekend).
We noemen elk paar Pj = (p1j, p2j, ..., pmj) en Cj = (c1j, c2j, ..., cmj)
zodanig da Cjp = K Pj met als voorwaarde 1 <= j <= m.
Nu definiëren we twee m x m-matrices X = (Pij) en Y = (Cij).
Nu voeren we de matrix-bewerking Y = X K uit. Als X nen inverse heeft,
-1 -1
dan kunnen we K = X Y bepalen. Kan X ni gevonden worden, dan kunnen we
nen andere variant van X bepalen (met meer plaintext-ciphertext paren)
waardoor da we K wel kunnen vinden. (NB: K kan altijd gevonden worden!)


Polyalphabetic Ciphers

Een andere manier om het simpele Monoalphabetical Cipher te versterken is
verschillende Monoalphabetical substitutions te gebruiken. In 't algemeen
wordt dees methode het Polyalphabetical Cipher genoemd. De vorige methode
en die die nu wordt uitgelegd hebben twee zaken gemeenschappelijk:
- een verzameling van gerelateerde Monoalphabetical substitution regels
worden gebruikt
- ne sleutel bepaald welke regel er gekozen wordt voor een bepaalde
transformatie

De meest bekende, en ook één van de simpelste, is het Vigenère Cipher.
Hierbij bestaat de verzameling van gerelateerde Monoalphabetical
substitutions uit 26 Caesar Ciphers, met shifts tussen 0 en 25 (shifts zijn
bitsgewijze verschuivingen). Elk cipher betekent ne sleutel-letter,
dewelke de ciphertext-letter is da de vervanging wordt voor de
plaintext-letter a.
Dus, een Caesar Cipher met ne shift van 3 krijgt de sleutelwaarde d.
Om da hier allemaal wa gemakkelijker te maken en voor puur gebruiksgemak,
wordt er meestal ne matrix gebruikt die da het Vigenère tableau wordt
genoemd. Diene ziet er als volgt uit:

| 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
--+----------------------------------------------------
a | 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
b | 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 a
c | c d e f g h i j k l m n o p q r s t u v w x y z a b
d | d e f g h i j k l m n o p q r s t u v w x y z a b c
e | e f g h i j k l m n o p q r s t u v w x y z a b c d
f | f g h i j k l m n o p q r s t u v w x y z a b c d e
g | g h i j k l m n o p q r s t u v w x y z a b c d e f
h | h i j k l m n o p q r s t u v w x y z a b c d e f g
i | i j k l m n o p q r s t u v w x y z a b c d e f g h
j | j k l m n o p q r s t u v w x y z a b c d e f g h i
k | k l m n o p q r s t u v w x y z a b c d e f g h i j
l | l m n o p q r s t u v w x y z a b c d e f g h i j k
m | m 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
n | 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
o | 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 n
p | p q r s t u v w x y z a b c d e f g h i j k l m n o
q | q r s t u v w x y z a b c d e f g h i j k l m n o p
r | r s t u v w x y z a b c d e f g h i j k l m n o p q
s | s t u v w x y z a b c d e f g h i j k l m n o p q r
t | t u v w x y z a b c d e f g h i j k l m n o p q r s
u | u v w x y z a b c d e f g h i j k l m n o p q r s t
v | v w x y z a b c d e f g h i j k l m n o p q r s t u
w | w x y z a b c d e f g h i j k l m n o p q r s t u v
x | x y z a b c d e f g h i j k l m n o p q r s t u v w
y | y z a b c d e f g h i j k l m n o p q r s t u v w x
z | z 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

Wa hier nu volgt is een klein zelfgemaakt C-proggie die deze tabel op't
scherm zet.

#include <stdio.h>

void main() {
char c, r;
printf(" | 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\n");
printf("--+----------------------------------------------------\n");
for (r=0; r<26; r++) {
printf("%c |", 97+r);
for (c=97; c<123; c++)
printf(" %c", c+r>122 ? c+r-26 : c+r);
printf("\n");
}
}

Compileert da hier en als ge da proggie kunt laten lopen, typt ge gewoon
aan de prompt de naam van da proggie en vervolgens " > <filename>" en
voilà! Den output wordt dan weggeschreven onder diene filename.
Dus, voor de mensen die nog altijd ni weten hoe da ge da doet:

C:\TEMP\vig > vig.dat

waarbij vig de naam wordt van uw proggie en vig.dat de filename is waar
de tabel in moet worden weggeschreven. Ge kunt da hier doen zowel
onder alles van Micro$oft als *NIX.

Gedaan met spelen, terug verder met encryptie...

Het proces van encoderen is simpel: stel da ge ne sleutel-letter x hebt en
ne plaintext-letter y, dan wordt de ciphertext-letter diene letter die da
staat op index (x, y). Dus, den eerste coördinaat slaagt op de kolom, en
den tweede slaagt op de rij. In ons geval wordt diene ciphertext letter
dan v.
Om een bericht te encoderen, hebde dus ne sleutel nodig die even lang is
als da bericht zelf. Meestal zulde ne sleutel gebruiken die bestaat uit
een herhaald keyword. Stel da ge bijvoorbeeld het bericht "we are
discovered save yourself"
wilt encoderen, en ge gebruikt als keyword
"deceptive", dan kunde da bericht encoderen als volgt:

key: deceptivedeceptivedeceptive
plaintext: wearediscoveredsaveyourself
ciphertext: zicvtwqngrzgvtwavzhcqyglmgj

Decoderen gaat even gemakkelijk. De sleutel-letter duidt weer de rij aan
en de positie van de ciphertext-letter in die rij bepaalt op zich de
kolom. De letter bovenaan die kolom is dan de plaintext-letter.

De kracht van deze methode is het feit da er meerdere ciphertext-letters
bestaan voor ne zelfden plaintext-letter, en voor elke unieke letter van
da sleutelwoord. Hierdoor wordt de letterfrequentie verborgen, maar
-spijtig genoeg- wordt ni alle info over de structuur van de plaintext
onzichtbaar.
Deze methode is toch aanzienlijk sterker tegenover het Playfair Cipher,
maar er blijft dus een zekere mate aan frequentie info zichtbaar.

Veronderstel da den analyst denkt da de ciphertext verkregen werd door
ofwel gebruik te maken van een Momoalphabetical substitution of een
Viginère Cipher. Ne simpelen test kan uitwijzen welke methode da er
gebruikt werd. Als een Monoalphabetical substitution gebruikt werd, dan
zijn de statistische eigenschappen van de ciphertext gelijk aan die van de
taal waarin da de plaintext geschreven is.
Als er maar één enkel bericht kan worden geanalyseerd, dan verwachten we
zeker en vast geen exacte overeenkomst met de relatieve frequentie van de
moedertaal van diene plaintext. Maar, komen ze bij elkaar in de buurt,
dan moogde veronderstellen da een Monoalphabetical substitution werd
gebruikt.
Moest een Viginère Cipher gebruikt zijn, dan moet ge eerst proberen te
bepalen hoe lang da sleutelwoord was. Da kunde zo doen: als twee (of
meer) identieke strings van plaintext-letters voorkomen op nen bepaalden
afstand, dan genereren die automatisch twee (of meer) identieke strings
van ciphertext-letters. In 't voorbeeld kunde zien da de string "red"
meermaals voorkomt, gescheiden door 9 karakterposities. Ge kunt dan ook
zien da de letter r geëncodeerd werd door gebruik te maken van de
sleutelletter e, de letter e geëncodeerd werd door de sleutelletter p en d
door de sleutelletter t.
Dus, in beide gevallen wordt de ciphertext-string "vtw".

Nen ananlyst die bijvoorbeeld opmerkt da diene ciphertext-string meerdere
keren voorkomt en merkt da het verschil tussen beide 9 karakterposities
lang is, kan dan veronderstellen da het sleutelwoord ofwel 9, ofwel 3
karakters lang is.

Als het bericht lang is, zit er vrij veel kans in da er meerdere strings
meerdere keren in voorkomen. Door zo'n analyse grondig uit te voeren, kan
den analyst zich een goei beeld beginnen vormen van den inhoud van diene
plaintext.
Als de lengte van da sleutelwoord N is, dan bestaat het cipher uit N
Monoalphabetical substitution ciphers.
Bijvoorbeeld: bij het keyword "deceptive" worden de letters op positie 1,
10, 19, enz. geëncodeerd met hetzelfde Monoalphabetical cipher. Hierdoor
kunnen we de gekende frequentie eigenschappen van de moedertaal van de
plaintext gebruiken om elk van die Monoalphabetical ciphers apart te
bepalen.

De herhaling van het sleutelwoord kunde wegkrijgen door bijvoorbeeld een
uniek sleutelwoord te gebruiken da even lang is als de plaintext zelf.
Viginère stelde voor om ne sleutel deels automatisch te laten genereren,
waarbij da da sleutelwoord eenmalig voorkomt, en da vervolgens wordt
aangevuld met de plaintext. In ons voorbeeld wordt da dan:

key: deceptivewearediscoveredsav
plaintext: wearediscoveredsaveyourself
ciphertext: zicvtwqngkzeiigasxstslvvwla

Maar, omda uiteindelijk de sleutel en de plaintext dezelfde frequente
verspreiding van de letters delen, is dees methode ook ni bestand tegen
cryptanalyse door gebruik te maken van ne techniek uit de statistiek. Ik
ga diene hier ni beginnen uitleggen, vertrouwt er maar op! =)

De ultieme beveiliging tegen deze vorm van cryptanalyse is door gewoon een
sleutelwoord te gebruiken da even lang is als de plaintext zelf en er ook
totaal onafhankelijk van is. Dus, da het sleutelwoord niks, maar dan ook
niks, van letters bevat van de plaintext. Zo'n systeem werd voorgesteld
door nen ingenieur van AT&T, Gilbert Vernam, in 1918. Zijn methode werkt
eerder aan de hand van binaire data in plaats van 'gewone' letters...
Ge kunt da systeem als volgt uitschrijven:

Ci = pi XOR ki

waarbij pi de i'de binaire digit is van de plaintext
ki de i'de binaire digit is van de sleutel
Ci de i'de binaire digit is van de ciphertext
XOR de exclusieve OR bit-operatie is (^ voor C-programmeurs)
==> Deze vergelijkt de waarden van twee bits met elkaar en
stuurt een waarde terug:
0 ^ 0 wordt 0
0 ^ 1 1
1 ^ O 1
1 ^ 1 0

Dus, hierbij wordt de ciphertext gegenereerd door de bitsgewijze XOR-
operatie uit te voeren op de plaintext en de sleutel.

Decryptie gaat even gemakkelijk als encryptie: doe gewoon dezelfde
bitsgewijze XOR-operatie:

pi = Ci XOR ki

Het belangrijkste bij dezen techniek is de sleutel. Maar, als ge een
herhalend sleutelwoord gebruikt zoals Vernam voorstelde, kan uiteindelijk
de plaintext terug gevonden worden -bij voldoende ciphertext- door gebruik
te maken van gekende en/of geschatte plaintext-herhalingen.

Een of andere officier van 't leger, Joseph Mauborgne, stelde een
verbetering voor het Vernam Cipher voor da zogezegd de ultieme beveiliging
zou hebben. Mauborgne stelde voor ne willekeurig gegenereerde sleutel te
gebruiken die ook even lang was als het bericht, zonder herhalingen.
Zoiets is dus onbreekbaar. Er bestaat niks van samenhang tussen de
sleutel en de plaintext wat dus wel degelijk onbreekbaar is.
Hetgeen deze methode minder succesvol maakte was het feit da zowel de
zender als de ontvanger in 't bezit moesten zijn van dezelfde willekeurig
gegenereerde sleutel. Hierdoor werd het Vernam Cipher amper gebruikt.


Transposition

Alle tot nu toe besproken encryptietechnieken zijn eigenlijk gewone
sustituties die werden uigevoerd op ne plaintext. Nen totalen anderen
techniek zou zijn da we een soort van permutatie uitvoeren op alle letters
van ne plaintext. Dezen techniek wordt de Transposition genoemd.

De simpelsten techniek is de Rail Fence-techniek, waarbij da de plaintext
gewoon wordt neergeschreven als een diagonale opvolging en gelezen wordt
als een opeenvolging van rijen. Bijvoorbeeld: stel da ge het bericht
"meet me after the toga party" wilt encoderen met een rail fence van
diepte 2, dan krijgde hetvolgende:

m e m a t r h t g p r y
e t e f e t e o a a t

De ciphertext wordt dan:

mematrhtgpryetefeteoaat

Een meer complex schema kunde verkrijgen door het bericht neer te
schrijven in de vorm van een vierkant, rij per rij, het bericht
vervolgens te lezen kolom per kolom, maar de volgorde van de kolommen te
permuteren. De volgorde van de kolommen wordt dan de sleutel van het
algoritme. Bijvoorbeeld:

key: 4 3 1 2 5 6 7
plaintext: a t t a c k p
o s t p o n e
d u n t i l t
w o a m x y z
ciphertext: ttnaaptmtsuoaodwcoixknlypetz

Ne puren transpositie techniek kunde gemakkelijk herkennen omda het
dezelfde letter frequentie heeft als de plaintext.

Het Transposition Cipher kan aanzienlijk veiliger worden gemaakt door
de transpositie meerdere keren uit te voeren. Het resultaat wordt dan een
vrij complexe permutatie en de plaintext kan vervolgens ni gemakkelijk
worden teruggevonden. Dus, als ge de vorige ciphertext terug encodeert
door gebruik te maken van hetzelfde algoritme krijgde hetvolgende:

key: 4 3 1 2 5 6 7
plaintext: t t n a a p t
m t s u o a o
d w c o i x k
n l y p e t z
ciphertext: nscyauopttwltmdnaoiepaxttokz

Om het resultaat te visualiseren van dees dubbele transpositie doede
gewoon het volgende: geeft aan elke karakterpositie in uwen plaintext een
uniek nummer:

01 02 03 04 05 06 07 08 09 10 11 12 13 14
15 16 17 18 19 20 21 22 23 24 25 26 27 28

Na den eerste transpositie krijgde:

03 10 17 24 04 11 18 25 02 09 16 23 01 08
15 22 05 12 19 26 06 13 20 27 07 14 21 28

Let efkes op: ge kunt opmerken da elk volgende getal het vorige is + 7.
Natuurlijk ziede ook da als ge voorbij 28 gaat, ge automatisch terug bij 1
begint. Na één transpositie is er nog altijd ne redelijk duidelijke
structuur te vinden...
Na de tweede transpositie krijgde:

17 09 05 27 24 16 12 07 10 02 22 20 03 25
15 13 04 23 19 14 11 01 26 21 18 08 06 28

Voilà, den deze is al een pak minder gestructureerd en is dan ook veel
moeilijker te kraken.


Rotor machines

Het vorige voorbeeld bewijst da encryptie in verschillende stages veel
moeilijker valt te kraken. Om DES te kunnen begrijpen, moet ge zeker en
vast het principe van encryptie via verschillende stages begrijpen. De
meest gebruikte toepassing van zulke methode van encoderen zijn de rotor
machines.

Initiële positie:

-> A 24 ----+ 21 26 20 1 8 A
-> B 25 ----|-+ 3 1 1 2 +--- 18 B ->
-> C 26 --+ | | 15 2 6 3 | 26 C
D 1 | | | 1 3 4 4 | 17 D
E 2 | | | 19 4 15 5 +-|--- 20 E ->
F 3 | | | 10 5 3 6 | | 22 F
G 4 | | | 14 6 14 7 | | 10 G
H 5 +-|-|- 26 7 ------+ 12 8 | | 3 H
I 6 | | 20 8 | 23 9 | | +- 13 I ->
J 7 | | 18 9 | 5 10 | | | 11 J
K 8 | | 16 10 | 16 11 | | | 4 K
L 9 | | 7 11 | 2 12 | | | 23 L
M 10 | | 22 12 +---|- 22 13 --|-|-+ 5 M
N 11 | | 4 13 | | 19 14 | | 24 N
O 12 | | 11 14 | | 11 15 | | 9 O
P 13 | | 5 15 | | 18 16 | | 12 P
Q 14 | | 17 16 | | 25 17 | | 25 Q
R 15 | | 9 17 | +-|- 24 18 --|-+ 16 R
S 16 | | 12 18 | | | 13 19 | 19 S
T 17 | | 23 19 | | +- 7 20 --+ 6 T
U 18 | | 18 20 | | 10 21 15 U
V 19 | | 2 21 | | 8 22 21 V
W 20 | +- 25 22 --+ | 21 23 2 W
X 21 | 6 23 | 9 24 7 X
Y 22 +--- 24 24 ----+ 26 25 1 Y
Z 23 13 25 17 26 14 Z
Snelle rotor medium rotor trage rotor

Positie na één toetsaanslag:

-> A 24 ----+ 21 26 20 26 14 A
-> B 25 ----|-+ 3 1 1 1 8 B
-> C 26 --+ | | 15 2 6 2 18 C
D 1 | | | 1 3 4 3 26 D
E 2 | | | 19 4 15 4 +--- 17 E ->
F 3 | | | 10 5 3 5 | 20 F
G 4 | | | 14 6 14 6 | 22 G
H 5 +-|-|- 26 7 ------+ 12 7 | 10 H
I 6 | | 20 8 | 23 8 | 3 I
J 7 | | 18 9 | 5 9 | 13 J
K 8 | | 16 10 | 16 10 | 11 K
L 9 | | 7 11 | 2 11 | 4 L
M 10 | | 22 12 +---|- 22 12 --+ | 23 M
N 11 | | 4 13 | | 19 13 | | 5 N
O 12 | | 11 14 | | 11 14 | | 24 O
P 13 | | 5 15 | | 18 15 | | 9 P
Q 14 | | 17 16 | | 25 16 +-|--- 12 Q ->
R 15 | | 9 17 | +-|- 24 17 ----+ 25 R
S 16 | | 12 18 | | | 13 18 16 S
T 17 | | 23 19 | | +- 7 19 -------- 19 T ->
U 18 | | 18 20 | | 10 20 6 U
V 19 | | 2 21 | | 8 21 15 V
W 20 | +- 25 22 --+ | 21 22 21 W
X 21 | 6 23 | 9 23 2 X
Y 22 +--- 24 24 ----+ 26 24 7 Y
Z 23 13 25 17 25 1 Z
Snelle rotor medium rotor trage rotor

Ik heb geprobeerd de rotors zo goe mogelijk voor te stellen zoda ge het
werkingsmechanisme van ne rotor gemakkelijk zou begrijpen.
Een rotor machine bestaat uit enkele onafhankelijk van elkaar roterende
cylinders waardoor elektrische pulsen kunnen vloeien. Elke cylinder heeft
26 input en 26 output pinnen, die intern uniek met elkaar verbonden zijn.
Om da hier allemaal wa overzichtelijk te houden, heb ik maar drie
verbindingen gemaakt.
Kennen we aan elke input en output pin ne letter van 't alfabet toe, dan
bepaalt één enkele cylinder een Monoalphabetical substitution.

Nemen we een rotor machine met één enkele cylinder. Nadat nen toets is
ingedrukt, roteert de cylinder één positie naar onder, zoda de interne
verbindingen ook opgeschoven worden. Hierdoor krijgen we een ander
Monoalphabetical substitution cipher. Na 26 letters in te drukken van ne
plaintext komt de rotor terug op zijn initiële positie te staan. Hierdoor
krijgen we dus een Polyalphabetical substitution algoritme met een periode
van 26.

Het gebruiken van één enkele cylinder is ni genoeg. Om echt veilig te
werk te gaan, moet ge meerdere cylinders gebruiken waarbij da de output
pin van den ene verbonden is met de input pin van den andere en diene zijn
output pin verbonden met terug den input pin van nen andere, enz...

De figuur hierboven beschrijft dus ne rotor met drie cylinders. Op de
bovenste figuur kunde ook zien da als ge de letter 'a' als plaintext
ingeeft, ge na de encryptie de output letter 'b' krijgt, wa dus de letter
van de ciphertext zal worden...

Door gebruik te maken van meerdere cylinders roteert diegene die het meest
veraf staat van den input operator, één positie per toetsaanslag.
De onderste figuur vertoont de posities na één toetsaanslag. Voor elke
complete rotatie van de rechtse cylinder, moet de middelste cylinder één
positie roteren. Voor elke rotatie van de middelste cylinder, moet de
linkse cylinder één positie roteren.
Het resultaat is dan da er 26 x 26 x 26 = 17.576 verschillende
substituties gebruikt worden vooralleer het systeem zich herhaalt.
Is't da ge er ne vierde of ne vijfde cylinder aan toevoegt, dan herhaalt
het systeem zich pas na respectievelijk 456.976 en 11.881.376 letters in
te geven.

Het belang van rotor machines is da het wijst op de manier hoe DES, de
wereldwijd meest gebruikten encryptie-techniek werkt. Het volgende deel
(deel 3) wordt grotendeels gewijd aan de Data Encryption Standard.


Ter achter info =)

Voilà, da was dus mijn tweede deel. Dus, zoals reeds vermeld vanboven,
als ge iet interessants te zeggen hebt, bijvulsels, opmerkingen,
verbeteringen, of wat dan ook, awel, dan moogde die altijd doormailen
naar: zym0t1c@hotmail.com

Geen enkel idee wanneer het volgende deel uitkomt. Nu gaat da hier
waarschijnlijk langer duren vooralleer er een volgend deel zal uitkomen.
Het wordt tijd da ik mijn ASCII-art ga beginnen bovenhalen want de rest
zal ni simpel worden om te begrijpen als ge geen deftige figuur voor ogen
krijgt.
Zij die echte ASCII-kunstenaars zijn, mogen mij ook altijd hun diensten
aanbieden natuurlijk... =)
Vermits da da hier puren ASCII en geen PDF is, zulde dus moeten geduld
uitoefenen...
Geen nood, zij die H4H lezen, zullen het direct weten als mijn volgende
deel klaar is (waarschijnlijk zal H4H ook het volgende deel publiceren).

-------------------------------------------------------
06. Verslag H4H-Meeting 4 Maart
-------------------------------------------------------
Verslag H4H-Meeting 4 Maart

Na eindeloos gezeur van Berry of we allemaal wel op de meeting zouden komen vond
de meeting eindelijk plaats op 4 Maart. Berry had precies de dag uitgekozen
waarop ook #gayteen.nl een meeting hield. We vragen ons natuurlijk af of het
toeval is of dat Berry gewoon 2 meetings wou combineren...

De aanwezige H4H-redactie leden waren: ViPER, Asby, Berry en N|ghtHawk (toen nog
geen redactie), jammer genoeg moesten we Tozz missen op deze meeting.

De aanwezige "gasten" waren: Bas, Boris, Bundy, Datura, Donald, Dugo, Ester,
Flash, Gerrie, Ivo_, King Dis, Liel, Melluh, Bephrost, Nosf, Pipitaal, Pudding,
R00t-dude, Wayang Master, Yme, Bivak, BlueLive, Loba, Flyahh, J9_Walto. Een
groot deel hiervan had zich van tevoren op gegeven. Aan de rest willen we vragen
of ze zich voor de volgende meeting wel willen opgeven, aangezien dat wel zo
makkelijk is voor de redactie. Ook waren er natuurlijk mensen die zich hadden
opgegeven en vervolgens niet zijn verschenen. Wij hopen deze mensen natuurlijk
op een volgende meeting alsnog te zien.

Wij van de redactie hebben grote waardering voor de mensen die alleen op deze
meeting zijn gekomen. Aangezien je toch een grote groep vage figuren gaat meeten
:-). Vooral R00t-dude verdient een vermelding aangezien hij in zijn eentje uit
België is gekomen. Eigenlijk zou Frazzle Freckle samen met hem komen. Maar
vanwege bepaalde omstandigheden was dat een van de mensen die we hebben moeten
missen. We hopen Frazzle de volgende meeting ook te zien.

De verzameling van de meeting was in de Stationshal van het centraal station van
Arnhem.
Hier hebben we staan wachten op de geïnteresseerden voor de meeting van 12.00
tot 13.15. Aan de duidelijke aangeving van waar je moest zijn kon het in ieder
geval niet liggen aangezien de redactie het hele station had vol gespammed met
H4H aanduidingen. En het zal me niet verbazen al zouden die er nog hangen. Dus
als je op het centraal station staat in Arnhem en je ziet een H4H aanduiding dan
is die nog van de vorige meeting, en niet van een nieuwe :-).

Na het verzamelen zijn we met ze allen naar een café ( Plaza café ) gegaan waar
iedereen gezellig met elkaar kennis kon maken en de namenlijst werd doorgespit
door N|ghtHawk. In het café was de mogelijkheid tot te poolen en natuurlijk
gezellig een biertje te drinken. Wat velen van ons dan ook maar gedaan hebben.
Om half drie was het dan tijd om te gaan LaserGamen (in Jules Lazergames). Het
geen waar bijna iedereen zich voor opgegeven had. We gingen dan ook met 3
groepen naar binnen. De groepen zagen er als volgt uit:

Groep 1 (Rood) : Asby, Berry, Viper, N|ghtHawk, Bas, Boris, Ivo_, R00t-dude en
Gerrie (kwam bij het sterkste team staan na indeling).
Groep 2 (Groen): Donald, Flash, King Dis, Melluh, Bephrost, Nosf, Wayang Master,
Yme, J9_Walto.
Groep 3 (Geel) : Liel, Pipitaal, Dugo, Pudding, Bivak, BlueLive, Loba, Flyahh.

Na een half uur intensief op elkaar inknallen was iedereen zo uitgeput dat we
maar gestopt zijn. Wat erg goed uitkwam aangezien onze tijd op was. Na een
flinke tijd wachten onder genot van een drankje (grotendeels weer bier), kwamen
de scores te voorschijn. Hieruit konden we niet opmaken wie er gewonnen had
aangezien er een aantal pakken kapot scheen te zijn. In ieder geval had Team 1
(rood) niet gewonnen. Dit door een of andere raadselachtige reden. Die best wel
eens zou kunnen zijn dat in dat team iemand zat waar iedereen wel ff fijn op wou
schieten. En die uit verveling mensen uit zijn eigen team neer begon te
schieten. Namen noemen we niet want iedereen weet natuurlijk dat dat Gerrie was.
Overigens een bericht aan Gerrie: " Gerrie, je hoort normaal bij het lasergamen
te betalen. Dat doe je door je muntje in te leveren... :-)."


Na een tijdje kregen we ook de uitgeprinte uitslag van het lasergamen. Iets wat
was uitgeprint met een dotmatrix printer die leeg was. Hierdoor is er geen ruk
te lezen van de uitslagen. Dit tot onze grote teleurstelling aangezien we deze
wouden plaatsen. De enige eervolle vermelding die we nu kunnen plaatsen is dat
BlueLive de FragMaster van de meeting was. Die gaat de volgende keer dus maar
bij Gerrie in het team, dat neutraliseert mooi.

Na een flink tijdje te hebben gezeten bij de Lasergame hal en elkaar weer wat
beter te hebben leren kennen, werd het tijd om gezamenlijk te gaan eten.
Besloten werd om eens niet te gaan snacken maar uit eten te gaan bij Pizzeria
Donatello's (Jansplein 50 te Arnhem). Het grootste deel van de groep kon hier
gezellig bij elkaar zitten, behalve N|ghtHawk, Nosf en R00t-dude die gezellig
met z'n drietjes achterin het restaurant moesten eten. Voor degene die interesse
hebben in wat we hebben gegeten heeft de redactie nog de bonnetjes. Hoewel deze
niet zomaar prijs worden gegeven vanwege de privacy van de gasten.

Na het eten werd besloot een deel van de gasten op de meeting zelf verder te
gaan. En het andere deel ging gezellig met ze allen poolen (in House of
Biljards), ondertussen was het 19.20. Deze groep bestond uit: Asby, Berry,
Datura, Dugo, Ivo_, Melluh, N|ghtHawk, Nosf, Pippitaal, Pudding, Viper,
BlueLive.

Om 19.30 was er enig onenigheid in de groep. Melluh, Viper, Dugo en Pudding
konden het niet eens worden over hoe je UTP knipt. Ze probeerde dit elkaar bij
te brengen door met biljart ballen te schuiven alsof het UTP kabels waren, ja zo
trek je wel bekijks. Degene die wel weet hoe je UTP knipt mag een stuk UTP naar
de redactie emailen. Op slot van de onenigheid dreigde Dugo nog ff met zijn
Cybertool, waar wij allemaal flink van onder de indruk waren.

Om 20.20 besloten N|ghtHawk en BlueLive in plaats van te gaan poolen te gaan
schaken. Waarna 5 minuten Pippitaal het nodig vond te zeggen dat schaken voor
nerds was. Hierdoor was N|ghtHawk natuurlijk helemaal ondersteboven, en verloor
daardoor grandioos.
Tien minuten later kan de eerste verslaafde het niet meer houden. Nosf moet ff
een internetpaal opzoeken. Op een of andere manier komt hij niet verder dan de
lift. N|ghtHawk ontkent nog steeds hiermee iets te maken te hebben.

Wat later werd besloten om naar een café te gaan met de overgebleven mensen. Dit
keer gingen we naar de Cavern. Na een tijdje hier gezeten te hebben besloot een
groot deel dat het genoeg was geweest en ze toch maar moesten vertrekken in
verband met de trein. Van de overgebleven figuren gingen Viper, Asby, N|ghtHawk
en Nosf om 23.30 toch maar weer ff poolen. Om 23.55 hield ook Datura het niet
meer uit bij Berry. En kwam ons dus vergezellen. Tijdens dit poolen had Datura
nog sjans van mensen van de #gayteen.nl meeting. Hier kwam hij heel makkelijk
van af door gewoon met zijn biljartkeu te gaan staan porren als ze in de weg
stonden. Dit is natuurlijk een gevaarlijke manier, want je hebt gauw de kans dat
ze dit fout interpreteren en denken dat je dit met een bepaald lichaamsdeel
doet. Hierover zullen we echter niet verder uitwijden.

Om 0.50 vond Nosf het ook mooi geweest en vertrok onder begeleiding van de rest
naar de bus. Onderweg moest hij zich eerst nog even vermaken op een
internetpaal. Uit verveling zijn Viper, Asby N|ghtHawk en Datura toen maar een
sneeuwballen gevecht begonnen. Want op een of andere manier had het in Arnhem
gesneeuwd. Iets wat wij hier in Nederland toch niet elke dag mee maken.

Nadat we Nosf naar de bus hadden gebracht vonden we het een mooi einde van de
meeting. We hebben Berry weer opgehaald uit de Cavern en zijn maar richting zijn
huis vertrokken. Tijdens de weg naar huis werd Berry nog even aangesproken door
een paar #gayteen.nl vrienden van hem. Dus het werd wel erg verdacht dat deze
twee meetings toevallig op 1 dag waren gepland. Nadat Datura ook naar huis was
is de redactie nog langs de Febo geweest waar Viper het nodig vond om met
servetjes te gaan spammen. Het bewijs is in bezit van N|ghtHawk.

Al met al vonden wij als redactie deze meeting toch zeker zeer geslaagd. Wij
hopen dat jullie je ook goed hebben vermaakt en zien jullie graag terug op een
volgende meeting. Om te zien welke meetings er worden georganiseerd kan je
kijken op http://www.hackers4hackers.net/h4h-meeting/ Op dit moment staat er een
meeting op Pinkpop op het touw. We hopen jullie daar in grote aantallen te zien.

Hier nog wat korte feiten van de meeting:
Wist U Dat:
- Dugo niet bij Pipitaal in het LaserGame team wou?
- Op verzoek van Pipitaal wij hem toch maar bij haar in hebben gedeeld.
- Wij stiekem denken hij dit toch niet zo erg vond.
- Melluh nogal bang was dat de notulist (N|ghtHawk) negatieve dingen over hem
zou schrijven?
- Tijdens het lopen naar de Pizzeria Viper zijn zonnebril sneuvelde.
- Dit kwam omdat Viper bij Berry op zijn rug sprong.
- En vervolgens Berry op Viper zijn zonnebril stapte.
- Dit de Zonnebril niet echt kon waarderen en besloot te verbrijzelen.
- Viper en Asby het nodig vonden om na het eten een poster te defacen?
- Deze poster iets te maken had met een dokter..
- De rest bij goed nadenken wel te raden is.
- De redactie bij Berry sliep.
- Berry lichtelijk schijnt te snurken.
- Een gedeelte van de redactie de hele nacht geen oog dicht heeft gedaan.
- Berry wakker werd met hoofdpijn.
- Dit geen kater was.
- Dit waarschijnlijk kwam doordat iemand een zwaar voorwerp op zijn hoofd in had
zitten beuken.
- N|ghtHawk een paar dagen na de meeting een verdacht pakje in de bus vond.
- Hij dit niet durfde te openen vanwege ontploffingsgevaar.
- Hierin zijn vergeten tandpasta zat wat Berry hem dus toe had gestuurd.

N|ghtHawk-H4H,2000

------------------------------------------------------- 
07. Dynamic HTML
-------------------------------------------------------
Html is inmiddels al aan zijn vierde versie toe en de toepassingen die je met
Html kunt verzinnen zijn oneindig. Sinds de commercie het internet heeft ontdekt
is Html sterk uitgebreid.
Invoeging van zowel javascript ,java applets als CGI/Perl hebben er voor
gezorgd dat er nieuw soort Html is ontstaan: Dynamic Html. Dynamic Html is dan
ook eigenlijk niets meer dan een vorm van Html waar veel extra zijn ingevoegd
zoals styles, java en Cgi forms. Was het vroeger vooral de bedoeling info te
laten zien met hier een plaatje en daar een link, is het tegenwoordig de
bedoeling dat mensen de deur niet meer uit hoeven om een boek te kopen of
aandelen te verhandelen. Daarom heb ik maar een redelijk te volgen (hoop ik :-)
tutorial geschreven voor het maken van dynamic Html pagina's.

[T.o.c.]

- Een standaard Html pagina ontleed.

- CSS oftewel styles waarmee je in een keer de hele layout van je website kunt
vaststellen.

- Het invoegen java, zowel in applet vorm als script vorm. En wat je daarmee
kan.

- CGI/Perl - script. Maak je site interactief.

- Disclaimer.

--

1.1 Een standaard html pagina onder de loep.

Hier een listing van een standaard html pagina. Deze pagina doet niks, laat niks
zien en er valt ook niks aan te beleven ook. Maar er valt hieraan wel een paar
dingen te versleutelen. Html is niet zoals bv. C een taal waar je source code
moet compilen en waar je alles exact moet gaan overnemen, en mocht je dan wat
fout doen het programma gelijk niet meer werkt. Als je fout doet kan dat geen
kwaad, alleen wordt je pagina niet weergegeven zoals je dat eigelijk zou
willen. Een pagina is verdeeld in 2 gedeelten.


<html>

<head> \
|
<title>Titel van de pagina</title> |- de Head, het niet zichtbare
gedeelte waarin
| info staat zoals de titel
en inhoud.
<META content="niks" name="DISCRIPTION"> | Deze info wordt gebruikt
door de browser. (1.2)
<META content="-=:Bill clintoN:=-" name="AUTHOR"> |
</head> /

<body> \
|
|- De Body, in dit gedeelte
staat de code voor
| zichtbare pagina. alles
tussen de
| body tags laat de browser
zien. (1.3)
</body> /


</html>

1.2 De Head.

In de head kun je een aantal dingen kwijt zoals de titel en Meta tags. In zo'n
meta tags kan je bv. kwijt waar je pagina over gaat in dit geval gaat de pagina
nergens over dus kun je in de content "niks" neerzetten. Deze content (=inhoud)
word vooral gebruikt door zoekmachine's die de pagina's content bekijken. Door
achter de content name="DISCRIPTION" toe te voegen kun je duidelijk met wat
voor soort meta tag de browser te maken heeft. Zo kun je voor name="*" het * de
volgende woorden intypen :

keyword - De sleutelwoorden van je pagina.
discription - Een beschrijving waar je pagina over gaat.
author - De schrijver.
generator - De naam van het programma waarmee je de pagina mee hebt
gemaakt.
Enzovoort.

Naast de Meta tags kun je ook de style tag en javascript kwijt maar dat wordt
behandeld in de volgende hoofdstukken


1.3 De Body.

Tussen de body tags komen de afbeeldingen en text enz. die mensen te zien
krijgen zodra ze de URL van de pagina intikken. Het was niet mijn bedoeling om
alle tags te behandelen wat dan wordt dit verhaal wel erg lang.Alle tags die van
belang zijn worden in elk hoofdstuk behandeld.


--

2.1 Styles/CSS, de makkelijke manier om je layout efficient te beheren.

Zou het niet makkelijk zijn om de layout van je site in een centraal bestand op
te slaan? Dat kan. Door gebruik te maken van een style sheet kun je ervoor
zorgen dat je nooit meer last hebt van 2 pagina's van een geheel met een
verschillende layout. Ook kun je styles invoegen in de head tag waardoor de lay-
out slecht op een pagina geld. Dit is vooral handig bij het plaatsen van
afbeeldingen en text over elkaar heen. Daarnaast kun je styles ook
per tag apart gebruiken. Even een klein overzichtje:

Inline stylesheets - Deze styles staan in de tags zelf. (2.2)
Embedded stylesheets - Deze styles staan in de head. (2.3)
External Stylesheets - Deze styles staan in een aparte file die word
genoemd in de head. (2.4)

Maar hoe schrijf je zo'n stylesheet nou? dat word behandeld in 2.1


--
2.2 Hoe schrijf je een Stylesheet ?

Een stylesheet kun je opdelen in een aantal delen. Het beste is gewoon met een
voorbeeld te beginnen.

*begin van listing*

<html>
<head>
<style type="text/css">

A:hover { color: green }
#back { LEFT: 50px; POSITION: absolute; TOP: 60px; }

</style>
</head>
<body>

<a href="www.ilse.nl">Ilse.nl</a>

<div id="back">
<p><img src="image.gif"></p>
</div>

</body>
</html>

*eind van listing*

de stylesheet is opgebouwd uit:

A:hover - De hoofdletter A staat voor de <a> tag oftewel een
hyperlink. Hover is de extensie die hoort bij de tag <a>.
{ color: green } - Color: green staat voor de kleur in dit geval groen.
Deze tag staat tussen {...} Als je verschillende properties ingevoegd
dan moet je ze scheiden met een ;
#back - De # staat voor id, ls je ze later wil gebruiken dan is
dit de id.
{ LEFT: 3px;...;...} - De properties zijn gescheiden door een ; (Hierbij
wordt iets op x50 en y60 geplaatst)

Het aantal tags is zeer groot en wederom zou dit artikel heel lang worden al zou
ik ze stuk voor stuk behandelen. :-) Toch zijn tags te verdelen in een aantal
types.
- tag gerichte styles. Dus styles zoals in het voorbeeld. Deze styles behandelen
de layout van 1 bepaalde tag. (in dit geval de <a> tag)
- algemene styles. Deze styles worden vooral gebruikt voor afbeeldingen en text.
hierin kun je dingen kwijt als positie's, opmaak en zichtbaarheid.


--
2.3 Inline Stylesheets.


Inline stylesheets plaats je in de tag waarvoor de style is bedoeld. Dus:

<p style="font-weight: bold">Deze tekst is vet.</p>

Omdat de stylesheet al in de tag staat hoef je de tag waarvoor die bedoeld is
niet meer toe te voegen. Het werkt dus als volgt:

<X style="Y">test</X> waarbij X de tag is en Y de propertie van de style.

Inline Stylesheets hebben de minste "macht", ze gelden alleen voor de tag waarin
ze staan. Zodra je tag afsluit sluit je de stylesheet ook af.


--
2.4 Embedded Stylesheets.


Een voorbeeld van een embedded stylesheet zie je in 2.1 De style tag is
ingevoegd in de head van het bestand.Daardoor geld hij voor de gehele pagina.
De style is gerelateerd aan de <A> tag en hoeft in dit geval dus niet worden
opgeroepen in de tag(die in de body staat) zelf. Anders word het als je een
algemene styletag gebruikt (zoals de #back tag) Deze moet je special vernoemen
in de tag die in de body staat. Dit doe je als volgt:

<div id="x"> (x = styletag)
<p>test</p>
</div>

Een embedded stylesheet heeft alleen wat te zeggen over de pagina waarin het in
de header staat. Zodra je dus naar een andere pagina op de site gaat vervalt de
lay-out.


--
2.5 External Stylesheets.


Als je een website hebt met veel verschillende pagina's en je wilt op alle
pagina's dezelfde lay-out gebruiken dan moet je gebruik maken van een external
stylesheet. Dit doe je als volgt. Maak een nieuwe plain text file aan zet daarin
de styletags. In deze file hoef je alleen de tags neer te zetten en geen extra
info ofzo. Vervolgens met je in de head van elke pagina een link zetten naar de
styles file. Dit doe je als volgt:

<html>
<head>
<style type="text/css">
@import url( styles.css );
</style>
</head>

of:

<html>
<head>
<link rel="stylesheet" href="styles.css" type="text/css">
</head>

Hierin is styles.css de file waarin je de styletags hebt gezet.

Een external stylesheet heeft de meeste "macht". Een centrale file zorgt voor de
complete lay-out van de site. Dus als deze file vervangen word verander je
daarmee de complete lay-out van de hele site (als in elke pagina tenminste een
link is gemaakt naar de stylesheet file).


--

3.1 Java.

Java is te verdelen in 2 delen, applets en script. script is ongecompilde
source code wat kan worden ingevoegd in de head of in de vorm van van een extern
bestand. Applets zijn gecompilde aparte programma's die worden ingevoegd in een
html pagina. Daarom moeten applets worden opgegeven in de body van een pagina
als een aparte tag. Daarom is het ook mogelijk om applets in te voegen die
fysiek niet op jouw pagina onwezig zijn.

Het invoegen van java en javascript is vrij simpel. Toch zitten er vaak bij
applets een paar haken en ogen aan waardoor er een hoop mis kan gaan. Ook bij
javascript moet er met een aantal dingen rekening worden gehouden. Het is
(alweer) niet de bedoeling om een curses java of javascript te gaan geven want
dat zou wel erg veel worden :-). Ik zal in de hoofdstuk javascript en java
applets apart behandelen.

--
3.2 JavaScript.

Javascript kan als gewone source code worden ingevoegd in de head od de body van
een pagina. Daarvoor wordt de tag <script> gebruikt. Aangezien een browser niet
kan weten met wat voor script het te malen heeft moet in de tag ook worden
toegevoegd om wat voor taal het gaat. Aangezien we hier javascript behandelen
moet er de volgende tag worden
ingevoerd:

<script LANGAUGE="Javascript">

Hier heb je een voorbeeld van een pagina met javascript. Deze pagina geeft weer
op welke resolutie de pagina staat ingesteld. Hier is het script ingevoegd in de
body van de pagina. Hierdoor wordt het javascript automatisch uitgevoerd op het
moment dat de pagina wordt weergegeven. Daarom is et niet nodig aan dit script
ook nog een naam (function) mee te geven. De tags <!-- //--> worden gebruikt om
ervoor te zorgen dat waarneer een browser geen javascript accepteerd de
javascript niet wordt weergegeven.

<html>

<head>
<title>Javascript</title>
</head>

<body>
<script LANGAUGE="Javascript">
<!--
document.write("De breedte van het scherm is " + screen.width + "
pixels.<BR>"
);
document.write("De hoogte van het scherm is " + screen.height + "
pixels.<BR>"
);
// -->
</script>

</body>
</html>

Hier nog een voorbeeld van javascript. Hier wordt het script ingevoegd in de
head van de pagina. Aangezien dit niet automatisch word uitgevoerd moet het een
naam hebben zodat het later in de body kan worden aangeroepen. Hier gebeurd dit
door middel van een knop met de naam resolutie. Zodra je op de knop drukt wordt
er weergegeven op wat voor resolutie de monitor staat ingesteld. Deze vorm van
javacript invoegen is handig waarneer er op de pagina meerdere keren van het
zelfde script moet worden gebruik gemaakt.

<html>

<head>
<title>Javascript</title>
<script LANGAUGE="Javascript">
function resolutie()
{
document.write("De breedte van het scherm is " + screen.width + "
pixels.<BR>"
);
document.write("De hoogte van het scherm is " + screen.height + "
pixels.<BR>"
);
}
</script>
</head>

<body>
<form>
<p><input TYPE="button" VALUE="Resolutie" onClick="resolutie()"></p>
</form>
</body>
</html>

Deze vorm van javascript invoegen is alleen handig waarneer het kleine stukjes
code omvat. Maar wat nu als het om javascript gaat van een paar Kb groot is en
toch meerdere keren moet worden aangeroepn? Daarom kun je javascript ook als
extern bestand invoegen. Dit doe je door een bestand aan te maken waarin alle
functions zijn ingevoegd. De code hiervoor is exact hetzelfde als de code die je
in moet voegen in de head. Daarom moet je het bestand ook aanroepen in de head.

<html>

<head>
<title>Javascript</title>
<script LANGUAGE="JavaScript" SRC="resolutie.js">
</script>

</head>

<body>
<form>
<p><input TYPE="button" VALUE="Resolutie" onClick="resolutie()"></p>
</form>
</body>
</html>

Hierbij word het script voor het weergeven van de resolutie opgeslagen in het
bestand resolutie.js In dit bestand staat dan het volgende:

function resolutie()
{
document.write("De breedte van het scherm is " + screen.width + "
pixels.<BR>"
);
document.write("De hoogte van het scherm is " + screen.height + "
pixels.<BR>"
);
}

Zoals je ziet is dit precies hetzelfde als wat je toevoegd in de head. Het
bestand
resolutie.js moet overigens wel worden opgeslagen in dezelfde map als waar de
pagina
staat waarin de het javascript word ingevoegd.


--
3.3 Java Applets.

Naast javascript is er ook nog een andere vorm van java. Dat zijn java applets.
Applets zijn eigenlijk apparte programmatjes die je als extern bestand invoegd
op een pagina. Applets zijn dan ook gecompileerde bestanden die eindigen op
.class . Op de html pagina kunnen dan bepaalde opties worden geregeld die in de
applet zitten. Voor dit voorbeeld gebruik ik de applet HollywoodText.class. Dit
is een applet die een bepaalde text file letter voor letter "uitprint".
Hier is de listing van de applet:

<html>

<head>
<title>Java Applet</title>
</head>

<body>

<p>
<applet code="test/HollywoodText.class" height="200" width="600"> \
<param name="bgimage" value="image.gif"> | - Hier
moet je opgeven welke achtergrond afbeelding je wilt gebruiken
<param name="script" value="text.txt"> | - "
"
" text file moet worden "uitgeprint"
<param name="
cursor" value="0"> | - "
" " cursorsnelheid moet worden gebruikt.
<param name="spause" value="1500"> | - "
"
hoelang de pausse is tussen het herhalen.
<param name="sound" value="typ.au"> | - "
"
welk geluidsfragment moet worden gebruikt.
</applet> /
</p>
</body>
</html>

Het invoegen van een java applet is dus als volgt opgebouwd:
De applet begint met de tag <applet code="HollywoodText.class" height="200"
width="600">. Hierin word opgegeven welke applet moet worden gebruikt
(code="HollywoodText.class") en wat de afetingen van de applet zijn
(height="200" width="600"). Vervolgens kunnen(!) er verschillende parameters
worden opgegeven, maar dit hoeft niet perse (dit hangt namelijk af van de
applet. Parameters moet als volgt worden opgegeven: <param name="bgimage"
value="image.gif">. Hierin is name="bgimage" de naam van de parameter en
value="image.gif" de waarde. De applet word vervolgens dan weer afgesloten met
de </applet> tag. Net als externe javascript bestanden is het belangerijk dat de
bestanden in dezelfde directorie staan als de html pagina. Dit hoeft trouwens
niet perse want je kunt de .class bestanden ook in een aparte directorie zetten.
Maar dan moet je in de tag <applet....> wel codebase="url" (waarin url dan het
adres is van de directorie is) toevoegen. Een voorbeeld staat hieronder.

<applet code="test/HollywoodText.class" height="200" width="600" codebase="url">


--
4.1 CGI/Perl.

CGI/perl script is het meest krachtige script wat je kunt gebruiken op een html
pagina. Er zijn een hele hoop toepassingen te bedenken voor CGI/Perl script. Zo
kun je bevooreeld (heel onschuldig) een gastenboek plaatsen op je pagina. Maar
je kun natuurlijk ook een hostile script plaatsen die een uitdraai van je harde
schijf maakt. Als je daarom opzoek bent naar wat "leuke" scripts met je toch
eens kijken op www.anticode.com.... Maar voordat je aan de slag gaat met
allerlei scripts is het toch wel handig om te weten hoe het werkt. CGI staat
voor Common Gateway Interface. CGI/Perl scripts worden geschreven in Perl. Perl
is een vrij ingewikkelde programeertaal die daarom ook vrij krachtig. Met
CGI/Perl kun je ervoor zorgen dat je pagina "interactief" wordt. Html is
namelijk alleen maar geschikt om iets te laten zien, maar echt iets doen ho
maar. Daarom is het mogelijk om CGI/Perl script te gruiken. Voor dit voorbeeld
gebruik ik een heel simpel cgi-script Hier heb je een listing van het script.

#!/usr/bin/perl
# Een simpel CGI/perl script. #
# auteur: -=:Bill clintoN:=- #

print "Content-type: text/html\n\n";

print "<html><head>\n";
print "<title>CGI/Perl</title></head>\n";
print "<body>\n";
print "<p>Dit is een CGI/Perl Test-pagina!<\p>\n";
print "</body></html>\n";

Dit script laat, waarneer het word uitgevoerd een pagina zien met daarop de zin
"Dit is een CGI/Perl Test-pagina!" zien. Het bestand moet worden opgeslagen
onder de naam "test.pl". Om een CGI/Perl script te draaien moet je pagina aan
een aantal voorwaarden voldoen. Ten eerste moet je beschikken over een CGI-bin.
Dit is een aparte directorie op je pagina waarin je CGI/Perl scripts kan zetten.
(Deze directorie kan je niet zomaar aanmaken, je moet hem echt hebben!!)
Daarnaast moet je server, waar je pagina's gehost zijn, CGI/Perl script
ondersteunen. Dit zijn zowel Unix, Linux als Windows NT servers. Tenslotte moet
je de scripts wel bepaalde rechten hebben gegeven. Dit doe je als volgt:

1. Ga met je FTP programma naar je CGI-bin.
2. Kopieer je script-file naar je CGI-bin (in dit geval is dat test.pl)
3. Selcteer het bestand :-)
4. Wijzig de "permissions" voor het bestand. (onder UNIX/Linux doe je dit met
chmod(change mode))
5. Stel ze als volgt in:

| read | write | execute
-------------------------------------------
owner | x | x | x
-------------------------------------------
group | x | | x
-------------------------------------------
other | x | | x
-------------------------------------------

6. Klaar :-)

Als het allemaal goed gegaan is staat er in de cgi-bin van je site een bestand
genaamd test.pl. Als het bestand nu wordt aangeroepen in een browser word het
ook uitgevoerd. Dus wanneer je het bestand oproept zie je een pagina met de
titel "CGI/Perl" en "Dit is een CGI/perl Test-pagina!".
Dit is natuurlijk wel leuk maar hoe pas je zoiets toe in een html pagina?
Daarvoor gebruiken een knop :-)

<html>

<head>
<title>Test-Pagina.</title>
</head>

<body>

<form method="POST" action="test.pl">
<p><center><input type="submit" value="Test"></p>
</form>
</body>
</html>

Deze pagina laat enkel een knop zien met als opschtift "Test". Als je erop klikt
word het CGI/Perl bestand gedraaid. Niet echt woest, maar je toch ergens
beginnen. Om een script op te nemen in een pagina moet je de tag <form>
gebruiken. In de tag word method="POST" gebruikt om duidelijk te maken dat het
form word uitgevoerd. Daarnaast word door de tag action="test.pl" duidelijk
gemaakt welk script er moet worden uitgevoerd. Omdat CGI/Perl script ook instaat
kan worden gesteld om data weg te schrijven in een pagina kan je daarmee een
server flink jammen. Daarom is het belangerijk om bij bijvoorbeeld gastenboeken
limieten in te stellen voor de hoeveelheid in voeren data.

Als een perl script iets nodig heeft uit een html bestand wat door de bezoeker
is ingevuld (bv. een zoekcriterium) dan haalt het script die op bij het form-
object met de overeenkomtige naam. Dus als er bijvoorbeeld een input-veld ergens
in de pagina staat, moet die een naam hebben met die overeen komt met de naam
die in het script voorkomt.


--
5 Disclaimer.

Uiteraard ben ik ook niet perfect dus kom me alsjeblieft niet opzoeken om me in
elkaar te rammen als je eventueel een een foutje hebt gevonden :-)
Alle voorbeelden en bestanden die ik hier heb gebruikt kun je vinden op
http://home.cyberarmy.com/billclinton/dhtml.zip, en voor linux gebruikers
http://home.cyberarmy.com/billclinton/dhtml.tar.gz

-------------------------------------------------------
08. Evenementen
-------------------------------------------------------
Hier een overzicht van de aanstaande evenementen.
Hoewel de meeste natuurlijk nog wachten op Hit2000.

IrcNet Meeting

URL: http://www.skylimit.nu/party.html
Datum: 26/05/2000 tm 28/05/2000
Locatie: Leeuwarden


H4H@Pinkpop Meeting

URL: http://www.hackers4hackers.org/h4h-meeting
Datum: 10/06/2000 tm 12/06/2000
Locatie: Pinkpop


Klaphek Meeting

URL: http://www.klaphek.nl/meetings.html
Datum: Zondag 11 Juni 2000
Locatie: Utrecht


HOPE 2000

URL: http://www.h2k.net
Datum: 14/07/2000 tm 16/07/2000
Locatie: New York, New York Hotel Pennsylvania


Defcon 2000

URL: http://www.defcon.org
Datum: 28-07-2000 tm 30-07-2000
Locatie: Las Vegas, Nevada USA


Bizarre

URL: http://www.bizarre.nl/index_menu.htm
Datum: 29/9/2000 tm 1/10/ 2000.
Locatie: congress-center "De Nobelaer" in Etten-Leur


Hit2000

Url: http://www.hit2000.org/
Datum: November 2000
Locatie: Waarschijnlijk Haarlem

Weet jij nog IT / Security evenmenten op te noemen mail het dan door
naar h4h-redactie@hackers4hackers.org

-------------------------------------------------------
09. Extension
-------------------------------------------------------
Ten eerste ignore my spelling errors and lack of punctuation en my really bad
zinconstruction...
Vanzelfsprekend zal de code zonder typos zijn ...
Deze tutorial is gemaakt door middel van samenvoegen en vertalen van
verschillende andere tutorials.

*-* First some little history voor degene die in background geintresseerd zijn :

PHP werd geboren in de herfst van 1994 door Rasmus Lerdorf.
De eerste versie gebruikte hij op zijn eigen pagina om te kijken wie zijn online
manual raadpleegde.
Pas in 1995 kwam de eerste publieke versie uit.
Het bestond uit een simpele verwerker die enkele speciale macros en enkele
utilities die werden gebruikt op sites begrijpte.
Het kindje werd Personal Home Page Tools genoemd.
Het werd vooral gebruikt voor counters en guestbooks enzo ...
In het midden van 95 kwam er een andere versie uit PHP/FI Version 2 genaamd.
De FI kwam van iets wat Ramsus had geschreven om html form data te
interpreteren.
Hij combineerde de Personal Home Page tool scripts met de Form interpreter en
voegde er mSQL support bij.
PHP/FI groeide ontzettend snel en vele mensen gingen code bijdragen.

In het midden van 1997 kreeg Ramsus hulp van een aantal mensen om zo een
georganiseerd team te worden.
De verwerker werd herschreven van nul door Zeev Suraski en Andi Gutmans. Deze
verwerker vormde de basis voor PHP3.
Veel code van PHP/FI werd geport maar er werd ook veel herschreven.

*-* In plaats van de installatie procedure gewoon over te schrijven geef ik
gewoon een paar nuttige links.
Als je na het volgen van de links en het uitgeprobeert te hebben het nog steeds
niet weet kun je me altijd maile op frazzle_freckle@hehe.com
Bij de mailing lists kun je ook nog nuttige dingen vinden ...

PHP installatie voor windows en *nix :
http://www.php.net/manual/installation.php3
http://www.php.net/manual/install-
windows95-nt.php3 for win 9 x / NT
http://www.php.net/manual/install-
unix.php3 for *nix

Mailinglists : http://www.php.net/support.php3 hier kun je subscribe ...


*-* Mammie mammie kijk me eerste scriptje :

In deze tutorial veronderstel ik dat je webserver PHP support heeft en dat alle
files die eindigen met .php3 behandeld worden door PHP.
Vergelijk de .php3 files gewoon met html je hebt dus geen extra proggies nodig
om het te kunne gebruiken.

Ons eerste scriptje:
Maak een h4h.php3 file aan en typ dit erin:

<html><head><title>PHP Test</title></head>
<body>
<?php echo "Hello H4H lezerrinnetjes en lezers<P>"; ?>
</body></html>

Deze code is erg simpel en het geeft gewoon als uitvoer: Hello H4H
lezerrinnetjes en lezers
Je hoefde zelfs geen php code te gebruiken om dit te bereiken. (Ik ben het moe
om steeds hello world te zien :))

<?php geeft het begin aan van een PHP tag. Dan komt de PHP statement en
gebruiken we ?> om de tag af te sluiten.

Je kon dit ook bereiken door dit te doen:
<html>
<body>
<?php $myvar = "Hello H4H lezerinnetjes en lezers"; echo $myvar;?>
</body>
</html>

Nu wordt een variabele gecreeërd myvar genaamd de echo roept de variabele op.
De zin "Hello H4H lezerinnetjes en lezers" wordt aan de variabele toegewezen.
Een variabele begint steeds met een "$" sign.
Er zijn nog andere manieren om Helo H4H lezerinnetjes en lezers te doen
afbeelden maar het komt steeds op hetzelfde neer...

PHP3 kan natuurlijk veel meer dan dit. Een nuttig ding aan PHP3 zijn de
ingestelde variabelen bij de webserver.
Om een hele lijst van de automatisch door de server gezete variabelen te krijgen
maak dan een *.php3 file en zet er
deze code in : <?php phpinfo();?>

Vergeet wel niet de <html><head> enzo ...
Bekijk deze file dan met je browser dan zul je info over php zien + vele tags
...


Een voorbeeldje van een variabele: <?php echo $HTTP_USER_AGENT; ?>
Zet dit in een *.php3 file en bekijk et het zal je browser versie + operating
system afbeelden.


Je kunt natuurlijk ook statements "nesten" enzo een stukje code verkrijgen. vb.:
Als we willen checken of ze IE eplorer gebruiken :
<?php
if(strstr($HTTP_USER_AGENT, "MSIE")) {
echo "You are using Internet Explorer<br>";
}
?>

Hier krijgen we enkele nieuwe dingen. Er is een "if" statement en de strstr()
function call. Als je een beetje c kent dan zul je het scriptje zeker begrijpen.
Voor de mensen die niet weten wat een if statement is raad ik hun best een c
tutorial aan die wat basics geeft.
Op altavista staan er genoeg en in deze h4h staat ook een c tutorial.
PHP gebruikt alleen de basis van c niet de uitgebreide versie...

strstr() is een functie die in PHP is gebracht om strings te zoeken in strings.
In ons voorbeeld wordt "MSIE" gezocht in $HTTP_USER_AGENT.
Als de string gevonden is zegt de functie true als ze niet wordt gevonden false.
Als het true zegt wordt het volgende statement uitgevoerd wat in ons geval: echo
"You are using Internet Explorer<br>";
is. Als je alle plugins installed dan heb je zo een 700 functies daarmee kun je
wel wat gaan doen :)

We kunnen dit nog een stap verder nemen en laten zien hoe PHP makelijk kan
springen tussen php mode en gewone html ...
<?php
if(strstr($HTTP_USER_AGENT, "MSIE")) {
?>
<center><b>You are using Internet Explorer</b></center>
<?
} else {
?>
<center><b>You are not using Internet Explorer</b></center>
<?
}
?>
Inplaats van echo te gebruiken keren we nu gewoon terug naar html.
Het mooie hiervan is dat wanneer je dit script runned er maar een zal worden
getoond. (why internet explorer? to lame to find soemthing else)

Iets waar PHP gekend voor is zijn forms en forums:
Het belangrijkste ding dat PHP doet is automatisch een variabele creeëren van de
naam van een onderdeel van de form.
Het wordt duidelijk in een voorbeeld:

Neem een gewoon site met een form als dit:
<form action="action.php3" method="POST">
Your name: <input type=text name=name>
Your age: <input type=text name=age>
<input type=submit>
</form>

Wanneer de lezer het invult gaat de form naar de file action.php3
In die file kan je iets zoals dit hebben:
Hi <?php echo $name?>. You are <?php echo $age?> years old.
Als je bij naam jesus ingeeft en age= 2000 dan zal er "Hi jesus. You are 2000
years old."
worden afgebeeld.

De twee variabelen $name en $age zijn automatisch aangemaakt door PHP.

Deze tut ging alleen over de echte basics van PHP
Als er genoeg vraag naar is zal ik een 2de gedeelte dat databases en php3
introduceerd of authentication maar dat hangt van de reacties en de vraag af ...

Frazzle_Freckle

greetz to r00t-dude HTWX securax #h4h asby for support :)
and Biotic for the account for testing ...

-------------------------------------------------------
10. Eindwoord
-------------------------------------------------------
En zie hier het 8e nummer is er. Wegens vakanties en dergelijke
iets later dan verwacht maar toch nog binnen de maand.

Helaas zijn we de auteur van het artikel over Dynamic HTML kwijt,
Als deze zich zou willen melden bij de redactie dan krijgt hij zijn
eer alsnog in de volgende h4h en zal het op de webpage aangepast worden.
Vanaf heden zullen de artikelen die binnen komen beter gearchiveerd gaan
worden is mij beloofd ;)

Zoals gemerkt is het archief opgeknapt. Als er ideeën zijn om ook
van dit soort kleine verbeteringen de site mooier te krijgen horen
we dat graag.

Sommige mensen denken dat we www.hackers4hackers.org op één van onze
eigen computers hosten. Dit is niet zo. De site wordt gehost door
Demon Internet LTD. In onze log staan regelmatig portscans en cgi scans.
We vragen iedereen vriendelijk dit niet te doen. Omdat dit dus geen zin heeft.
En je gegarandeerd een klacht van DEMON kan verwachten naar je provider.
Dit is dus anders dan dat er een gebruiker van demon klaagt en zodoende
wordt er alerter op gereageerd!
Pas dus op!

Ook zijn er personen die het leuk vinden om scrips of andere zaken te
schrijven om de CGI op de site constant aan te gaan roepen. Hiermee
creëren deze personen een behoorlijke LOG en hebben ze het vaak ook snel
verleerd.

We wouden H4H nog gaan ondertekenen met een PGP sign maar na het artikel
over encryptie laten we dit maar achterwegen. Opdat het toch wel gehackt
zou worden ;P

Frazzle Freckle wil eventueel nog een vervolg schrijven op zijn artikel.
Maar alleen als er genoeg interesse is, Dus ga even naar onze site en maak
dat middels de poll kenbaar aan Frazzle dat hij moet gaan schrijven...

Van de meeting op pinkpop verwachten we ook het één en ander. Zie de web
pagina op http://www.hackers4hackers.org/h4h-meeting We hopen je daar te
zien!

Er worden sinds kort ook statistieken van het IRC kanaal #h4h gepubliceerd
op onze site, Hier kun je leuke quotes en andere wetenswaardigheden terug
vinden (wanneer een bepaald persoon / redactie lid veel online is en dat
je dus een grote trefkans hebt)

Ook deze keer konden we het weer niet laten om de lezerspost belachelijk
te maken. Tja als er niets zinnigs binnenkomt dan moeten we wel ;P
Maar we doen het met plezier.

In ieder geval veel lees plezier en tot de volgende H4H

(De redactie)

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT