Nustebino Lietuvos banko logika

Žodžiu paprašė vienas žmogutis "nusiurbti" informaciją iš vieno lietuvos banko puslapio. Permečiau greitai akimis. Kaip ir viskas aišku išskyrus pašto adresą - kad jį pamatyti reikia įvesti patikrinimo kodą. Nu ką gi, kaip sakoma "Challenge accepted".

Pora kartu "pamaigęs" emailus supratau, kad kodo atpažinti iš paveiksliuko paprastai neišeis. Pirma idėja, kuri kilo - naudoti https://anti-captcha.com servisą, tačiau kadangi jis yra mokamas palikau šią mintį kitam kartui.

Tada nutariau užmesti akį į source kodą. Ten buvo vat toks briedas:

<a class="sdata" href="scontact.lb?ln=lt&sdata=JvnI7DCvc3jmjcdJmpxUxLnHH3Cl8eI3pvDmC7ltSkVOAsI1l7mYZDBvlbMSSHqoJUTilxWrdF%2bpmcQbkgbfVrFN%2bsEhE7k36HmktICWdL%2bx0TA7d3L%2fVV9xrsANASOMQrzpvsO5HMn6Lo%2b01YSpfdk05eE07MPy8%2b%2fKDr%2bx6eAWPkqLXdk57TTK8qZ%2b52nLzcLSXJoD555mvY%2byxE3mqDGivlAGdY6qIVEc%2bVLtBrojrA1w34fV1mWTDtGljKixbymfx5FJUiHqzq1YsxFf%2bIYKaCYtq1xPgCLfrLmnBME" target="_blank">in...@aib.lt</a>

Teoriškai iškodavus kodą ten galėtų būti email arba bent kažkokia informacija, kuri padėtu apeiti patikrinimo kodą ir išgauti email. Šeip atrodo panašu į Base64 tačiau pabandžius tai nepasiteisino, o baisiai knistis neturiu laiko...

Na ką gi, planas "B" tampa planu "A". Teks užmesti porą eurų vargšams kiniečiams, kad jie man atpažintu kodus, bet turint nemažai patirties aš nutariau dar kartą paslampinėti po kodą ir po kelių minučių buvau palaimintas (Karma) :

<a name="info@aib.lt" title=""></a><b class="b1">ALEXANDR INSURANCE BROKERS, UADBB </b>
Lietuvos banko duomenys

Taip, taip. Pasirodo mano patirtis kažką reiškia... Čia pat, konsolėje gimė primityvus scriptukas:

var data = [];

var titles = Array.from(document.querySelectorAll('.b1')).splice(1, 5)

for (var i = 0, title; title = titles[i]; ++i) {
    var tmp = {
        'Pavadinimas': title.textContent,
        'E-mail': title.previousSibling.name
    };

    var elements = title.nextElementSibling.querySelectorAll('tr');

    for (var j = 0, element; element = elements[j]; ++j)
        tmp[element.children[0].textContent] = element.children[1].textContent;
    
    data.push(tmp);
}

console.log(data)

Kuris man maloniai išspausdino tokią info:

[
    {
        "Pavadinimas": "ALTAS DRAUDIMO BROKERIS, UADBB ",
        "E-mail": "brokeris@altas.lt",
        "Licencijos išdavimo data ir numeris:": "2004-12-21 Nr.000052",
        "Įstatinis kapitalas:": "60 000 Lt",
        "Vadovas:": "Rimgaudas Grigaitis",
        "Adresas:": "Kalniečių g. 104, 50184 Kaunas",
        "Telefonas:": "(8 37) 337 193",
        "Mobilus tel.:": "(8 698) 25 966, (8 687) 20 035",
        "Faksas:": "(8 37) 797 705",
        "Tinklapis:": "http://www.altas.lt",
        "Elektroninis paštas:": "brok...@altas.lt"
    },
    {
        "Pavadinimas": "ALYVOS ŽIEDAS, UADBB ",
        "E-mail": "alyvos.ziedas@gmail.com",
        "Licencijos išdavimo data ir numeris:": "2005-01-04 Nr.000081",
        "Įstatinis kapitalas:": "55 000 Lt",
        "Vadovas:": "Paulikas Jurjonas",
        "Adresas:": "Laisvės g. 27-12, 89222 Mažeikiai",
        "Telefonas:": "(8 443) 27 383",
        "Faksas:": "(8 443) 27 383",
        "Elektroninis paštas:": "alyvos...@gmail.com"
    },
    {
        "Pavadinimas": "AM SPRENDIMAI, UADBB ",
        "E-mail": "aldona_s@yahoo.com",
        "Licencijos išdavimo data ir numeris:": "2011-12-20 Nr.000142",
        "Įstatinis kapitalas:": "58 500 Lt",
        "Vadovė:": "Aldona Savičienė",
        "Adresas:": "Girulių g. 10-36, 12112 Vilnius",
        "Telefonas:": "-",
        "Mobilus tel.:": "(8 686) 42202",
        "Elektroninis paštas:": "aldo...@yahoo.com"
    },
    {
        "Pavadinimas": "AON BALTIC, UADBB ",
        "E-mail": "aonbaltic@aon.lt",
        "Licencijos išdavimo data ir numeris:": "2004-11-23 Nr.000017",
        "Įstatinis kapitalas:": "2 928 736 Lt",
        "Vadovas:": "Žilvinas Petrauskas",
        "Adresas:": "Goštauto g. 40B, 01112 Vilnius",
        "Telefonas:": "(8-5) 252 60 00",
        "Faksas:": "(8 5) 252 65 55",
        "Tinklapis:": "http://www.aon.lt",
        "Elektroninis paštas:": "aonb...@aon.lt"
    },
    {
        "Pavadinimas": "APSIDRAUSKIME, UADBB ",
        "E-mail": "info@apsidrauskime.lt",
        "Licencijos išdavimo data ir numeris:": "2004-12-28 Nr.000065",
        "Įstatinis kapitalas:": "100 000 Lt",
        "Vadovas:": "Vidutis Viešūnas",
        "Adresas:": "Justiniškių g. 12, 05131 Vilnius",
        "Telefonas:": "(8 5) 210 21 29(8 5) 272 22 24",
        "Mobilus tel.:": "(8 618) 86 666",
        "Faksas:": "(8 5) 278 48 37",
        "Tinklapis:": "http://www.apsidrauskime.lt",
        "Elektroninis paštas:": "in...@apsidrauskime.lt"
    }
]

Na ką, lieka tik paleisti PHP ir sukišti viską į CSV failą. "Achievement Unlocked"

$fp = fopen('file.csv', 'w');

$dom = new DomDocument();
@$dom->loadHTMLFile('http://www.lb.lt/draudimo_tarpininkai');

$xpath = new DomXPath($dom);

$nodes = $xpath->query('//*[contains(@class, "b1")]');

foreach ($nodes as $node) {
    $fields = [
        'Pavadinimas' => trim(strval($node->textContent)),
        'E-mail'      => trim(strval($node->previousSibling->getAttribute('name'))),
    ];
    
    $entries = $xpath->query('.//tr[position() != last()]', $node->nextSibling->nextSibling); // Ištriname paskutinį elementą kadangi email jau yra
    
    foreach ($entries as $entry) {
        $child_nodes = $entry->childNodes;
        
        $title = (string) $child_nodes->item(0)->textContent;
        $title = trim($title);
        $title = preg_replace('/[^a-zA-Z0-9]+/', '', $title); // Ištriname visokius pašalinius ženklus
        
        $value = (string) $child_nodes->item(2)->textContent;
        $value = trim($value);
        
        $fields[$title] = $value;
    }
    
    fputcsv($fp, $fields, ';'); // Pekečiame skyriklį į ; kadangi pavadinimuose yra kablelių
}

fclose($fp);

Taigi po viso šito nuotykio kyla pusantro klausimo: "Kokios dar paslaptis slypi Lietuvos Banko soruce kode?" ir "Ką rūkė banko sistemos kūrėjai?".

P.S.

MailHide By Google

Fork me on GitHub