Jump to content

Dr4k3

Active Members
  • Posts

    427
  • Joined

  • Last visited

Everything posted by Dr4k3

  1. Some of the new Linux users are running their machines as dual boot with Windows. Mounting NTFS partitions in Linux as read-only has always been a rather challenging task. Mounting them as with read-write permissions is even harder, not to mention that this feature has been made available since a little while ago. Keep in mind that the support for mounting NTFS partitions with write permissions is still in the early stages and therefore, not perfectly secure. If you decide to give it a try, don't hold me responsible for any damage occurred to your hard-drive and/or to the files on it. You have been warned. For mounting NTFS partitions we're going to use a small tool called NTFS-3G, which is very powerful but yet, so simple. Install NTFS write support for Fedora Core 6 - You'll need to be root for this guide. If you're already logged-in as root, skip typing su - - First, install ntfs-3g: CODE # su - # yum -y install ntfs-3g This will install ntfs-3g, fuse and fuse-libs - Create a folder to be used as mounting point for NTFS partition: CODE # mkdir /mnt/ntfs - Find out what's the NTFS partition. Type this command (the fdisk option is a small L): CODE # fdisk -l - Look for a line like this CODE /dev/hda3 * 14925 17218 18426555 c HTFS/NTFS /dev/hda3 is your NTFS partition. It could be /dev/sdaX if you have a S-ATA drive. - Edit /etc/fstab and add this line at the end so that the partition will be mounted at startup: - Remember to use your /device, /dev/hda3 is just an example. CODE /dev/hda3 /mnt/ntfs_p ntfs-3g defaults,umask=0 0 0 - Disable SELinux. Edit /etc/selinux/config and change the line: CODE SELINUX=restrictive to CODE SELINUX=disabled or if you're a security paranoid and don't want to fully disable SELinux, change the line to: CODE SELINUX=permissive otherwise, mounting the partitions will fail. - Reboot and enjoy your NTFS partition in /mnt/ntfs_p Install NTFS write support for Ubuntu - Edit /etc/apt/sources.list and add the following repositories, which are suitable for you: If you're running Dapper, add: CODE deb http://givre.cabspace.com/ubuntu/ dapper main main-all deb http://ntfs-3g.sitesweetsite.info/ubuntu/ dapper main main-all deb http://flomertens.keo.in/ubuntu/ dapper main main-all If you're running Edgy, add: CODE deb http://givre.cabspace.com/ubuntu/ edgy main deb http://ntfs-3g.sitesweetsite.info/ubuntu/ edgy main deb http://flomertens.keo.in/ubuntu/ edgy main - Import the GPG key for these repositories: CODE # wget http://flomertens.keo.in/ubuntu/givre_key.asc -O- | sudo apt-key add - # wget http://givre.cabspace.com/ubuntu/givre_key.asc -O- | sudo apt-key add - - Update the source list: CODE # sudo apt-get update - Install ntfs-3g: CODE # sudo apt-get install ntfs-3g - Determine which is the NTFS partition. Type this command and look for the line ending with HTFS/NTFS. The fdisk option is a small L. CODE # fdisk -l - Create a directory where the NTFS partition will be mounted on: CODE # mkdir /media/ntfs_p - Add the following line to /etc/fstab file: CODE /dev/hda3 /media/ntfs_p ntfs-3g defaults,locale=en_US.utf8 0 0 - If you want to change the locale option, type this command to find out which are supported by your system and pick the appropriate one: CODE # locale -a - Save the file and reboot.
  2. eu nu inteleg o chestie:cum loghez botii??? am facut 3 boti...am dat load...si am pus txt ala...da cum dau login???
  3. super bun da daca ai un firewall si esti destul de destept incat sa nu dai acces la I/O esti destul de securizat in privinta keyloggerelor
  4. da totusi...sa-l ajutam cum faci un bot???poi un bot e pur si simplu un id de messenger si atat...adik c asa il faci creezi un cont pe yahoo sau ce iti trebuie pt b00teru ala pe care il ai si gata la loading depinde de ce b00ter ai
  5. Dr4k3

    hy

    :D:D acu sa o luam serios...am gasit un program de dc care parca merge mai repede...da sincer tot odc recomand
  6. oameni buni: 1.a mai fost postat de mine nu de zbeng 2. daca puneti la network.http.pipelining.maxrequest valoare mai mare de 8 este ignoarata deci 8 e maxim
  7. ms de tut mult de tot...eu l-am cerut ;)
  8. [offtopic]nene addicted ce avatar ai :D:D [ontopic]ba eu cred ca si tie iti trebuie
  9. balcau.iad.ro/defacetut tutorial despre deface in engleza logic... nu e facut de mine...da nu mai sitiu cine l-a facut... anyway: credits to somebody...poate se simte careva
  10. multumesc foarte mult escalations666...eu am facut cererea respectiva...thnq very much...am gasit si eu unul si o sa il pun o sa il pun pe lx...nu cred ca o sa il stearga ca am mai pus si altele de genu...
  11. Dr4k3

    Puya

    welcome to our peacefull comunity...intei invata tut si programare...parerea mea...
  12. Dr4k3

    sal

    bun venit...recomandarile mele invata intai tutoriale si programare da se vedem ce zic si altii
  13. srry n-am fost atent...mnah da ce membri generosi avem...au sarit toti cu linkuri...
  14. lasa...lasa...si tactu e prof la facultate...zi si tu sa-ti aduca...
  15. [offtopic] nene trebuie sa scrie romanian security team
  16. bhey nene da chiar nu poate nimeni sa faca un act de caritate?comon...cat de mare poate sa fie?
  17. Dr4k3

    remote

    1.Daca imi mai zici flipisor nu mai primesti nimic de la mine!!!numai prietenii imi zic asa tu n-ai ce face? 2.O sa-l pun cand o sa fac rost de el din nou...ma rog...esti la inceput asa ca lasa ddos tool si invata sa faci tu unu singur:D
  18. nu stiu...eu l-am gasit pe net...de mine nu e facut...sorry daca a mai fost postat... Kw3[R]ln ai dreptate da totusi inveti cum sa decodezi un telefon...ma rog e mai bine la mobile phones...
  19. nu stiu...zice ca nu vrea sa mi-l dea...da daca fac rost il postez...s-ar putea sa ajute pe cineva...
  20. Probabil ca nu este om in ziua de azi care n-a auzit de virusi. Contrar însa tuturor legendelor, virusii nu sunt niste fenomene supranaturale. Îmi amintesc cum cineva m-a îtrebat o datã dacã e drept ce a auzit ea - cã virusii de calulator pot fi contactati dacã se fumeazã în birou... Imaginati-vã cum m-am simtit atunci. Nu-mi venea sã cred ce auzeau urechile - ori persoana îsi bateea joc de mine, ori era adînc în bezna necunostintii... Pînã la urmã ultima s-a dovedit a fi valabilã. Dar chiar si un cunoscãtor în ale calculatoarelor s-ar putea întreba într-o zi: cît de greu e sã scrii un virus ? Rãspunsul e simplu: este usor sã creezi un virus, alta e problema sã creezi un virus puternic. Sper cã intelegeti cã prin puternic, am invedere urmãtoarele lucruri: -virusul sa fie greu de detectat de programe antivirus -virusul sa fie fecund - adica sa se reproduca rapid, prin cãi diverse si inobservabil (asta apropo de unitatile de flopy-disk, care încep din senin sã lucreze ). Dar, cum eu sunt un om pasnic, si nu ma intereseaza sa fac altora rau, tema acestui tutorial va fi cu totul si cu totul neasteptata... Cum sa utilizam virusii in alte scopuri. De exemplu crackuirea programelor. Sau inversul- protejarea programelor. Desi acesti ultimi virusi, nu sunt virusi in adevaratul sens al cuvintului- adica le lipseste functia de reproducere. In crearea unui virus in fata noastra apare urmatoarea problema: -cum sa facem ca virusul sa coexiste cu programul infectat, sa-si indeplineasca sarcinile sale, dar sa lase si programul sa lucreze. Eu consider ca aceasta este principala caracteristica a unui virus, care odata implementata ofera posibilitatea ca virusul sa-si indeplineasca toate sarcinile sale, iar sarcinele pot fi: -autoreproducere -automodificrea -spionarea calculatorului gazdei -sarcini distructive, de santajare, etc (virusul poate sa va incripterze tot hardul si pina nu veti trimite 1000$ pe contul xxxxxx, nu veti primi cheia de decriptare- sa nu ziceti ca eu v-am dat aceasta idee ). Acestea sunt sarcini pentru care sunt utilizati in mod obisnuit virusii. Dar de ce sa nu-i utilizam si in alte scopuri? Cuma ar fi de exemplu: -crackuirea unor programe -protejarea unor programe -adaugarea de functii noi programelor lista nu se incheie aici si sper ca voi o veti continua la nesfirsit. Sa vedem totusi cum poate fi infectat un program. Desigur ca tehnici exista multe, si sper ca pe viitor vor aparea pe pagina noatra noi eseuri pe aceasta tema. Pentru inceput sa ne punem insa o sarcina simpla- infectarea unui fisier executabil de tip COM. La aceasta faza, sa zicem, ca nu conteaza sarcina pe care acesta o va indeplini. Pentru inceput ajunge ca el sa ne ceara o parola pentru a executa acel program. Autoreproducerea, distrugerea, si santajul il las pe seama celor mai violenti. Din aceste functii ale virusului as spune ca doar autoreproducerea e un subiect demn de discutat, in rest orice prost poate sa-ti stearga hardul sau sa-ti violeze sectorul BOOT. Urasc pe cei violenti, deci nu vom discuta aceasta aici. Înca un lucru pe care îl urasc- sunt caii troian. Pentru a continua aveti nevoie de cunostinte minime de asembler, daca nu le aveti puteti doar sa va faceti o inchipuire vaga asupra ce vom discuta in continuare. Dupa cum sper ca stiti, fisierile COM sunt cele mai simple programe executabile sub DOS. Nu exista nimic complicat in faptul cum se incarca aceste programe in memorie. Principiul e simplu: ce vedeti ca se patreaza in fisierul COM acelasi lucru va fi incarcat in memorie, dupa care sistemul de operare va da control acelui program printr-un salt la adresa unde a fost incarcat programul. Repet- ceea ce se incarca in memorie este o replica exacta a ceea ce se pastreaza in fisier. Veti intreaba- oare nu e evident, oare nu e logic sa fie asa? Bine daca va ajuta cu ceva... la fisierele EXE lucrurile nu sunt chiar asa simple si daca schema de infectare pe care v-o propun se poate lauda cu faptul ca ocupa doar vreo 10-15 bytes (atentie, schema de infectare doar, fara sarcinele pe care le are virusul), atunci infectarea unui fisier EXE este cu mult mai anevoiasa. Fisierele COM nu pot depasi ca lungime 65536 bytes, adica exact portiunea de memorie ce poate fi adresata de un WORD(2 bytes). Toate jump-urile si call-urile intr-un fiser COM sunt de tip near, adica nu depasesc limita de memorie adresabila printr-un WORD. Iata ce face posibil ca programului sa-i fie indiferent in ce segment ruleaza el- atita timp cit adresele sunt codate ca adrese relative. Adica presupunem ca la adresa CS:200h aveti urmatoarea instructiune: CS:00000100 JMP 000060D7h ; code: E9 D4 5F CS:00000103 ... ... ... ... ... CS:000060D7 PUSH EAX ... Codul de la CS:00000200 si anume instructiunea JMP 300h va fi codata pe 3 bytes: E9 D4 5F E9 este codul instructiunii JMP care are ca argument un word, nu toate JMP-urile sunt codate cu E9, aceasta depinde de tipul argumentului- (constanta, registru, variabila) si de marimea lui (BYTE, WORD, DWORD). Dar ce naiba inseamna D4 5F? Ei bine, dupa cum stiti sau acus veti afla valorile WORD se pastreaza in memorie cu fundul in sus: D4 5F nu inseamna altceva decit 5FD4. Daca nu stiati acest lucru atuci acesta e un motiv in plus sa gasiti o carte buna de asembler . Dar ce inseamna 5FD4? Ei bine, ajunge atita suspans- in contextul dat 5FD4 nu inseamna altceva decit 'sari la instructuiunea ce se afla cu 5FD4 bytes in jos dupa mine'. Observati formularea: cu 'cu 5FD4 bytes' si nu 'sari la...'. Cu alte cuvinte, daca inca n-ati priceput: 5DFD4 = 60D7 - 0103 . 0103 este adrsa instructiunii ce urmeaza imediat dupa JMP-ul nostru, este logic - atita timp cit instructiunea noastra ocupa 3 bytes. Ca sa mai exersam un pic: CS:00000100 JMP 103h ; este codat ca E90000, dar va asigur ca compilatorul va optimiza acest cod prin: CS:00000100 JMPS 103h ; code: EB 01 CS:00000102 NOP ; code: 90 JMPS - este un JMP SHORT. Puteti sa va mai jucati cu aceste lucruri, si veti vedea ca nimic nu e intamplator in faptul cum codeaza asemblerul instructiunile voastre. Puteti sa scrieti aceste instructuiuni la adrese diferite direct din debuger si sa vedeti cum acesta le codeaza. Sa revenim insa la virusi si sa vedem in sfirsit banala schema de infectare a unui fisier COM. Va prezint probabil cea mai simpla schema existenta pina acum, pe care eu am elaborat-o si am folosit-o inca pe cind aveam vreo 15 ani . Dar ca la majoritatea lucrurilor pe care le descoperi la aceasta virsta - iti dai seama ca ele deja de mult au fost inventate de altii, ba chiar se folosesc pe larg. Înainte de a infecta programul sa ne intrebam cind dorim sa intre in actiune codul virusului? Posibil ca doriti ca acest lucru sa se intimple inainte ca progrmul sa intre in actiune, dupa care sa dati controlul programului. Dar s-ar putea ca virusul sa intre in actiune la un moment dat in executia programului - de exemplu un virus care la un moment dat apas un buton pentru voi. Schema pe care v-o prezint este valabila pentru ambele cazuri. Noi insa il vom studia pentru simplitate pe primul. Cum se realizeaza implantarea virusului intr-un fisier COM? Veti fi tentati sa credeti ca acest lucru se poate realiza prin simpla inserare a codului virusului la locul dorit. De exemplu daca doriti ca virusul se execute la începutul programului- veþi insera codul virusului la începutul fisierului COM. Gresit. Încercati. Veti deplasa astfel tot codul programului cu un numar de bytes egal cu lungimea virusului. JUMP-urile relative vor ramîne valabile -este corect, dar nu si referintele la date. De exemplu daca ne referim la o adresa absoluta 500h unde se pastreaza o variabila, dupa inserarea codului viruslui care are de exemplu lungimea de 300h bytes, variabila noastra se va afla deja la adresa 800h. Nu uitati ca un fisier COM nu are un segment de date aparte. Datele si codul sunt pastrate la gramada, în acelasi segment. Este sarcina programatorului sa faca ca firul de executie al programului sa nu intre peste date. În acest scop majoritatea programatorilor plaseaza datele la începutul programului, iar inaintea lor, un JMP care sare peste ele. Priviti: CS:00000100h JMP 0000700h ;Aici incepe programul, si imediat ... ... ;urmeaza datele ... DB 3,4,5,0 ;Aici se stocheaza datele ... ... CS:00000700H PUSH EAX ;Aici începe codul programului ... ... ... ... Deci, inserarea codului virusului la inceputul sau în interiorului programului nu este o solutie vitala. Pentru ca astfel corupem referintele la adrese absolute. Sa ne gîndim la altceva. V-ati gindit oare de ce v-am povestit atit de mult cum se codeaza instructiunea JMP ? În curind veti afla. Ideea mea este de a scrie codul virusului la sfirsitul programului, si ca sa-l facem sa se execute inainte de a intra in actiune programul sa plasam la inceputul programului un JMP, care ne arunca exact la locul unde incepe codul viruslui (adica la sfirsitul programului). Cind am spus 'plasam un JMP la inceputul programului' am avut in vedere faptul ca instructiunea noastra (care ocupa 3 bytes) se suparascrie peste primii 3 bytes a porgramului astfel evitam deplasarea codului. Deaceea cind realizam infectarea acesti trei bytes trebuie memorati undeva printre datele virusului. Dupa ce virusul se executa, acesti bytes se restabilesc (adica se sterge JMP-ul nostru) si sarim din nou la inceputul programului. Programul va rula in pace. Doar daca virusul nostru n-a schimbat registri sau flag-uri de care programul nostru facea uz. Desi, la inceputul programului acest lucru e mai putin grav, fiti prudenti totusi si folositi instructiunile PUSHA, PUSHF la începutul codului virusullui si POPF, POPA la sfirsitul lui, pentru a salva/restabili registrii si flag-urile. Sa exemplificam. Avem urmatoarea tinta - programul TEST.COM. Dorim sa-l infectam. Fie: lungimea programului Lp= 1000h (4096 în zecimal) bytes lungimea virusului Lv= 0200h Prin urmare programul infectat va avea 1200h bytes. Am uitat sa va spun ca înainte de a fi rulat, unui program COM i se atribuie un segment de cod unde acesta va rula. Acesta se pastreaza în registrul CS. Numai ca, codul programului nu va fi încarcat în cadrul acestui segment de la adresa CS:00000000 cum s-ar putea sa credeti, ci de la adresa. CS:00000100, astfel se rezerva loc pentru asa numita zona PSP, unde printre alte lucruri interesante veti gasi si linia de comanda cu care ati rulat acest program. Mergem mai departe. Sa presupunem ca programul care trebuie infectat arata cam asa: Adresa: Codul: Instructiunea: ______________________________________________ CS:00000100 50 PUSH EAX CS:00000101 B4 09 MOV AH,09h CS:00000103 BA 3B 01 MOV DX,013Bh ... ... ... ... ... ... ... ... ... ... ... ... CS:00001FFF 90 NOP ;Ultima instructiune ----------------------------------------------- CS:00001100 ??? ??? ;Aici vom baga virusul Observam ca primii 3 bytes din acest program sunt: 50 B4 09. Atentie! Ei trebuie salvati cind realizam infectrea pentru ca peste ei vom scrie instructiunea JMP 01000h (care ocupa 3 bytes). Iata cum va arata programul infectat: Adresa: Codul: Instructiunea: ______________________________________________ CS:00000100 E9 FD 0F JMP 1100h ;sarim la virus CS:00000103 BA 3B 01 MOV DX,013Bh ;restul programului ... ... ... ;ramîne nemodificat ... ... ... ... ... ... ... ... ... CS:00001FFF 90 NOP ;Ultima instructiune ______________________________________________ ;din program CS:00001100 60 PUSHA ;Aici icepe virusul CS:00001101 9C PUSHF ;salvam registrii ... ... ... ;si flagurile. ... ... ... ; Aici actioneaza virusul ;Dupa ce virusul si-a facut treaba, vom restabili primii 3 bytes din program: CS:000012D0 C6 06 00 01 50 MOV BYTE PTR [100],50h CS:000012D5 C6 06 00 01 B4 MOV BYTE PTR [101],B4h CS:000012DA C6 06 00 01 09 MOV BYTE PTR [102],09h CS:000012DF ... ... ... ... ... ;JMP-ul nostru a fost sters! ;Acum putem sa sarim linistiti inapoi la inceput: CS:000012E9 9D POPF ;restabilim flagurile CS:000012FA 61 POPA ;restabilim registri CS:000012FB BE 00 01 MOV SI,100h CS:000012FE FF E6 JMP SI ;si gata ----------------------------------------------- CS:00001300 ??? ??? Atrageti atentia cum sunt encodate instructiunile de restabilire a primelor trei bytes. Observama ca bytii de restabilit (50, B4, 09 ) se afla la adresele de memorie CS:000012D4, CS:000012D9, CS:000012DE. Dupa ce am vazut programul infectat putem sa ne dam seama cum se realizeaza infectarea. Presupunem ca codul virusului nostru se pastreaza intr-un fisier VIRUS.DAT (cu lungimea Lv=200h). Iata etapele de parcurs: 1). Citim primii 3 bytes din TEST.COM -> 50, B4, 09 2). Acum corectam operanzii instructiunilor de restabilire din VIRUS.DAT. Daca in memorie acesti bytes se afla la adresele: CS:000012D4, CS:000012D9, CS:000012DE, În fisier ele se vor afla la offseturile 01D4h, 01D9h, 01DEh. Mai bine zis ele se afla la acele adrese de memorie pentru ca de exemplu: CS:000012d4 =CS:(100h+Lp+01D4h) Sper ca e clar. Daca nu - mai reflectati. 3). Acum scriem linistiti peste acesti trei bytes din TEST.COM codul instructiunii JMP [Lp] adica JMP 1100h, care se codeaza astfel: (E9 FD 0F) . Amintesc ca (E9) este codul instructiunii JMP, iar (FD 0F) înseamna (0FFDh)=(01000h-03h)= ( Lp-3 ). Sper ca e clar. Daca nu - mai reflectati. 4). Ne-a ramas cel mai usor lucru. Adaugam codul virusului la capatul fisierului TEST.COM 5). Gata. Mentiuni: Am descris în acest tutorial numai principiul de infectare a unui program. Ramîne la latitudinea voastra scrierea virusului propriu zis (adica a sarcinilor pe care acesta le executa). O singura mentiune: desi am evitat coruperea referintelor la adrese absolute din cadrul programului, trebuie sa intelegeti ca virusul in sine nu e protejat de asa ceva. În dependenþã de lungimea programului infectat, virusul se va pomeni la adrese diferite. Partea buna este cã virusul îl scrieti voi si cunoasteti locurile unde se fac referinte absolute la memorie- la infectare puteti corecta aceste referinte cu lungimea programului (Lp). Va sfatuiesc sa aveti un singur loc de acest fel - cel în care veti baga (Lp) într-un registru de exemplu (DX). În continuare referindu-va la adrese absolute folositi ca baza acest registru.
  21. Cum lucram cu socket-tii ? Cred ca de multe ori va-ti intrebat cum lucreaza BO2K sau exploiturile ! (Sper sa nu va dau ideii Pai chiar asa de complicat asa nu poate fi ! hai sa vedem cum naiba se lucreaza cu socket-tii ! 1. Ce este un socket ? Pai mai "babeste" spus este un canal de comunicatie ! Unu la mana exista mai multe tipuri de socketuri : 1. SOCK_STREAM : bidirectional , sigur 2. SOCK_DGRAM : bidirectional , nesigur (pachetele sar putea sa nu se mai intoarca 3. SOCK_RAW : folosit pentru "dedesupturi" 4. SOCK_PCK : cred ca este cel mai vechi (recomandabil a nu se folosi Doi la mana exista mai multe tipuri de domeni (ce fac domenile astea ? impun niste reguli de comunicatie socketurilor !) 1. AF_UNIX - domeniu de tip UNIX; 2. AF_INET - domeniu de tip Internet; 3. AF_RAW - domeniu de tip RAW 2. Cum creeam un socket ? connect = socket(domeniu,tip,protocol); Ex. Vrem sa cream un socket prin care sa ne putem lega la un port ! connect = socket(AF_INET,SOCK_STREAM,0); Easy ? Apropo connect este un integer care semnifica descriptorul . (da, da , exact ca la fisiere); 3. Cum asociem un nume socketului ? Pentru identificare socketului de catre procese acesta are nevoie de un nume. Cand folosim domeniul internet (AF_INET) acest nume este compus din adresa masini server cat si cea a masini client cat si a porturilor lor . Ex. bind(connect,nume,lungime nume) 4. Cum ne conectam ? Depinde ce vrem sa facem . Daca vrem client vom folosi functia connect : connect(descriptor, nume_socket, lungime_nume_socket); unde descripor este descriptorul socket-ului , nume_socket este socketul si lungime nume socket este sizeof(lungime_socket); ))) Daca vrem server folosim listen(decriptor,numar_conexiuni) unde descripor este descriptorul socket-ului iar numar connexiuni este numarul de conexiuni admise de server Ex. listen(connect,5); Dupa care folosim functia accept ca sa "acceptam" cererile catre server Ex. accept(connect,nume_socket, lungime_nume_socket); 5. Cum transmitem si receptionam date ? Sub unix (mai precis sub linux) avem fucntile read si write ! sunt exact aceleasi functii pe care le folosim si la citirea si scrierea in fisiere! Sub windoze lucrurile se complica cam un pic dar nu mult ! Adica se folosesc alte 2 functii : send(connect,buffer,sizeof(buffer),flaguri); recv(connect,buffer,sizeof(buffer),flaguri); unde flaguri reprezinta : MSG_PEEK - la un nou apel al functiei read() sau recv(), va fi citit din nou acelasi mesaj; MSG_OOB - este folosit pentru transmisia mesajelor cu prioritate maximã; MSG_DONTROUTE - trimite datele fãrã pachetele de rutare; (celelalte optiuni ale functilor send si recv sunt mura'n gura , nu ? 6. Cum inchidem un socket ? O data cu close(connect); (exact ca la fisiere) sau cu shutdown(connect,tip de inchidere); unde tip de inchidere poate fi 0: nu se main pot citi date prin socket 1: nu se mai pot trimite date 2: nu se mai pot receptiona date 7. Practica : 1. Vom pune in practica un client care drept sa spun l-am facut pt. linux dar cred ca nu veti avea probleme sa il compilati si in Visual C++ (special am folosit functile send si recv) 2. Vedeti ca programul de fata nu a fost compilat niciodata Am facut si eu ceva reciclare de cod , am scris ceva de mana si uite ce o iesit 1. Exemplu de client: #include<all_headers.h> ))))))) #define PORT 23 #define MAXLINE 4096 client(int socket) { char recvline[MAXLINE],sendline[maxline]; for( ; ; ){ if (recv(socket,recvline,MAXLINE,0)==0){ printf("server terminated prematurely ! n"); exit(1); } if (strncmp(recvline,"HALLO",5)==0){ strncpy(sendline,"Ce faci smechere ?",strlen("Ce faci smechere ?")); // rea ii lenea asta )) send(socket,sendline,strlen(sendline),0); } } } int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr; if (argc != 2) err_quit("usage: client <IPaddress>"); ifdef comentariu Creeam socketul ... endif sockfd = Socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); inet_pton(AF_INET, argv[1], &servaddr.sin_addr); ifdef comentariu Dupa crearea socket-ului neconectam ! endif connect(sockfd, (struct sockaddr_in *) &servaddr, sizeof(servaddr)); ifdef comentariu Predam socketul unei functii care stie ce sa faca cu el endif client(sockfd); // in functa asta faceti numa send-uri si recv-uri ifdef comentariu Inchidem socketul endif close(sockfd); exit(0); } Ok ! acuma sa dam drumu si la un server : (asta o fost compilat si o functionat perfect (sub linux (Visual c++ cred eu ca nu stie de fork ! cred ca asta ar fi singurul inconvenient sub windows) 2. Exemplu de server : #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <errno.h> #include <stdlib.h> #include <signal.h> #ifdef LINUX #include <sys/time.h> #endif #define SERV_PORT 115 //#define DEBUG void sig_chld(int signo) { pid_t pid; int stat; pid = wait(&stat); printf("child %d terminatedn", pid); return; } int main(void) { int listenfd, connfd; pid_t childpid; socklen_t clilen; struct sockaddr_in cliaddr, servaddr; void sig_chld(int); char remotestring[512],check[32]; strcpy(remotestring,"SErVer Open and Readyn"); remotestring[22]=0; listenfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(SERV_PORT); bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); listen(listenfd, 1024); signal(SIGCHLD, sig_chld); for ( ; ; ) { clilen = sizeof(cliaddr); if ( (connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen)) < 0) { if (errno == EINTR) continue; /* ianpoi la for */ else printf("accept error"); } if ( (childpid = fork()) == 0) { /* procesul copil */ send(connfd, remotestring, strlen(remotestring), 0); for({ recv(connfd, check, 511, 0); #ifdef DEBUG printf("check%s",check); #endif if (strncmp(check,"Close",5)==0) break; if (strncmp(check,"Hallo",5)==0) send(co nnfd,"Hallo ! I am the servern", 24, 0); } close(listenfd); /* inchide socketul care asculta */ exit(0); } close(connfd); /* inchidem socketul parinte */ } CREDITS TO SACX
  22. Cred ca multi dintre voi ati avut de a face cu telefoane mobile blocate sau chiar ati reusit sa il blocati pe cel personal sau care pur si simplu lucrau in alta norma decat cea in care lucreza "provideri" de pe teritoriul romaniei sau al moldovei Si va-ti pus problema ce ati putea face ? Nimic mai mult decat sa incercati sa ii "modificati" sau sa ii "schimbati" "soft-ul" . 0. Precizare : Exista mai multe norme de lucru a telefoanelor celulare adica (din cate stiu eu si adevarul ii ca pe partea asta nu stiu prea multe) D1 si D2 ! In Romania este folosita norma D1 . I . De ce aveti nevoie : 1. Avem nevoie de un programator de epromuri seriale care sa stie urmatoarele protocoale : I2C , SPI , 3 WIRE (astea sunt cu cele care am lucrat eu) 2. Un ciocan (mai mare de lipit de 15 Watti alimentat la 12 Volti (putei lucra si cu un pistol de lipit dar nimeni nu garanteaza ca nu veti "inmormanta" telefonul !) 3. O tresa metalica sau o pompa de cositor. 4. O bere la baiatu ca sa va mai raspunda la intrebari 5. Mult curaj si un pic de nebunie 6. Un Hexeditor 7. Informatii despre memoria in cauza Si acuma ca sa fiu un pic mai explicit iata ce trebuie sa faceti : 1. Trebuie Indentificat eepromul care contine "soft-ul" gsm-ului 2. Trebuie dat jos eepromul 3. Citit prin programator si salvat fisierul cu dumpul de memorie 4. Modificat fisierul cu dumpul de memorie (inlocuire SPLockCode etc) 5. Rescris eepromul cu dumpul modificat 6. Cositorit la loc eepromul 7. Apasat pe butonul de start ))) II . Programatorul: Voi prezenta aici doua variante ale celui mai simplu programator de eeprom-uri dar care stie numai standardul I2C ! In rest tre sa va chinuiti un pic ca sa le faceti pe celelalte (SPI , 3 WIRE)! ) Programator pe interfata seriala : (schema netestata) +Vcc 12v ö 15v TxD> O--+ (3) | --- | | 2k2 | | --- 1N4148 | || +--------|-|-------+---------+ | |/| | | ---- |+ | / --- | / 5V6 --- | ---- 10u | | | | | | | | | � | --- | +--------+ | . +----------+ O +Vcc A0| +--+ |VCC | +---------|1 8|---------+-----+ | A1| |WP | +---------|2 7|---------+ R 20K | A2| 24CXX |SCL | | +---------|3 6|---------)-----+---< Clock > <-------------< RTS | GND| |SDA | ----- +---------|4 5|---------)---------<Data In/Out> <-+-| 2k2 |---< DTR | +----------+ | | ----- +------------------------------+ +---//------< CTS | | --- - Programator pe interfata paralela : (schema testata) +----------+ O +Vcc 5v A0| +--+ |VCC | +---------|1 8|---------+--+--+ | A1| |WP | | +---------|2 7|---------+ R R 2x20K | A2| 24CXX |SCL | | | +---------|3 6|---------)--)--+---< Clock > <-------------<? | GND| |SDA | | +---------|4 5|---------)--+------<Data In/Out> <-------------<? | +----------+ | +------------------------------+ | --- - Dezavantajul programatorului pe interfata paralela este ca nu i-am adaugat o sursa de alimentare direct din calculator ci i-am facut alimentarea separata cu un stabilizator de tensiune de 5v. Programul aferent poate fi modificat astfel incat sa i se poata adauga o sursa de tensiune ca cea de la portul serial (binenteles tot pe portul serial nu pe cel paralel) Avantajul portului serial este ca ofera tensiuni intre -15 si +15 v (parca asa imi aduc aminte) si se poate construi o mini sursa de alimentare pentru circuitele care nu consuma mult ! La ce mai este bun acest programator ? La televizoare , radio casetofoane si tot ce foloseste memorie de tip I2C (SPI sau 3WIRE) . Probabil va intrebati la ce pini de pe portul paralel se leaga programatorul ? Si eu ma intreb caci mi-am uitat si mie asa de lene sa caut programatorul ! Dar aveti sursa , ia incercati sa va dati seama singuri ! Un hint : In-ul se leaga cu Out-ul la un loc pe acelasi pin (pe inerfata paralela). Documentatie despre standardele I2C, SPI,3Wire gasiti la : http://www.microchip.com/ http://www.fairchild.com/ si in speta la toate firmele producatoare de eepromuri III . Identificarea eeprom-ului in Celular ! Eeprom-urile , cum spuneam si mai sus , sunt de mai multe feluri : Protocol Tip Memorie Marime I2C (24C01/02/04/08/16 , 1k/2k/4k/8k/16k-bit) SPI (25C02/04/08/16/32 , 2k/4k/8k/16k/32k-bit) 3Wire (93C46/56/57/66/86 , 1k/2k/2k/4k/16k-bit) Spre exemplu : 24C04 este o memorie de 512 bytes 24C08 este o memorie de 1024 bytes and etc. (Sper ca imi aduc bine aminte !) Incercati sa le cautati dupa codurile de mai sus. Memorile sunt de tip SMD si cele mai multe sunt pe 8 pini IV. Programul : Este foarte usor de utilizat si modificat. Sper ca va veti da repede seama cum lucreaza. Pe partea asta nu ar fi probleme mari ! Problema este ca pe vremea aia lucram cu Watcom C++ si s-ar putea sa fie unele incompatibilitati cu Borland C++. Syntax : printf("eprombin -r/w size filen"); printf("- rw : read or write from eepromn"); printf("size : size of eeprom memory in bytesn"); printf("file : load or save in this filen"); aici gasiti sursa - eprombin.cpp V . Cea ce trebuie sa facem : De la caz la caz avem nevoie ori sa schimbam norma ori sa deblocam telefonul ! In cazul schimbului de norma avem nevoie sa schimbam intreg continutul eeprom-ului cu un dump din acelasi tip de telefon celular ,celularele ar trebui sa fie identice dar pe norma care ne intereseaza . In caz-ul deblocari telefonului lucrurile nu stau chiar asa de simplu (cu exceptia cazului in care adoptam aceeasi metoda ca mai sus) Tin sa trag atentia ca copierea memoriei dintr-un telefon in altu atrage dupa sine si copierea IMEI-uli cea ce este ilegal in unele tari ( habar nu am daca si in romania dar parca stiam ca tine tot de legea copyright-ului ) Fiecare telefon are IMEI-ul propriu si unic si il putei vizualiza pe aproape orice telefon cu *#06# In cosencinta ar fi foarte bine daca am lucra pe dumpul de memorie al telefonului in cauza ! VI . Practica : Sa presupunem ca avem un telefon celular de genu Alcatel HC 1 care este blocat (SPLock code). Dar stim ca Imei location 0x160 - 0x169 SPLock location 0x16A - 0x187 Acest telefon foloseste o memorie de tip 24c04 sau 24c046 (standard I2C) Prima data vom da jos memoria eeprom si o vom citi cu programatorul de eepromuri si o vom salva intr-un fisier de binar . (Aveti grija cu salvatul memoriei caci daca o pierdeti sar putea ca mai tarziu sa fie unica solutie de a pune telefonul in functiune Dupa ce am salvat memoria intram cu un editor hexa in ea si vom rescrie octeti de la 0x016A la 0x0187 cu 0 ! si gata SpLock code-ul este sters si telefonul deblocat ! Lipiti memoria la loc si ENGAGE ! ! Multi dintre voi veti intreba de unde puteti obtine informatile acestea ? Raspunsul meu este : De internet nu ati auzit ? Ia da-ti o raita pe la boardul de la http://www.gsmag.com !! Sa nu credeti ca totul este asa de simplu ! Povestea cu alcatelul este cel mai simplu exemplu cu putinta ! Ia priviti cum arata un Philips Diga : 04d - 050 security, 0d0 - 0fd SP-lock area (0d0 > checksum), for not locked : 0d0 : cc 02 31 32 33 34 00 00 00 00 00 00 .... 00 500 - 515 IMEI area : 500 > checksum , 506 - 50d IMEI open , 50e - 515 IMEI scrambled , 501 - 505 : 02 31 32 33 34 . pentru inlocuirea IMEI-ului trebuie sa inlocuiti secventa de octeti de la 500 la 515 din alt dump de memorie (cel original). No acum vo cam pierit pofta de deblocat telefoane ... ! ) VII. Nu exista alta cale ? Ba exista si alta cale de a debloca telefoane (la Erricson stiu sigur) si anume printr-o interfata legata la calculator (portul serial) ,dar pentru astea tre' sa mai sapati prin internet ... VIII. Disclaimer Tot cea ce gasiti aici este in scopuri pure educationale si nu imi asum nici o raspundere pentru pagubele materiale , morale sau fizice ! (Na ca v-am spus-o si pe asta)
×
×
  • Create New...