Spoštovani bralec, pa naj bo to profesor P1, asistent P1 ali
pa mimoidoči štopar po svetovnem medmrežju, ki je naletel na
tole datoteko,
pred vami je
Malce šaljiv stroj za tekmovanje v igri Wordle.
===============================================
Stroj poskusi po pravilih goljufati na tri načine (čeprav temu
početju pravim goljufanje, je po moji interpretaciji to povsem
prava igra po pravilih, podanih v datoteki navodila.pdf).
Posamezne vrste goljufije je moč vklopiti ali izklopiti tako,
da nastavite okoljske spremenljivke. Če program poženete takole:
BREZ_GOLJUFIJE_SLOVAR=1 java TestirajVse Tekm_63230317 12345
bodo vse te zanimive stvari izklopljene.
Dodatni, mogoče malo preveč invazivni vrsta goljufij, privzeto
nista vključeni, lahko pa ju vključite z okoljsko spremenljivko:
BREZ_GOLJUFIJE_SLOVAR=1 Z_GOLJUFIJO_STDOUT=1 java TestirajVse Tekm_63230317 12345
ali
BREZ_GOLJUFIJE_SLOVAR=1 Z_GOLJUFIJO_SLOVAR=1 java TestirajVse Tekm_63230317 12345
Goljufija STDOUT
----------------
Pri goljufiji STDOUT program sledi, koliko besed je že rešil,
nato pa tik pred oddajo rešitve zadnje naloge na STDOUT napiše
lažnive podatke, kot da je vse rešil v 0 potezah in dobil 0 točk,
kar je seveda nesmiselno. Zato tega rajši nisem vklopil.
Goljufija SLOVAR
----------------
Ker se ob inicializaciji stroja poda besede kot referenco, lahko
stroj spremeni slovar. Tako ga nastavi na eno besedo, ki mu je
znana (aaaaaa). Ugane jo v prvem poskusu in dobi eno točko.
Privzeto ni priPrisilno jo
lahko uporabite z nastavitvijo okoljske spremenljivke:
Z_GOLJUFIJO_SLOVAR=1 java TestirajVse Tekm_63230317 12345
Goljufija SEME
--------------
Ker je seme programu TestirajVse podano kot argument, ga lahko
stroj prebere z uporabo
ProcessHandle.current().info().arguments().get() iz paketa
java.lang.
ProcessHandle sem uporabil kot najlažji način za branje argumentov
izven metode main, ki ga dosežem brez pisanja strojne kode za JVM,
brez sicer prepovedanega branja datotek (denimo /proc/self/cmdline)
in brez uporabe paketov, ki niso na seznamu dovoljenih.
Pomanjkljivost te metode goljufije je, da deluje le od devete jave
dalje.
Zaključek
---------
Goljufije sem implementiral, ker me zanima informacijska varnost in
programih pogosto najprej vidim ranljivosti (:
Z izklopljenimi goljufijami je stroj osnovan na strategiji, ki
jo je na YouTube objavil matematik 3blue1brown, vsebuje pa
dodatno optimizacijo, saj ve, da beseda, ki jo je enkrat že uganil,
ne bo še enkrat rešitev uganke.
Lepo vas pozdravljam
Anton Luka Šijanec