amprenta Posted April 23, 2007 Report Posted April 23, 2007 Un mic challenge - http://illhostit.com/files/a0106706c201607e2f2618ac14b6952a/asta.rarin arhiva veti gasi un fisier text ,si un executabil ...In fisierul text se afla mai multe numere consecutive de la 0 la n, sa zicem ... (le-am "amestecat " un pic sa nu fie chiar in ordine ) .Am sters un numar dintre ele deci avem acolo n-1 . Treaba voastra ii sa faceti un program care gaseste numarul lipsa Dupa ce sunteti siguri ca ati aflat numarul ,treceti la "go.exe " ,unde numarul gasit v Quote
SlicK Posted April 23, 2007 Report Posted April 23, 2007 Codul pentru cautarea numarului lipsa:#!/usr/bin/perlopen(FP,"< asta.txt"); @file=<FP>; close(FP);$line=$file[0];@spl=split(/ /,$line);for($i=0;$i<@spl;$i++){ $is=0; for($j=0;$j<@spl;$j++) { if($spl[$j]==$i) { $is=1; last; } } if($is==0) { print("$i\n"); }}Codul meu secret: UnkeM (pentru numele SlicK) Quote
amprenta Posted April 25, 2007 Author Report Posted April 25, 2007 good work SlicK - dar pentru a evita crearea unui array cu mii de elemente si dupa parcurgerea lui se poate face si asha : sa zicem ca avem 0 1 2 3 4 (n) scoatem pe 2 de ex 0 1 3 4 (n-1) (ce apare in fisier)acuma facem suma lor Sn=0 + 1 + 2 +3 +4 = 10 Sn-1=0+1+3+4 =8 si scadem Sn-Sn-1 =10-8 =2 (exact elementu care lipseste) #include <stdio.h> main(){FILE *g;int i,Sn=0,Sn1=0,contor=0;g = fopen("C:\\asta.txt","r"); //deschidem fisierul pentru citire while (!feof(g)) { fscanf(g,"%d",&i); //citim cate o valoare din fisier si adaugam la suma Sn1 = Sn1+i; contor++; //contor = cate elemente avem in fisier }fclose(g); //inchidem fisieru -citirea s-a terminatfor (i=0;i<=contor;i++) Sn=Sn+i; //Suma primiilor n termeni (in fisier aveam n-1) printf("%d",Sn-Sn1); //diferenta e chiar numaru care lipseste }numarul care trebuia aflat : 1698-------------------------------------------Trecem la go.exe - unde vedem "Introdu parola "si mai sus Please reverse me .Daca nu va ducea cu gandu sa "intoarceti" numarul adica 1698- > 8961 , ci mai degraba sa deschideti in Olly (sau orice alt debugger ,hex editor ..etc) puteati afla cu usurinta care este raspunsul si aici avem asha :1. Puteai sa dai NOP la JNZ unpacked.0040158F de la adresa 004014DA -asta facea ca orice introduci sa fie corect 2. Daca studiai un pic codul cu un f8 vedeai la Call-urile catre strcmp ,ce se compara ...etc etc ... In functie de Numele ce il introduceai rezulta un cod secret care se obtine prin incrementarea valorii ASCII a fiecarei litere, cu 2 .De ex daca introduceai "abc" codul secret era "cde" Quote