VirginMary Posted January 31, 2008 Report Posted January 31, 2008 Am vazut ca a aparut un topic legat de "cum sa devii un informatician de renume". Vreau sa-mi exprim si eu punctul de vedere legat de acest subiect.M-a inspirat un articol al lui Gerard't Hooft "How to become a good theoretical physicist" care se gaseste la adresa http://www.phys.uu.nl/~thooft/theorist.html. El porneste de la constatarea ca primeste frecvent mailuri de la diletanti care cred ca "au rezolvat lumea". Apoi, continua prin a insira o lista foarte lunga de subiecte pe care cineva trebuie sa le studieze ca aiba sansa lui la un Premiu Nobel in Fizica. Cine nu este expert in toate acele domenii NU ARE CUM sa faca performanta. Voi incerca sa compilez si eu o lista de lucruri pe care un bun hacker TREBUIE sa le stie. Va rog sa veniti si voi cu propriile sugestii .Cineva care incepe programarea de la zero ar trebui sa se familiarizeze cu notiuni de baza OOP si un limbaj bine documentat in care nu trebuie sa-ti gestionezi singur memoria: Java, C# etc. Urmatorul pas este sa treaca la C si sa inteleaga ce sunt pointerii, stack-ul, heap-ul. Urmeaza C++, un limbaj care combina conceptele OOP cu avantajele C-ului. Un programator bun in C++ ar trebui sa inteleaga lucruri mai avansate, legate de design-ul unui limbaj de programare: programare generica (template-uri), eficienta versus lizibilitate (C++ este orientat spre eficienta, deci metodele nu sunt implicit virtuale chiar daca asta complica putin codul), cum se face apelul unei rutine (de ce get-erele si set-erele sunt de obicei metode inline) etc etc. Cand stapaniti bine C++ si STL-ul familiarizati-va cu asamblarea si incercati sa intelegeti lucruri precum calling conventions, moduri de adresare ale memoriei, seturi de instructiuni ale procesorului... Ar fi indicat sa mergeti mai departe si sa studiati notiuni de hardware si arhitectura calculatoarelor ca sa puteti sa apreciati importanta cache-ului, ce ofera diverse seturi de instructiuni (CISC vs RISC, SSE, ...), ce este endianitatea, cum functioneaza pipeline-ul procesorului, ce este clockul si cum afecteaza frecventa lui viteza si consumul de putere etc etc etc. Numai daca aveti cunostinte solide de hard veti fi in stare sa optimizati "la sange" un program.Ar fi bine sa va bagati putin in teoria compliatoarelor sa stiti ce este un back end si un front end, un limbaj compilat vs unul interpretat, codul intermediar (bytecode), optimizarea, alocarea registrilor de catre compilator, cum functioneaza un tokenizer si parser (cu YACC-ul se poate genera un parser de la zero destul de usor). Apoi, studiati in profunzime conceptele cu care vin sistemele de operare: multithreading, proces, socket, sistem de fisiere, driver. Atacati probleme mai dificile, dar foarte utile: scrieti-va propriile drivere pentru Linux, intrati usor-usor in sursele kernelului de Linux, incercati sa va faceti o distributie proprie (cautati dupa proiectul Linux From Scratch). Un Linux guru este un guru al programarii. Nu neglijati nici API-urile Win32.Experimentati cu diverse limbaje de programare/scripting: bash scripting, perl, python, lisp, haskell. O sa va convingeti ca limbajele functionale sunt bazate pe cu totul alte principii decat cele procedurale. Poate ca viitorul este al lor.Incercati cat mai multe in domeniul retelisticii: scrieti programe client/server, trimiteti pachete UDP, generati pachete ICMP si frame-uri ethernet cu raw sockets in Linux, studiati protocoalele TCP/IP, HTTP, FTP, DHCP, protocoale de rutare (RIP, OSPF, IGRP). Capturati pachete cu un sniffer si decodati-le. Challenge: scrieti un program care sa inregistreze convesatii Yahoo Mesenger.De-abia dupa ce ati parcurs toate etapele de mai sus are sens sa va apucati de "hacking". Din punctul meu de vedere, cea mai buna introducere pentru un incepator in domeniul securitatii care are insa cunostinte solide de programare sunt buffer overflow-urile. Cititi tutorial lui aleph0, scrieti un exploit pentru un program de test si scrieti un payload in asm care sa permita remote control (inainte de asta trebuie sa va jucati putin cu Win32 function calls din asm). Metoda descrisa de aleph0 este foarte generala, asa ca nu este de mirare ca au aparut tool-uri precum Metasploit care automatizeaza procesul dezvoltarii unui exploit pentru o vulnerabilitate. Quote
moubik Posted January 31, 2008 Report Posted January 31, 2008 i-ai asigurat pentru urmatorii 10 ani da, sunt de acord cu multe din chestiile pe care le-ai zis. Quote
escalation666 Posted January 31, 2008 Report Posted January 31, 2008 Sau ai putea scurta mult drumul procedand ca moubik.Furand. Quote
moubik Posted February 1, 2008 Report Posted February 1, 2008 Sau ai putea scurta mult drumul procedand ca moubik.Furand.deci data viitoare cand mai faci afirmatii vino cu dovezi.si stiu ca memoria ta este foarte buna.daca iti aduci aminte inca astept program de bruteforce pentru arhive rar care face sute de mii de incercari pe secunda, spre deosebire de programul pe care il recomandasem eu care facea pana in 30 de incercari pe secunda. Quote