___ ___ _____ ___ ___ / | \ / | | / | \ / ~ \/ | |_/ ~ \ \ 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 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 >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 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 " > " 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. \ | Titel van de pagina |- de Head, het niet zichtbare gedeelte waarin | info staat zoals de titel en inhoud. | Deze info wordt gebruikt door de browser. (1.2) | / \ | |- De Body, in dit gedeelte staat de code voor | zichtbare pagina. alles tussen de | body tags laat de browser zien. (1.3) / 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* Ilse.nl

*eind van listing* de stylesheet is opgebouwd uit: A:hover - De hoofdletter A staat voor de tag oftewel een hyperlink. Hover is de extensie die hoort bij de tag . { 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 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:

Deze tekst is vet.

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: test 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
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:
(x = styletag)

test

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: of: 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 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. Javascript

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. Javascript

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.
"); document.write("De hoogte van het scherm is " + screen.height + " pixels.
"); } 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: Java Applet

\ | - Hier moet je opgeven welke achtergrond afbeelding je wilt gebruiken | - " " " text file moet worden "uitgeprint" | - " " " cursorsnelheid moet worden gebruikt. | - " " hoelang de pausse is tussen het herhalen. | - " " welk geluidsfragment moet worden gebruikt. /

Het invoegen van een java applet is dus als volgt opgebouwd: De applet begint met de tag . 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: . Hierin is name="bgimage" de naam van de parameter en value="image.gif" de waarde. De applet word vervolgens dan weer afgesloten met de 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 wel codebase="url" (waarin url dan het adres is van de directorie is) toevoegen. Een voorbeeld staat hieronder. -- 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 "\n"; print "CGI/Perl\n"; print "\n"; print "

Dit is een CGI/Perl Test-pagina!<\p>\n"; print "\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 :-) Test-Pagina.

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
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: PHP Test "; ?> 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 :)) om de tag af te sluiten. Je kon dit ook bereiken door dit te doen: 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 : Vergeet wel niet de enzo ... Bekijk deze file dan met je browser dan zul je info over php zien + vele tags ... Een voorbeeldje van een variabele: 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 : "; } ?> 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
"; 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 ...
You are using Internet Explorer
You are not using Internet Explorer
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: Your name: Your age:
Wanneer de lezer het invult gaat de form naar de file action.php3 In die file kan je iets zoals dit hebben: Hi . You are 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)