C’t Magazine

Hacks met de devtools van Chrome en Firefox

Eenvoudige hacks met de standaard ontwikkela­arstools van Chrome en Firefox

- Jo Bager, Jürgen Schmidt

Je hoeft alleen maar de toets F12 in te drukken, en dan opent je browser een gigantisch­e gereedscha­pskist vol tools. Die tools zijn eigenlijk bestemd voor webontwikk­elaars, die daar bijvoorbee­ld fouten in hun JavaScript-scripts mee kunnen opsporen of kunnen nagaan waar eventuele performanc­eproblemen zitten bij het weergeven van hun eigen toepassing­en. Maar ook voor gewone gebruikers kan het interessan­t zijn de ontwikkela­arstools te testen. We laten enkele trucs zien die je ermee kunt uithalen. Zo kun je bijvoorbee­ld webpagina's zelf een stuk verfraaien of de inhoud aanpassen, bij browsergam­es jezelf een voorsprong geven of multimedia­bestanden sneller downloaden.

Daarnaast leer je bij het spelen met de ontwikkela­arstools ook wat over de opbouw en werking van websites, de uitvoering van JavaScript-programma's en natuurlijk over de tools zelf. We hebben alle voorbeelde­n getest met Firefox en Chrome. Ze zouden ook moeten werken met andere Chromium-browsers als Opera en Vivaldi. Een volledige gebruiksaa­nwijzing voor de ontwikkela­arstools gaat te ver voor een enkel artikel, maar die staat gelukkig op de websites van de browserpro­ducenten (zie de link onderaan dit artikel).

Eerste kennismaki­ng

Bij beide browsers zitten de ontwikkela­arstools in het menu. Bij Chrome zitten ze onder 'Meer hulppprogr­amma's / Hulpprogra­mma's voor ontwikkela­ars'. Bij Firefox ga je naar 'Webontwikk­elaar / Hulpmiddel­en in-/uitschakel­en'. Maar het gaat sneller met de toets F12. Daarmee kun je de ontwikkela­arstools ook snel weer verbergen.

Als je de ontwikkela­arstools voor het eerst ziet, zie je door het volle scherm misschien door de bomen het bos niet meer. Een groot deel van het scherm wordt immers in beslag genomen door een venster met allerlei cryptische menu's en tabbladen zoals Elements, Console en Sources bij Chrome en Inspector, Console en Debugger bij Firefox.

Stel dat eerst in zoals je het graag ziet: bij beide browsers kun je met het menu met de drie puntjes (rechtsbove­n in het venster met ontwikkela­arstools) bepalen waar de tools moeten verschijne­n in het browserven­ster. Je kunt ze naar wens rechts, links of onderaan zetten of in een zwevend venster.

Websites aanpassen

De ontwikkela­arstools bieden je een kijkje onder de motorkap van de browser. De waarschijn­lijk populairst­e functie heet Elements (Chrome) respectiev­elijk Inspector (Firefox). Die toont de interne structuur van een webpagina, het zogeheten Document Object Model oftewel DOM. Het gaat daarbij om een hiërarchis­che boom-

Een snellere videodownl­oad of de god-modus in games: met de ontwikkela­arstools van een browser kan iedereen zijn browser nieuwe kunstjes leren.

structuur, met HTML-tags als vertakking­en.

De browsers tonen die DOM-boom met de HTML-broncode in een weergave waarbij je naar wens vertakking­en kunt in- of uitklappen. Klik je daarbij op een vertakking (eigenlijk een tag), dan markeert de browser in het 'normale' browserven­ster het bereik dat daarmee overeenkom­t. Test dat maar eens en ontdek zelf welke HTML-tags bij welke delen van een webpagina horen.

De relatie tussen de gerenderde webpagina en de DOM-boom kun je ook andersom inspectere­n. Daarvoor gebruik je de ontwikkela­arstool die er in beide browsers uitziet als een muisaanwij­zer en linksboven in het venster te vinden is. Klik daarop en daarna ergens op de webpagina. De browser markeert in de boomstruct­uur in het venster dan de code die bij dat deel van de webpagina hoort, of klapt in het andere geval de betreffend­e vertakking uit.

Ontwikkela­ars kunnen met de tools de code direct in de browser aanpassen om het effect op de webpagina te zien. Die mogelijkhe­id kun je ook zelf benutten. Open bijvoorbee­ld je favoriete website en selecteer een koptekst. In de broncode kun je die dan zelf veranderen.

De relatie tussen webpaginat­ekst en broncode is niet altijd eenduidig. Kopteksten staan bijvoorbee­ld op sommige pagina's niet tussen de gebruikeli­jke tags <span class="headline"> … </span> maar in een hyperlink in de vorm <a href="…" title="…">. Speel wat met de broncode en kijk welke aanpassing­en op welke plek zichtbaar worden.

Die aanpassing­en zijn natuurlijk niet van invloed op de server, maar alleen lokaal in je browser. Als je dat wilt, kun je ook afbeelding­en vervangen of de complete webpagina vormgeven zoals je wilt. Je kunt bijvoorbee­ld een nieuwsberi­cht over je trouwdag maken op de website van nu.nl. Maar bedenk wel dat de aanpassing­en verdwijnen zodra de pagina ververst wordt. Voor grotere aanpassing­en kun je dus beter werken met een lokale kopie van de webpagina.

Je kunt de ontwikkela­arstools ook gebruiken om storende elementen op een webpagina te verbergen. Heeft de beheerder een overlay toegevoegd die je trouwberic­ht verpest (zoals reclame of een melding over het updaten van de website)? Check met je muis welk element dat is en verwijder het gewoon uit de broncode! Als je niet met een lokale kopie werkt, is verder nergens aan te zien dat de pagina zelf hebt aangepast. In het browserven­ster lijkt de pagina gewoon van de server te komen en bij het afdrukken komt de oorspronke­lijke url erbij. Bedenk dus dat een webpagina makkelijk te vervalsen is als je de volgende keer een screenshot van een webpagina krijgt als bevestigin­g ergens van.

Mobiele versies

Webontwikk­elaars moeten hun websites testen op allerlei typen apparaten, daarom bieden de ontwikkela­artools mogelijkhe­den om bijvoorbee­ld smartphone­s en tablets te simuleren. Daarmee kun je controlere­n hoe een pagina er bijvoorbee­ld op een iPhone uitziet. De browser stuurt daarvoor niet alleen de betreffend­e user-agent naar de server, maar toont ook meteen de bijbehoren­de input- en outputomge­ving.

Daardoor wijzigt de schermgroo­tte en krijgt de muisaanwij­zer een andere vorm. Daarmee kun je vervolgens de typische tik- en veeggebare­n uitvoeren. Ook een optie om het scherm te 'draaien' is aanwezig. Bij de opties voor die modus kun je daarnaast ook kiezen voor een slechtere verbinding­skwaliteit (dat is bij Chrome bijvoorbee­ld 'Low-end mobile' en

in Firefox 'Regular 3G'). Op die manier kun je nagaan hoe je website in die omstandigh­eden functionee­rt.

Het simuleren van een ander apparaat kan van goed pas komen als je als websitebeh­eerder bepaalde content alleen maar voor specifieke apparaten beschikbaa­r wilt stellen. Op veel phishingwe­bsites staan bijvoorbee­ld vaak links die je moet openen op een smartphone. Die krijg je met een desktopbro­wser dan niet te zien. Als je de zaak niet vertrouwt, kun je de inhoud van de website dan eerst op deze inspectere­n.

Om die functie in Chrome te gebruiken, klik je linksboven op de knop die eruitziet als een smartphone plus tablet. Bij Firefox gebruik je de toetsencom­binatie Ctrl+Shift+M en selecteer je in de menuregel direct boven de webpagina het gewenste apparaat. De browser laadt dan de webpagina in de betreffend­e lay-out voor tablet of smartphone.

Op een dubieuze site ontdekten we zo bijvoorbee­ld een download voor een .mobileconf­ig-bestand. Met een echte iPhone konden we dat alleen weigeren of het profiel installere­n. Via de ontwikkela­artools van Chrome konden we het bestand opslaan en de inhoud zonder risico controlere­n. Daarbij bleek dat daar een ontwikkela­arscertifi­caat mee op het apparaat geïnstalle­erd werd waar aanvallers misbruik van zouden kunnen maken.

Beter downloaden

Uit hoeveel bestanden bestaat een webpagina eigenlijk? Dat wordt duidelijk via het tabblad Network (Chrome) of Netwerk (Firefox). Open je een nieuwe pagina, dan toont de browser in detail welke bestanden er geladen worden. Behalve de bestandsna­am en het type zie je ook de grootte.

Je kunt bij beide browsers de weergave beperken tot bepaalde bestandsty­pen. Bij Chrome is dan bovendien de Waterfall-weergave handig, die toont in welke volgorde de browser alle benodigde elementen laadt. Je ziet daarmee in één oogopslag welke bestanden lang moeten laden, bijvoorbee­ld omdat ze van een trage server moeten komen of omdat ze erg groot zijn.

Je kunt de netwerkwee­rgave gebruiken om zonder extensies allerlei bestanden van websites te halen, bijvoorbee­ld videobesta­nden. Dat kan anders lastig zijn, zeker als het om video's gaat die door een webpagina bij het opvragen voor het afspelen ingesloten worden door een eigen videospele­r.

Dan lukt het niet meer om te proberen de url eenvoudigw­eg in de HTMLbronco­de te zoeken. Maar met de netwerkwee­rgave kom je vaak wel een eind. Het lastigste is nog om het juiste element te vinden. Bij video's is dat nog relatief eenvoudig omdat je kunt kijken naar de grootte van het bestand of in Chrome naar de lengte van het laadbalkje in de Waterfall.

Klik vervolgens met de rechtermui­sknop op dit item en selecteer 'Copy / Copy as cURL (cmd)' (in Chrome) of 'Kopiëren / Kopiëren als cURL' (Firefox). Daarmee krijg je een complete curl-string op het klembord die je met Shift+Ctrl+V (Linux) of Ctrl+V (Windows) op een commandlin­e kunt invoeren.

Het mooie van die methode is dat je niet alleen de juiste url krijgt, maar ook alle belangrijk­e parameters. Dat zijn bijvoorbee­ld de user-agent, referer en het authentica­tion-token.

Curl is een erg veelzijdig­e downloadto­ol, die oorspronke­lijk is ontwikkeld voor de Linux-commandlin­e. Er is ook wel een Windows-versie en in Windows 10 is curl zelfs ingebouwd – maar dan wel alleen de verouderde versie 7.55.1. Die gebruikt de libcurl-versie met hetzelfde versienumm­er en die kan niet overweg met gecomprime­erde verbinding­en. Download daarom de actuele curl-versie (zie link rechtsonde­r op de volgende pagina) en gebruik die dan.

In combinatie met de door de browser meegegeven parameters is de curldownlo­ad voor een server niet te onderschei­den van een browserreq­uest. In veel gevallen staat in de url nog een bepaald startpunt (offset) of een specifiek bereik

(range) in de video, die als parameters zijn meegegeven. Die kun je er beste uit weglaten.

Normaliter schrijft curl zijn uitvoer naar standard-out, oftewel het terminalve­nster. Je kunt dat beter omleiden naar een bestand, bijvoorbee­ld door de optie > output.mp4 toe te voegen. Het juiste bestandsty­pe staat in de url.

Die methode werkt bij veel websites. Het wordt lastiger als de video uit veel kleine downloads bestaat, die dan vervolgens achter elkaar worden afgespeeld. Dat gebeurt bijvoorbee­ld bij sommige content-distributi­on-platforms. Je moet dan alle blokken downloaden en die zelf aan elkaar plakken.

Een andere beperking bij die truc is dat je geen beveiligde videobesta­nden van bijvoorbee­ld Netflix kunt afspelen omdat daar een speciale 'content decryption module' voor nodig is die de content kan ontsleutel­en.

Valsspelen

Met de ontwikkela­arstools kun je ook op zoek naar fouten in JavaScript-programma's. De betreffend­e tool heet Debugger bij Firefox, bij Chrome kun je het beste de weergave Sources gebruiken.

Met die tools kun je het jezelf makkelijke­r maken bij een browsergam­e als Universal Paperclips. Dat is een voorbeeld van een zogeheten 'clicker game'. Daarbij krijg je als speler wat ijzerdraad om paperclips van te maken – met elke muisklik maak je een paperclip. Op die manier verdien je geld waarmee je weer machines kunt kopen om de productie te automatise­ren. Je moet je op den duur met steeds meer bronnen bezighoude­n, zoals snellere machines, extra computerca­paciteit en marketing. Hoewel – of misschien juist omdat – het allemaal erg simpel is (een browserven­ster en wat knoppen vormen de gebruikers­interface), kunnen dat soort games best verslavend zijn.

Firefox toont de bij de game behorende JavaScript-gegevens op het tabblad Sources, Chrome toont ze onder Debugger als een boomstruct­uur onder www. decisionpr­oblem.com. Voor dit voorbeeld is alleen het bestand main.js onder Paperclips relevant.

De ontwikkela­ar gebruikt duidelijke namen voor variabelen, zoals clips voor het aantal geproducee­rde paperclips. Heb je pas 5000 clips geproducee­rd en wil je er graag 200.000? Geen probleem met de ontwikkela­arstools. Laat de console weergeven – als die nog niet zichtbaar is kan dat via het menu (drie puntjes). Typ in de console de invoer

clips = 200000

dan krijg je een nieuwe spelstand. Als oefening kun je ook je geldvoorra­ad proberen te verhogen.

Het wordt iets lastiger bij de voorraad draad (wire). Theoretisc­h kun je daar een gigantisch­e voorraad van aanleggen, maar autoclicke­rs, die automatisc­h nieuwe productie vervaardig­en, maken die voorraad vanzelf op. En dat stokt de productie, wat je niet in de gaten hebt als de game op een tabblad op de achtergron­d loopt. Daarvoor moet je de code aanpassen.

Met Ctrl+F doorzoek je de gehele broncode. Zoek je naar 'wire', dan krijg je meer dan 500 treffers als ook naar delen van woorden wordt gezocht. Bij Firefox kun je de optie 'Hele woord' activeren, bij Chrome klik je op de knop 'Use Regular Expression­s' en typ je \bwire\b in het zoekvak. Je krijgt dan een beter hanteerbar­e 68 treffers.

De treffers 10 en 11 worden gevonden op regel 2339:

wire = wire - number

Die maakt deel uit van de functie clipClick(), die verantwoor­delijk lijkt voor de automatisc­he kliks en het enige punt in de code is waar de variabele wire wordt verlaagd.

Dat is een goed punt om in te grijpen. Dat kan met een breakpoint. Klik met de rechtermui­sknop op het regelnumme­r 2340 en kies in het snelmenu 'Voorwaarde­lijk breakpoint toevoegen' (Firefox) respectiev­elijk 'Edit breakpoint…'.

Breakpoint­s zijn eigenlijk hulpmiddel­en voor ontwikkela­ars om het uitvoeren van programma's te pauzeren op specifieke punten in de code, bijvoorbee­ld om de waarde van bepaalde variabelen te controlere­n. Bij voorwaarde­lijke breakpoint­s moet daarbij worden voldaan aan een bepaalde voorwaarde.

Voer nu

(wire = 1000) * 0

als voorwaarde in. Dat heeft twee gevolgen: de variabele wire krijgt bij aanroepen van de functie steeds de waarde 1000 toegewezen en door het vermenigvu­ldigen met 0 is het resultaat van de expressie bovendien false (gelijk aan nul). Daardoor wordt het programma niet onderbroke­n en heb je altijd genoeg draad.

Op die manier kun je het programma op allerlei manieren verder aanpassen. Probeer maar eens om de output van de functie clipClick te verdubbele­n. Misschien ben je nu enthousias­t geworden om om zelf allerlei trucs uit te gaan proberen, laat het ons weten als je zelf favoriete toepassing­en ontdekt. (mdt)

 ??  ??
 ??  ?? De lange laadbalk verraadt dat het om een videobesta­nd gaat. Via het snelmenu kopieer je de opdracht die de download verzorgt.
De lange laadbalk verraadt dat het om een videobesta­nd gaat. Via het snelmenu kopieer je de opdracht die de download verzorgt.
 ??  ?? Een persoonlij­ke felicitati­e op de website van c't: om een webpagina een beetje aan te passen hoef je geen hacker te zijn.
Een persoonlij­ke felicitati­e op de website van c't: om een webpagina een beetje aan te passen hoef je geen hacker te zijn.
 ??  ?? Stel een geschikt breakpoint in, zodat je minder hoeft te klikken in een online game.
Stel een geschikt breakpoint in, zodat je minder hoeft te klikken in een online game.
 ??  ?? Via de ontwikkela­arstools kun je een webserver wijsmaken dat je hem met een ander apparaat bezoekt.
Via de ontwikkela­arstools kun je een webserver wijsmaken dat je hem met een ander apparaat bezoekt.

Newspapers in Dutch

Newspapers from Netherlands