-
Posts
388 -
Joined
-
Last visited
-
Days Won
16
Everything posted by B7ackAnge7z
-
MySQL Injection Challenge [Authentication Bypass]
B7ackAnge7z replied to B7ackAnge7z's topic in Challenges (CTF)
Dar dac? nu m-am referit la faptul c? trebuie s? folosi?i LIKE? Poate acest „verb” este folosit deja de c?tre aplica?ie? Totu?i, încearc? s? treci de auth-2, c?ci e mult mai u?or. -
MySQL Injection Challenge [Authentication Bypass]
B7ackAnge7z replied to B7ackAnge7z's topic in Challenges (CTF)
Nu domnule, totul e mult mai simplu. Vezi c? acolo era ceva legat de Englez? ?i verbul „a place”. -
Haide?i domnilor, mai vioi! — em a dezv?luit mai mult decât trebuia, iar vou? nu va r?mas decât s?-mi trimite?i PM sub ritmul muzicii lui Bobby McFerrin ps. Apropo, dac? dori?i pu?in? „pl?cere sufleteasc?” în plus, viziona?i .pps. Hihi, Bob Marley cic?
-
E?ti glume? Totu?i, mai cite?te o dat?.
-
ac mea erag caena ai opeots stea utn tu
-
@SticKyWoX, Defapt, a? putea spune c? atât challenge-ul meu, cât ?i cel al lui em nu sunt anagrame. Cât despre anagrama ta, trebuia s? scrii singur textul, ci nu s?-l copii din alt? parte.
-
P?i dac? ai f?cut acest challenge ?i spui c? te-a inspirat cel creat de mine, de ce nu mi-ai trimis r?spunsul la challenge? ps. Pentru anagrama LDV, trebuia s? scrii mesajul propriu folosind acea tehnic?, nu unul luat de pe net
-
Trimite?i-mi mesajul descifrat în PM. Epo‚u!xpssz-!cf!ibqqz ps. Inspirat din challenge-ul lui em UPDATES: Felicit?ri pentru em (primul, ?i nu mai e unicul). Congrats pentru abraxyss (al doilea).
-
Nu te sup?ra, dar ar fi bine s? vorbe?ti doar despre persoana ta ?i doar din propria experien??.
-
Iar RAM-ul 16GB? M?car postai sursa, explica?ii, sfaturi, m?car ceva. Plus c? la categoria „Leet Zone”. Trist... ?i pentru ca s? nu fiu învinuit de offtopic: <a href="javascript:(function () { var radius = prompt('Introdu raza cercului'); if (radius > 0) { var area = (Math.PI * Math.pow(radius, 2)).toFixed(6), msg = 'Aria cercului = ' + area; } else { var msg = 'Raza cercului trebuie s? fie mai mare ca zero'; } alert(msg); })();">Calculeaz? aria cercului</a>
-
MySQL Injection Challenge [Authentication Bypass]
B7ackAnge7z replied to B7ackAnge7z's topic in Challenges (CTF)
Baft? Vreau doar s? atrag aten?ia, c? trebuie s?-mi trimite?i rezolvarea la auth-c1. Cel de-al doilea, auth-c2, e prea simplu ca s? fie acceptat (îns?, cred c? ar fi bine s? începe?i cu acesta). ps. Dac? nu rezolv? nimeni (sau dac? nu intervine nimic/nimeni), peste câteva zile voi ad?uga ?i întregul MySQL query. -
MySQL Injection Challenge [Authentication Bypass]
B7ackAnge7z replied to B7ackAnge7z's topic in Challenges (CTF)
Buuuun — au fost câ?iva mai îndr?zne?i, dar din p?cate niciunul nu a reu?it s? rezolve acest challenge. Nici nu mai vorbesc despre domnii ce folosesc Acunetix’u ?i alte mega-tool-uri crezând c? un challenge creat manual, poate fi rezolvat într-un mod automat. Deci, al treilea update îl las în comentarii pentru a atrage din nou aten?ia tuturor asupra acestui challenge. Sper c? ?ti?i ceva MySQL, pu?in? Englez? ?i v? place s? citi?i printre rânduri. Baft?! -
P?i cine a spus c? arat? coordonatele tale? Dac? sincer acum, aplica?ia afi?eaz? datele ISP-ului, ?i nu ale utilizatorului. Dac? ai internet mobil, po?i fi în alt ora?, ?i corespunz?tor, aplica?ia va afi?a date eronate. ps. Scuze, nu observasem update-ul t?u — citatul acela nu a fost decât o glum? pe seama celor de la Google, c?ci prima dat? când am v?zut c? afi?eaz? coordonatele am crezut (?i nu doar eu) c? merge vorba de coordonatele utilizatorului.
- 5 replies
-
- api
- google app engine
-
(and 1 more)
Tagged with:
-
În acest tutorial voi descrie pa?ii necesari pentru a crea o interfa?? API, ce va oferi informa?ii despre IP-ul, ?ara, regiunea, ora?ul ?i coordonatele (?ti?i voi: adresa, blocul, etajul, apartamentul) utilizatorului. De asemenea, v-a fi verificat dac? acesta folose?te un proxy sau dac? IP-ul lui nu este un proxy public. ?i pentru ca lista s? fie complet?, se vor ob?ine ?i informa?iile despre versiunea browser-ului, limba setat? ?i referer-ul acestuia. Pentru cei ner?bd?tori, vreau s? men?ionez c? la final rezultatul returnat de interfa?a API va ar?ta în felul urm?tor, iar un exemplu de aplica?ie ce folose?te acest API poate fi g?sit aici: My IP Vreau s? men?ionez c? interfa?a va fi dezvoltat? cu ajutorul unei aplica?ii pentru Google App Engine, iar limbajul de programare va fi Python. Dac? nu cunoa?te?i Python, pute?i utiliza Java sau Go (desigur, va trebui s? v? descurca?i singuri). Pasul 1. Înregistrarea unei noi aplica?ii Pentru început e nevoie s? înregistr?m o nou? aplica?ie. Acest lucru poate fi f?cut accesând aceast? adres? URL https://appengine.google.com/start/createapp — unde trebuie s? alegem identificatorul unic ?i numele aplica?iei. Pentru op?iunea „Storage Options” bif?m „High Replication” (Master/Slave e considerat? „învechit?” ?i probabil în viitorul apropiat aplica?iile ce utilizeaz? aceast? metod? nu vor mai fi func?ionabile). Pasul 2. Desc?rcarea ?i instalarea SDK-ului Dup? ce am înregistrat aplica?ia, desc?rc?m SDK-ul pentru Google App Engine de pe pagina Downloads. Aici alegem SDK-ul pentru limbajul de programare dorit (în cazul meu Python) ?i sistemul de operare (în cazul meu Windows). Pasul 3. Crearea unei noi aplica?ii Acum, dup? ce am desc?rcat ?i instalat SDK-ul GAE, cre?m o nou? aplica?ie local?. Pentru aceasta rul?m executabilul Google App Engine Launcher ?i din meniul „File” alegem op?iunea „Create New Application”. În fereastra ce apare, introducem identificatorul ales la pasul 1, loca?ia unde dorim s? salv?m aplica?ia, introducem portul necesar ?i ap?s?m „Create Application”. Vreau s? men?ionez c? eu am ales portul 8090, astfel pentru exemplele de mai jos voi folosi acest port. Pasul 4. Testarea aplica?iei ?i acum a venit timpul s? rul?m aplica?ia implicit? pentru a fi siguri c? totul e ok: select?m aplica?ia creat? ?i ap?s?m click pe „Run”. A?tept?m pu?in, ?i dac? a fost indicat calea corect? ?i un port liber — aplica?ia va deveni activ?. Iar pentru a fi siguri c? totul func?ioneaz? perfect, ap?s?m butonul „Browse” sau acces?m http://localhost:8090/ — dac? browser-ul arat? mesajul „Hello world!” — atunci e ok, ?i putem trece la urm?torul pas. Pasul 5. Preg?tirea spa?iului de lucru Deschidem folderul unde am salvat aplica?ia (acest lucru poate fi f?cut ?i cu ajutorul SDK-ului: din meniul „Edit” alegem „Open in Explorer”) ?i ?tergem fi?ierele de care nu mai avem nevoie: favicon.ico main.py main.pyc Deschidem fi?ierul app.yaml ?i înlocuim con?inutul acestuia cu urm?torul cod: # Identificatorul aplicatiei (ales la pasul 1) application: json-api # Despre chestiile de mai jos (si multe alte lucruri utile) puteti citi accesand URL-ul # https://developers.google.com/appengine/docs/python/config/appconfig version: 1 runtime: python27 threadsafe: false api_version: 1 handlers: # Indicam ca in folderul /static sunt salvate fisiere statice precum imagini, css, js si altele - url: /static static_dir: static # Daca utilizatorul acceseaza /ip.js atunci executam scriptul ip.py - url: /ip\.js script: ip.app # Pentru celelalte pagini accesate de catre utilizator afisam pagina implicita - url: /.* static_files: static/html/index.html upload: static/html/index.html Dup? aceasta, cre?m fi?ierul static/html/index.html în care scriem mesajul de întâmpinare (sau folosim sursa paginii de aici http://json-api.appspot.com/). Acces?m http://localhost:8090/ dac? apare mesajul introdus, mergem mai departe. Exact la fel proced?m ?i cu fi?ierul static/html/ip.html (sursa o g?sim aici http://json-api.appspot.com/static/html/ip.html) care va fi folosit pentru a afi?area informa?iei ob?inute de la interfa?a API. Dat fiind faptul c? cu ajutorul Google App Engine putem ob?ine doar ini?ialele ??rii, cre?m un fi?ier static/js/iso3166_codes.js folosind datele de aici http://json-api.appspot.com/static/js/iso3166_codes.js care vor fi folosite la ob?inerea numelui ??rii. De asemenea, cre?m ?i fi?ierul static/js/ip.js (sursa http://json-api.appspot.com/static/js/ip.js) care va avea rolul de a primi ?i afi?a datele returnate de interfa?a API. Pasul 5. Crearea interfe?ei API Cre?m fi?ierul ip.py în care copiem urm?torul cod: #!/usr/bin/env python # -*- coding: utf-8 -*- # Includem bibliotecile necesare import webapp2, json, urllib2, re class InitApp(webapp2.RequestHandler): def get(self): req = self.request # Lista variabililor pe care o va returna interfata API info = { 'ip' : req.remote_addr, 'country' : req.headers.get('X-AppEngine-Country'), 'region' : req.headers.get('X-AppEngine-Region'), 'city' : req.headers.get('X-AppEngine-City'), 'coordinates' : req.headers.get('X-AppEngine-CityLatLong'), 'browser' : req.headers.get('User-Agent'), 'lang' : self.getLang(), 'referer' : req.referer, 'isproxy' : self.isProxy(), } # Verificam daca utilizatorul nu foloseste un proxy "transparent" if req.headers.get('X-Forwarded-For'): info['realip'] = req.headers.get('X-Forwarded-For').split(',')[0] # Obtinem reprezentarea JSON pentru variabilele necesare result = json.dumps(info) # Verificam daca utilizatorul a specificat o functie callback. Exemplu: # Request : http://json-api.appspot.com/ip.js?varname=data # Rezultat : callback({...}); if req.get('callback'): result = '{0}({1});'.format(self.getVar('callback'), result) # Verificam daca utilizatorul a specificat o variabila. Exemplu: # Request : http://json-api.appspot.com/ip.js?varname=data # Rezultat : var data = {...}; elif req.get('varname'): result = 'var {0} = {1};'.format(self.getVar('varname'), result) # Afisam rezultatul ca fiind plain-text self.response.headers['Content-Type'] = 'text/javascript; charset=utf-8' self.response.out.write(result) # Eliminam caracterele nevalide din numele functiei callback si numele variabilei def getVar(self, var): return self.filter(self.request.get(var)) # Obtinem initialele pentru limba folosita def getLang(self): lang = self.request.headers.get('Accept-Language') return self.filter(lang.split(',')[0]) # Eliminam caracterele non-alfanumerice def filter(self, str): return re.sub('[^a-z_\.0-9]', '', str, flags=re.IGNORECASE) # Verificam utilizatorul foloseste un proxy public def isProxy(self): # Intrebam pe domnul Google folosind sintaxa inurl:proxy 127.0.0.1 # daca IP-ul nu este un proxy public q = urllib2.quote('inurl:proxy ' + self.request.remote_addr) url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=' + q # Folosim contructia try pentru a ne feri de erorile imprevizibile try: # Obtinem un sir JSON returnat de catre serverul Google str = urllib2.urlopen(url).read() # Convertim intr-o variabila datele JSON data = json.loads(str) # Verificam daca au fost gasite mai mult de 5 rezulate return (data['responseData']['cursor']['resultCount'] > 5) except: pass # Deja nu mai are importanta - au fost ceva erori sau Google nu a gasit nimic - # consideram ca IP-ul nu este un proxy return False app = webapp2.WSGIApplication([('/ip.js', InitApp)], debug=True) Pasul 6. Înc?rcarea aplica?iei pe server Dup? ce am salvat toate fi?ierele ?i am testat aplica?ia accesând URL-ul http://localhost:8090/static/html/ip.html putem înc?rca toate fi?ierele pe serverul appspot cu un simplu click pe butonul „Deploy”. În fereastra ce apare, introducem adresa de email ?i parola pentru contul Google. Dup? înc?rcarea fi?ierelor, putem accesa aplica?ia noastr? folosind adresa http://json-api.appspot.com/ (în loc de json-api folosi?i identificatorul ales la pasul 1). Pasul 7. Final Pentru cei un pic mai leno?i, sursa aplica?iei poate fi desc?rcat? accesând adresa URL http://json-api.appspot.com/static/zip/json-api.zip Enjoy!
- 5 replies
-
- 2
-
- api
- google app engine
-
(and 1 more)
Tagged with:
-
„Comuni?ti b?trâni ?i tri?ti” © <ironic>Straniu c? cei de la ProTV nu au scris c? în urma unui sondaj, 70% din popula?ie sus?in afirma?ia, iar restul nu au auzit niciodat? de România.</ironic>
-
Primele lucruri pe care le fac atunci când încep s? lucrez la un PC „str?in” ce are instalat Windows, sunt: debifare „hide extensions for known file types”; bifare „show hidden files folders and drives”; debifare „hide protected operating system files”; ?i sunt sigur c? majoritatea fac la fel. Iat? de ce, metoda scris? de tine, este mult prea simpl?. Totu?i, î?i mul?umesc pentru „micu?ul tutorial”, ca o completare la ceea ce am scris eu.
-
Da. Deschide cmd.exe ?i execut? urm?torul cod: rd/s \\.\\C:\calea\c?tre\folderul\NUL
-
Cu PHP ?i JavaScript lucrez activ în fiecare zi (mai pu?in de la sfâr?itul lui decembrie c?ci angajatorul e plecat în „??rile calde”, iar eu m? ocup lini?tit din proiectele personale). Nu cred c? a? putea calcula num?rul total de linii de cod scrise folosind aceste limbaje de programare. Îns? în 2012 sunt sigur c? am scris mai mult de 100k linii pentru PHP ?i 20k pentru JavaScript. De exemplu, în luna decembrie (+/- câteva zile) numai pentru un proiect din domeniul financiar am scris mai mult de ~15k linii PHP ?i foarte pu?in JavaScript (pân? la 300 linii). De asemenea, din cele curente — un proiect (de tipul unui director de site-uri) scris în PHP ?i JavaScript la care lucrez din luna octombrie (?i înc? nu e terminat) num?r? mai mult de 25k linii în PHP ?i 30k de linii în JavaScript. Cu Python ultima oar? (nu m? refer la <100 linii de cod) am lucrat prin luna septembrie, când am scris o aplica?ie de tipul testelor online pentru Google App Engine ce num?r? pu?in peste 2000 linii de cod. Trebuie s? men?ionez c? Python-ul nu îl cunosc atât de bine cum a? vrea, îns? e îndeajuns ca s? pot crea aplica?ii Web mai pu?in sau nu complexe. Unul dintre acestea este ?i www.cybersecco.com pe care îl pot prezenta publicului. Mai sunt: AutoIt — care este folosit la greu pentru automatizarea diferitor procese Perl — pe pare l-am folosit, ?i îl cunosc de altfel, foarte pu?in (nu cred c? mai mult de 5k de linii) VBScript — ca ?i AutoIt, folosit pentru diferite chestii de automatizare ?i configurare
-
Aceasta nici pe departe nu e singura metod? de a vedea ce fi?iere se ascund în acel folder. Dac? utilizatorul e înc?p??inat ?i mai are ?i un cap pe umere, cu siguran?? v-a accesa într-un final con?inutul folderului. Totu?i, crearea folderului pe desktop face via?a mult mai frumoas?
-
Desigur, la lansare pun pre?uri nebune, ca în maxim 1 an s? scoat? alt produs cu capacit??i mai mari, primul fiind uitat. Dac? lumea nu ar fi fost condus? de bani, demult foloseam dispozitive cu capacit??i ce tind spre infinit. Apropo, interesant este faptul c? trupa „Dream Girls” se ocup? de promovarea produc?iei Kingston.
-
În acest tutorial voi descrie o metod? interesant? de a ascunde fi?ierele ce nu vor putea fi accesate de c?tre utilizatorii sistemului de operare Windows (începând de la versiunea Win2000 ?i terminând cu ultima — Win8). De fapt merge vorba despre un bug, din cauza c?ruia procesul explorer.exe este obligat s? p?r?seasc? locul de munc? (pe scurt — se închide automat ?i se restarteaz?). Ideea const? în modificarea folderului ?i „transformarea” acestuia într-un shortcut ce face referire la fi?ierul desktop.ini din acela?i folder. Iat? de ce, atunci când explorer.exe încearc? s? afle propriet??ile folderului, acesta din urm? face din nou referire la obiectul s?u ?i... ?i tot a?a pân? când procesul se d? b?tut (iar acest lucru se întâmpl? foarte repede). Creators of „New folder” and „New folder (2)” proudly present — „New folder (3): The killer” — the drama of explorer.exe Istorie Persoana care a descoperit acest bug, fiind în anii studen?iei pe vremea când internetul „picura” cu un scâr?âit de mul?i cunoscut („pierzând toat? noaptea pentru a vedea 4-5 poze” ©) ?i dischetele erau la mod?, (persoana) dorea s? se asigure c? datele salvate într-un PC de la universitate nu vor fi ?terse sau copiate de c?tre al?i studen?i. Dat fiind faptul c? dischetele erau unicul ?i cel mai nesigur mod de a „transporta” datele din/c?tre acel PC, eroul nostru a hot?rât s? g?seasc? o metod? de a ascunde ?i de a proteja folderul personal pentru ca nimeni s? nu-l poat? ?terge sau copia. Despre ascunderea unui folder folosind func?iile Windows nici nu mergea vorba — to?i ?tiau cum pot fi g?site acestea. Îns?, dup? mai multe încerc?ri ?i teste, a g?sit un bug foarte interesant care opre?te for?at procesul explorer.exe atunci când utilizatorul deschide folderul personal sau folderul în care se afla acesta. El (eroul) ?tiind calea complet? putea accesa direct fi?ierele ascunse în folderul personal. Explica?ie De exemplu, fiecare utilizator avea dreptul de a crea/?terge/edita datele din folderul D:\usr\, în care fiecare student î?i salva informa?iile necesare. Eroul nostru îns?, dorind s? p?streze ?i ceva date mai importante a creat folderul D:\usr\name\key1\key2\ unde f?cea backup de pe dischet? ?i/sau salva alte informa?ii importante. Pentru D:\usr\name\key1\ îns? a folosit trucul de care vorbeam mai sus. Astfel, oricine încerca s? deschid? D:\usr\name\ sau D:\usr\name\key1\ (ace?tia probabil erau mai pu?ini, c?ci nu to?i reu?eau s? ?in? minte numele folderului \key1\) nu vedea altceva decât eroarea de r?mas bun al procesului explorer.exe. Autorul îns?, ?inând minte numele folderelor \key1\ ?i \key2\ insera direct calea c?tre acest ultim folder, iar explorer.exe r?mânea pe pozi?ii deoarece nu trebuia s? afle propriet??ile folderului \key1\. Transformare Pentru a proteja folderul folosind metoda de mai sus, e necesar s? parcurge?i urm?torii pa?i (în ordinea specificat?): Crea?i un folder în locul dorit Marca?i folderul ca fiind te tip „System” În acest folder crea?i un fi?ier desktop.txt în care scrie?i: [.ShellClassInfo] CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D} Flags=2 Redenumi?i fi?ierul desktop.txt în desktop.ini Crea?i un shortcut c?tre desktop.ini cu numele target.lnk Privi?i cum explorer.exe se zbate în ghiarele ciclului infinit. Bonus Totu?i, este ?i o mic? problem? — în cazul eroului, oricine putea ?terge folderul D:\usr\name\ f?r? a-l deschide. Îns?, voi oferi un mic bonus, pentru a interzice ?tergerea folderului personal. Chestia e foarte simpl? — pentru sistemele de operare Windows, exist? o list? de cuvinte cheie ce nu pot fi folosite la crearea unui folder sau fi?ier. Culmea e c?, a?a cum nu pot fi create astfel de obiecte, ele nu pot fi nici ?terse dac? s-a reu?it crearea unui astfel de obiect. Unul dintre aceste cuvinte cheie este ?i NUL. Ideea mea e simpl?, cre?m un folder cu numele NUL în folderul personal ?i în modul acesta interzicem ?tergerea acestuia din urm?. Automatizare Pentru a simplifica tot ce a fost scris mai sus, am f?cut un mic script în VBScript care trebuie salvat în folderul personal ca pe un fi?ier cu extensia .vbs — executând scriptul de mai jos în folderul personal, acesta v-a fi modificat corespunz?tor, iar procesul explorer.exe se v-a restarta. ' Indic?m dac? folderul poate fi ?ters sau nu Removable = false ' Ob?inem loca?ia folderului curent Set fs = WScript.createObject("Scripting.FileSystemObject") folder = fs.GetAbsolutePathName(".") ' Dac? e nevoie, folosim un mic truc pentru a proteja ?tergerea folderului If Not Removable Then ' Cre?m un folder aleatoriu Randomize secretFolder = folder & "\" & Int(Rnd(1) * 99999999) & "\" fs.createFolder(secretFolder) ' NUL folder On Error Resume Next fs.createFolder(secretFolder & "\NUL\") End If ' Marc?m folderul ca fiind de tip "system" fs.getFolder(folder).attributes = 4 ' Liniile ce vor fi scrise în fi?ierul desktop.ini lines = Array("[.ShellClassInfo]", "CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}", "Flags=2") ' Scriem datele necesare în desktop.ini Set file = fs.openTextFile(folder + "\desktop.ini", 2, True) file.write join(lines, vbCrLf) file.close ' Cre?m shortcut-ul target.lnk c?tre fi?ierul desktop.ini Set link = WScript.CreateObject("WScript.Shell").createShortcut(folder + "\target.lnk") link.targetPath = folder + "\desktop.ini" link.save msgBox "Folder-ul a fost modificat cu succes", 64, "Explorer.exe: Au revoir mon cheri" Sfaturi Nu crea?i folderul personal pe desktopul propriu (ghici?i de ce) Nu uita?i c? folderul personal poate fi accesat din alt sistem de operare Nu uita?i c? discul local poate fi formatat (astfel nu v? mai protejeaz? nimic datele) Nu uita?i c? cuvântul cheie NUL este valabil doar pentru Windows Nu uita?i s? experimenta?i — e un bug foarte iste? Nu uita?i s? posta?i întreb?rile ?i ideile voastre
-
Un filmule? educativ în care un „clarv?z?tor”, folosind magia tehnologiilor informa?ionale, uime?te ?i în acela?i timp avertizeaz? utilizatorii despre pericolul fraudelor electronice.
-
Iat? înc? o variant? interesant? cum au fost ob?inute adresele de email http://leakster.net/leaks/fbimail. Iar pentru cei care înc? nu ?i-au scos ochelarii roz, citi?i http://pastebin.com/Lj0PqrTU ps. Din p?cate nu pot g?si înc? 2 articole despre cum sunt demascate astfel de persoane. Dac? ceva, revin cu un update.
-
<sarcasm>Dup? lista adreselor de email, cu u?urin?? ne putem da seama c? bieloru?ii, ucrainenii, polonezii ?i ru?ii administreaz? de zor aceste servere.</sarcasm> Dac? sincer acum, parc? se demonstrase de câteva ori c? ??tia public? date „confiden?iale” generate de vreun randomizer + parser ce caut? adrese de email de pe Google.
-
Adobe Creative Suite 2 — 100% legal, 100% gratuit
B7ackAnge7z replied to B7ackAnge7z's topic in Programe utile
@DoubleBit, p?i de asta am ?i spus c? „ini?ial nu acesta era scopul final”. Personal consider, dac? într-adev?r era ilegal? folosirea acestor seriale pentru aplica?iile date, atunci le trimiteau câte un email clien?ilor existen?i, dar nu le f?ceau publice. Sau, la urma urmei, trebuiau s? pun? un banner (mare ?i ro?u) pe pagina de download unde s? scrie clar c? e ilegal s? folose?ti aplica?iile dac? nu e?ti clientul lor.