cmiN Posted July 14, 2009 Report Posted July 14, 2009 ... de cmiN, inspirat din niste jocuri puzzle / adventure ... Te doare capul cumplit si deodata deschizi ochii si te trezesti intr-o camera abandonata, ca o celula. Te uiti speriat in stanga si in dreapta si nu vezi decat 4 ziduri de beton rece, o usa metalica cu gratii in loc de macar un gemulet si un birou langa peretele din fata ta. Incerci usa, care e incuiata si apoi o iei razna, incepi sa tipi, sa plangi, nu stii unde te afli, ce cauti aici si de ce nu poti macar iesi afara. Tremurand, incepi sa cotrobai prin camera, prin sertare si nu gasesti absolut nimic decat o lanterna cu lumina slaba, un creion, un tabel ascii si o foaie de hartie nici prea mare nici prea mica pe care scrie cu font mic si de mana: "Toti cand eram mici am invatat ca cifrele incep de la 0 si se termina la 9." Nedumerit bagi hartiuta, creionul, tabelul ascii si lanterna in buzunar si cauti in continuare, dar in zadar. Nu mai gasesti absolut nimic si deodata niste sunete stranii, ca niste tipete, se aud de dupa perete! Ingrozit nu stii ce sa mai faci, incerci sa tragi biroul sa spargi usa cumva cu el, dar fara sa vrei descoperi o gura de aerisire fara gratar in spatele biroului. Intri pe ea, tragi biroul inapoi in locul care era pentru a bloca intrarea si apoi mergi cu grija mai departe, luminand cu lanterna bezna rece din tubul stramt prin care te tarai, la fel cum mintea ti-ar fi dictat pas cu pas ce trebuie sa faci -,-. Auzi usa camerei din care ai plecat trantindu-se si realizezi ca sunt pe urmele tale, insa continui sa mergi. De-a lungul tubului de abia observi cu lanterna blocuri de numere numerotate si, sperand sa te ajute la ceva, le scrii mic si inghesuit cu creionul pe foaia de hartie, pastrand ordinea. Observi ca toate blocurile de numere pe care le gasesti contin cifre de la 0 la 9 in ordine diferita, fiecare bloc avand lungimea de 9 sau 10 caractere si nu se repeta nicio cifra, toate cifrele sunt distincte (de e.x.: 043658971 sau 5678934201 ). Continui sa mergi prin tub, iar pe toti peretii nicio alta gura, ci numai numere. Miraculos foaia iti ajunge la fix pentru toate numerele si zaresti din departare in capatul tubului o alta gura de aerisire, fara sa mai fie si alte numere. Lanterna incepe sa palpaie, semne ca bateriile sunt pe terminate si te indrepti cu repeziciune spre gura de aerisire, care spre mahnirea ta are gratarul pus. Deodata se aud aceleasi sunete stranii, numai ca de aceasta data se aud din spatele tau prin tubul de aerisire. Speriat, incerci sa bati in gratar / sa-l scoti, dar acesta nici nu se clinteste... sunetele se aud din ce in ce mai tare si devin din ce in ce mai sinistre si plin de adrenalina generata de frica cu o ultima lovitura reusesti a scoate gratarul din suruburi. Cobori si ajungi intr-o alta camera. Intuneric peste tot nu vezi nimic, insa auzi undeva pe langa tine sunetul unui ventilator ... ti se pare ceva cunoscut ... te apropii usor incepi sa pipai si realizezi ca este o unitate centrala. Pipai in continuare si dai si de monitor pe care il aprinzi si astfel se lumineaza cat de cat incaperea. Imediat blochezi gura de aerisire pe care ai coborat cu un dulap mare si greu gasit in acea incapere. Cotrobai in continuare, dar nu gasesti nimic decat doar acel PC si o usa metalica ce pare a fi conectata la el printr-un cablu. Nu iti dai seama deloc ce sistem de operare ar putea avea acel pc, pentru ca pe un fundal complet negru nu vezi decat un fel de executabil si atat. Avand doar tastatura la dispozitie, il accesezi si o consola ce pare cunoscuta iti afiseaza mesajul: "Password: " Folosind talentele tale de "hecher" incerci mai multe parole si alte trucuri insa nimic nu pare sa se schimbe. Te gandesti putin si scoti foaia din buzunar pe care scrie mic si inghesuit:8643210598249731653976415802306578492789653214965248037615230849757630924871324896556912470319863472059570826436829143571790468238473296150765823104812643057620814573975042936856372491824916078370915348265697428308275640939748215033910854267783042615295013468953208147635670289467284530967938012564178530927983642057418935266078214933149028765176249085215807694756813429061728054960851394791560374284371825909380264179641207358758290634428371659892376410728046913582917640501487936518726594307253480690524837969520348174692570831326480759768304529508196273641895230773942608584513296759470238603452167895620147833427601585781320694023947856594680372592631048359124608739027865476245890394120875305479168328654097126758103496970532814742036598514867329693751248702513648928503479686942137558739620487154293608920761546801534790183647529627530948865037429380561947963501742872864593093586740226309158734150982673752984064759862132984307619568321047930826754589643127805412367043729651805689472387059324698436150240976528138253074965921784635327409614807631295892641570145063987951842037627346905885643209763549172867485392100625498734169528379347806210746932581796032458278643950902147536453978061245069372837146985275609248334061879255879423609826314579731420654398105276763085291892517340042186579327409165875980613483471692507642013597935164829315820476385176402534098216429805673170354296836029574885106729313827650492436705986038594722897056348136572490453269078872954163912745063562047913884015763252134906853742096816725890416901857348657104293746952380342598706618403597358910674237456802936724981552409738646731509280687925434720983565378619247031492865245309687982340567573084129912758406379450326846298357090137856289642135075364807292890647350286135498690312574480975216640359178530764128976342081548093256118962740535174806920346581797231645809602359874579431268412697538264378159093428570646918257342630987530249875610378516424123670593246570918964582370621743859923471506261074385920356978437295084645093678289320164573172856400253716845321407698413705286083512694923876041578956410217365984095846720315648027394903872655692418303490127865938624075862075349982763401723586410976812403586041359261452893076254870917594683013470269581293768450675142839290683475601754829397632548032476850939486721090587216347098354627549026833782941059250137648396547820763152849293078645248051739630687912473425906175816029344962587108641973501438027956037524196927386451430915276808432576163905281483401972658250967434251687392518367947681542390285419360092715438514309286703964287542896750374308256951926470838125463707043562188690421735243758609827354196138924650019368752417805296376152048347205319866270894316859471029542083671743168920984502317890236417568701243926408915792385074612187603490739254687190463258apoi incerci a introduce tot codul de numere, insa din nou nimic nu se intampla, apoi te uiti mai bine la cod si incerci sa-l decodifici cumva. Ai incredere in instinctele tale si stii ca textul obtinut in final trebuie sa fie un string alfanumeric, si ca 100% iti va folosi acel tabel ascii insa mai trebuie sa fie ceva, ceva legat de dexteritatea ta de a te juca cu numere chiar daca nu prea le ai cu matematica. Parola finala este singura ta scapare !!!Cerinta: Sa se construiasca un algoritm prin care sa se afle parola si mesajul din spatele codului sau macar sa se afle parola si mesajul fara a fi nevoie neaparat si de algoritm.Eu am facut in python o librarie pentru ambele functii si codare si decodare si merge excelent. O voi posta cand se da batuta toata lumea. Modul de codare e extrem de simplu, doar trebuie sa fiti atenti la ce am scris si sigur va prindeti. Succes!P.S.: Algoritmul meu are doar 18 linii (partea pentru decodare) deci va dati seama cat de simplu e. In final trebuie sa ajungeti la o propozitie lunga de un rand in limba romana care va zice ceva despre parola, va prezinta parola. Asa ca pana nu ajungeti la acel scris nu mai postati toate numerele care va trec prin minte! Quote
Vlachs Posted July 14, 2009 Report Posted July 14, 2009 bag pl ca e prea mult ce ai scris acolo, daca era mai putin scris incercam si eu da imi e lene sa citesc tot textu ala Quote
Ellimist Posted July 14, 2009 Report Posted July 14, 2009 hmmm...cmin daca tu ai scris toata aia de felicit, m-as baga si eu la rezolvare dar nu prea am cunostinte, decat de incepator, totusi cred ca fiecare caracter al propozitiei tale l-ai transformat in ascii.... si a rezultat codul ala lung. E adevarat ce zic? sau sunt tampenii? Quote
cmiN Posted July 14, 2009 Author Report Posted July 14, 2009 Da .. insa am mai facut ceva de e asa lung ... nu iti trebuie nicio cunostinta .. decat ceva creer si acel ascii table si da .. eu am scris toata aia . 10x! Quote
Ellimist Posted July 14, 2009 Report Posted July 14, 2009 tot Respectul,insa chiar nu ma prind... Quote
CyberWolf08 Posted July 14, 2009 Report Posted July 14, 2009 Intrebare: Cate caractere contine parola? Cumva 303? Quote
cmiN Posted July 14, 2009 Author Report Posted July 14, 2009 Trebuie sa ajungi la un mesaj care iti spune care este parola ... tot mesajul cu tot cu parola are 85 de caractere( + spatii si semne ). Quote
escalation666 Posted July 15, 2009 Report Posted July 15, 2009 Interesant joculetul si o prezentare...beletristica.Spoiler alert: felici....felicia? Quote
loki Posted July 15, 2009 Report Posted July 15, 2009 (edited) Interesant joculetul si o prezentare...beletristica.Spoiler alert: felici....felicia? e Felici... mi se strica algoritmul la 't' - revin cu amanunte.Frumoasa idee, m-a pus pe ganduri de ce 9 sau 10.Parola pentru a debloca usa este: P**L***1***3 Edited July 15, 2009 by loki Quote
cmiN Posted July 15, 2009 Author Report Posted July 15, 2009 Corect lokipaki ! Asteptam si algoritmul ... Quote
loki Posted July 15, 2009 Report Posted July 15, 2009 (edited) <?function srcch($s){ for($i=0; $i<=9; $i++) if(!strstr($s."x",$i.'')) return $i;}$sir='8643210598249731653976415802306578492789653214965248037615230849757630924871324896556912470319863472059570826436829143571790468238473296150765823104812643057620814573975042936856372491824916078370915348265697428308275640939748215033910854267783042615295013468953208147635670289467284530967938012564178530927983642057418935266078214933149028765176249085215807694756813429061728054960851394791560374284371825909380264179641207358758290634428371659892376410728046913582917640501487936518726594307253480690524837969520348174692570831326480759768304529508196273641895230773942608584513296759470238603452167895620147833427601585781320694023947856594680372592631048359124608739027865476245890394120875305479168328654097126758103496970532814742036598514867329693751248702513648928503479686942137558739620487154293608920761546801534790183647529627530948865037429380561947963501742872864593093586740226309158734150982673752984064759862132984307619568321047930826754589643127805412367043729651805689472387059324698436150240976528138253074965921784635327409614807631295892641570145063987951842037627346905885643209763549172867485392100625498734169528379347806210746932581796032458278643950902147536453978061245069372837146985275609248334061879255879423609826314579731420654398105276763085291892517340042186579327409165875980613483471692507642013597935164829315820476385176402534098216429805673170354296836029574885106729313827650492436705986038594722897056348136572490453269078872954163912745063562047913884015763252134906853742096816725890416901857348657104293746952380342598706618403597358910674237456802936724981552409738646731509280687925434720983565378619247031492865245309687982340567573084129912758406379450326846298357090137856289642135075364807292890647350286135498690312574480975216640359178530764128976342081548093256118962740535174806920346581797231645809602359874579431268412697538264378159093428570646918257342630987530249875610378516424123670593246570918964582370621743859923471506261074385920356978437295084645093678289320164573172856400253716845321407698413705286083512694923876041578956410217365984095846720315648027394903872655692418303490127865938624075862075349982763401723586410976812403586041359261452893076254870917594683013470269581293768450675142839290683475601754829397632548032476850939486721090587216347098354627549026833782941059250137648396547820763152849293078645248051739630687912473425906175816029344962587108641973501438027956037524196927386451430915276808432576163905281483401972658250967434251687392518367947681542390285419360092715438514309286703964287542896750374308256951926470838125463707043562188690421735243758609827354196138924650019368752417805296376152048347205319866270894316859471029542083671743168920984502317890236417568701243926408915792385074612187603490739254687190463258';$pos=0;while($pos<2813){ $sute=substr($sir,$pos,9); $code=0; if(srcch($sute)==1) { $code=100; $pos+=9; } $cifra=substr($sir,$pos,9); $code+=srcch($cifra)*10; $cifra=substr($sir,$pos+9,9); $code+=srcch($cifra); echo chr($code); $pos+=28;}?>php. nu e perfect ca mi-am prins urechile in strstr. I-am bagat un x in coada sa imi dea conditia cum trebe Edited July 15, 2009 by loki Quote
cmiN Posted July 15, 2009 Author Report Posted July 15, 2009 Nu prea am inteles mare lucru, oricum nu stiu php, dar pare cam ciudata ideea ) ... pe ce se bazeaza zi cum faci ?A meu arata asa:#! /usr/bin/env python# 14.07.2009 <> 14.07.2009 | cmiN# Challenge [Programare] Misiunea 1: Evadarea (cmiN) @ rstcenter.com__doc__=""" This library encodes a string to a numeric stringand decodes a numeric string to a string."""__usage__=""" Usage: [+] Encode a string: sh_cipher.py encode "string" [+] Decode an encoded string: sh_cipher.py decode "7956...532""""import os, random, sysdef encode(instr): outstr, aenstr="", "" for x in instr: aenstr+=str(ord(x))+" " z=" " for x in aenstr: numbers=["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] if not x==" ": numbers.remove(x) random.shuffle(numbers) while z==numbers[0]: random.shuffle(numbers) z=x for x in numbers: outstr+=x del instr, aenstr, numbers, x, z return outstrdef decode(outstr): l=[] aenstr, instr="", "" l[:]=outstr while len(l)!=0: if l[9] in l[:9]: numbers=["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] for x in l[:9]: numbers.remove(x) aenstr+=numbers[0] l[:9]=[] else: aenstr+=" " l[:10]=[] aenstr=aenstr.strip(" ") for x in aenstr.split(" "): instr+=chr(int(x)) del outstr, aenstr, numbers, x, l return instrdef main(): args=sys.argv if len(args)!=3: print(__doc__) print(__usage__) else: if args[1]=="encode": print(encode(args[2])) elif args[1]=="decode": print(decode(args[2])) else: raise Exception del argsif __name__=="__main__": try: main() except: print("An error occurred!") os.system("pause >NUL") Quote
loki Posted July 15, 2009 Report Posted July 15, 2009 (edited) eu nu stiu python Am observat ca grupurile de 9 cifre au una lipsa. Grupurile de 10 le-am considerat separatori. (despartind in grupuri de 9 incep sa se formeze cele de 10 cand se repeta cifre).Asa am observat ceva comun: sunt 2 sau 3 grupuri de 9 cifre, urmat de unul de 10. Daca sunt 3 grupuri, din primul lipseste cifra 1Concluzie: cifrele lipsa din grupurile de 9 iti dau un cod ascii.864321059 lipseste 7 :F=70824973165 lipseste 03976415802306578492 lipseste 1 :e=101789653214 lipseste 0965248037 lipseste 16152308497576309248 lipseste 1 :l=108713248965 lipseste 0569124703 lipseste 8......Functia mea srcch($s) returneaza cifra lipsa dintr-un sir de cifre. Intotdeauna ii dau 9 cifre.$sute e un sir care ia primul grup de cifre. Daca lipseste 1 atunci sunt 3 grupuri de 9 (logica: ai folosit coduri ascii gen 1xx sau yy iar yy niciodata nu va fi 1y ci va fi >31). In cazul acesta am adaugat 100 si am sarit 9 cifre.In continuare procesez normal celelalte 2 grupuri, adaug suta daca e nevoie. Apoi sar cele 10 cifre (28=9+9+10) pentru urmatorul cod ascii.Note php: la if(!strstr($s."x",$i.'')) return $i; am pus "x" ca nu mergea, nu's de ce iar $i.'' e pentru conversie la string. Nu imi mai aduc eu aminte php. Edited July 15, 2009 by loki Quote
cmiN Posted July 15, 2009 Author Report Posted July 15, 2009 Da ... pachetele de 10 cifre sunt folosite ca separator iar cele de 9 le lipeste o cifra care contribuie la valoarea decimala ascii pentru fiecare caracter din string-ul final. Faza e ca decat sa te complici atat puteai sa iei mereu primele 10 caractere si vedeai daca al 10-lea caracter se repeta in primele 9. Daca se repeta e clar ca e un pachet de 9 si vedeai cifra lipsa care o adaugai intr-o variabila, dar daca nu se repeta era clar ca e un pachet de 10 cifre distincte si in loc sa adaugi vreo cifra la variabila adaugai un separator. Si dupa fiecare pachet de 9 sau 10 cifre analizat taiai pachetul, adica primele 9 sau 10 cifre ... depinde de lungimea pachetului descoperit de tine. Si apoi faceai conversia si gata mesajul. Am avut grija in algoritmul pentru codare de eventualele bug-uri cum ar fi:Dupa un pachet de 9 urmatorul pachet sa nu inceapa niciodata cu cifra care ii lipsea pachetului anterior, deoarece pachetul de 9 avand imediat dupa el cifra lipsa devine pachet de 10 si se strica tot, iar faza misto a "librarii" este ca de fiecare data pentru acelasi string se genereaza un cod complet diferit, ramanand la fel doar lungimea . Oricum te-ai prins .. gJ , v-am zis ca era usor. Quote
loki Posted July 15, 2009 Report Posted July 15, 2009 Dupa un pachet de 9 urmatorul pachet sa nu inceapa niciodata cu cifra care ii lipsea pachetului anterior, deoarece pachetul de 9 avand imediat dupa el cifra lipsa devine pachet de 10 si se strica tot, eh, nu stiam si am prevenit situatia asta Quote
cmiN Posted July 15, 2009 Author Report Posted July 15, 2009 Bun daca ai anticipat si asta . Revin saptamana viitoare cu misiunea 2 . Quote
CyberWolf08 Posted July 15, 2009 Report Posted July 15, 2009 Nuuu...chiar ma gandeam ca o sa fiu primu care rezolva...Oricum...l-am facut si eu in C++. Mi-am dat seama de faza azi noapte pe la 4 dar am zis ca o termin azi...#include<iostream>#include<string.h>using namespace std;int main(){char sir[]="8643210598249731653976415802306578492789653214965248037615230849757630924871324896556912470319863472059570826436829143571790468238473296150765823104812643057620814573975042936856372491824916078370915348265697428308275640939748215033910854267783042615295013468953208147635670289467284530967938012564178530927983642057418935266078214933149028765176249085215807694756813429061728054960851394791560374284371825909380264179641207358758290634428371659892376410728046913582917640501487936518726594307253480690524837969520348174692570831326480759768304529508196273641895230773942608584513296759470238603452167895620147833427601585781320694023947856594680372592631048359124608739027865476245890394120875305479168328654097126758103496970532814742036598514867329693751248702513648928503479686942137558739620487154293608920761546801534790183647529627530948865037429380561947963501742872864593093586740226309158734150982673752984064759862132984307619568321047930826754589643127805412367043729651805689472387059324698436150240976528138253074965921784635327409614807631295892641570145063987951842037627346905885643209763549172867485392100625498734169528379347806210746932581796032458278643950902147536453978061245069372837146985275609248334061879255879423609826314579731420654398105276763085291892517340042186579327409165875980613483471692507642013597935164829315820476385176402534098216429805673170354296836029574885106729313827650492436705986038594722897056348136572490453269078872954163912745063562047913884015763252134906853742096816725890416901857348657104293746952380342598706618403597358910674237456802936724981552409738646731509280687925434720983565378619247031492865245309687982340567573084129912758406379450326846298357090137856289642135075364807292890647350286135498690312574480975216640359178530764128976342081548093256118962740535174806920346581797231645809602359874579431268412697538264378159093428570646918257342630987530249875610378516424123670593246570918964582370621743859923471506261074385920356978437295084645093678289320164573172856400253716845321407698413705286083512694923876041578956410217365984095846720315648027394903872655692418303490127865938624075862075349982763401723586410976812403586041359261452893076254870917594683013470269581293768450675142839290683475601754829397632548032476850939486721090587216347098354627549026833782941059250137648396547820763152849293078645248051739630687912473425906175816029344962587108641973501438027956037524196927386451430915276808432576163905281483401972658250967434251687392518367947681542390285419360092715438514309286703964287542896750374308256951926470838125463707043562188690421735243758609827354196138924650019368752417805296376152048347205319866270894316859471029542083671743168920984502317890236417568701243926408915792385074612187603490739254687190463258";int n=strlen(sir),i,j,s=0,k=0,l,ok1,var1=0,nr=0,ok=0;while(k<=n) {ok1=0; for(j=0;j<=9;j++) {s=0; ok1=0; for(i=k;i<=k+9;i++) {if(sir[i]-'0'==j) s++; } if(s>1) {ok1=1;ok=1; } if(s==0) nr=nr*10+j; } if(ok==0) { cout<<(char)nr; nr=0; k=k+10; } else k=k+9;ok=0; }return 0;Felicitari! Ai trecut de primul nivel. Parola pentru a debloca usa este: PadLock15853 Quote