In de praktijk zien we dat veel hackers hun code verbergen door gebruik te maken van functies zoals base64_decode en gzdeflate. Dit zien we vaak terug bij gehackte websites, maar ook gebruiken sommige ontwikkelaars deze methode om hun eigen code te beschermen. Het is echter altijd raadzaam om precies te weten welke code er op je website uitgevoerd wordt. Een PHP script decoderen en hoe je erachter komt wat nou precies de gedecodeerde code is, leggen we in dit artikel uit.

Hoe ziet het eruit

Je kunt de volgende code tegenkomen in een van je PHP scripts:

eval(base64_decode("cHJpbnQoIkVlbiB2b29yYmVlbGQgdmFuIGVlbiBwb3RlbnRpZWVsIGt3YWFkYWFyZGlnIHNjcmlwdCIpOw=="));

Deze code doet kort gezegd het volgende:

uitvoeren(decoderen("versleutelde code"));

De rits “random” tekens in het midden is de code waarvan de maker niet wilt dat je ziet wat er staat. In dit voorbeeld wordt de functie base64_decode gebruikt om de code te decoderen en vervolgens met eval uitgevoerd. Het kan zijn dat je nog andere functies tegen komt (bijvoorbeeld gzdeflate) maar zo lang het binnen eval() tags staat gaat, is het met deze methode te ontgrendelen.

Achterhalen wat de code doet

Voordat je dit bestand als kwaadaardig bestempelt is het raadzaam om te kijken waar het precies om gaat. Dit is heel simpel te doen door de eval() (uitvoeren) functie te vervangen door een print() (weergeven). Dan wordt de gedecodeerde versie van het script niet uitgevoerd maar weergegeven en zie je precies wat er gebeurd. Als je nu het bestand met php opent (door het in de browser te openen of in de command line te starten) zie je welke code verborgen wordt.

We gebruiken nu de print() functie in het eerder genoemde voorbeeld:

print(base64_decode("cHJpbnQoIkVlbiB2b29yYmVlbGQgdmFuIGVlbiBwb3RlbnRpZWVsIGt3YWFkYWFyZGlnIHNjcmlwdCIpOw=="));

Soms komt daar weer een zelfde soort bestand uit, die op de zelfde manier gedecodeerd kan worden. We zijn wel eens een bestand tegen gekomen wat meer dan 90 keer zo gecodeerd was. Dat maakt het proces van het decoderen niet moeilijker maar langzamer en minder leuk.

Het is overigens geen “good practice” om code op deze manier te beschermen want op deze manier neemt de code een veelvoud aan ruimte in in het werkgeheugen. Je site wordt er niet sneller op door dergelijke scripts te gebruiken.

Meer informatie

00