Kompendium: Antygoogler
Napisane: wtorek, 30 maja 2017, 18:38
Trwa aktualizacja tego wpisu. Zwykle jest to robione szybko, ale skoro została dodana ta ramka, tym razem może potrwać to nieco dłużej. Zawartość jest aktualna na chwilę napisania poniższego wpisu (data napisania lub edycji posta, bądź zamieszczona gdzieś w jego treści), ale obecnie może już nie być. Zajrzyj później, gdy ten komunikat zniknie, by przeczytać najświeższe informacje.
Antygoogler
Wpis ten dotyczy techniki maskowania pytań. Jeśli chcesz się dowiedzieć o skrypcie quizowym o takiej samej nazwie — zajrzyj tutaj.
Antygoogler jest specjalnym innowacyjnym rozwiązaniem opracowanym na potrzeby kanału quizowego #QuizPL (IRCnet). Jego zadaniem jest zminimalizować zachowania graczy nie mających na względzie quizowych zasad fair play, a ułatwiających sobie odpowiadanie podczas rozgrywek quizbotowych i quizowych poprzez korzystanie z Google, zamiast grania w oparciu o własną wiedzę lub spostrzegawczość — zwanych z tego powodu „googlerami”.
Pomysł na to rozwiązanie powstał w wyniku rozmowy quizowiczów oyey oraz wilk dnia 22 maja 2006 roku[1] na kanale #QuizPL, ok. 27 maja[2] podjęto temat realizacji tego w quizbocie i już 21 czerwca 2006 roku został on wprowadzony w życie przez wilka w bocie quizowym QuizPL.
Aby spełnić zakładane cele, czyli uniemożliwić kopiowanie całego lub fragmentu pytania do internetowych wyszukiwarek (np. Google, Bing czy Wikipedia), by szybko odnaleźć możliwą odpowiedź na pytanie na liście uzyskanych wyników, bądź też w przypadku dłuższego przebywania na kanale poprzez utrudnienie wyszukiwania w starych logach (antyloger) — zdecydowano, że jedyne co na IRC-u da się osiągnąć, to odpowiednie transformowanie treści pytań. Oczywiście nie sposób zapobiec ręcznemu przepisywaniu kluczowych wyrazów do wyszukiwarek…
Działanie antygooglera polega na podmianie przerw (spacji) pomiędzy wyrazami na losowo wybrane znaki alfanumeryczne. Aby jednak miało to sens i pytania wciąż pozostawały czytelne konieczne jest ukrycie tych wstawek poprzez zastosowanie tła dla całego pytania i użycie koloru dla wstawianych znaków identycznego z tłem. W ten sposób pytania na ekranie pozostają czytelne, ale próba ich zaznaczenia i skopiowania czy wyszukania w logu ujawnia ukryte dodatki i jest to na tyle utrudnieniem, że nie opłaca się (czas) tego robić. W wyniku ankiety wśród bywalców kanału #QuizPL (IRCnet), indywidualnych konsultacji oraz „testów polowych” wybrany został najlepszy zestaw kolorystyczny, który prezentuje się identycznie w większości programów do IRC — białe litery na niebieskim tle.
Antygoogler to pomysł prosty i skuteczny, choć z czasem natrafiono na pewne niedogodności, które w sporej (i uciążliwej) części wynikają z kiepskich i błędnych implementacji w programach do IRC-owania, głównie dla urządzeń mobilnych. Wiele programów takich jak np. mIRC oraz irssi nie ma żadnych problemów z poprawnym wyświetlaniem. Aby opisać dalsze niuanse konieczne jest zrozumienie tego jak zapisywane są informacje o kolorze i formatowaniu, które zostały wprowadzone i rozpowszechnione przez program mIRC (nie są to formaty ANSI). Otóż ustawienie koloru, to wprowadzenie w tekst w pożądanym miejscu znacznika w formacie „CXX,YY” — gdzie „C” to znak o wartości bajtowej \003, „XX” to dwucyfrowa liczba określająca kolor znaków, a „YY” to dwucyfrowa liczba określająca kolor tła. Obie liczby określające kolor są z przedziału od 00 do 15 i stanowią indeks koloru prezentowanego przez program z predefiniowanej palety. W przypadku wartości mniejszych od 10 można opuścić początkowe zero. Jeśli ustawiony ma być tylko kolor liter, to część odpowiadającą za tło, czyli „,YY” można opuścić. Wstawienie samego znacznika koloru (\003) powoduje zresetowanie bieżącego koloru. Ponadto dostępne są także inne formatowania tekstu: pogrubienie (\002), odwrócenie tła (\026), podkreślenie (\037), zresetowanie wszystkich aktywnych formatowań (\017) oraz często niewspierana kursywa (\035).
Wraz z dalszym funkcjonowaniem antygooglera w quizbocie QuizPL zauważono pewne mankamenty, które w większości zostały rozwiązane:
- ukryte znaki wybierane są z zestawu alfanumerycznego (a-z, A-Z i 0-9) — zrezygnowano z symboli i znaków interpunkcyjnych z uwagi na to, iż wyszukiwarki ignorują je i traktują w większości jako spacje,
- niektórzy użytkownicy próbowali omijać (zdejmować) antygoogler, by jednak móc wyszukiwać treść pytań lub logować je celem odnalezienia odpowiedzi — wprowadzone zostało małe utrudnienie w postaci zmienności we wstawianych kodach np. używanie zarówno jedno, jak i dwucyfrowych indeksów kolorów, nadmiarowe dodawanie koloru tła itp. - niestety powoduje to dość znaczne zwiększanie się liczby bajtów (każdy taki kod to 2-6 bajtów), z których faktycznie składa się pytanie,
- sieci IRC limitują długość każdej z linii tekstu (w przypadku IRCnetu jest to ok. 400 bajtów[3]), a po jego przekroczeniu tekst jest ucinany (programy jak mIRC czy irssi potrafią same podzielić dłuższy tekst na kilka wiadomości przed ich wysłaniem, lecz mają problem z kontynuowaniem tła z poprzedniej linii) — ponieważ niektórzy autorzy pytań mają tendencję do układania ich jako zbyt długich i opisowych, to aby temu zaradzić zdecydowano nie zamieniać każdej z możliwych spacji na ukryty znak, a tylko zamieniać losowe przerwy dopełniając linię antygooglerem, aż do uzyskania limitu długości - dzięki temu jedynie te nad wyraz długie pytania mogą ulec przycięciu, aczkolwiek takie podejście sprawia, że tych przesadnie długich antygoogler niestety nie będzie chronił,
- zależnie od rozdzielczości ekranu oraz wybranego rozmiaru czcionki, umiarkowanej długości pytania mogą nie zmieścić się w jednej linii ekranowej, programy dokonują wówczas złamania linii tekstu na ostatniej spacji i ciąg dalszy wyświetlają w kolejnej linii ekranowej; użycie antygooglera, który podmieniałby wszystkie spacje zaburza ten proces powodując nieestetycznie wyglądający podział tekstu (złamanie następuje na spacji tuż przed pytaniem oraz siłowo po określonej liczbie znaków), a co więcej odkryto, że niektóre aplikacje wyświetlają graficzne artefakty na końcach tak przełamanych linii, czasem wręcz gubiąc tło w kolejnej linii ekranowej — aby temu zapobiec algorytm dzieli wpierw pytanie na bloki tekstu i dopiero wówczas podmienia spacje, dzięki czemu programy nie mają problemu z prezentowaniem tak zabezpieczonych pytań,
- sporym wyzwaniem jest dobranie odpowiedniej szaty kolorystycznej, bowiem o ile poszczególne indeksy odpowiadają przypisanym nazwom kolorów, o tyle każdy program implementuje zwykle własne wartości RGB, które mogą różnić się nieco odcieniem przez co ten sam tekst może wyglądać inaczej w każdym z nich, a co więcej niektóre z nich zachowują się odmiennie prezentując np. pogrubienia i traktują to jako bardziej wyrazisty kolor lub też pomimo użycia identycznych wartości niektórych kolorów dla znaków i tła (czyli znaki powinny być niewidoczne), to pozostają one minimalnie, ale jednak zarysowane — dlatego też koniecznym było dobranie takich kolorów, by były możliwie wszędzie zbliżone i tutaj po długich testach i pytaniu graczy o ocenę wybór padł na białe (00) litery na niebieskim tle (02),
- wiele, nawet tych popularnych programów (szczególnie mobilnych), ma fatalnie zaimplementowany parser formatowania tekstu, który błędnie go interpretuje wyświetlając rozmaite wizualne artefakty, gubiąc nagle kolory itp., co może wręcz uniemożliwić grę — wymusiło to stosowanie różnych sztuczek i unikanie niektórych trudniejszych konstrukcji; zaobserwowano przykładowo ze:
— gubią się jeśli włączone zostaną kolejno dwa formaty (np. pogrubienie i podkreślenie), po czym wyłączone w odwrotnej kolejności lub tylko ten wcześniejszy — w obu przypadkach drugi format powinien dalej obowiązywać,
— nie akceptują jednocyfrowych kodów kolorów lub interpretują je odmiennie,
— w przypadku użycia tylko koloru znaków przecinek tuż za kodem bywa do niego błędnie włączony, a jako iż dalej nie jest podany indeks dla tła - kolor zupełnie się psuje, podczas gdy poprawny parser (mIRC, irssi i in.) traktuje taki przecinek wówczas jako normalny tekst — z uwagi na to wprowadzona została została sztuczka, która przed każdym przecinkiem w pytaniu dodaje zbędny podwójny kod formatujący (np. dwa pogrubienia: \002\002), nie jest on wyświetlany, ale odseparowuje ten przecinek, lecz niestety wydłuża to pytania,
— w przypadku wcześniej ustawionego koloru tła - odmienne traktowanie późniejszego kodu zmieniającego tylko kolor znaków oraz kodu zmieniającego zarówno kolor znaków i tła — w pierwszym przypadku, nawet jeśli ustawiono kolor identyczny jak wcześniejsze tło, to znaki bywają widoczne,
— błędnie traktują zmianę koloru jako reset poprzedniego ustawienia — ma to znaczenie przy wcześniejszym ustawieniu tła, a dalej zastosowaniu tylko zmiany koloru tekstu, co powoduje zupełne usunięcie tła z dalszej części tekstu,
— czy wreszcie jeśli nie obsługują formatowania tekstu, to powinny te kody ukryć, zamiast je wyświetlać przez co tekst z antygooglerem w zasadzie jest nieczytelny i uniemożliwia grę.
W skrypcie quizowym „iQuiz” napisanym przez tego samego autora (wilk), co bot QuizPL, również został zaimplementowany podobny antygoogler. Przy czym występuje tutaj kilka różnic: pytania nie są wpierw dzielone na bloki oraz nie jest zamieniane tylko tyle przerw, by nie przekroczyć limitu — zamiast tego skrypt podmienia wszystkie oprócz co trzeciej spacji (łamanie ekranowe linii), zaś jeśli pytanie przekroczy wyliczony limit długości, to zostanie podzielone na więcej linii wysłanych osobno (nieucinanie pytań i zachowanie koloru tła), ponadto z uwagi na znacznie większą liczbę podmian zrezygnowano rozszerzonej wariacji we wprowadzanych kodach antygooglera, lecz pozostawiono to jako opcję do włączenia.
Antygoogler został stworzony i rozwijany z myślą o bocie quizowym kanału #QuizPL (IRCnet), lecz technika ta okazała się tak wyjątkowo udanym pomysłem, że po jej wprowadzeniu z czasem znalazła swoje implementacje w skryptach quizowych takich jak „Milionerzy”, „Dizzy” oraz wspomniany „iQuiz”, a także była zapożyczana do botów quizowych na innych kanałach, aczkolwiek z racji nieujawniania sekretów quizbota - w najprostszej wersji (zwykła podmiana wszystkich spacji), niestety też bez wzmianek skąd zaczerpnięto pomysł.
[1] (22.05.2006) 01:01:31< oyey> wyliczylem ze srednio potrzebuja na wyciagniecie z googli 12.4 sek
(22.05.2006) 01:02:50<@WilQ> ja myślałem czy są może jakieś inne delimitery niż spacja, które by nie były widoczne dla userów
(22.05.2006) 01:03:01<@WilQ> to by raczej zepsuło poszukiwanie w google
(22.05.2006) 01:03:15< oyey> no ja juz na to wpadlem
(22.05.2006) 01:03:26< oyey> zeby dodawac do pytan znaki _
(22.05.2006) 01:03:36<@WilQ> ale zamiast spacji
(22.05.2006) 01:03:48< oyey> sto_li_ca Po+lski
(22.05.2006) 01:03:57<@WilQ> inny pusty znak, który nie byłby widoczny w irssi czy mircu, czy czymkolwiek
(22.05.2006) 01:04:07< oyey> mozna
(22.05.2006) 01:04:14< oyey> w ten sposob...
(22.05.2006) 01:04:32<@WilQ> troche to psuje czytelność
[2] (27.05.2006) [17:41:02] <@~wilk~> popracowac musze kiedys jeszcze nad tym mieszaczem i popsuciem zabawy googlerom i logujacym pytania
[3] Faktycznie jest to 512 bajtów, ale należy od tego odliczyć znacznik końca linii CRLF, nazwę kanału, nick!ident@host osoby wysyłającej komunikat oraz polecenie „PRIVMSG” i separatory.