BPROF:2dm
Ez a szócikk a "Rendszertervezés" tantárgy keretében keletkező dokumentum, mely része a szakdolgozat mellékleteinek. Tartalmazza a felhasznált technológia részletes leírását, informatikai felépítését. A dokumentum a reprodukálhatóság elősegítéséhez készült
Tartalomjegyzék
- 1 Szakdolgozat alrendszerei
- 2 Fogalmak
- 3 Megrendelői kezdeményezés
- 4 Rendszerspecifikáció
- 5 Program specifikáció
- 6 Tesztelés
- 7 Üzleti hasznosítás
- 8 Kapcsolódó wiki-oldalak
Szakdolgozat alrendszerei
- GTS (Graphical Test Software), ez a tesztek lejátszására kifejlesztett szoftver
- GTDS (Graphical Test Designer Software), ez a tesztek tervezésére kifejlesztett szoftver
- Theme4GTS ,ez a témák létrehozására fejlesztett szoftver
- Language4GTS ,ez a nyelvek létrehozására fejlesztett szoftver
Fogalmak
(potenciális változók a kódhoz)
- puzzle: X-szer Y-os háló, melyben a sorfejléc (X) és oszlopfejléc (Y) attribútumok alapján kell elhelyezni az odaillő válaszkártyát
- X(i): sorfejléc, mely megadja a válaszkártya1. attribútumát
- Y(j): soszlopfejléc, mely megadja a válaszkártya2. attribútumát
- válaszkártya(k): képkocka, melyet el kell helyezni a megfelelő kockájába a hálónak
- megoldástér(i,j,k):
- keretrendszer: puzzle megjelenítő szoftver
- log: minden tevékenység (pl. egérmozgás, billentyű-leütés, billentyű-kombináció) feljegyzése egy fájlban, dátummal felcímkézve (vö. https://miau.my-x.hu/mediawiki/index.php/Excel-makro#Tanfolyami_vez.C3.A9r-feladatok)
- kiértékelés: válaszkártyák helyének helyességének ellenőrzése
- teszt:
- hiba:
- játék:
- rendszer
- réteg
- modul
- alrendszer
- szoftver
- licensz
Megrendelői kezdeményezés
Létezik egy 2DM-játék (https://miau.my-x.hu/miau/254/2dm_kemia_demo/), amelyben a feladat egy 3x3-as* hálóban különféle képeket elhelyezni az oszlop- és sor-fejlécek alapján. A létező 2DM-játék log-ja a vágólapra keletkezik a JavaScript lehetőségei mentén. Az új rendszerben a sebezhetőségek minimalizálása, csalás minden mennyiségű kizárása a cél.
Feladat:
- Új játék tervezését és
- futtatását támogató keretrendszer kialakítása úgy, hogy
- a keretrendszer támogassa a puzzle megtervezését,
- az adat-megjelenítést/adatbevitelt,
- a puzzle megírását és
- a log-elemzést (vö. https://miau.my-x.hu/mediawiki/index.php/Excel-makro - Tanfolyami vezérfeladat).
- a keretrendszer által olyan output kialakítása, mely a jelenlegi 2DM-megoldás által azonnal futtatható
Nem feladat:
- online kollaboratív munka támogatása
- adatbázis-alapú megoldás kialakítása
Jelenlegi 2DM játék
Struktúrája: A jelenleg már elkészült 2DM játék adatbeolvasását,adatstruktúráját ki kell nyomozni annak érdekében, hogy a dolgozatban készülő játék kompatibilis lehessen vele. Nyomozás lépései:
- https://www.cyotek.com/downloads/info/setup-cyowcopy-1.9.0.822-x86.exe alkalmazás segytségével letöltöttem a https://miau.my-x.hu/miau/271/2dm/ weboldal összes fájlját
- letöltött adatok megjelenítése
- ebből egyetlen egy 2DM-játékhoz tartozó objektumok (vö. *BLANK*): ???
- egy játékra egyszerűsített manuálisan lebutított saját lokális verzió tesztelése
- régi 2DM-játék által igényelt specifikációk véglegesítése
- egy régi 2DM-játék (értékes tartalommal történő) manuális előállítása a specifikációk alapján az új játék fejlesztője által
- manuálisan készített saját játék tesztelése
- ezen manuális saját játék új keretrendszerben való reprodukálása és az output tesztelése
Rendszer megrendelővel egyeztetett követelményei
Optimális (tesztelt)
....
Választott technológiák
- Programnyelv:
- mobil:
- Swift
- mobil:
- lokális adattárolás: JSON
- publikus adattárolás: Firebase NoSQL adatbázis
- Bevonni tervezett online szolgáltatások:
- Általunk használandó:
- ChatGPT
- flowchart tervező
- Általunk ajánlott:
- nayuki.io/page/png-file-chunk-inspector
- png/jpeg/gif ellenőrzése
- helyesírásellenőrzés
- szöveget tartalmazó kép helyesírás ellenőrzése
- felolvasó robot esetén helyes-e a szöveg?
- Ötletek
- Általunk használandó:
Vizuális követelmények
single Játéktervező nézetei
- nyitó kép (1.vizuális réteg):
- tartalom:
- logó
- pl: copyright @ 2023 Sipos
- termék neve
- verziószám
- elérhetőségek
- weboldal
- telefon
- ...
- forma:
- betűméret
- stílus
- nyelv (nyelvválasztó, 0. vizuális réteg?)
- ...
- funkcionalitás:
- automatikusan betöltődik
- X másodpercig látható
- legalább az elérhetőség kijelölhető
- a nyitó képet a menük egyik alpontja újra betölti (kapcsolatok)
- tartalom:
- ÁSZF/szerződés (2.vizuális réteg):
- tartalom:
- licensz típus
- adatgyűjtés (GDPR)
- játéktervező felel a GDPR általi nem érintettségért
- log gyűjtés szabályrendszere. ezzel egyet kell értetni mind a játék tervezőt, mind a játék játszóját
- copyright a képekre (felelősség játéktervező részéről, NEM a keretrendszer tervező részéről!)
- halmazelméleti szabályok közlése a sor és oszlop fejlécre vonatkozóan
- kihagyásmentesség (kihagyásmentességi chatGPT-teszt: pl. palacsinta-receptből kihagyott tojás esetén a meg-tudod-e-sütni-kérdésre nemleges válasz kell és az indoklás is logikus hiányrámutatást kell, hogy adjon)
- átfedésmentesség (vö. halmazértelmezés chatGPT által: https://miau.my-x.hu/bprof/2023/chatgpt_sets.docx - a homogén halmazok (tortaszeleket) anomáliái felismertethetők, így a 2dm sor/oszlop-fejléc-tervezés chatGPT által is támogatható ) vö. https://www.youtube.com/watch?v=5cYYeuwYF_0
- súgó elérhetősége
- helyetérzékeny súgók elérhetősége
- GYIK
- forma
- kiemelések
- ugrópontok
- weboldal
- applikáción belüli ugrópont (pl.: helyetérzékeny súgók)
- kijelölhetőségek
- betűméret
- betűstílus
- funkcionalitás
- ÁSZF archiválhatósága (letölthetősége ... )
- súgók demója
- ÁSZF accept/deny gomb/checkbox
- Online adatbáziskapcsolat engedélyezése (ezt letiltva a felhasználó beszorítja magát a lokális adattérbe, ezt lehet később módosítani)
- Accessibility nézet
- színvakság
- szoftveres felolvashatóság
- élő billentyűkről szóló tájékoztatás
- ne lehessen felesleges inputot megadni, engedélyezetlen eszközről
- ...
- tartalom:
- Menü (3. vizuális réteg)
- tartalom
- szingle játék tervezése (egyenlőre 3x3)
- ellenőrzési elemek:
- játék adatfájljainak elérésének megadása (létezik-e az elérési útvonal)
- kép fájl típusok megadása listából (png, jpg, gif ...)
- képfájl tartalom azonosság ellenőrzése (fizikai azonosság, másolatok más néven való ellenőrzése)
- hiba üzenet ha nincs pontosan 17 db megfelelő formátumú képállomány
- maximum felbontás ellenőrzése (hiba üzenet ha a méret/arány nem megfelelő pl.: 400x400)
- kép permission olvashatóságának (read,write,execute) ellenőrzése
- kép formátum önazonosságának ellenőrzése ( attól még, hogy .png, valóban kép-e a kép)
- felső fájl méret ellenőrzése
- színpaletta egyenszilárdságának ellenőrzése
- vízjelmentesség ellenőrzése
- (törvényi előírásokat nem sértő tartalom garantálása)
- könyvtár olvashatóságának ellenőrzése
- kép fájl tartalmaz-e káros kódot?
- kép fájl nevek nem tartalmazhatnak speciális karaktereket (ékezet szóköz , fájlnév 1-17ig stb)
- képek stílusa egyezik-e? (pl.: mindegyik kép eliptikus...)
- képek játékba integrálása
- 17 soros összerendező táblázat (1-17ig előre kitöltve felülírhatóság mellett és a felhasználó ehhez fog alkalmazkodni)
- lapozó kép (1)
- bal felső sarok (2)
- oszlop bal (3)
- oszlop közép (4)
- oszlop jobb (5)
- sor felső (6)
- sor közép (7)
- sor alsó (8)
- válaszkártyák (9-17)
- 17 soros összerendező táblázat (1-17ig előre kitöltve felülírhatóság mellett és a felhasználó ehhez fog alkalmazkodni)
- ellenőrzési elemek:
- multi játék tervezése (csak single alapon)
- integrálandó játékok számának megadása (2-től N-ig)
- N db alkönyvtár megadása abban a sorrendben, amiben a játékok integrálandók (ezek a könyvtárak a single játék tervezés eredményeinek kell hogy legyenek)
- játéktervező szoftver névjegyének ellenőrzése könyvtáranként
- lokális adatfájl betöltése
- játék indítása
- online adatfájlok elérése katalógusosan
- beállítások elérése
- tervezői beállítások
- időlimites-e a játék
- éles vagy próba játék (lehet újrapróbálni...)
- tesztíró azonosítási módja (pl.: anonim, belső kód ...)
- ....
- tervezői beállítások
- szingle játék tervezése (egyenlőre 3x3)
- tartalom
- forma
- ellenőrzési elemekről olvasmányos,színes visszaigazolás
- funkcionalitás
- játéktervezés:
- ellenőrzési lépések után a felhasználót a lépések sikerességéről tájékoztatva:
- megfelelő játéktípus szükséges alkotórészeinek új alkönyvtárba másolása
- 1-17 képfájlok másolat készítése,átnevezése
- játékindítás fejajánlása
- ellenőrzési lépések után a felhasználót a lépések sikerességéről tájékoztatva:
- játéktervezés:
- forma
Játékot használó vizuális rétegei
....
Egyéb követelmények
Internet elérése szükséges a Kvíz Katalógus használatához, hiszen csatlakoznia kell a Firebase adatbázishoz
Egyéb funkciók
- UI személyre szabása előre elkészített, akár a felhasználók által személyre szabott téma segítségével - (színvilág/színharmónia nem ellenőrzött, a téma tervezőjének kell figyelnie arra, hogy a felhasznált színek nem olvadnak egybe egymással)
- nyelvek támogatása, akár a felhasználók által definiált szótár segítségével - (szótár helyessége nem ellenőrzött, nincs kizárva akár a halandzsa nyelv használata sem)
Folyamatábrák
- Puzzle tervezésének folyamatábrája:........
- Puzzle megírásának folyamatábrája:........
- Puzzle kiértékelésének folyamatábrája:........
https://miau.my-x.hu/miau/292/2dm_figures/ folyamatabrak lesznek
IT biztonsági kérdések
- kulcsok tárolása a forráskódban?
- tanács: nem az .exe -be fordítjuk bele a kulcsot, hanem valamilyen keychain szolgáltatásból nyeri ki
- Hálózaton keresztül történő adatátvitel feltörhetősége
- Logika nem a kliens,hanem a szerver oldalon kell, hogy tárolva legyen
- Adatbázishoz való hozzáférés kiosztása
- JSON alapú lokális adattárolás megfelelőssége
- régebbi verziójú keretrendszer használatának korlátozása, ezzel is csökkentve annak az esélyét, hogy egy már felefedezett sebezhetőségnek nem tesszük ki a felhasználót.
- képekhez kötődő károkozási formák feltárása
- kép eredeti (licensz kérdés nincs ha saját) vagy manipulált-e?
- ...pdf url
- elérési út alapján ellenőrizendő: létezik-e az objektum? (igen/nem)
- nem = hibaüzenet a felhasználónak a helyes elérési útvonal kikényszerítésére
- elérési útvonalban megadott fájl kiterjesztésének ellenőrzése (megfelel az előre fellistázott opcióknak/nem felel meg)
- nem = hibaüzenet a felhasználónak a helyes kiterjesztés kikényszerítésére
- elérési útvonalban megadott objektum jogosultságainak ellenőrzése (olvasható/nem olvasható)
- nem = kérjük oldja fel, az olvashatóság korlátozását
- a szóban forgó objektum megfelel-e a kiterjesztéshez kapcsolódó összes elvárásnak (igen/nem)
- nem = hibaüzenet a felhasználónak, kérjük hozzon fel egy szabványos ... kiterjesztésű objektumot
- igen =
- ...pdf url........
- https://www.nayuki.io/page/png-file-chunk-inspector
- api curl kapcsolat lehetőségének operatív feltárása
- kép méret,harmónia, ellenőrzése
- ezeknek a sorrendje?
- először méret, legvégén a harmónia
- szerintem rettentő mindegy
- kép ne olvadjon bele a futtató környezetbe
- színharmónia megítélése
- skálázható
- mondhatja a szoftver, hogy szerinte ez csúnya
- ezeknek a sorrendje?
- SSL pinning (https://medium.com/trendyol-tech/securing-ios-applications-with-ssl-pinning-38d551945306 , https://www.kodeco.com/1484288-preventing-man-in-the-middle-attacks-in-ios-with-ssl-pinning)
Programnyelv
Több fajta programnyelvet kipróbáltam, ám legvégül IOS környezetben, Swift nyelvnél döntöttem. (https://miau.my-x.hu/mediawiki/index.php/BPROF:2dm#Swift) Felsorolom a kipróbált nyelveket, majd legvégül kifejtem a Swift fejezetet.
Desktop
interpretált vs fordított
- Interpretált programnyelv:
Az interpretált sorról sorra olvassák be a programot, és futtatnak le minden parancsot.
Ezek a programnyelvek szignifikánsabban lassabbak, mint a fordított programnyelvek.
pl.: Python, Ruby
- fordított programnyelv:
Közvetlenül a CPU-ba vannak írva, és ezért gyorsabban lehet futtatni öket, mint az interpretált nyelveken íródott programokat.
Hátránya, hogy a fejlesztéskor minden változtatás futtatásakor rebuildelni kell a teljes programot.
Előnye, hogy mivel a CPU-ba vannak írva, nehezebb hozzáférni a forráskódhoz.
pl.: C++, Rust, Go
Konklúzió: Nem lesz logika tárolva a frontendben, ez a későbbi alfejezetekben lesz kifejtve.
Mobil
Swift
https://github.com/securing/IOSSecuritySuite
IT biztonság:
- Jailbreak (root jogosultság) felismerése (vö. https://en.wikipedia.org/wiki/IOS_jailbreaking#:~:text=On%20Apple%20devices%20running%20iOS,a%20series%20of%20kernel%20patches)
<key>LSApplicationQueriesSchemes</key> <array> <string>undecimus</string> <string>sileo</string> <string>zbra</string> <string>filza</string> <string>activator</string> </array>
func checkJailbreak() { let jailbreakStatus = IOSSecuritySuite.amIJailbrokenWithFailMessage() if jailbreakStatus.jailbroken { print("This device is jailbroken") print("Because: \(jailbreakStatus.failMessage)") } else { print("This device is not jailbroken") } }
Ennek teszteléséhez szükség van egy Jailbreak-elt iOS eszközre. Mivel ez nem áll redelkezésemre, ezért vagy a Simject (https://github.com/akemin-dayo/simject) vagy a Corellium (https://www.corellium.com) segítségével fogom tesztelni..
- SSL Pinning
Az SSL pingelés azt jelenti, hogy egy készülék teszteli, hogy egy másik számítógép vagy szerver SSL/TLS titkosítást használ-e az adatkapcsolatánál. Az SSL/TLS a Secure Sockets Layer/Transport Layer Security protokolljai, amelyek kétoldalú titkosítást biztosítanak a kommunikációhoz, így megakadályozzák az adatok illetéktelen hozzáférését vagy megváltoztatását.
Az SSL pingelés egy olyan módszer, amely megállapítja, hogy egy adott szerver milyen gyorsan és megbízhatóan reagál SSL kapcsolatokra. Az IOS készülékek esetében az SSL pingelés általában egy olyan alkalmazás által történik, amely az adatkapcsolatokat kezeli, például egy böngésző vagy egy e-mail alkalmazás. Az SSL pingelés eredményei segíthetnek az alkalmazásnak meghatározni, hogy melyik szerverrel lehet a legjobb kapcsolatot létesíteni, és így javíthatják az alkalmazás teljesítményét és a felhasználói élményt.
- App Attest Service
Az App Attest Service az Apple által az iOS 14 és az újabb verziókban bevezetett szolgáltatás, amely lehetővé teszi az alkalmazások számára, hogy igazolják a biztonságos futásukat az Apple rendszerén belül. Az App Attest Service a biztonsági kulcsokat és az Apple T2 chipjének használatával valósítja meg a biztonságos alkalmazások ellenőrzését.
Az App Attest Service szolgáltatás segítségével az alkalmazások egyedi azonosítóval rendelkező igazolást kérhetnek az Apple-től, amely igazolja, hogy az adott alkalmazás hiteles és az Apple rendszerében fut. Az igazolás tartalmazza a kulcsot, amelyet az alkalmazás felhasználhat az alkalmazás eredetiségének és biztonságosságának bizonyításához, például azonosításra szolgáló tokenek, a biztonságos kommunikációhoz használt titkosított kulcsok és egyéb funkciók esetén.
Az App Attest Service segít az alkalmazásoknak biztosítani, hogy csak az eredeti, biztonságosan fejlesztett kód fut a rendszerben, és segíthet megelőzni az adathalászatot, a csalásokat és a biztonsági kockázatokat. Az alkalmazásfejlesztőknek azonban támogatniuk kell az App Attest Service használatát az alkalmazásukban, hogy maximális biztonságot érhessenek el.
- Hide current view on applicationWillResignActive
- Prevent Logging in Production, ...
- Function Hooking
A "function hooking" olyan technika, amely lehetővé teszi, hogy a programozó megváltoztassa egy program futás közbeni működését azáltal, hogy megváltoztatja annak függvényhívásait. A Swift programozási nyelvben ez azt jelenti, hogy a programozó a program futása közben hozzáadhat kódot egy függvényhívás előtt vagy után, hogy megváltoztassa a függvény eredményét vagy működését.
A function hooking általában olyan rendszerszintű programokban használatos, amelyek a rendszerhívásokat módosítják, de néhány esetben a fejlesztők is használhatják, például hibakereséshez vagy teszteléshez.
A Swiftben a function hooking megvalósítása az alacsony szintű C funkciók használatával lehetséges, például a dlsym() és dlopen() függvényekkel. A function hooking azonban erős függőséget mutat a rendszerbeli struktúrákra, és általában nem ajánlott átlagos fejlesztőknek, mivel hibákat és instabilitást okozhat a rendszerben.
- Módosítások az alkalmazásban
Az IOSSecuritySuite egy harmadik féltől származó keretrendszer, amelyet az alkalmazás biztonságának javítására lehet használni. A fenti kódrészletek azt ellenőrzik, hogy az alkalmazásunkat manipulálták-e.
Ha hozzá szeretnénk adni az alkalmazásunkhoz, akkor először importálnunk kell az IOSSecuritySuite keretrendszert a projektünkbe. Ezután az alkalmazásunkban meg kell hívni a fenti függvényeket, amelyek visszatérnek egy eredmény struktúrával, amely tartalmazza a baszogatás eredményét.
A kód szerint az első függvény (amITampered) ellenőrzi, hogy az alkalmazásunkat manipulálták-e az adott bundleID-vel, mobileProvision-nel és machO fájl SHA256 hash-jével. Az eredmény egy result logikai érték, amely megmondja, hogy az alkalmazásunkat manipulálták-e vagy sem.
A második függvény (getMachOFileHashValue) visszaadja az adott Mach-O fájl SHA256 hash-jét. Az első példa custom paramétere az IOSSecuritySuite keretrendszer saját Mach-O fájlját használja. Az eredmény alapján az alkalmazásunkat manipulálták-e vagy sem.
A harmadik függvény (a példában kommentként megjegyezve) ellenőrzi az alkalmazásunk saját hash-értékét, amelyet a szerverről lehet lekérni.
Fontos megjegyezni, hogy az IOSSecuritySuite csak egy eszköz az alkalmazás biztonságának javítására. Az alkalmazás biztonságának javítása érdekében többféle eszközt kell használni, beleértve a kódellenőrzést, a titkosítást és az egyéb biztonsági mechanizmusokat.
if IOSSecuritySuite.amITampered([.bundleID("biz.securing.FrameworkClientApp"), .mobileProvision("2976c70b56e9ae1e2c8e8b231bf6b0cff12bbbd0a593f21846d9a004dd181be3"), .machO("IOSSecuritySuite", "6d8d460b9a4ee6c0f378e30f137cebaf2ce12bf31a2eef3729c36889158aa7fc")]).result { print("módosítottak") } else { print("nem módosítottak.") } if let hashValue = IOSSecuritySuite.getMachOFileHashValue(.custom("IOSSecuritySuite")), hashValue == "6d8d460b9a4ee6c0f378e30f137cebaf2ce12bf31a2eef3729c36889158aa7fc" { print("nem módosítottak.") } else { print("módosítottak.") } if let hashValue = IOSSecuritySuite.getMachOFileHashValue(.default), hashValue == "your-application-executable-hash-value" { print("nem módosítottak semmit.") } else { print("módosítottak.") }
IT Bizonság tesztelése
IOS-es fájlkezelővel megnyitottam az alkalmazás tartalmát:
IMG-állományok (ZIP): https://miau.my-x.hu/miau/292/2dm_figures/GTS%20ios%20app%20ITB%20k.zip
- IMG_0001.png , IMG_0010.png, firebase_url.png
A firebase adatbázis url-je. Az urlt nem lehet megnyitni böngészőből, ehhez a tulajdonos (jelen esetben a dolgozatíró) Google azonosítójával kell bejelentkezni a firebase szolgáltatásba.
- IMG_003.png
Az alkalmazást ki lehet bontani egy szoftver segítségével. A szoftver megjeleníti nekünk az alkalmazáson belüli függvényeket, fájlok neveit, fontosabb kódrészleteket.
- IMG_0005.png
Itt megtalálható minden alkalmazás fájl. Nyelvi fájlok (Localizable.strings) , Property list fájlok (.plist), és egyéb, az app futtatásához szükséges fájlok.
- IMG_0006.png , IMG_007.png, IMG_008.png
Ez a nyelvi fájl. Itt deklarálom, hogy melyik kifejezés éppen melyik nyelven miként jelenjen meg.
- IMG_009.png
Ez maga az alkalmazás konfigurációs fájlja. Itt az érzékeny adat az “EMAIL” és “PASSWORD” mezőkben található. Ezt szánt szándékkal készítettem így, mivel ez is egy módszer, egy alkalmazásbeli kulcs tárolásra.
Van rá lehetőség más módon tárolni ezeket a kulcsokat, elképzelhető, hogy a későbbiekben megváltozik a dolgozatban használt technológia.
https://www.securing.pl/en/the-secure-way-to-store-secrets-on-ios-devices/
“This also can be hacked if the hacker can have access to the archive file of our iOS. But this can be only shared with the people inside the company only, so I may not see this as a high threat.”
- https://medium.com/@karthianandhanit/how-to-securely-handle-the-third-party-keys-in-ios-adc6266efc1f
Szeretném hangsúlyozni, hogy ezekhez az adatokhoz való hozzáférés az IOS rendszerben mezei felhasználó számára nem kivitelezhető, root jogosultság, személyre szabott boot loader, kernel patchelés és még sok minden szükséges. Rengeteg ember foglalkozik ezzel (ki hobbi/ki professzionális szinten), hogy az éppen aktuális IOS-t “jailbreak”-eljék. Nekem nem ez volt a célom, ez egy kicsit nagyobb falat feladat lenne.
Tesztelt prorgamnyelvek
C#
Feltörése
C# visszafejtése JetBrains dotPeek szoftver segítségével: https://miau.my-x.hu/mediawiki/index.php/BPROF:Csharp_Visszafejt%C3%A9se
Ruby
Mivel nem fordított nyelv, ezért a kódot nem lehet "elrejteni". A program egy *.rb fájl lenne, és ezt kellene futtatni egy interpreter segítségével. Emiatt a Ruby programnyelv használatát elvetem (a szakdolgozat GUI részének megvalósításához)
Feltörése
Nincs szükség rá,mivel magát a script fájlt futtattam le
Rust
Fordított programnyelv, tehát IT biztonsági szempontból megfelelő.
Logika tárolása
A keretrendszer logikáját nem maga a kliens,hanem a szervernek kellene kezelnie
Backend
Itt kell a logikát tárolni. (azaz,hogy a képkockák jo helyen vannak -e Feladat: megfelelő backed service-t találni
Lista lehetséges backend service-kről:
- heroku.com (fizetős)
- aws
Frontend
Itt nem kellene semmi logikát tárolni, csak az adatokat megfelelő módon átadni a backendnek Feladat: megtalálni a megfelelő frontend setupot. Megfelelő = szép, kultúrált, lehetőleg multiplatform supportos Kiválasztott: electron
licenszelés
A szoftver licensszel való védése már egy erős IT biztonsági lépés.
ki kaphat licenszt?
Ingyen kellene adni, mert nem tartom reálisnak, hogy a tanárok/iskolák erre költenének. -> önkormányzatoknak kellene ezeket managelni?
Licensz tárolása adatbázisban (Firebase)
_______________________________ | licensz tulaj | licensz kód | ############################### | ............. | ........... | ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Amelyik kód bent van az adatbázisban a megfelelő rekordokkal, az hozzáférhet a programhoz
licensz generálása
Szerveren° futtatandó scriptnek kellene kérésre generálnia licensz kulcsokat, és azokat eltárolni a Firebase-s adatbázisban
° milyen szerveren?
licensz archiválása
licensz árazása
Lokális adattárolás
Nem éppen megfelelő az alkalmazás adatait JSON fájlokban tárolni. pl.: .db fájlban tárolni? https://learn.microsoft.com/en-us/windows/apps/design/app-settings/store-and-retrieve-app-data
Szoftverben használt csomagok és azok licenszeik
majd a végén, amikor kész lesz a szoftver
Log rendszer
A rendszer minden felhasználói tevékenységet feljegyez mind fejlesztési, mind a csalás elkerülése érdekében. A teszt fejlesztője megmondhatja, hogy mennyire kell szigorúan venni a szabályokat:
- minden csalás tiltott, első attrocitás esetén a teszt lezárul, a log elkészül
- csalások nincsenek engedélyezve, ám nem zár le a keretrendszer, csak logolja, hogy ez és ez történt
- szabadon lehet csalni
- beállíthatjuk, hogy mit vegyen csak figyelembe a rendszer. (indoklása: pl moodlen feltöltött anyagokat lehet használni, de más internetes keresést stb... nem)
Jelenleg logolható
- app minimalizálása, bezárása, puzzle elindítása
Tervezett funkciók
- internet használat elemzés (van-e esetleg olyan kulcsszavú keresés, mint amilyen szavak/kifejezések vannak az éppen aktív puzzle fájljaiban?)
- egérmozgás elemzés (mennyire határozott a teszt író -> túl nagy határozottság akár azt is jelentheti, hogy valahonnan megszerezte a megoldásokat a teszthez ?)
- ismert közösségi,csevegésre használt alkalmazások meg vannak-e nyitva (Messenger,Discord,facebook.com,Skype,Teams stb), ezek csalásra adhatnak lehetőséget
- külső meghajtók vannak-e csatolva
- adat mozgatás történt-e a számítógépen a teszt írása közben (x lokációról y lokációra való fájl mozgás)
- operációs rendszerre telepített képfelismerési program detektálása
- távolról van-e vezérelve a gép
- képernyőkép készítésének logolása
- automatikus egér mozgató (ha van ilyen, https://2b2t.miraheze.org/wiki/Baritone) auto clicker detektálása
- ...
Rendszerspecifikáció
Ajánlott irodalom/demo/minta: http://centroszet.hu/tananyag/ - pl. http://centroszet.hu/tananyag/szervezes2/615_rszletes_rendszerterv.html
Logikai rendszerterv
Fizikai rendszerterv
Program specifikáció
A követekző alfejezetben fogom összegyűjteni a program különféle specifikációját
User interface
Választott UI technológia
- WPF, xaml
- továbbá kiegészítés C# segítségével
Alternatívák
- WinUI
- Avalonia (https://avaloniaui.net/)
- WinForm
- MAUI (https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/)
- UWP
- Uno (https://platform.uno/)
- Blazor (https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor)
Adattárolás
Eredeti, elvetett ötlet
Githubon organizációban tárolt adatok. Hozzáfárés engedélyrzése esetén lehetett ide publikálni repositorykat. Ez se informatikailag, se IT biztonságilag nem volt megfelelő ötlet, ám nem kellett adatbázist fenntartani hozzá.
Lokális adattárolás választott formája
- A JSON fájlok egyszerű olvashatósága, értelmezhetősége miatt bárki létre tud hozni saját témát, nyelv sémát.
- Alternatív megoldások elvetésének indoklása: Egyszerű txt fájlok is megfelelőek a feladatra, ám a JSON fájltípus által biztosított kulcs-érték adatszerkezet nagy segítséget nyújt a fájl adatbázis szerű átláthatósághoz, illetve a programmal való feldolgozhatósághoz.
Ez a saját téma/nyelvi csomag létrehozásának segítségül is szolgáló leírás.
- A keretrendszer az adatokat .json fájlokban tárolja. Ezek
- a beállítási adatok (kiválasztott téma illetve nyelv),
Unrestricted adattárolás választott formája
Firebase adatbázis
Adatbázis jogosultságai
Csak megfelelő ID-val lehet elérni az adatbázist, melyet az alkalmazás tárol. Ezt megfelelően kell tárolni, hogy ne lehessen kinyerni a forráskódból, Az ID csak az áruház adatait tároló adatrészhez kap olvasási jogosultságot. Ehhez létre hoztam egy usert, mely be fog jelentkezni minden kliensen read jogosultsággal:
https://miau.my-x.hu/mediawiki/images/6/6e/FirebaseAuthUser.png
Ez így néz ki a Firebase jogosultság szerkesztőben:
{ "rules": { "quizCatalog": { ".read": "auth.uid === 'Létrehozott Firebase Auth user ID-ja'" } } }
ezt egy "FirebaseAPIKey.xcconfig" fájlban tárolom el a következő módon:
EMAIL = "..." PASSWOWRD = "...."
majd így tárolom el az alkalmazásom 'Info.plist" fájljában:
.... <key>EMAIL</key> <string>$(EMAIL)</string> <key>PASSWORD</key> <string>$(PASSWORD)</string> ....
Bejelnkezni pedig ezzel a metódussal tud az alkalmazás:
if let firebaseEmail = Bundle.main.infoDictionary?["EMAIL"] as? String { if let firebasePassword = Bundle.main.infoDictionary?["PASSWOWRD"] as? String { Auth.auth().signIn(withEmail: firebaseEmail, password: firebasePassword) { (result, error) in if let error = error { print("Error signing in: \(error)") return } guard let userId = result?.user.uid else { print("No user ID found") return } } } }
Az email és jelszó tárolásátaz alkalmazásban a Config.xcconfig fájl segítségével tudjuk biztonságosan eltárolni.
A probléma ezzel, hogy az ID-t csak új alkalmazás verzó publiklásával tudom módosítani, ám mezei felhasználó nem tud hozzáférni ehhez a kódhoz.
Amennyiben a Config.xcconfig publikussá válik, a usernevet és jelszót is meg kell változtatni, mely egy uj alkalmazasverzio kiadasával élesíthető .
Egyéb ötletek
Egyszeri jelszóval (OneTimePassword) azonosítsuk a klienst. Ehhez generáltatni kell egy jelszót, melyet el kell tárolni az adatbázisban is valami módon.
Konfiguráció
A rendszer konfigurálható paramétereit json fájlokban tároljuk, melyek a rendszer különböző életciklusaiban kerülnek betöltésre.
defaultConfig.json
Rendszer újraindításától lép életbe.
{ "data": [ { "theme": "dark.json", "language": "hu.json" } ] }
Nyelv fájl
Rendszer újraindításától, vagy új nyelv kiválasztásakor lép életbe.
{ "windowTitle": "Teszt kitöltése...", "loadTestFileBtn":"Teszt fájl betöltése", "startTestBtn":"Teszt indítása", "settingsBtn":"Beállítások", "nextBtn": "Következő", "previousBtn": "Előző", "saveBtn":"Mentés" }
Tesztadatok
A tesztfolyamat adatok betöltése után lép életbe. Az elérési útvonalnak a publikált képekre kell mutatni.
(kérdés, válasz lehetőségek)
{ "puzzles": [ { "question": "Ide írjuk a kérdést", "correctGridOrder": { "1": "C:/Users/x/Y/kep1.png", "2": "C:/Users/x/Y/kep2.png", "3": "C:/Users/x/Y/kep3.png", "4": "C:/Users/x/Y/kep4.png", "5": "C:/Users/x/Y/kep5.png", "6": "C:/Users/x/Y/kep6.png", "7": "C:/Users/x/Y/kep7.png", "8": "C:/Users/x/Y/kep8.png", "9": "C:/Users/x/Y/kep9.png" } },… ] }
Esetleges többletadat figyelmen kívül hagyása, ez esetben csak az 1-9ig felsorolt adatokat, és a "question" kulcsban megadott adatokat fogja figyelembe venni a rendszer.
Téma fájl
Rendszer újraindításától, vagy új téma kiválasztásakor lép életbe.
{ "data": [ { "backgroundColor": [ 120, 0, 100, 0 ], "buttonColor": [ 150, 0, 255, 0 ] } ] }
Értelmezése: argb színkódolást használ a szoftver, mely az Alpha, Red,Green és Blue színekből állít elő szint.
pl:
"backgroundColor" színkódjának értelmezése
120: Alpha
0: Red
100: Green
0: Blue
...
Hibaelhárítás
(note: milyen funkciok vannak amik segitenek a hibaelharitasban)
A log megjelenítése a felhasználónak. Log automatikus kielemzése (pár alap esetet tudok előre definiálni, pl.: rossz json struktura, rossz fajlkiterjesztes stb), és tanács adás a felhasználónak, hogy vajon mi történt, és mit tudna tenni, hogy legközelebb ne történhessen meg ilyen eset. A szoftver kísérletet tehet a hiba automatikus kijavítására ezekben az esetekben:
- hibás .json fájl struktúra -> amennyiben logikus hiba van (hiányzik "," ":" "{" karakter), pótolni tudja azokat. Természetesen tudomást ad a felhasználónak, hogy nem feltétlen a kívánt adat lett előállítva.
- Amennyiben olyan eset áll elő, ami nem pre-definiált, akkor support kontaktálás (email)
- ...
Előredefiniált hibák:
- ...
- ...
Perzisztencia
Egy konfig fájlba vannak írva a külön beállítások (nyelv, téma), tehát ezek perzisztensek. A teszt írása közben készülő, sérülésmentes logfájl segítségével (a teszt tervező engedélyével) vissza lehet állítani a folyamat utoljára elmentett állapotát, akár rendszer újraindulás után is
Tesztelés
Ebben a fejezetben fogom leírni mind a belső (saját magam/KJE-n belüli) mind a külső (.......) tesztelési folyamatokat, észrevételeket, eredményeket.
Belső tesztelés
A keretrendszer megvalósításakor intézményen belüli, és kívüli személyeket felkértünk a tesztelésre. Kiosztott jogosultságokkal belső tesztelés folytatódott intézményen belül, melynek segítségével több hibát is felfedeztünk. privat kanban boardon (majd elkészül)
Github Actions szolgáltatás segítségével minden egyes Branch Merge (vö.: https://www.w3schools.com/git/git_branch_merge.asp?remote=github) alkalmával tesztelendő a kód, ezen és ezen szempontokból (ezek a logikai szempontok, ezekből még nem tudjuk, hogy miket lehet megvalósítani):
- Projekt buildelhetőségének tesztelés:
- A program le tud futni, nincs benne hiba
- ...
- Játék játszhatóságának tesztelése
- Sikerült adatot betölteni
- Van output a játékból
Nem szempont:
- Tartalmi ellenőrzés
Mivel ez csupán forráskód, ezért nem szükséges a szakdolgozatíró saját magának írt kódot ellenőrizni tartalmi szempontból, hiszen nem publikus
Projekt buildelhetőségének tesztelés
GitHub action fájl:
name: build and test on: push: pull_request: branches: - '**' paths-ignore: - 'README.md' env: DOTNET_VERSION: '6.0.x' # The .NET SDK version to use # Defines a single job named "build-and-test" jobs: build-and-test: # When the workflow runs, this is the name that is logged # This job will run three times, once for each "os" defined name: build-and-test-$Sablon:Matrix.os runs-on: $Sablon:Matrix.os strategy: matrix: os: [windows-latest] # Each job run contains these five steps steps: # 1) Check out the source code so that the workflow can access it. - uses: actions/checkout@v2 # 2) Set up the .NET CLI environment for the workflow to use. # The .NET version is specified by the environment variable. - name: Setup .NET uses: actions/setup-dotnet@v1 with: dotnet-version: $Sablon:Env.DOTNET VERSION # 3) Restore the dependencies and tools of a project or solution. - name: Install dependencies run: dotnet restore # 4) Build a project or solution and all of its dependencies. - name: Build run: dotnet build --configuration Release --no-restore # 5) Test a project or solution. - name: Test run: dotnet test --no-restore --verbosity normal
Github Action kód magyarázat
Alap konfiguráció
Ez az alap konfig, még nem a kódot teszteli, hanem megmondja, hogy mit kell/mit nem kell testtelni. a Github Action action neve
name: build and test
Minden branchet végig tesztel, minden egyes Git push eseménykor:
on: push: pull_request: branches: - '**'
A Readme.md fájlokat kihagyja a tesztből:
paths-ignore: - 'README.md'
Beállitja a .NET verziót 6.0.X-re (mivel a keretrendszer ezt használja vö.: *link a specifikáciokbol*, X >= 0)
env: DOTNET_VERSION: '6.0.x'
valamiiiii
jobs: build-and-test:
sdrdfsdffdfdfd
name: build-and-test-$Sablon:Matrix.os runs-on: $Sablon:Matrix.os strategy: matrix: os: [windows-latest]
Forráskód tesztelése
Itt kezdődik a prejekt testz
Játék játszhatóságának tesztelése
Készülnie kell egy Unit tesztelő algoritmusnak, mely tudni fogja a keretrendszerek paramétereit, argumentumjait, és ennek megfelelően megpróbálja mind valid, mind invalid adatokkal feltölteni a keretrendzsert. Ennek eredményeaképpen látni fogjuk, hogy milyen inputra milyen output fog keletkezni, és felfedhetőek lesznek az inkonzisztens adatok által létrehozott hibák is.
Külső tesztelés
Publikus tesztelés, ezen a kanban boardon kell gyűjteni a problémákat a projekttel kapcsolatban: https://github.com/users/SiposPtr/projects/2
Fejlesztői saját 2DM-játékok
Hogyan nézzen ki egy lefejlesztendő játék, amennyiben a fejlesztő kézzel, és nem az erre megadott alrendszert (GTDS) használja.
1. játék
- X=3
- X1= oszlop1
- X2= oszlop2
- X3= oszlop3
- Y=3
- Y1= sor1
- Y2= sor2
- Y3= sor3
- válaszkártyák (9=3*3)
- VK1= kép1-nek a lokális elérési útvonala
- VK2= kép2-nek a lokális elérési útvonala
- VK3= ...
- VK4= ...
- VK5= ...
- VK6= ...
- VK7= ...
- VK8= ...
- VK9= kép9-nek a lokális elérési útvonala
- Maga a feladat megfogalmazása
i. játék
- X>3
- Y>3
- X<>Y
Teszt katalógus
A katalógus a Firebase adatbázist fetcheli, és jeleníti meg.
A katalógus a GTS alrendszer része, mivel:
- a tesztírónak elég egy alkalmazást tudnia használni
- a teszt megírása amúgy is a GTS rendszerben fog történni, így kézenfekvő a kvízek letöltése onnan, ahol a kvízt két-három kattintással később le is lehet játszani
Saját teszt publikálása
https://miau.my-x.hu/mediawiki/index.php/BPROF:2dm_q1
Üzleti hasznosítás
Lényegében iskoláknak készült, hogy a tanulókat számon kérjék stb.................