NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Marian Šámal:25.10.2017 19:53

Ahoj,

chtěl jsem si vytvořit aplikaci pro školní systém Bakaláři, oficiální aplikace funguje pomalu a tak jednou za týden se musím odhlásit a znovu přihlásit. Tak jsem si na internetu našel knihovnu Bigybox, udělanou od Petr Čech.
Udělal jsem si jednoduchý prográmek, jen abych zjistil, co vše jde udělat.

class Program
    {
        static API bakalari;

        static void Main(string[] args)
        {
            bakalari = new API(new AccountInfo(PasswordManager.user, PasswordManager.pass), "http://bakalari.gjp-me.cz");
            bakalari.Login();
            bakalari.Load(bakalari.SessionId);
            foreach (Subject i in bakalari.Subjects)
            {
                string str =
                i.Absences + Environment.NewLine +
                i.Grades + Environment.NewLine +
                i.HoursPerSemester + Environment.NewLine +
                i.Id + Environment.NewLine +
                i.Info + Environment.NewLine +
                i.When + Environment.NewLine;

                Console.WriteLine(str);
            }

            Console.ReadKey();
        }
    }

(V PasswordManager­.user a PasswordManager­.pass mám moje heslo a jméno, nechci aby to kdokoli viděl)

Jenže mi to hází

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at BakalariAPI.API.ParseSubjects(String html) in C:\Users\marian\Desktop\c_sharp\from_web\Bigybox-master\SchoolSystem\API.cs:line 414
   at BakalariAPI.API.Load(String sessionId) in C:\Users\marian\Desktop\c_sharp\from_web\Bigybox-master\SchoolSystem\API.cs:line 222
   at bakalari_console.Program.Main(String[] args) in C:\Users\marian\Documents\Visual Studio 2017\Projects\bakalari\bakalari-console\Program.cs:line 18

Vůbec nevím, co s tím mám dělat. Je možné, že knihovna pro aktuální verzi Bakalářů už nefunguje.

Odpovědět
25.10.2017 19:53
Bagr
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Marian Šámal
Petr Šťastný:25.10.2017 20:29

Taky jsem si chtěl napsat aplikaci pro bakaláře, ale nikde jsem nenašel nic použitelného. Díky za zmínku o tomhle API, podívám se na to :) Taky to zkusím a napíšu ti, jak to bude fungovat mě.

 
Nahoru Odpovědět
25.10.2017 20:29
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Marian Šámal
Petr Čech:25.10.2017 21:05

Ahoj, nečekal bych, že by to někdo někdy použil :D
Je to úplně jednoduché, není to vůbec skutečné API, funguje to tak, že se posílají requesty na server a tváří se to jako uživatel, takže to jakoby posílá obsah formulářů, načítá HTML a to se pokouší parsovat.
To ale má tu masivní nevýhodu, že to funguje většinou jen pro jednu verzi webové aplikace, tím víc pro takovou prasárnu jako jsou bakaláři.
To je také důvod, proč to je jen napůl rozpracovaná knihovna, v momentě, kdy se mi tohle podařilo rozchodit a chtěl jsem na tom postavit aplikaci se změnila verze bakalářů a než abych pro každou verzi přepisoval parser jsem to vzdal.

Proč? Je to jednoduché, bakaláři nemají veřejně přístupné API.
Teoreticky bys mohl udělat to, že si vezmeš kód, co tě přihlásí a dá ti platnou session (věř mi, byl docela oříšek přijít na to, co poslat za data) a potom napsat parser. To je ale špatný nápad, nedělej to.


Co můžeš tedy dělat?

  1. Vzdát to, pokud si chceš zachovat zdravý rozum
  2. Bakaláři mají i oficiální aplikaci minimálně pro Android. Tu můžeš využít 3 způsoby
    • budeš ji prostě používat
    • rozběháš ji na virtuální mašince na počítači a třeba wiresharkem budeš poslouchat, co to posílá a pokusit se to napodobit. Když jsem to zkoušel, nepoužívalo to https, ale to už jsou 2 roky zpět... jestli začali používat https, můžeš to celkem vzdát. Možná by se to dalo obejít nějakou magií s certifikáty a udělat MITM útok a získat plaintext. Ale člověk, co by tohle uměl by se zabýval něčím produktivním a dostával za to hodně peněz :D
    • Můžeš vytáhnout z mobilu APK a dekompilovat ho, tím zjistit, jak to funguje. To je ale nejspíš není úplně legální. Navíc vzhledem k tomu, že mají API, ale není veřejné, bude to buď proto, že tam je nějaká díra, nebo ho prostě nechtějí nechat odhalit. Potom bude to apk nejspíš dobře obfuskované a hodně štěstí s tím.

I kdyby se ti nakrásně podařilo rozběhat to skutečné API, oni mohou pořád prostě změnit verzi.
Konečné doporučení: Kašli na to.

Nahoru Odpovědět
25.10.2017 21:05
the cake is a lie
Avatar
Tomas
Člen
Avatar
Tomas:25.10.2017 23:17

Ahoj, zajímavé, že dost lidí má podobné nápady.
My jsme něco zkoušeli přepsat do C# podle tohoto návrhu https://github.com/…ter/index.js a funguje to výborně. Dostaneme klasicky XML se všema informacema (rozvrh apod.)

 
Nahoru Odpovědět
25.10.2017 23:17
Avatar
Vít Kološ
Člen
Avatar
Vít Kološ:28.11.2017 19:09

Vyjádření oddělení vývoje systému Bakaláři k tomuto tématu:
„Oficiální REST API k aplikaci Bakaláři existuje. Za předpokladu, že vytváříte nějakou nadstavbu pro svou školu, je možné Vám ho poskytnou. Je ale nutné, aby nás kontaktoval někdo ze školy s požadavkem. Nepředpokládám, že API potřebuje pro tvorbu komerční nadstavby pro aplikaci. Využití API je v takovém případě zpoplatněné.“

Nahoru Odpovědět
28.11.2017 19:09
Neopravuj, co není rozbité.
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Vít Kološ
Petr Čech:28.11.2017 22:59

Ha, docela by mě zajímalo, jak zpoplatňují to API. Protože Bakaláři AFAIK běží na serveru školy :D .

Nahoru Odpovědět
28.11.2017 22:59
the cake is a lie
Avatar
Marian Benčat:28.11.2017 23:28

Autoři systému bakalari, by spíše měli platit za to, že to někdo používá.. Ne ještě zpoplatnovat api

Nahoru Odpovědět
28.11.2017 23:28
Totalitní admini..
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Petr Čech
Adam Ježek:29.11.2017 0:14

Odposlouchat provoz by asi nic nepřineslo. Naše škola bohužel přešla minulý měsíc na HTTPS, takže podívat se co se tam děje doopravdy už nemůžu, ale vím že dřív se párkrát stalo, že aplikace vyhodila chybu že používáme starý web (nebo tak něco), v té době jsme sice běželi ještě na tom dost starém webovém UI, ale vůbec bych se nedivil, kdyby ta aplikace fungovala úplně stejně jako ta tvoje knihovna, obzvlášť když se do appky zadávala URL login stránky bakalářů.
Zase když říkají, že maj API, tak tam asi nějaké bude, ale otázka je jestli je přímo implementované v každém serveru nebo se dá doinstalovat, případně jestli je jen v těch nejnovějších verzích.
Další věc je, že zatímco dřív běželi bakaláři na serveru u nás ve škole, tak teď je jen udělaný tunel, a ačkoliv se to pořád tváří že server je u nás, tak to ve skutečnosti běží někde u nich. Takže třeba to API funguje jenom na školy hostované u nich.

Nahoru Odpovědět
29.11.2017 0:14
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Vít Kološ
Člen
Avatar
Vít Kološ:1.12.2017 22:31

Ještě bych se rád zeptal, jestli nemáte větší znalosti ohledně legality dekompilace apk souboru? Něco o tom píšou Piráti, ale nevím, jestli se ještě vejdu do vymezených hranic... Zdrojový kód bych chtěl zkoumat za účelem zjištění adresy již dříve zmiňovaného API bez nutnosti kontaktovat správce školní sítě.

Nahoru Odpovědět
1.12.2017 22:31
Neopravuj, co není rozbité.
Avatar
Odpovídá na Vít Kološ
Josef Kuchař - Pepa489:1.12.2017 23:18

Já třeba analyzoval protokol Strava.cz i bez dekompilace, s https. Je to docela jednoduché, na PC si nainstaluješ Fiddler, zapneš ho jako proxy, vygeneruješ certifikát pro android. Na android nainstaluješ tento certifikát a připojíš se na stejnou síť s tím, že tam dáš rozšířené možnosti a nastavíš tam jako proxy adresu PC s fiddlerem + port proxy ;)

Editováno 1.12.2017 23:20
Nahoru Odpovědět
1.12.2017 23:18
2x piš, jednou debuguj
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Josef Kuchař - Pepa489
Petr Čech:1.12.2017 23:35

Nebo se prostě díváš do network tabu v developer tools v prohlížeči :P

Vít Kološ myslím, že bakaláři mají přímo v licenci, že to nesmíš dekompilovat. Ale jestli to nebudeš používat ke komerčním účelům, zřejmě to nikdo řešit nebude a maximálně to bude přestupek.

Nahoru Odpovědět
1.12.2017 23:35
the cake is a lie
Avatar
Vít Kološ
Člen
Avatar
Odpovídá na Josef Kuchař - Pepa489
Vít Kološ:2.12.2017 8:20

S webem Bakalářů problém není – ten se dá odposlouchávat různě (i přes developer tools). Horší je to však s aplikací. Tyto requesty totiž nechtějí putovat přes Fiddler. :( Zkoušel jsem i aplikaci Drony, ale nemůžu přijít na to, jak s její pomocí získat plnou url adresu dotazu.

Nahoru Odpovědět
2.12.2017 8:20
Neopravuj, co není rozbité.
Avatar
Odpovídá na Vít Kološ
Josef Kuchař - Pepa489:2.12.2017 15:17

Taky se na tu aplikaci zkusím podívat :D

Nahoru Odpovědět
2.12.2017 15:17
2x piš, jednou debuguj
Avatar
Vít Kološ
Člen
Avatar
Vít Kološ:3.12.2017 17:40

Podle mého názoru nelze získat url API jinak, než dekompilací. Jestli to zvládneš jiným způsobem, jsi borec. :-P

Nahoru Odpovědět
3.12.2017 17:40
Neopravuj, co není rozbité.
Avatar
Odpovídá na Vít Kološ
Josef Kuchař - Pepa489:3.12.2017 19:15

Je tu možnost, při prvním přihlášení v aplikaci se to zeptá, jestli důvěřuješ tomu certifikátu, tudíž je tam možnost podstrčit vlastní a provoz dešifrovat. Ale pravda je, že bych to moc nehrotil a prostě to decompiloval

Nahoru Odpovědět
3.12.2017 19:15
2x piš, jednou debuguj
Avatar
Vít Kološ
Člen
Avatar
Vít Kološ:3.12.2017 19:21

A také je pravda, že i když provoz dešifruješ, dostaneš adresu, která má v jednom z parametrů hash (SHA-512). Pokud aplikaci nedekompiluješ, nemáš šanci zjisti, jakým způsobem hash vznikl (z čeho byl sestaven) – až na metodu pokus-omyl. :D

Nahoru Odpovědět
3.12.2017 19:21
Neopravuj, co není rozbité.
Avatar
Nahoru Odpovědět
4.12.2017 11:20
Neaktivní uživatelský účet
Avatar
Ondřej Langr (andysekcze):4.12.2017 13:53

No jako.. rozhodně nemám webovou verzi s licencí :) takže.. pššt a nepiš mi rozhodně PM :)

Nahoru Odpovědět
4.12.2017 13:53
I have a charger. I have Note 7. Umh I haven't Note7.
Avatar
Dominik Gavrecký:4.12.2017 13:56

Nie je mi celkom jasne prečo im neskúsite napísať a poprosiť ich o prístup k API. Myslím ze je to rozumnejšie ako lámať ich zabezpečenie ...

Nahoru Odpovědět
4.12.2017 13:56
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Vít Kološ
Člen
Avatar
Vít Kološ:4.12.2017 17:14

Jde mi pouze o porozumění programu a API. Jakmile ho budu chtít používat v rámci školního bota, kontaktuji správce školní sítě, abych měl k datovému konektoru oprávněný přístup. ;)
Neaktivní uživatel brutal force bych tomu neříkal. :)
Ondřej Langr (andysekcze) aha? :D
Dominik Gavrecký Tobě je směřována tato zpráva. Lámat zabezpečení není třeba. :)
Jsem zároveň v kontaktu s jejich testerem, takže nemám problém s nimi komunikovat o svých záměrech.

Nahoru Odpovědět
4.12.2017 17:14
Neopravuj, co není rozbité.
Avatar
Odpovídá na Vít Kološ
Ondřej Langr (andysekcze):4.12.2017 22:15

Tak čistě vzato by sis to mohl rozebrat :D nebo minimálně testovat u sebe třeba na virtuálce :)

Nahoru Odpovědět
4.12.2017 22:15
I have a charger. I have Note 7. Umh I haven't Note7.
Avatar
Vít Kološ
Člen
Avatar
Odpovídá na Ondřej Langr (andysekcze)
Vít Kološ:5.12.2017 16:08

Předpokládám, že rozebrat = dekompilovat. ;)
Nechápu, co myslíš tím testováním.
Pokud nám jde o zjištění adresy API, jsou tři způsoby:

  1. dekompilovat aplikaci pro Android (nejspíš nelegální)
  2. odposlechnout HTTPS dotazy (z adresy není možné určit jak vznikla)
  3. prostě napsat vedení školy (uvést důvod a způsob použití)
Nahoru Odpovědět
5.12.2017 16:08
Neopravuj, co není rozbité.
Avatar
Marian Šámal:8.12.2017 20:54

Vy jste se tu nějak hodně bavili, co jsem tu nebyl. Nakonec jsem použil Node.js balíček, který zde někdo ukazoval. Alespoň jsem se naučil pracovat s Node.js, je to pěkný.

Nahoru Odpovědět
8.12.2017 20:54
Bagr
Avatar
Vít Kološ
Člen
Avatar
Vít Kološ:12.12.2017 18:39

Dokonce se dá ten balíček implementovat jako normální JS na straně klienta. ;) Celé (ne moc elegantní) řešení najdete na becko-odkazy.wz.cz/ba­kapi.zip.

Nahoru Odpovědět
12.12.2017 18:39
Neopravuj, co není rozbité.
Avatar
David Duong
Člen
Avatar
David Duong:12.12.2017 22:45

Ahoj, nečekal jsem, že lidi budou hvězdičkovat můj repozitář, tak jsem se koukal a narazil na tento thread :)
Pokud by měl někdo zájem, tak jsem schopen poskytnout i výpis z burpsuite.

Celé to API běží vždy na login.aspx, takže stačí vědět tu základní URL a odkaz na API už najdeš. Určitě bych dal najevo správci systému / firmě, pokud chceš nějak výrazně přistupovat k API, by pak mohli změnit ten hash

Editováno 12.12.2017 22:48
 
Nahoru Odpovědět
12.12.2017 22:45
Avatar
David Duong
Člen
Avatar
David Duong:12.12.2017 22:50

Ještě pokud by ses chtěl vrhnout na screen-scraping jako takový, tak se můžeš ještě podívat na tohle:

https://github.com/…lari-crawler

 
Nahoru Odpovědět
12.12.2017 22:50
Avatar
Jinoch Jirka
Člen
Avatar
Jinoch Jirka:14.12.2017 10:42

čau dokáže to někdo udělat ? :D

  1. Napište a odlaďte program pro zjištění počtu čísel ležících v intervalu <-5; 5> z N vygenerovaných čísel z intervalu <-10; 10>
  2. Vytvořte program, kt. vypočítá funkční hodnoty funkce f: y=x2 +x-1 pro celá čísla x od -10 do 10. Výsledek vypiše ve tvaru tabulky
  3. Vypište na obrazovku obrazec - trojúhelník ze zadaného znaku a počtu řad.

    Př.: vstup: +, 4
    výstup: ++++
    +++
    ++
    +

  4. Vytvořte program, kde uživatel zadá dolní mez a horní mez intervalu. Program následně zjistí, kolik čísel z intervalu je dělitelných 3 beze zbytku. Výsledek se vypíše na obrazovku.
 
Nahoru Odpovědět
14.12.2017 10:42
Avatar
Mára
Člen
Avatar
Odpovídá na Jinoch Jirka
Mára:14.12.2017 10:50

Založ si vlastní thread.

 
Nahoru Odpovědět
14.12.2017 10:50
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jinoch Jirka
David Hartinger:14.12.2017 10:51

Jakou odpověď čekáš, "ano"? Když to dáš do nového vlákna a ne k diskuzi o Bakalářích a pošleš co máš již hotového a co přesně ti nejde, tak ti tu určitě někdo pomůže.

Nahoru Odpovědět
14.12.2017 10:51
New kid back on the block with a R.I.P
Avatar
Vít Kološ
Člen
Avatar
Odpovídá na David Duong
Vít Kološ:14.12.2017 19:18

Vím, jakým způsobem tvé API funguje, proto bych se raději přiklonil k vlastní "bezpečnější" varantě (alespoň mám přehled o tom, co se s přihlašovacími údaji děje).
Firma mi hash asi nezmění, maximálně jsou schopni zpřístupnit nějaký jednodušší přístup k API (ve stylu skolar.duong.cz/a­pi) vše je to však podmíněno kontaktováním vedení školy, což zatím neplánuji.

Nahoru Odpovědět
14.12.2017 19:18
Neopravuj, co není rozbité.
Avatar
Jan Troják
Brigádník
Avatar
Jan Troják:19.11.2018 17:14

Pokud to ještě někoho zajíma, tak tady:
https://github.com/…bakalari-api

 
Nahoru Odpovědět
19.11.2018 17:14
Avatar
Odpovídá na David Duong
Albert Nyambaatar:31.3.2021 15:14

Ahoj Davide, narazil jsem na tvůj https://skolar.docs.apiary.io/ . Řeším právě teď stejný problém. V čechách není školní IS s normálním API. Všichni dodavatelé si syslí všechny funkce pro sebe (i nesmysly jako kalendář, emaily, formuláře, testy), ale kvalitou z doby kamenné. Naše škola jede na G-Suite, ale otroci (učitelé) důležité záznamy ručně přepisují do skolaonline.

Kam jsi se s tím dostal? Viděl jsem, že jsi zatím zpracoval fetch příkazy. Zkoušel jsi napsat nějakou push funkci? Je to opravdu předem prohraná bitva?

 
Nahoru Odpovědět
31.3.2021 15:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 32 zpráv z 32.